Completed
Push — master ( 25861b...65c7d7 )
by cam
01:16
created
ecrire/lang/spip_uk.php 1 patch
Indentation   +654 added lines, -654 removed lines patch added patch discarded remove patch
@@ -4,244 +4,244 @@  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
-	'avis_1_erreur_saisie' => 'Існує 1 помилка в записі, перевірте інформацію.',
31
-	'avis_archive_incorrect' => 'це неправильний архівний файл SPIP',
32
-	'avis_archive_invalide' => 'цей архівний файл не можна використати',
33
-	'avis_attention' => 'Увага!',
34
-	'avis_champ_incorrect_type_objet' => 'Неправильне поле @name@ для об’єкту типу @type@',
35
-	'avis_colonne_inexistante' => 'Колонки @col@ не існує',
36
-	'avis_erreur' => 'Помилка: див. нижче',
37
-	'avis_erreur_connexion' => 'Помилка сполучення',
38
-	'avis_erreur_cookie' => 'проблема з cookie ',
39
-	'avis_erreur_fonction_contexte' => 'Помилка програми. Цю функцію не можна викликати в цьому контексті.',
40
-	'avis_erreur_mysql' => 'Помилка SQL ',
41
-	'avis_erreur_sauvegarde' => 'Помилка в бекапі (@type@ @id_objet@)!',
42
-	'avis_erreur_visiteur' => 'Помилка при вході в адміністрування сайту',
43
-	'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
+    'avis_1_erreur_saisie' => 'Існує 1 помилка в записі, перевірте інформацію.',
31
+    'avis_archive_incorrect' => 'це неправильний архівний файл SPIP',
32
+    'avis_archive_invalide' => 'цей архівний файл не можна використати',
33
+    'avis_attention' => 'Увага!',
34
+    'avis_champ_incorrect_type_objet' => 'Неправильне поле @name@ для об’єкту типу @type@',
35
+    'avis_colonne_inexistante' => 'Колонки @col@ не існує',
36
+    'avis_erreur' => 'Помилка: див. нижче',
37
+    'avis_erreur_connexion' => 'Помилка сполучення',
38
+    'avis_erreur_cookie' => 'проблема з cookie ',
39
+    'avis_erreur_fonction_contexte' => 'Помилка програми. Цю функцію не можна викликати в цьому контексті.',
40
+    'avis_erreur_mysql' => 'Помилка SQL ',
41
+    'avis_erreur_sauvegarde' => 'Помилка в бекапі (@type@ @id_objet@)!',
42
+    'avis_erreur_visiteur' => 'Помилка при вході в адміністрування сайту',
43
+    'avis_nb_erreurs_saisie' => 'Є @nb@ помилок у вашому записі, перевірте інформацію.',
44 44
 
45
-	// B
46
-	'barre_a_accent_grave' => 'Велике A з відміткою зверху',
47
-	'barre_aide' => 'Використовуйте кнопки для швидкого форматування тексту',
48
-	'barre_e_accent_aigu' => 'Велике E, acute accent',
49
-	'barre_eo' => 'Вставити дифтонг oe',
50
-	'barre_eo_maj' => 'Вставити дифтонг EO',
51
-	'barre_euro' => 'Вставити символ € (євро)',
52
-	'barre_gras' => 'Виділити {{жирним}}',
53
-	'barre_guillemets' => 'Розмістити між “подвійними лапками”',
54
-	'barre_guillemets_simples' => 'Розмістити між ‘одинарними лапками’',
55
-	'barre_intertitre' => '{{{Підзаголовок}}}',
56
-	'barre_italic' => 'Виділити {курсивом}',
57
-	'barre_lien' => 'Поставити посилання [посилання->http://...]',
58
-	'barre_lien_input' => 'будь ласка, введіть об’єкт, на який вказує гіперпосилання (можна вказати URL як http://www.mysite.com або просто номер однієї з статей цього сайту).',
59
-	'barre_note' => 'Додати [[Виноску]]',
60
-	'barre_paragraphe' => 'Абзац',
61
-	'barre_quote' => '<quote>Цитування</quote>',
62
-	'bouton_changer' => 'Змінити',
63
-	'bouton_chercher' => 'Пошук',
64
-	'bouton_choisir' => 'Вибрати',
65
-	'bouton_deplacer' => 'Перемістити',
66
-	'bouton_download' => 'Завантажити',
67
-	'bouton_enregistrer' => 'Зберегти',
68
-	'bouton_radio_desactiver_messagerie_interne' => 'Відключити приватне листування',
69
-	'bouton_radio_envoi_annonces' => 'Відправити повідомлення',
70
-	'bouton_radio_non_envoi_annonces' => 'Відключити відправлення внутрішніх повідомлень',
71
-	'bouton_radio_non_envoi_liste_nouveautes' => 'Не відправляти список останніх новин',
72
-	'bouton_recharger_page' => 'перезавантажити сторінку',
73
-	'bouton_telecharger' => 'Завантажити',
74
-	'bouton_upload' => 'Завантажити',
75
-	'bouton_valider' => 'Відправити',
45
+    // B
46
+    'barre_a_accent_grave' => 'Велике A з відміткою зверху',
47
+    'barre_aide' => 'Використовуйте кнопки для швидкого форматування тексту',
48
+    'barre_e_accent_aigu' => 'Велике E, acute accent',
49
+    'barre_eo' => 'Вставити дифтонг oe',
50
+    'barre_eo_maj' => 'Вставити дифтонг EO',
51
+    'barre_euro' => 'Вставити символ € (євро)',
52
+    'barre_gras' => 'Виділити {{жирним}}',
53
+    'barre_guillemets' => 'Розмістити між “подвійними лапками”',
54
+    'barre_guillemets_simples' => 'Розмістити між ‘одинарними лапками’',
55
+    'barre_intertitre' => '{{{Підзаголовок}}}',
56
+    'barre_italic' => 'Виділити {курсивом}',
57
+    'barre_lien' => 'Поставити посилання [посилання->http://...]',
58
+    'barre_lien_input' => 'будь ласка, введіть об’єкт, на який вказує гіперпосилання (можна вказати URL як http://www.mysite.com або просто номер однієї з статей цього сайту).',
59
+    'barre_note' => 'Додати [[Виноску]]',
60
+    'barre_paragraphe' => 'Абзац',
61
+    'barre_quote' => '<quote>Цитування</quote>',
62
+    'bouton_changer' => 'Змінити',
63
+    'bouton_chercher' => 'Пошук',
64
+    'bouton_choisir' => 'Вибрати',
65
+    'bouton_deplacer' => 'Перемістити',
66
+    'bouton_download' => 'Завантажити',
67
+    'bouton_enregistrer' => 'Зберегти',
68
+    'bouton_radio_desactiver_messagerie_interne' => 'Відключити приватне листування',
69
+    'bouton_radio_envoi_annonces' => 'Відправити повідомлення',
70
+    'bouton_radio_non_envoi_annonces' => 'Відключити відправлення внутрішніх повідомлень',
71
+    'bouton_radio_non_envoi_liste_nouveautes' => 'Не відправляти список останніх новин',
72
+    'bouton_recharger_page' => 'перезавантажити сторінку',
73
+    'bouton_telecharger' => 'Завантажити',
74
+    'bouton_upload' => 'Завантажити',
75
+    'bouton_valider' => 'Відправити',
76 76
 
77
-	// C
78
-	'cal_apresmidi' => 'друга половина дня (p.m.)',
79
-	'cal_jour_entier' => 'увесь день',
80
-	'cal_matin' => 'утро (a.m.)',
81
-	'cal_par_jour' => 'календар - день',
82
-	'cal_par_mois' => 'календар - місяць',
83
-	'cal_par_semaine' => 'календар - тиждень',
84
-	'choix_couleur_interface' => 'колір',
85
-	'choix_interface' => 'вибір інтерфейсу',
86
-	'colonne' => 'Колонка',
87
-	'confirm_changer_statut' => 'Увага: ви змінюєте статус статті. Змінити?',
88
-	'correcte' => 'виправити',
77
+    // C
78
+    'cal_apresmidi' => 'друга половина дня (p.m.)',
79
+    'cal_jour_entier' => 'увесь день',
80
+    'cal_matin' => 'утро (a.m.)',
81
+    'cal_par_jour' => 'календар - день',
82
+    'cal_par_mois' => 'календар - місяць',
83
+    'cal_par_semaine' => 'календар - тиждень',
84
+    'choix_couleur_interface' => 'колір',
85
+    'choix_interface' => 'вибір інтерфейсу',
86
+    'colonne' => 'Колонка',
87
+    'confirm_changer_statut' => 'Увага: ви змінюєте статус статті. Змінити?',
88
+    'correcte' => 'виправити',
89 89
 
90
-	// D
91
-	'date_aujourdhui' => 'сьогодні',
92
-	'date_avant_jc' => 'До н.е.',
93
-	'date_dans' => 'в @delai@',
94
-	'date_de_mois_1' => '@j@ січня',
95
-	'date_de_mois_10' => '@j@ жовтня',
96
-	'date_de_mois_11' => '@j@ листопада',
97
-	'date_de_mois_12' => '@j@ грудня',
98
-	'date_de_mois_2' => '@j@ лютого',
99
-	'date_de_mois_3' => '@j@ березня',
100
-	'date_de_mois_4' => '@j@ квітня',
101
-	'date_de_mois_5' => '@j@ травня',
102
-	'date_de_mois_6' => '@j@ червня',
103
-	'date_de_mois_7' => '@j@ липня',
104
-	'date_de_mois_8' => '@j@ серпня',
105
-	'date_de_mois_9' => '@j@ вересня',
106
-	'date_demain' => 'завтра',
107
-	'date_fmt_heures_minutes' => '@h@:@m@',
108
-	'date_fmt_heures_minutes_court' => '@h@h@m@',
109
-	'date_fmt_jour' => '@nomjour@ @jour@',
110
-	'date_fmt_jour_heure' => '@jour@ до @heure@',
111
-	'date_fmt_jour_heure_debut_fin' => '@jour@ с @heure_debut@ по @heure_fin@',
112
-	'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ с @heure_debut@@dtabbr@ по @dtstart@@heure_fin@@dtend@',
113
-	'date_fmt_jour_mois' => '@jourmois@',
114
-	'date_fmt_jour_mois_annee' => '@jourmois@ @annee@',
115
-	'date_fmt_mois_annee' => '@nommois@ @annee@',
116
-	'date_fmt_nomjour' => '@nomjour@ @date@',
117
-	'date_fmt_nomjour_date' => 'Від @nomjour@ @date@',
118
-	'date_fmt_periode' => 'З @date_debut@ по @date_fin@',
119
-	'date_fmt_periode_abbr' => 'З @dtart@@date_debut@@dtabbr@ по @dtend@@date_fin@@dtabbr@',
120
-	'date_fmt_periode_from' => 'З',
121
-	'date_fmt_periode_to' => 'по',
122
-	'date_fmt_saison_annee' => '@saison@ @annee@',
123
-	'date_heures' => 'година',
124
-	'date_hier' => 'вчора',
125
-	'date_il_y_a' => '@delai@ назад',
126
-	'date_jnum1' => '1',
127
-	'date_jnum10' => '10',
128
-	'date_jnum11' => '11',
129
-	'date_jnum12' => '12',
130
-	'date_jnum13' => '13',
131
-	'date_jnum14' => '14',
132
-	'date_jnum15' => '15',
133
-	'date_jnum16' => '16',
134
-	'date_jnum17' => '17',
135
-	'date_jnum18' => '18',
136
-	'date_jnum19' => '19',
137
-	'date_jnum2' => '2',
138
-	'date_jnum20' => '20',
139
-	'date_jnum21' => '21',
140
-	'date_jnum22' => '22',
141
-	'date_jnum23' => '23',
142
-	'date_jnum24' => '24',
143
-	'date_jnum25' => '25',
144
-	'date_jnum26' => '26',
145
-	'date_jnum27' => '27',
146
-	'date_jnum28' => '28',
147
-	'date_jnum29' => '29',
148
-	'date_jnum3' => '3',
149
-	'date_jnum30' => '30',
150
-	'date_jnum31' => '31',
151
-	'date_jnum4' => '4',
152
-	'date_jnum5' => '5',
153
-	'date_jnum6' => '6',
154
-	'date_jnum7' => '7',
155
-	'date_jnum8' => '8',
156
-	'date_jnum9' => '9',
157
-	'date_jour_1' => 'неділя',
158
-	'date_jour_1_abbr' => 'Нд.',
159
-	'date_jour_1_initiale' => 'Н.',
160
-	'date_jour_2' => 'понеділок',
161
-	'date_jour_2_abbr' => 'Пн.',
162
-	'date_jour_2_initiale' => 'П.',
163
-	'date_jour_3' => 'вівторок',
164
-	'date_jour_3_abbr' => 'Вт.',
165
-	'date_jour_3_initiale' => 'В.',
166
-	'date_jour_4' => 'середа',
167
-	'date_jour_4_abbr' => 'Ср.',
168
-	'date_jour_4_initiale' => 'С.',
169
-	'date_jour_5' => 'четвер',
170
-	'date_jour_5_abbr' => 'Чт.',
171
-	'date_jour_5_initiale' => 'Ч.',
172
-	'date_jour_6' => 'п’ятниця',
173
-	'date_jour_6_abbr' => 'Пт.',
174
-	'date_jour_6_initiale' => 'П.',
175
-	'date_jour_7' => 'субота',
176
-	'date_jour_7_abbr' => 'Сб.',
177
-	'date_jour_7_initiale' => 'С.',
178
-	'date_jours' => 'день',
179
-	'date_minutes' => 'хвилини',
180
-	'date_mois' => 'місяці',
181
-	'date_mois_1' => 'Січень',
182
-	'date_mois_10' => 'Жовтень',
183
-	'date_mois_10_abbr' => 'Жов',
184
-	'date_mois_11' => 'Листопад',
185
-	'date_mois_11_abbr' => 'Лис',
186
-	'date_mois_12' => 'Грудень',
187
-	'date_mois_12_abbr' => 'Гру',
188
-	'date_mois_1_abbr' => 'Січ',
189
-	'date_mois_2' => 'Лютий',
190
-	'date_mois_2_abbr' => 'Лют',
191
-	'date_mois_3' => 'Березень',
192
-	'date_mois_3_abbr' => 'Бер',
193
-	'date_mois_4' => 'Квітень',
194
-	'date_mois_4_abbr' => 'Кві',
195
-	'date_mois_5' => 'Травень',
196
-	'date_mois_5_abbr' => 'Тра',
197
-	'date_mois_6' => 'Червень',
198
-	'date_mois_6_abbr' => 'Чер',
199
-	'date_mois_7' => 'Липень',
200
-	'date_mois_7_abbr' => 'Лип',
201
-	'date_mois_8' => 'Серпень',
202
-	'date_mois_8_abbr' => 'Сер',
203
-	'date_mois_9' => 'Вересень',
204
-	'date_mois_9_abbr' => 'Вер',
205
-	'date_saison_1' => 'зима',
206
-	'date_saison_2' => 'весна',
207
-	'date_saison_3' => 'літо',
208
-	'date_saison_4' => 'осінь',
209
-	'date_secondes' => 'секунд',
210
-	'date_semaines' => 'тиждні',
211
-	'date_un_mois' => 'місяць',
212
-	'date_une_heure' => 'годин(а)',
213
-	'date_une_minute' => 'хвилин(а)',
214
-	'date_une_seconde' => 'секунда',
215
-	'date_une_semaine' => 'тиждень',
216
-	'dirs_commencer' => 'щоб почати установку',
217
-	'dirs_preliminaire' => 'Підготовка: <b>Налаштування прав доступу</b>',
218
-	'dirs_probleme_droits' => 'Проблема в правах доступу',
219
-	'dirs_repertoires_absents' => '<b>Не знайдено такі директорії:<ul>@bad_dirs@.</ul></b> <p>Можлива причина - неправильне поєднання малих та великих літер у назвах директорій. Будь ласка, упевніться, що регістр літер в назвах директорій відповідає тому, що виведено вище; якщо це не так, змініть назви директорій, використовуючи FTP-клієнт, щоб виправити помилку.</p> <p>Щойно це буде зроблено, усе запрацює</p>',
220
-	'dirs_repertoires_suivants' => '<b>До наступних директорій неправильно прописано права доступу <ul>@bad_dirs@.</ul></b>
90
+    // D
91
+    'date_aujourdhui' => 'сьогодні',
92
+    'date_avant_jc' => 'До н.е.',
93
+    'date_dans' => 'в @delai@',
94
+    'date_de_mois_1' => '@j@ січня',
95
+    'date_de_mois_10' => '@j@ жовтня',
96
+    'date_de_mois_11' => '@j@ листопада',
97
+    'date_de_mois_12' => '@j@ грудня',
98
+    'date_de_mois_2' => '@j@ лютого',
99
+    'date_de_mois_3' => '@j@ березня',
100
+    'date_de_mois_4' => '@j@ квітня',
101
+    'date_de_mois_5' => '@j@ травня',
102
+    'date_de_mois_6' => '@j@ червня',
103
+    'date_de_mois_7' => '@j@ липня',
104
+    'date_de_mois_8' => '@j@ серпня',
105
+    'date_de_mois_9' => '@j@ вересня',
106
+    'date_demain' => 'завтра',
107
+    'date_fmt_heures_minutes' => '@h@:@m@',
108
+    'date_fmt_heures_minutes_court' => '@h@h@m@',
109
+    'date_fmt_jour' => '@nomjour@ @jour@',
110
+    'date_fmt_jour_heure' => '@jour@ до @heure@',
111
+    'date_fmt_jour_heure_debut_fin' => '@jour@ с @heure_debut@ по @heure_fin@',
112
+    'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@ с @heure_debut@@dtabbr@ по @dtstart@@heure_fin@@dtend@',
113
+    'date_fmt_jour_mois' => '@jourmois@',
114
+    'date_fmt_jour_mois_annee' => '@jourmois@ @annee@',
115
+    'date_fmt_mois_annee' => '@nommois@ @annee@',
116
+    'date_fmt_nomjour' => '@nomjour@ @date@',
117
+    'date_fmt_nomjour_date' => 'Від @nomjour@ @date@',
118
+    'date_fmt_periode' => 'З @date_debut@ по @date_fin@',
119
+    'date_fmt_periode_abbr' => 'З @dtart@@date_debut@@dtabbr@ по @dtend@@date_fin@@dtabbr@',
120
+    'date_fmt_periode_from' => 'З',
121
+    'date_fmt_periode_to' => 'по',
122
+    'date_fmt_saison_annee' => '@saison@ @annee@',
123
+    'date_heures' => 'година',
124
+    'date_hier' => 'вчора',
125
+    'date_il_y_a' => '@delai@ назад',
126
+    'date_jnum1' => '1',
127
+    'date_jnum10' => '10',
128
+    'date_jnum11' => '11',
129
+    'date_jnum12' => '12',
130
+    'date_jnum13' => '13',
131
+    'date_jnum14' => '14',
132
+    'date_jnum15' => '15',
133
+    'date_jnum16' => '16',
134
+    'date_jnum17' => '17',
135
+    'date_jnum18' => '18',
136
+    'date_jnum19' => '19',
137
+    'date_jnum2' => '2',
138
+    'date_jnum20' => '20',
139
+    'date_jnum21' => '21',
140
+    'date_jnum22' => '22',
141
+    'date_jnum23' => '23',
142
+    'date_jnum24' => '24',
143
+    'date_jnum25' => '25',
144
+    'date_jnum26' => '26',
145
+    'date_jnum27' => '27',
146
+    'date_jnum28' => '28',
147
+    'date_jnum29' => '29',
148
+    'date_jnum3' => '3',
149
+    'date_jnum30' => '30',
150
+    'date_jnum31' => '31',
151
+    'date_jnum4' => '4',
152
+    'date_jnum5' => '5',
153
+    'date_jnum6' => '6',
154
+    'date_jnum7' => '7',
155
+    'date_jnum8' => '8',
156
+    'date_jnum9' => '9',
157
+    'date_jour_1' => 'неділя',
158
+    'date_jour_1_abbr' => 'Нд.',
159
+    'date_jour_1_initiale' => 'Н.',
160
+    'date_jour_2' => 'понеділок',
161
+    'date_jour_2_abbr' => 'Пн.',
162
+    'date_jour_2_initiale' => 'П.',
163
+    'date_jour_3' => 'вівторок',
164
+    'date_jour_3_abbr' => 'Вт.',
165
+    'date_jour_3_initiale' => 'В.',
166
+    'date_jour_4' => 'середа',
167
+    'date_jour_4_abbr' => 'Ср.',
168
+    'date_jour_4_initiale' => 'С.',
169
+    'date_jour_5' => 'четвер',
170
+    'date_jour_5_abbr' => 'Чт.',
171
+    'date_jour_5_initiale' => 'Ч.',
172
+    'date_jour_6' => 'п’ятниця',
173
+    'date_jour_6_abbr' => 'Пт.',
174
+    'date_jour_6_initiale' => 'П.',
175
+    'date_jour_7' => 'субота',
176
+    'date_jour_7_abbr' => 'Сб.',
177
+    'date_jour_7_initiale' => 'С.',
178
+    'date_jours' => 'день',
179
+    'date_minutes' => 'хвилини',
180
+    'date_mois' => 'місяці',
181
+    'date_mois_1' => 'Січень',
182
+    'date_mois_10' => 'Жовтень',
183
+    'date_mois_10_abbr' => 'Жов',
184
+    'date_mois_11' => 'Листопад',
185
+    'date_mois_11_abbr' => 'Лис',
186
+    'date_mois_12' => 'Грудень',
187
+    'date_mois_12_abbr' => 'Гру',
188
+    'date_mois_1_abbr' => 'Січ',
189
+    'date_mois_2' => 'Лютий',
190
+    'date_mois_2_abbr' => 'Лют',
191
+    'date_mois_3' => 'Березень',
192
+    'date_mois_3_abbr' => 'Бер',
193
+    'date_mois_4' => 'Квітень',
194
+    'date_mois_4_abbr' => 'Кві',
195
+    'date_mois_5' => 'Травень',
196
+    'date_mois_5_abbr' => 'Тра',
197
+    'date_mois_6' => 'Червень',
198
+    'date_mois_6_abbr' => 'Чер',
199
+    'date_mois_7' => 'Липень',
200
+    'date_mois_7_abbr' => 'Лип',
201
+    'date_mois_8' => 'Серпень',
202
+    'date_mois_8_abbr' => 'Сер',
203
+    'date_mois_9' => 'Вересень',
204
+    'date_mois_9_abbr' => 'Вер',
205
+    'date_saison_1' => 'зима',
206
+    'date_saison_2' => 'весна',
207
+    'date_saison_3' => 'літо',
208
+    'date_saison_4' => 'осінь',
209
+    'date_secondes' => 'секунд',
210
+    'date_semaines' => 'тиждні',
211
+    'date_un_mois' => 'місяць',
212
+    'date_une_heure' => 'годин(а)',
213
+    'date_une_minute' => 'хвилин(а)',
214
+    'date_une_seconde' => 'секунда',
215
+    'date_une_semaine' => 'тиждень',
216
+    'dirs_commencer' => 'щоб почати установку',
217
+    'dirs_preliminaire' => 'Підготовка: <b>Налаштування прав доступу</b>',
218
+    'dirs_probleme_droits' => 'Проблема в правах доступу',
219
+    'dirs_repertoires_absents' => '<b>Не знайдено такі директорії:<ul>@bad_dirs@.</ul></b> <p>Можлива причина - неправильне поєднання малих та великих літер у назвах директорій. Будь ласка, упевніться, що регістр літер в назвах директорій відповідає тому, що виведено вище; якщо це не так, змініть назви директорій, використовуючи FTP-клієнт, щоб виправити помилку.</p> <p>Щойно це буде зроблено, усе запрацює</p>',
220
+    'dirs_repertoires_suivants' => '<b>До наступних директорій неправильно прописано права доступу <ul>@bad_dirs@.</ul></b>
221 221
 
222 222
   <p>Щоб змінити права доступу використайте FTP-клієнт.
223 223
   Процедуру описано в інструкції по установці.</p>
224 224
 
225 225
 ',
226
-	'double_occurrence' => 'Тег @balise@ зустрічається два рази',
226
+    'double_occurrence' => 'Тег @balise@ зустрічається два рази',
227 227
 
228
-	// E
229
-	'en_cours' => 'виконується',
230
-	'envoi_via_le_site' => 'Відправити за допомогою сайту',
231
-	'erreur' => 'Помилка',
232
-	'erreur_balise_non_fermee' => 'останній тег не закрито:',
233
-	'erreur_technique_ajaxform' => 'Непередбачена помилка завадила відправці форми. Можна спробувати ще раз.',
234
-	'erreur_technique_enregistrement_champs' => 'Із-за технічної помилки не вдалось правильно зареєструвати поле @champs@.',
235
-	'erreur_technique_enregistrement_impossible' => 'Не вдалося зареєструвати із-за технічної помилки.',
236
-	'erreur_texte' => 'Помилка(и)',
237
-	'etape' => 'етап',
228
+    // E
229
+    'en_cours' => 'виконується',
230
+    'envoi_via_le_site' => 'Відправити за допомогою сайту',
231
+    'erreur' => 'Помилка',
232
+    'erreur_balise_non_fermee' => 'останній тег не закрито:',
233
+    'erreur_technique_ajaxform' => 'Непередбачена помилка завадила відправці форми. Можна спробувати ще раз.',
234
+    'erreur_technique_enregistrement_champs' => 'Із-за технічної помилки не вдалось правильно зареєструвати поле @champs@.',
235
+    'erreur_technique_enregistrement_impossible' => 'Не вдалося зареєструвати із-за технічної помилки.',
236
+    'erreur_texte' => 'Помилка(и)',
237
+    'etape' => 'етап',
238 238
 
239
-	// F
240
-	'fichier_introuvable' => 'Файл не знайдено: @fichier@',
241
-	'form_auteur_confirmation' => 'Будь ласка, підтвердіть ваш e-mail',
242
-	'form_auteur_email_modifie' => 'Ваш e-mail було змінено.',
243
-	'form_auteur_envoi_mail_confirmation' => 'Листа про підтвердження було відправлено за адресою @email@. Вам необхідно буде перейти за посиланням в листі, щоб підтвердити вашу поштову адресу.',
244
-	'form_auteur_mail_confirmation' => 'Доброго дня,
239
+    // F
240
+    'fichier_introuvable' => 'Файл не знайдено: @fichier@',
241
+    'form_auteur_confirmation' => 'Будь ласка, підтвердіть ваш e-mail',
242
+    'form_auteur_email_modifie' => 'Ваш e-mail було змінено.',
243
+    'form_auteur_envoi_mail_confirmation' => 'Листа про підтвердження було відправлено за адресою @email@. Вам необхідно буде перейти за посиланням в листі, щоб підтвердити вашу поштову адресу.',
244
+    'form_auteur_mail_confirmation' => 'Доброго дня,
245 245
 
246 246
 Ви попросили змінити вашу поштову адресу.
247 247
 Щоб підтвердити вашу нову адресу перейдіть за посиланням:
@@ -249,325 +249,325 @@  discard block
 block discarded – undo
249 249
 (В іншому разі ваш запит не буде виконано):
250 250
 
251 251
 ',
252
-	'form_deja_inscrit' => 'Ви вже зареєстровані.',
253
-	'form_email_non_valide' => 'Вказано невірну e-mail адресу.',
254
-	'form_forum_access_refuse' => 'У вас більше немає доступу до цього сайту.',
255
-	'form_forum_bonjour' => 'Вітаємо @nom@,',
256
-	'form_forum_confirmer_email' => 'Для підтвердження реєстрації на сайті перейдіть за посиланням: @url_confirm@',
257
-	'form_forum_email_deja_enregistre' => 'цю адресу електронної пошти вже зареєстровано. Спробуйте використати ваш звичайний пароль.',
258
-	'form_forum_identifiant_mail' => 'Інформацію про параметри входу на сайт було відправлено на вашу пошту.',
259
-	'form_forum_identifiants' => 'Інформація для входу на сайт',
260
-	'form_forum_indiquer_nom_email' => 'Введіть ваше ім’я та адресу електронної пошти. Вам буде надіслано ємейл з інформацією для входу на сайт.',
261
-	'form_forum_login' => 'логін:',
262
-	'form_forum_message_auto' => '(це повідомлення було відправлено автоматично)',
263
-	'form_forum_pass' => 'пароль:',
264
-	'form_forum_probleme_mail' => 'Помилка пошти: не вдалося вислати ідентифікатор.',
265
-	'form_forum_voici1' => 'Дані для доступу до сайту „@nom_site_spip@” (@adresse_site@):',
266
-	'form_forum_voici2' => 'Дані для доступу до сайту (можливість відправляти свої статті) „@nom_site_spip@” (@adresse_login@):',
267
-	'form_indiquer_email' => 'Будь ласка, вкажіть свій e-mail.',
268
-	'form_indiquer_nom' => 'Введіть ваше ім’я.',
269
-	'form_indiquer_nom_site' => 'Будь ласка, введіть назву вашого сайту.',
270
-	'form_pet_deja_enregistre' => 'Цей сайт вже зареєстровано',
271
-	'form_pet_signature_pasprise' => 'Ваш підпис проігноровано.',
272
-	'form_prop_confirmer_envoi' => 'Підтвердити відправлення',
273
-	'form_prop_description' => 'Опис/коментар',
274
-	'form_prop_enregistre' => 'Вашу пропозиція було записано і вона з’явиться online після підтвердження адміністраторами сайту.',
275
-	'form_prop_envoyer' => 'Відправити повідомлення',
276
-	'form_prop_indiquer_email' => 'Будь ласка, вкажіть коректну e-mail адресу',
277
-	'form_prop_indiquer_nom_site' => 'Вкажіть назву сайту.',
278
-	'form_prop_indiquer_sujet' => 'Вкажіть тему',
279
-	'form_prop_message_envoye' => 'Повідомлення відправлено',
280
-	'form_prop_non_enregistre' => 'Вашу пропозицію не було записано.',
281
-	'form_prop_sujet' => 'Тема',
282
-	'form_prop_url_site' => 'URL сайту',
283
-	'format_date_incorrecte' => 'Дата або її формат некоректні',
284
-	'format_heure_incorrecte' => 'Час або його формат некоректні',
285
-	'forum_non_inscrit' => 'Або ви не зареєстровані, або адреса чи пароль неправильні.',
286
-	'forum_par_auteur' => ' @auteur@',
287
-	'forum_titre_erreur' => 'Помилка...',
252
+    'form_deja_inscrit' => 'Ви вже зареєстровані.',
253
+    'form_email_non_valide' => 'Вказано невірну e-mail адресу.',
254
+    'form_forum_access_refuse' => 'У вас більше немає доступу до цього сайту.',
255
+    'form_forum_bonjour' => 'Вітаємо @nom@,',
256
+    'form_forum_confirmer_email' => 'Для підтвердження реєстрації на сайті перейдіть за посиланням: @url_confirm@',
257
+    'form_forum_email_deja_enregistre' => 'цю адресу електронної пошти вже зареєстровано. Спробуйте використати ваш звичайний пароль.',
258
+    'form_forum_identifiant_mail' => 'Інформацію про параметри входу на сайт було відправлено на вашу пошту.',
259
+    'form_forum_identifiants' => 'Інформація для входу на сайт',
260
+    'form_forum_indiquer_nom_email' => 'Введіть ваше ім’я та адресу електронної пошти. Вам буде надіслано ємейл з інформацією для входу на сайт.',
261
+    'form_forum_login' => 'логін:',
262
+    'form_forum_message_auto' => '(це повідомлення було відправлено автоматично)',
263
+    'form_forum_pass' => 'пароль:',
264
+    'form_forum_probleme_mail' => 'Помилка пошти: не вдалося вислати ідентифікатор.',
265
+    'form_forum_voici1' => 'Дані для доступу до сайту „@nom_site_spip@” (@adresse_site@):',
266
+    'form_forum_voici2' => 'Дані для доступу до сайту (можливість відправляти свої статті) „@nom_site_spip@” (@adresse_login@):',
267
+    'form_indiquer_email' => 'Будь ласка, вкажіть свій e-mail.',
268
+    'form_indiquer_nom' => 'Введіть ваше ім’я.',
269
+    'form_indiquer_nom_site' => 'Будь ласка, введіть назву вашого сайту.',
270
+    'form_pet_deja_enregistre' => 'Цей сайт вже зареєстровано',
271
+    'form_pet_signature_pasprise' => 'Ваш підпис проігноровано.',
272
+    'form_prop_confirmer_envoi' => 'Підтвердити відправлення',
273
+    'form_prop_description' => 'Опис/коментар',
274
+    'form_prop_enregistre' => 'Вашу пропозиція було записано і вона з’явиться online після підтвердження адміністраторами сайту.',
275
+    'form_prop_envoyer' => 'Відправити повідомлення',
276
+    'form_prop_indiquer_email' => 'Будь ласка, вкажіть коректну e-mail адресу',
277
+    'form_prop_indiquer_nom_site' => 'Вкажіть назву сайту.',
278
+    'form_prop_indiquer_sujet' => 'Вкажіть тему',
279
+    'form_prop_message_envoye' => 'Повідомлення відправлено',
280
+    'form_prop_non_enregistre' => 'Вашу пропозицію не було записано.',
281
+    'form_prop_sujet' => 'Тема',
282
+    'form_prop_url_site' => 'URL сайту',
283
+    'format_date_incorrecte' => 'Дата або її формат некоректні',
284
+    'format_heure_incorrecte' => 'Час або його формат некоректні',
285
+    'forum_non_inscrit' => 'Або ви не зареєстровані, або адреса чи пароль неправильні.',
286
+    'forum_par_auteur' => ' @auteur@',
287
+    'forum_titre_erreur' => 'Помилка...',
288 288
 
289
-	// I
290
-	'ical_texte_rss_articles' => 'RSS стрічка сайту:',
291
-	'ical_texte_rss_articles2' => 'RSS розділів сайту:',
292
-	'ical_texte_rss_breves' => 'Ще є файл, що містить новини сайту. Вибираючи різні розділи, ви можете отримувати новини тільки з них.',
293
-	'icone_a_suivre' => 'Панель управління',
294
-	'icone_admin_site' => 'Адміністратор сайту',
295
-	'icone_agenda' => 'Календар',
296
-	'icone_aide_ligne' => 'Допомога',
297
-	'icone_articles' => 'Статті',
298
-	'icone_auteurs' => 'Автори',
299
-	'icone_brouteur' => 'Швидкий перехід',
300
-	'icone_configuration_site' => 'Налаштування',
301
-	'icone_configurer_site' => 'Налаштуйте ваш сайт',
302
-	'icone_creer_nouvel_auteur' => 'Новий автор',
303
-	'icone_creer_rubrique' => 'Нова розділ',
304
-	'icone_creer_sous_rubrique' => 'Нова підрубрика',
305
-	'icone_deconnecter' => 'Вийти',
306
-	'icone_discussions' => 'Обговорення',
307
-	'icone_doc_rubrique' => 'Додані документи',
308
-	'icone_ecrire_article' => 'Нова стаття',
309
-	'icone_edition_site' => 'Змінити сайт',
310
-	'icone_gestion_langues' => 'Мовні налаштування',
311
-	'icone_informations_personnelles' => 'Персональна інформація',
312
-	'icone_interface_complet' => 'Повний інтерфейс',
313
-	'icone_interface_simple' => 'Спрощений інтерфейс',
314
-	'icone_maintenance_site' => 'Обслуговування сайту',
315
-	'icone_messagerie_personnelle' => 'Особисті повідомлення',
316
-	'icone_repartition_debut' => 'Розподіл показів з початку',
317
-	'icone_rubriques' => 'Розділ',
318
-	'icone_sauver_site' => 'Резервна копія сайту',
319
-	'icone_site_entier' => 'Увесь сайт',
320
-	'icone_sites_references' => 'Каталог сайтів',
321
-	'icone_statistiques' => 'Статистика сайту',
322
-	'icone_suivi_activite' => 'RSS та iCal',
323
-	'icone_suivi_actualite' => 'Статистика сайту',
324
-	'icone_suivi_pettions' => 'Відстежування/управління петиціями',
325
-	'icone_suivi_revisions' => 'Версії статті',
326
-	'icone_supprimer_document' => 'Видалити документ',
327
-	'icone_supprimer_image' => 'Видалити зображення',
328
-	'icone_tous_articles' => 'Ваші статті',
329
-	'icone_tous_auteur' => 'Усі автори',
330
-	'icone_tous_visiteur' => 'Усі відвідувачі',
331
-	'icone_visiter_site' => 'Відвідати сайт',
332
-	'icone_voir_en_ligne' => 'Дивитись online',
333
-	'img_indisponible' => 'зображення недосяжне',
334
-	'impossible' => 'неможливо',
335
-	'info_a_suivre' => 'ПАНЕЛЬ УПРАВЛІННЯ',
336
-	'info_acces_interdit' => 'Доступ заборонено',
337
-	'info_acces_refuse' => 'У доступі відмовлено',
338
-	'info_action' => 'Дія: @action@',
339
-	'info_administrer_rubriques' => 'Ви можете управляти цією рубрикою та її підрубриками',
340
-	'info_adresse_non_indiquee' => 'Не вказано адресу для перевірки!',
341
-	'info_aide' => 'ДОПОМОГА:',
342
-	'info_ajouter_mot' => 'Додати ключове слово',
343
-	'info_annonce' => 'ОГОЛОШЕННЯ',
344
-	'info_annonces_generales' => 'Загальні об’яви:',
345
-	'info_article_propose' => 'Статтю відправлено',
346
-	'info_article_publie' => 'Статтю опубліковано',
347
-	'info_article_redaction' => 'Стаття редагується',
348
-	'info_article_refuse' => 'Статтю відхилено',
349
-	'info_article_supprime' => 'Статтю видалено',
350
-	'info_articles' => 'Статті',
351
-	'info_articles_a_valider' => 'Статті для затвердження',
352
-	'info_articles_nb' => '@nb@ статей',
353
-	'info_articles_proposes' => 'Відправлені статті',
354
-	'info_articles_un' => '1 стаття',
355
-	'info_auteurs_nombre' => 'автор(и):',
356
-	'info_authentification_ftp' => 'FTP авторизація.',
357
-	'info_breves_2' => 'новини',
358
-	'info_breves_nb' => '@nb@ новин',
359
-	'info_breves_un' => '1 новина',
360
-	'info_connexion_refusee' => 'Підключення заборонено',
361
-	'info_contact_developpeur' => 'Зв’яжіться з розробниками.',
362
-	'info_contenance' => 'На цьому сайті є:',
363
-	'info_contribution' => 'додатки до форуму',
364
-	'info_copyright' => '@spip@ - безкоштовне програмне забезпечення, яке розповсюджується @lien_gpl@.',
365
-	'info_copyright_doc' => 'Більше інформації про SPIP <a href="@spipnet@">@spipnet_affiche@</a>.',
366
-	'info_copyright_gpl' => 'за ліцензією GPL',
367
-	'info_cours_edition' => 'В роботі', # MODIF
368
-	'info_creer_repertoire' => 'Створіть файл або папку з назвою:',
369
-	'info_creer_repertoire_2' => 'в підкаталозі <b>@repertoire@</b>, потім: ',
370
-	'info_creer_vignette' => 'автоматичне створення мініатюр зображень',
371
-	'info_creerdansrubrique_non_autorise' => 'У вас недостатньо прав, щоб створювати матеріали в цій рубриці',
372
-	'info_deplier' => 'Відкрийте',
373
-	'info_descriptif_nombre' => 'опис(и):',
374
-	'info_description' => 'Опис:',
375
-	'info_description_2' => 'Опис:',
376
-	'info_dimension' => 'Розмір:',
377
-	'info_documents_nb' => '@nb@ файлів',
378
-	'info_documents_un' => '1 файл',
379
-	'info_ecire_message_prive' => 'Написати особисте повідомлення',
380
-	'info_email_invalide' => 'Неправильна e-mail адреса',
381
-	'info_en_cours_validation' => 'Ваші неопубліковані статті',
382
-	'info_en_ligne' => 'Зараз on-line:',
383
-	'info_envoyer_message_prive' => 'Відправити особисте повідомлення автору',
384
-	'info_erreur_requete' => 'Помилка у запиті:',
385
-	'info_erreur_squelette2' => 'Файл шаблону <b>@fichier@</b> недосяжний',
386
-	'info_erreur_systeme' => 'Помилка системи (errno @errsys@)',
387
-	'info_erreur_systeme2' => 'Закінчилося місце на диску або пошкоджено базу даних. <br /><span style="color:red;">Спробуйте <a href=\'@script@\'>відновити базу даних</a> або зверніться до вашого хостинг-провайдера.</span>',
388
-	'info_fini' => 'Готово!',
389
-	'info_format_image' => 'Формат, який використовується для автоматичного зменшення зображень @gd_formats@.',
390
-	'info_format_non_defini' => 'невизначений формат',
391
-	'info_grand_ecran' => 'Великий екран',
392
-	'info_image_aide' => 'ДОПОМОГА',
393
-	'info_image_process_titre' => 'Як створювати мініатюри',
394
-	'info_impossible_lire_page' => '<b>Помилка!</b> Сторінку <tt><html>@test_proxy@</html></tt> не можна отримати через проксі сервер',
395
-	'info_installation_systeme_publication' => 'Установка SPIP ...',
396
-	'info_installer_documents' => 'Ви можете розмістити файли в папку @upload@ і вони будуть добавлені автоматично.',
397
-	'info_installer_ftp' => 'Ви можете переписати файли по FTP в папку @upload@, щоб використовувати їх в подальшій роботі.',
398
-	'info_installer_images' => 'Ви можете додавати зображення в форматах JPEG, GIF або PNG.',
399
-	'info_installer_images_dossier' => 'Додайте зображення в папку  @upload@ для використання їх в цьому меню.',
400
-	'info_interface_complete' => 'Повний інтерфейс',
401
-	'info_interface_simple' => 'Спрощений інтерфейс',
402
-	'info_joindre_document_article' => 'Ви можете добавити до вашої статті документи',
403
-	'info_joindre_document_rubrique' => 'Ви можете добавити документи в цю рубрику',
404
-	'info_joindre_documents_article' => 'Ви можете прикріпити до вашої статті документи:',
405
-	'info_l_article' => 'стаття',
406
-	'info_la_breve' => 'новина',
407
-	'info_la_rubrique' => 'розділ',
408
-	'info_langue_principale' => 'Головна мова сайту',
409
-	'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ px',
410
-	'info_les_auteurs_1' => ' @les_auteurs@ ',
411
-	'info_logo_format_interdit' => 'Дозволено використовувати логотипи тільки в форматах @formats@.',
412
-	'info_logo_max_poids' => 'Логотип повинен бути менше, ніж @maxi@ (розмір цього файлу @actuel@).',
413
-	'info_mail_fournisseur' => '[email protected]',
414
-	'info_message_2' => 'ПОВІДОМЛЕННЯ',
415
-	'info_message_supprime' => 'ПОВІДОМЛЕННЯ ВИДАЛЕНО',
416
-	'info_messages_nb' => '@nb@ повідомлень',
417
-	'info_messages_un' => '1 повідомлення',
418
-	'info_mise_en_ligne' => 'Опубліковано:',
419
-	'info_modification_parametres_securite' => 'Змінити налаштування безпеки',
420
-	'info_mois_courant' => 'Впродовж місяця:',
421
-	'info_mot_cle_ajoute' => 'Ключове слово було додано до',
422
-	'info_multi_herit' => 'Усталена (default) мова',
423
-	'info_multi_langues_soulignees' => 'Якщо назву <u>мови підкреслено</u>, це означає, що є повний або частковий переклад інтерфейсу SPIP цією мовою. Якщо ви оберете таку мову, більшість елементів загального сайту (дати, форми) буде автоматично переведено. При виборі інших мов усі системні повідомлення будуть виводитися основною мовою сайту.',
424
-	'info_multilinguisme' => 'Багатомовність',
425
-	'info_nom_non_utilisateurs_connectes' => 'Не показувати мене в списку користувачів online.',
426
-	'info_nom_utilisateurs_connectes' => 'Показувати мене в списку користувачів online.',
427
-	'info_nombre_en_ligne' => 'Зараз на сайті:',
428
-	'info_non_resultat' => 'Нічого не знайдено на запит „@cherche_mot@”',
429
-	'info_non_utilisation_messagerie' => 'Систему приватних повідомлень відключено на цьому сайті.',
430
-	'info_nouveau_message' => 'ОТРИМАНО НОВЕ ПОВІДОМЛЕННЯ',
431
-	'info_nouveaux_messages' => 'У ВАС @total_messages@ НОВИХ ПОВІДОМЛЕНЬ:',
432
-	'info_numero_abbreviation' => '№',
433
-	'info_obligatoire' => 'Обов’язкові поля',
434
-	'info_pense_bete' => 'ЗАМЕТКА',
435
-	'info_petit_ecran' => 'Маленький екран',
436
-	'info_petition_close' => 'Петицію закрито',
437
-	'info_pixels' => 'пікселі',
438
-	'info_plusieurs_mots_trouves' => 'На запит „@cherche_mot@” було знайдено такі ключові слова:',
439
-	'info_portfolio_automatique' => 'Автоматизоване портфоліо:',
440
-	'info_premier_resultat' => '[@debut_limit@ из @total@]',
441
-	'info_premier_resultat_sur' => '[@debut_limit@ из @total@]',
442
-	'info_propose_1' => '[@nom_site_spip@] Відправлені: @titre@',
443
-	'info_propose_2' => 'Статтю відправлено
289
+    // I
290
+    'ical_texte_rss_articles' => 'RSS стрічка сайту:',
291
+    'ical_texte_rss_articles2' => 'RSS розділів сайту:',
292
+    'ical_texte_rss_breves' => 'Ще є файл, що містить новини сайту. Вибираючи різні розділи, ви можете отримувати новини тільки з них.',
293
+    'icone_a_suivre' => 'Панель управління',
294
+    'icone_admin_site' => 'Адміністратор сайту',
295
+    'icone_agenda' => 'Календар',
296
+    'icone_aide_ligne' => 'Допомога',
297
+    'icone_articles' => 'Статті',
298
+    'icone_auteurs' => 'Автори',
299
+    'icone_brouteur' => 'Швидкий перехід',
300
+    'icone_configuration_site' => 'Налаштування',
301
+    'icone_configurer_site' => 'Налаштуйте ваш сайт',
302
+    'icone_creer_nouvel_auteur' => 'Новий автор',
303
+    'icone_creer_rubrique' => 'Нова розділ',
304
+    'icone_creer_sous_rubrique' => 'Нова підрубрика',
305
+    'icone_deconnecter' => 'Вийти',
306
+    'icone_discussions' => 'Обговорення',
307
+    'icone_doc_rubrique' => 'Додані документи',
308
+    'icone_ecrire_article' => 'Нова стаття',
309
+    'icone_edition_site' => 'Змінити сайт',
310
+    'icone_gestion_langues' => 'Мовні налаштування',
311
+    'icone_informations_personnelles' => 'Персональна інформація',
312
+    'icone_interface_complet' => 'Повний інтерфейс',
313
+    'icone_interface_simple' => 'Спрощений інтерфейс',
314
+    'icone_maintenance_site' => 'Обслуговування сайту',
315
+    'icone_messagerie_personnelle' => 'Особисті повідомлення',
316
+    'icone_repartition_debut' => 'Розподіл показів з початку',
317
+    'icone_rubriques' => 'Розділ',
318
+    'icone_sauver_site' => 'Резервна копія сайту',
319
+    'icone_site_entier' => 'Увесь сайт',
320
+    'icone_sites_references' => 'Каталог сайтів',
321
+    'icone_statistiques' => 'Статистика сайту',
322
+    'icone_suivi_activite' => 'RSS та iCal',
323
+    'icone_suivi_actualite' => 'Статистика сайту',
324
+    'icone_suivi_pettions' => 'Відстежування/управління петиціями',
325
+    'icone_suivi_revisions' => 'Версії статті',
326
+    'icone_supprimer_document' => 'Видалити документ',
327
+    'icone_supprimer_image' => 'Видалити зображення',
328
+    'icone_tous_articles' => 'Ваші статті',
329
+    'icone_tous_auteur' => 'Усі автори',
330
+    'icone_tous_visiteur' => 'Усі відвідувачі',
331
+    'icone_visiter_site' => 'Відвідати сайт',
332
+    'icone_voir_en_ligne' => 'Дивитись online',
333
+    'img_indisponible' => 'зображення недосяжне',
334
+    'impossible' => 'неможливо',
335
+    'info_a_suivre' => 'ПАНЕЛЬ УПРАВЛІННЯ',
336
+    'info_acces_interdit' => 'Доступ заборонено',
337
+    'info_acces_refuse' => 'У доступі відмовлено',
338
+    'info_action' => 'Дія: @action@',
339
+    'info_administrer_rubriques' => 'Ви можете управляти цією рубрикою та її підрубриками',
340
+    'info_adresse_non_indiquee' => 'Не вказано адресу для перевірки!',
341
+    'info_aide' => 'ДОПОМОГА:',
342
+    'info_ajouter_mot' => 'Додати ключове слово',
343
+    'info_annonce' => 'ОГОЛОШЕННЯ',
344
+    'info_annonces_generales' => 'Загальні об’яви:',
345
+    'info_article_propose' => 'Статтю відправлено',
346
+    'info_article_publie' => 'Статтю опубліковано',
347
+    'info_article_redaction' => 'Стаття редагується',
348
+    'info_article_refuse' => 'Статтю відхилено',
349
+    'info_article_supprime' => 'Статтю видалено',
350
+    'info_articles' => 'Статті',
351
+    'info_articles_a_valider' => 'Статті для затвердження',
352
+    'info_articles_nb' => '@nb@ статей',
353
+    'info_articles_proposes' => 'Відправлені статті',
354
+    'info_articles_un' => '1 стаття',
355
+    'info_auteurs_nombre' => 'автор(и):',
356
+    'info_authentification_ftp' => 'FTP авторизація.',
357
+    'info_breves_2' => 'новини',
358
+    'info_breves_nb' => '@nb@ новин',
359
+    'info_breves_un' => '1 новина',
360
+    'info_connexion_refusee' => 'Підключення заборонено',
361
+    'info_contact_developpeur' => 'Зв’яжіться з розробниками.',
362
+    'info_contenance' => 'На цьому сайті є:',
363
+    'info_contribution' => 'додатки до форуму',
364
+    'info_copyright' => '@spip@ - безкоштовне програмне забезпечення, яке розповсюджується @lien_gpl@.',
365
+    'info_copyright_doc' => 'Більше інформації про SPIP <a href="@spipnet@">@spipnet_affiche@</a>.',
366
+    'info_copyright_gpl' => 'за ліцензією GPL',
367
+    'info_cours_edition' => 'В роботі', # MODIF
368
+    'info_creer_repertoire' => 'Створіть файл або папку з назвою:',
369
+    'info_creer_repertoire_2' => 'в підкаталозі <b>@repertoire@</b>, потім: ',
370
+    'info_creer_vignette' => 'автоматичне створення мініатюр зображень',
371
+    'info_creerdansrubrique_non_autorise' => 'У вас недостатньо прав, щоб створювати матеріали в цій рубриці',
372
+    'info_deplier' => 'Відкрийте',
373
+    'info_descriptif_nombre' => 'опис(и):',
374
+    'info_description' => 'Опис:',
375
+    'info_description_2' => 'Опис:',
376
+    'info_dimension' => 'Розмір:',
377
+    'info_documents_nb' => '@nb@ файлів',
378
+    'info_documents_un' => '1 файл',
379
+    'info_ecire_message_prive' => 'Написати особисте повідомлення',
380
+    'info_email_invalide' => 'Неправильна e-mail адреса',
381
+    'info_en_cours_validation' => 'Ваші неопубліковані статті',
382
+    'info_en_ligne' => 'Зараз on-line:',
383
+    'info_envoyer_message_prive' => 'Відправити особисте повідомлення автору',
384
+    'info_erreur_requete' => 'Помилка у запиті:',
385
+    'info_erreur_squelette2' => 'Файл шаблону <b>@fichier@</b> недосяжний',
386
+    'info_erreur_systeme' => 'Помилка системи (errno @errsys@)',
387
+    'info_erreur_systeme2' => 'Закінчилося місце на диску або пошкоджено базу даних. <br /><span style="color:red;">Спробуйте <a href=\'@script@\'>відновити базу даних</a> або зверніться до вашого хостинг-провайдера.</span>',
388
+    'info_fini' => 'Готово!',
389
+    'info_format_image' => 'Формат, який використовується для автоматичного зменшення зображень @gd_formats@.',
390
+    'info_format_non_defini' => 'невизначений формат',
391
+    'info_grand_ecran' => 'Великий екран',
392
+    'info_image_aide' => 'ДОПОМОГА',
393
+    'info_image_process_titre' => 'Як створювати мініатюри',
394
+    'info_impossible_lire_page' => '<b>Помилка!</b> Сторінку <tt><html>@test_proxy@</html></tt> не можна отримати через проксі сервер',
395
+    'info_installation_systeme_publication' => 'Установка SPIP ...',
396
+    'info_installer_documents' => 'Ви можете розмістити файли в папку @upload@ і вони будуть добавлені автоматично.',
397
+    'info_installer_ftp' => 'Ви можете переписати файли по FTP в папку @upload@, щоб використовувати їх в подальшій роботі.',
398
+    'info_installer_images' => 'Ви можете додавати зображення в форматах JPEG, GIF або PNG.',
399
+    'info_installer_images_dossier' => 'Додайте зображення в папку  @upload@ для використання їх в цьому меню.',
400
+    'info_interface_complete' => 'Повний інтерфейс',
401
+    'info_interface_simple' => 'Спрощений інтерфейс',
402
+    'info_joindre_document_article' => 'Ви можете добавити до вашої статті документи',
403
+    'info_joindre_document_rubrique' => 'Ви можете добавити документи в цю рубрику',
404
+    'info_joindre_documents_article' => 'Ви можете прикріпити до вашої статті документи:',
405
+    'info_l_article' => 'стаття',
406
+    'info_la_breve' => 'новина',
407
+    'info_la_rubrique' => 'розділ',
408
+    'info_langue_principale' => 'Головна мова сайту',
409
+    'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ px',
410
+    'info_les_auteurs_1' => ' @les_auteurs@ ',
411
+    'info_logo_format_interdit' => 'Дозволено використовувати логотипи тільки в форматах @formats@.',
412
+    'info_logo_max_poids' => 'Логотип повинен бути менше, ніж @maxi@ (розмір цього файлу @actuel@).',
413
+    'info_mail_fournisseur' => '[email protected]',
414
+    'info_message_2' => 'ПОВІДОМЛЕННЯ',
415
+    'info_message_supprime' => 'ПОВІДОМЛЕННЯ ВИДАЛЕНО',
416
+    'info_messages_nb' => '@nb@ повідомлень',
417
+    'info_messages_un' => '1 повідомлення',
418
+    'info_mise_en_ligne' => 'Опубліковано:',
419
+    'info_modification_parametres_securite' => 'Змінити налаштування безпеки',
420
+    'info_mois_courant' => 'Впродовж місяця:',
421
+    'info_mot_cle_ajoute' => 'Ключове слово було додано до',
422
+    'info_multi_herit' => 'Усталена (default) мова',
423
+    'info_multi_langues_soulignees' => 'Якщо назву <u>мови підкреслено</u>, це означає, що є повний або частковий переклад інтерфейсу SPIP цією мовою. Якщо ви оберете таку мову, більшість елементів загального сайту (дати, форми) буде автоматично переведено. При виборі інших мов усі системні повідомлення будуть виводитися основною мовою сайту.',
424
+    'info_multilinguisme' => 'Багатомовність',
425
+    'info_nom_non_utilisateurs_connectes' => 'Не показувати мене в списку користувачів online.',
426
+    'info_nom_utilisateurs_connectes' => 'Показувати мене в списку користувачів online.',
427
+    'info_nombre_en_ligne' => 'Зараз на сайті:',
428
+    'info_non_resultat' => 'Нічого не знайдено на запит „@cherche_mot@”',
429
+    'info_non_utilisation_messagerie' => 'Систему приватних повідомлень відключено на цьому сайті.',
430
+    'info_nouveau_message' => 'ОТРИМАНО НОВЕ ПОВІДОМЛЕННЯ',
431
+    'info_nouveaux_messages' => 'У ВАС @total_messages@ НОВИХ ПОВІДОМЛЕНЬ:',
432
+    'info_numero_abbreviation' => '№',
433
+    'info_obligatoire' => 'Обов’язкові поля',
434
+    'info_pense_bete' => 'ЗАМЕТКА',
435
+    'info_petit_ecran' => 'Маленький екран',
436
+    'info_petition_close' => 'Петицію закрито',
437
+    'info_pixels' => 'пікселі',
438
+    'info_plusieurs_mots_trouves' => 'На запит „@cherche_mot@” було знайдено такі ключові слова:',
439
+    'info_portfolio_automatique' => 'Автоматизоване портфоліо:',
440
+    'info_premier_resultat' => '[@debut_limit@ из @total@]',
441
+    'info_premier_resultat_sur' => '[@debut_limit@ из @total@]',
442
+    'info_propose_1' => '[@nom_site_spip@] Відправлені: @titre@',
443
+    'info_propose_2' => 'Статтю відправлено
444 444
 -----------------',
445
-	'info_propose_3' => 'Статтю „@titre@” відправлено для публікації.',
446
-	'info_propose_4' => 'Вас запросили до рецензування. Висловіть свою думку',
447
-	'info_propose_5' => 'на пов’язаному з цим форумі, що розташований за адресою:',
448
-	'info_publie_01' => 'Статтю „@titre@” було погоджено @connect_nom@.',
449
-	'info_publie_1' => '[@nom_site_spip@] ОПУБЛІКОВАНО: @titre@',
450
-	'info_publie_2' => 'Опублікована стаття
445
+    'info_propose_3' => 'Статтю „@titre@” відправлено для публікації.',
446
+    'info_propose_4' => 'Вас запросили до рецензування. Висловіть свою думку',
447
+    'info_propose_5' => 'на пов’язаному з цим форумі, що розташований за адресою:',
448
+    'info_publie_01' => 'Статтю „@titre@” було погоджено @connect_nom@.',
449
+    'info_publie_1' => '[@nom_site_spip@] ОПУБЛІКОВАНО: @titre@',
450
+    'info_publie_2' => 'Опублікована стаття
451 451
 -----------------',
452
-	'info_rechercher' => 'Пошук',
453
-	'info_rechercher_02' => 'Пошук:',
454
-	'info_remplacer_vignette' => 'Замінити мініатюру своїм зменшеним зображенням:',
455
-	'info_rubriques_nb' => '@nb@ рубрик(и)',
456
-	'info_rubriques_un' => '1 розділ',
457
-	'info_sans_titre_2' => 'без назви',
458
-	'info_selectionner_fichier' => 'Ви можете вибрати файл з папки @upload@',
459
-	'info_selectionner_fichier_2' => 'Вибрати файл:',
460
-	'info_sites_nb' => '@nb@ сайтів',
461
-	'info_sites_un' => '1 сайт',
462
-	'info_supprimer_vignette' => 'видалити мініатюру',
463
-	'info_symbole_bleu' => '<b>Синій</b> символ вказує на <b>нотатку</b> - повідомлення для вашого особистого використання.',
464
-	'info_symbole_jaune' => '<b>Жовтий</b> символ - <b>оголошення всім редакторам </b>: оголошення може редагувати будь-хто з адміністраторів і його бачать усі редактори.',
465
-	'info_symbole_vert' => '<b>Зелений</b> символ - <b>листування з іншими користувачами</b> сайту.',
466
-	'info_telecharger_nouveau_logo' => 'Завантажити нове лого:',
467
-	'info_telecharger_ordinateur' => 'Завантажити з вашого комп’ютера:',
468
-	'info_tous_resultats_enregistres' => '[усі результати записано]',
469
-	'info_tout_afficher' => 'Показати все',
470
-	'info_travaux_texte' => 'Ведуться роботи по налаштуванню сайту, скоро ми почнемо роботу.',
471
-	'info_travaux_titre' => 'Сайт ще не працює',
472
-	'info_trop_resultat' => 'Надто багато результатів на запит „@cherche_mot@”; будь ласка, деталізуйте запит.',
473
-	'info_utilisation_messagerie_interne' => 'Ви використовуєте внутрішню систему повідомлень цього сайту.',
474
-	'info_valider_lien' => 'підтвердити посилання',
475
-	'info_verifier_image' => ', впевніться, що ваші зображення було передано правильно.',
476
-	'info_vignette_defaut' => 'Мініатюра як усталено (default)',
477
-	'info_vignette_personnalisee' => 'Ваша мініатюра (зменшене зображення)',
478
-	'info_visite' => 'відвідання:',
479
-	'info_vos_rendez_vous' => 'Ваші майбутні завдання',
480
-	'infos_vos_pense_bete' => 'Ваші нотатки',
452
+    'info_rechercher' => 'Пошук',
453
+    'info_rechercher_02' => 'Пошук:',
454
+    'info_remplacer_vignette' => 'Замінити мініатюру своїм зменшеним зображенням:',
455
+    'info_rubriques_nb' => '@nb@ рубрик(и)',
456
+    'info_rubriques_un' => '1 розділ',
457
+    'info_sans_titre_2' => 'без назви',
458
+    'info_selectionner_fichier' => 'Ви можете вибрати файл з папки @upload@',
459
+    'info_selectionner_fichier_2' => 'Вибрати файл:',
460
+    'info_sites_nb' => '@nb@ сайтів',
461
+    'info_sites_un' => '1 сайт',
462
+    'info_supprimer_vignette' => 'видалити мініатюру',
463
+    'info_symbole_bleu' => '<b>Синій</b> символ вказує на <b>нотатку</b> - повідомлення для вашого особистого використання.',
464
+    'info_symbole_jaune' => '<b>Жовтий</b> символ - <b>оголошення всім редакторам </b>: оголошення може редагувати будь-хто з адміністраторів і його бачать усі редактори.',
465
+    'info_symbole_vert' => '<b>Зелений</b> символ - <b>листування з іншими користувачами</b> сайту.',
466
+    'info_telecharger_nouveau_logo' => 'Завантажити нове лого:',
467
+    'info_telecharger_ordinateur' => 'Завантажити з вашого комп’ютера:',
468
+    'info_tous_resultats_enregistres' => '[усі результати записано]',
469
+    'info_tout_afficher' => 'Показати все',
470
+    'info_travaux_texte' => 'Ведуться роботи по налаштуванню сайту, скоро ми почнемо роботу.',
471
+    'info_travaux_titre' => 'Сайт ще не працює',
472
+    'info_trop_resultat' => 'Надто багато результатів на запит „@cherche_mot@”; будь ласка, деталізуйте запит.',
473
+    'info_utilisation_messagerie_interne' => 'Ви використовуєте внутрішню систему повідомлень цього сайту.',
474
+    'info_valider_lien' => 'підтвердити посилання',
475
+    'info_verifier_image' => ', впевніться, що ваші зображення було передано правильно.',
476
+    'info_vignette_defaut' => 'Мініатюра як усталено (default)',
477
+    'info_vignette_personnalisee' => 'Ваша мініатюра (зменшене зображення)',
478
+    'info_visite' => 'відвідання:',
479
+    'info_vos_rendez_vous' => 'Ваші майбутні завдання',
480
+    'infos_vos_pense_bete' => 'Ваші нотатки',
481 481
 
482
-	// L
483
-	'label_ajout_id_rapide' => 'Швидке додання',
484
-	'label_poids_fichier' => 'Розмір',
485
-	'lien_afficher_icones_seuls' => 'Показувати тільки іконки',
486
-	'lien_afficher_texte_icones' => 'Показувати іконки і текст',
487
-	'lien_afficher_texte_seul' => 'Показувати тільки текст',
488
-	'lien_liberer' => 'версія',
489
-	'lien_liberer_tous' => 'звільнити ці статті',
490
-	'lien_nouvea_pense_bete' => 'НОВА НОТАТКА',
491
-	'lien_nouveau_message' => 'НОВЕ ПОВІДОМЛЕННЯ',
492
-	'lien_nouvelle_annonce' => 'НОВЕ ОГОЛОШЕННЯ',
493
-	'lien_petitions' => 'ПЕТИЦІЯ',
494
-	'lien_popularite' => 'популярність: @popularite@%',
495
-	'lien_racine_site' => 'КОРІНЬ САЙТУ',
496
-	'lien_reessayer' => 'спробуйте ще раз',
497
-	'lien_repondre_message' => 'Відповісти на повідомлення',
498
-	'lien_supprimer' => 'видалити',
499
-	'lien_tout_afficher' => 'Показати все',
500
-	'lien_visite_site' => 'відвідати цей сайт',
501
-	'lien_visites' => '@visites@ відвідувань',
502
-	'lien_voir_auteur' => 'Перевірити автора',
503
-	'ligne' => 'Лінія',
504
-	'login' => 'Підключення',
505
-	'login_acces_prive' => 'доступ до адміністративної частини',
506
-	'login_autre_identifiant' => 'Змінити логін',
507
-	'login_cookie_accepte' => 'Будь ласка, налаштуйте ваш браузер для прийому cookies (принаймні для цього сайту).',
508
-	'login_cookie_oblige' => 'У вашому браузері повинні бути включені cookies.',
509
-	'login_deconnexion_ok' => 'Вийшов з системи.',
510
-	'login_erreur_pass' => 'Пароль введено неправильно.',
511
-	'login_espace_prive' => 'адміністративна частина',
512
-	'login_identifiant_inconnu' => 'Логін „@login@” невідомий.',
513
-	'login_login' => 'Логін:',
514
-	'login_login2' => 'Логін або email:',
515
-	'login_login_pass_incorrect' => '(Неправильний логін або пароль).',
516
-	'login_motpasseoublie' => 'забули пароль?',
517
-	'login_non_securise' => 'Увага, ця форма не є безпечною. Якщо ви не хочете, аби ваш пароль був відкритий для перехвату в мережі, активізуйте Javascript в вашому браузері та',
518
-	'login_nouvelle_tentative' => 'Спробувати ще раз',
519
-	'login_par_ici' => 'Ви зареєстровані ... вам сюди...',
520
-	'login_pass2' => 'Пароль:',
521
-	'login_preferez_refuser' => '<b>Якщо ви бажаєте відмовитись від cookies </b>, є інший метод входу на сайт (менш безпечний):',
522
-	'login_recharger' => 'перезавантажити сторінку',
523
-	'login_rester_identifie' => 'Запам’ятати на кілька днів',
524
-	'login_retour_public' => 'На головну сторінку сайту',
525
-	'login_retour_site' => 'На головну сторінку сайту',
526
-	'login_retoursitepublic' => 'на головну сторінку сайту',
527
-	'login_sans_cookie' => 'Ідентифікація без cookie',
528
-	'login_securise' => 'Безпечний вхід',
529
-	'login_sinscrire' => 'реєстрація',
530
-	'login_test_navigateur' => 'перевірка браузера/(пере)підключення',
531
-	'login_verifiez_navigateur' => '(перевірте, що ваш браузер не запам’ятовує ваш пароль ...), ',
482
+    // L
483
+    'label_ajout_id_rapide' => 'Швидке додання',
484
+    'label_poids_fichier' => 'Розмір',
485
+    'lien_afficher_icones_seuls' => 'Показувати тільки іконки',
486
+    'lien_afficher_texte_icones' => 'Показувати іконки і текст',
487
+    'lien_afficher_texte_seul' => 'Показувати тільки текст',
488
+    'lien_liberer' => 'версія',
489
+    'lien_liberer_tous' => 'звільнити ці статті',
490
+    'lien_nouvea_pense_bete' => 'НОВА НОТАТКА',
491
+    'lien_nouveau_message' => 'НОВЕ ПОВІДОМЛЕННЯ',
492
+    'lien_nouvelle_annonce' => 'НОВЕ ОГОЛОШЕННЯ',
493
+    'lien_petitions' => 'ПЕТИЦІЯ',
494
+    'lien_popularite' => 'популярність: @popularite@%',
495
+    'lien_racine_site' => 'КОРІНЬ САЙТУ',
496
+    'lien_reessayer' => 'спробуйте ще раз',
497
+    'lien_repondre_message' => 'Відповісти на повідомлення',
498
+    'lien_supprimer' => 'видалити',
499
+    'lien_tout_afficher' => 'Показати все',
500
+    'lien_visite_site' => 'відвідати цей сайт',
501
+    'lien_visites' => '@visites@ відвідувань',
502
+    'lien_voir_auteur' => 'Перевірити автора',
503
+    'ligne' => 'Лінія',
504
+    'login' => 'Підключення',
505
+    'login_acces_prive' => 'доступ до адміністративної частини',
506
+    'login_autre_identifiant' => 'Змінити логін',
507
+    'login_cookie_accepte' => 'Будь ласка, налаштуйте ваш браузер для прийому cookies (принаймні для цього сайту).',
508
+    'login_cookie_oblige' => 'У вашому браузері повинні бути включені cookies.',
509
+    'login_deconnexion_ok' => 'Вийшов з системи.',
510
+    'login_erreur_pass' => 'Пароль введено неправильно.',
511
+    'login_espace_prive' => 'адміністративна частина',
512
+    'login_identifiant_inconnu' => 'Логін „@login@” невідомий.',
513
+    'login_login' => 'Логін:',
514
+    'login_login2' => 'Логін або email:',
515
+    'login_login_pass_incorrect' => '(Неправильний логін або пароль).',
516
+    'login_motpasseoublie' => 'забули пароль?',
517
+    'login_non_securise' => 'Увага, ця форма не є безпечною. Якщо ви не хочете, аби ваш пароль був відкритий для перехвату в мережі, активізуйте Javascript в вашому браузері та',
518
+    'login_nouvelle_tentative' => 'Спробувати ще раз',
519
+    'login_par_ici' => 'Ви зареєстровані ... вам сюди...',
520
+    'login_pass2' => 'Пароль:',
521
+    'login_preferez_refuser' => '<b>Якщо ви бажаєте відмовитись від cookies </b>, є інший метод входу на сайт (менш безпечний):',
522
+    'login_recharger' => 'перезавантажити сторінку',
523
+    'login_rester_identifie' => 'Запам’ятати на кілька днів',
524
+    'login_retour_public' => 'На головну сторінку сайту',
525
+    'login_retour_site' => 'На головну сторінку сайту',
526
+    'login_retoursitepublic' => 'на головну сторінку сайту',
527
+    'login_sans_cookie' => 'Ідентифікація без cookie',
528
+    'login_securise' => 'Безпечний вхід',
529
+    'login_sinscrire' => 'реєстрація',
530
+    'login_test_navigateur' => 'перевірка браузера/(пере)підключення',
531
+    'login_verifiez_navigateur' => '(перевірте, що ваш браузер не запам’ятовує ваш пароль ...), ',
532 532
 
533
-	// M
534
-	'masquer_colonne' => 'Сховати колонку',
535
-	'masquer_trad' => 'сховати переклад(и)',
536
-	'message_nouveaux_identifiants_echec' => 'Не вдалося створити нові ідентифікатори.',
537
-	'message_nouveaux_identifiants_echec_envoi' => 'Нові ідентифікатори зв’язку не можуть бути відправлені.',
538
-	'message_nouveaux_identifiants_ok' => 'Нові ідентифікатори зв’язку були відправлені на @email@.',
539
-	'module_fichiers_langues' => 'Мовні файли',
533
+    // M
534
+    'masquer_colonne' => 'Сховати колонку',
535
+    'masquer_trad' => 'сховати переклад(и)',
536
+    'message_nouveaux_identifiants_echec' => 'Не вдалося створити нові ідентифікатори.',
537
+    'message_nouveaux_identifiants_echec_envoi' => 'Нові ідентифікатори зв’язку не можуть бути відправлені.',
538
+    'message_nouveaux_identifiants_ok' => 'Нові ідентифікатори зв’язку були відправлені на @email@.',
539
+    'module_fichiers_langues' => 'Мовні файли',
540 540
 
541
-	// N
542
-	'navigateur_pas_redirige' => 'Якщо ваш браузер не переходить автоматично, натисніть тут, щоб продовжити.',
543
-	'numero' => 'Номер',
541
+    // N
542
+    'navigateur_pas_redirige' => 'Якщо ваш браузер не переходить автоматично, натисніть тут, щоб продовжити.',
543
+    'numero' => 'Номер',
544 544
 
545
-	// O
546
-	'occurence' => 'Приклад',
547
-	'onglet_affacer_base' => 'Видалити базу даних',
548
-	'onglet_auteur' => 'Автор',
549
-	'onglet_contenu_site' => 'Зміст сайту',
550
-	'onglet_evolution_visite_mod' => 'Історія відвідань',
551
-	'onglet_fonctions_avances' => 'Додаткові налаштування',
552
-	'onglet_informations_personnelles' => 'Персональна інформація',
553
-	'onglet_interactivite' => 'Реєстрація, розсилки',
554
-	'onglet_messagerie' => 'Повідомлення',
555
-	'onglet_repartition_rubrique' => 'Відвідання за рубриками',
556
-	'onglet_save_restaur_base' => 'Резервна копія/відновлення бази даних',
557
-	'onglet_vider_cache' => 'Очистити кеш',
545
+    // O
546
+    'occurence' => 'Приклад',
547
+    'onglet_affacer_base' => 'Видалити базу даних',
548
+    'onglet_auteur' => 'Автор',
549
+    'onglet_contenu_site' => 'Зміст сайту',
550
+    'onglet_evolution_visite_mod' => 'Історія відвідань',
551
+    'onglet_fonctions_avances' => 'Додаткові налаштування',
552
+    'onglet_informations_personnelles' => 'Персональна інформація',
553
+    'onglet_interactivite' => 'Реєстрація, розсилки',
554
+    'onglet_messagerie' => 'Повідомлення',
555
+    'onglet_repartition_rubrique' => 'Відвідання за рубриками',
556
+    'onglet_save_restaur_base' => 'Резервна копія/відновлення бази даних',
557
+    'onglet_vider_cache' => 'Очистити кеш',
558 558
 
559
-	// P
560
-	'pass_choix_pass' => 'Введіть новий пароль:',
561
-	'pass_erreur' => 'Помилка',
562
-	'pass_erreur_acces_refuse' => '<b>Помилка:</b> у вас більше нема доступу до цього сайту.',
563
-	'pass_erreur_code_inconnu' => '<b>Помилка: </b> цей код не дає прав на доступ до цієї частини сайту.',
564
-	'pass_erreur_non_enregistre' => '<b>Помилка:</b> e-mail <tt>@email_oubli@</tt> не зареєстрований на цьому сайті.',
565
-	'pass_erreur_non_valide' => '<b>Помилка:</b> e-mail <tt>@email_oubli@</tt> неправильний!',
566
-	'pass_erreur_probleme_technique' => '<b>Помилка:</b> цей лист не може бути відправлений по технічним причинам.',
567
-	'pass_espace_prive_bla' => 'Ви можете увійти до адміністративної (приватної) частини сайту після реєстрації. Після реєстрації ви можете створювати статті та приймати участь в усіх обговореннях.',
568
-	'pass_forum_bla' => 'Ви хочете долучитися до форуму, який доступний тільки для зареєстрованих учасників.',
569
-	'pass_indiquez_cidessous' => 'Для реєстації вкажіть ваш ємейл і вам буде відправлено лист з подальшими інструкціями.',
570
-	'pass_mail_passcookie' => '(цей лист відправлений автоматично)
559
+    // P
560
+    'pass_choix_pass' => 'Введіть новий пароль:',
561
+    'pass_erreur' => 'Помилка',
562
+    'pass_erreur_acces_refuse' => '<b>Помилка:</b> у вас більше нема доступу до цього сайту.',
563
+    'pass_erreur_code_inconnu' => '<b>Помилка: </b> цей код не дає прав на доступ до цієї частини сайту.',
564
+    'pass_erreur_non_enregistre' => '<b>Помилка:</b> e-mail <tt>@email_oubli@</tt> не зареєстрований на цьому сайті.',
565
+    'pass_erreur_non_valide' => '<b>Помилка:</b> e-mail <tt>@email_oubli@</tt> неправильний!',
566
+    'pass_erreur_probleme_technique' => '<b>Помилка:</b> цей лист не може бути відправлений по технічним причинам.',
567
+    'pass_espace_prive_bla' => 'Ви можете увійти до адміністративної (приватної) частини сайту після реєстрації. Після реєстрації ви можете створювати статті та приймати участь в усіх обговореннях.',
568
+    'pass_forum_bla' => 'Ви хочете долучитися до форуму, який доступний тільки для зареєстрованих учасників.',
569
+    'pass_indiquez_cidessous' => 'Для реєстації вкажіть ваш ємейл і вам буде відправлено лист з подальшими інструкціями.',
570
+    'pass_mail_passcookie' => '(цей лист відправлений автоматично)
571 571
 
572 572
 Щоб відновити ваш пароль до сайту
573 573
 @nom_site_spip (@adresse_site) 
@@ -589,128 +589,128 @@  discard block
 block discarded – undo
589 589
 You can then enter a new password
590 590
 and connect again to the site.
591 591
 ',
592
-	'pass_mot_oublie' => 'забутий пароль',
593
-	'pass_nouveau_enregistre' => 'Новий пароль збережено.',
594
-	'pass_nouveau_pass' => 'Новий пароль',
595
-	'pass_ok' => 'OK',
596
-	'pass_oubli_mot' => 'Забутий пароль',
597
-	'pass_procedure_changer' => 'Щоб змінити пароль, будь ласка, ведіть e-mail, який ви вказали при реєстрації.',
598
-	'pass_quitter_fenetre' => 'Закрити вікно',
599
-	'pass_rappel_login' => 'Нагадуємо: ваш логін „@login@”.',
600
-	'pass_recevoir_mail' => 'Вам буде надіслано лист з інформацією про подальші кроки для реєстрації на сайті.',
601
-	'pass_retour_public' => 'Назад до основного сайту',
602
-	'pass_rien_a_faire_ici' => 'Нема чого тут робити',
603
-	'pass_vousinscrire' => 'Реєстрація на сайті',
604
-	'precedent' => 'попередній',
605
-	'previsualisation' => 'Попередній перегляд',
606
-	'previsualiser' => 'Попередній перегляд',
592
+    'pass_mot_oublie' => 'забутий пароль',
593
+    'pass_nouveau_enregistre' => 'Новий пароль збережено.',
594
+    'pass_nouveau_pass' => 'Новий пароль',
595
+    'pass_ok' => 'OK',
596
+    'pass_oubli_mot' => 'Забутий пароль',
597
+    'pass_procedure_changer' => 'Щоб змінити пароль, будь ласка, ведіть e-mail, який ви вказали при реєстрації.',
598
+    'pass_quitter_fenetre' => 'Закрити вікно',
599
+    'pass_rappel_login' => 'Нагадуємо: ваш логін „@login@”.',
600
+    'pass_recevoir_mail' => 'Вам буде надіслано лист з інформацією про подальші кроки для реєстрації на сайті.',
601
+    'pass_retour_public' => 'Назад до основного сайту',
602
+    'pass_rien_a_faire_ici' => 'Нема чого тут робити',
603
+    'pass_vousinscrire' => 'Реєстрація на сайті',
604
+    'precedent' => 'попередній',
605
+    'previsualisation' => 'Попередній перегляд',
606
+    'previsualiser' => 'Попередній перегляд',
607 607
 
608
-	// R
609
-	'retour' => 'Повернутися',
608
+    // R
609
+    'retour' => 'Повернутися',
610 610
 
611
-	// S
612
-	'spip_conforme_dtd' => 'SPIP виявив, що дана сторінка відповідає своєму DOCTYPE:',
613
-	'squelette' => 'шаблон',
614
-	'squelette_inclus_ligne' => 'включений шаблон, рядок',
615
-	'squelette_ligne' => 'шаблон, рядок',
616
-	'stats_visites_et_popularite' => '@visites@ відвідань; популярність: @popularite@',
617
-	'suivant' => 'наступний',
611
+    // S
612
+    'spip_conforme_dtd' => 'SPIP виявив, що дана сторінка відповідає своєму DOCTYPE:',
613
+    'squelette' => 'шаблон',
614
+    'squelette_inclus_ligne' => 'включений шаблон, рядок',
615
+    'squelette_ligne' => 'шаблон, рядок',
616
+    'stats_visites_et_popularite' => '@visites@ відвідань; популярність: @popularite@',
617
+    'suivant' => 'наступний',
618 618
 
619
-	// T
620
-	'taille_go' => '@taille@ Гб',
621
-	'taille_ko' => '@taille@ кб',
622
-	'taille_mo' => '@taille@ Mb',
623
-	'taille_octets' => '@taille@ bytes',
624
-	'texte_actualite_site_1' => 'Коли ви звикнете до інтерфейсу, натисніть “',
625
-	'texte_actualite_site_2' => 'повний інтерфейс',
626
-	'texte_actualite_site_3' => '”, який зробить більше функцій доступними.',
627
-	'texte_creation_automatique_vignette' => 'Для кожного файлу (в форматі @gd_formats@), доданого через форму, автоматично буде створена зменшена версія  - мініатюра (максимальний розмір @taille_preview@ пікселів).',
628
-	'texte_documents_associes' => 'Наступні документи пов’язані зі статтею, але вони не були вставлені. На сайті вони можуть відображатися як прикріплені документи (в залежності від дизайну).',
629
-	'texte_erreur_mise_niveau_base' => 'Помилка бази даних під час апгрейду. 
619
+    // T
620
+    'taille_go' => '@taille@ Гб',
621
+    'taille_ko' => '@taille@ кб',
622
+    'taille_mo' => '@taille@ Mb',
623
+    'taille_octets' => '@taille@ bytes',
624
+    'texte_actualite_site_1' => 'Коли ви звикнете до інтерфейсу, натисніть “',
625
+    'texte_actualite_site_2' => 'повний інтерфейс',
626
+    'texte_actualite_site_3' => '”, який зробить більше функцій доступними.',
627
+    'texte_creation_automatique_vignette' => 'Для кожного файлу (в форматі @gd_formats@), доданого через форму, автоматично буде створена зменшена версія  - мініатюра (максимальний розмір @taille_preview@ пікселів).',
628
+    'texte_documents_associes' => 'Наступні документи пов’язані зі статтею, але вони не були вставлені. На сайті вони можуть відображатися як прикріплені документи (в залежності від дизайну).',
629
+    'texte_erreur_mise_niveau_base' => 'Помилка бази даних під час апгрейду. 
630 630
      Зображення <b> @fichier </b> не можна передати (статтею @id_article). <p>Ще раз натисніть на посилання, повторіть процедуру апгрейду і впевніться, що зображення є в статтях.',
631
-	'texte_erreur_visiteur' => 'Ви спробували отримати доступ до адміністративної частини сайту з використанням логіну, який не має достатньо прав для такої операції.',
632
-	'texte_inc_auth_1' => 'Ви ввели логін <b>@auth_login@</b>. Такого користувача немає в базі даних. Спробуйте ще раз',
633
-	'texte_inc_auth_2' => '(пере)підключитися',
634
-	'texte_inc_auth_3' => 'вийдіть і перезавантажте ваш браузер у випадку необхідності.',
635
-	'texte_inc_config' => 'Зміна налаштувань сайту дуже сильно впливає на його роботу. Настійливо рекомендуємо змінювати налаштування тільки в тому випадку, коли ви чітко передбачаєте, які зміни це викличе. <b>Ви можете попросити консультацію щодо налаштувань системи у розробника вашого сайту.</b>',
636
-	'texte_inc_meta_1' => 'Система викликала помилку при спробі запису в файл <code>@fichier@</code>. Зверніться до адміністратора сайту, щоб',
637
-	'texte_inc_meta_2' => 'перевірити права доступу на запис',
638
-	'texte_inc_meta_3' => ' в папці <code>@repertoire@</code>.',
639
-	'texte_statut_en_cours_redaction' => 'редагується',
640
-	'texte_statut_poubelle' => 'видалено',
641
-	'texte_statut_propose_evaluation' => 'представлено',
642
-	'texte_statut_publie' => 'опубліковано',
643
-	'texte_statut_refuse' => 'відхилено',
644
-	'titre_ajouter_mot_cle' => 'ДОДАТИ КЛЮЧОВЕ СЛОВО:',
645
-	'titre_cadre_raccourcis' => 'ШВИДКИЙ ПЕРЕХІД:',
646
-	'titre_changer_couleur_interface' => 'Зміна кольору інтерфейсу',
647
-	'titre_image_admin_article' => 'Ви можете адмініструвати цю статтю ',
648
-	'titre_image_administrateur' => 'Адміністратор',
649
-	'titre_image_aide' => 'Допомога',
650
-	'titre_image_auteur_supprime' => 'Автора видалено',
651
-	'titre_image_redacteur' => 'Редактор без доступу',
652
-	'titre_image_redacteur_02' => 'Редактор',
653
-	'titre_image_selecteur' => 'Переглянути список',
654
-	'titre_image_visiteur' => 'Відвідувач',
655
-	'titre_joindre_document' => 'ДОДАТИ ДОКУМЕНТ',
656
-	'titre_mots_cles' => 'КЛЮЧОВІ СЛОВА',
657
-	'titre_probleme_technique' => 'Увага: неможливо підключитися до SQL серверу, сайт не працює. Ми намагаємось оперативно розв’язати проблему. Дякуємо за розуміння.',
658
-	'titre_publier_document' => 'ОПУБЛІКУВАТИ ДОКУМЕНТ В ЦІЙ РУБРИЦІ',
659
-	'titre_signatures_attente' => 'Підписи чекають схвалення',
660
-	'titre_signatures_confirmees' => 'Підписи підтверджено',
661
-	'titre_statistiques' => 'Статистика сайту',
662
-	'titre_titre_document' => 'Назва документу:',
663
-	'todo' => 'зробити',
664
-	'trad_definir_reference' => 'Виберіть "@titre@" як джерело для перекладу',
665
-	'trad_reference' => '(джерело для перекладів)',
631
+    'texte_erreur_visiteur' => 'Ви спробували отримати доступ до адміністративної частини сайту з використанням логіну, який не має достатньо прав для такої операції.',
632
+    'texte_inc_auth_1' => 'Ви ввели логін <b>@auth_login@</b>. Такого користувача немає в базі даних. Спробуйте ще раз',
633
+    'texte_inc_auth_2' => '(пере)підключитися',
634
+    'texte_inc_auth_3' => 'вийдіть і перезавантажте ваш браузер у випадку необхідності.',
635
+    'texte_inc_config' => 'Зміна налаштувань сайту дуже сильно впливає на його роботу. Настійливо рекомендуємо змінювати налаштування тільки в тому випадку, коли ви чітко передбачаєте, які зміни це викличе. <b>Ви можете попросити консультацію щодо налаштувань системи у розробника вашого сайту.</b>',
636
+    'texte_inc_meta_1' => 'Система викликала помилку при спробі запису в файл <code>@fichier@</code>. Зверніться до адміністратора сайту, щоб',
637
+    'texte_inc_meta_2' => 'перевірити права доступу на запис',
638
+    'texte_inc_meta_3' => ' в папці <code>@repertoire@</code>.',
639
+    'texte_statut_en_cours_redaction' => 'редагується',
640
+    'texte_statut_poubelle' => 'видалено',
641
+    'texte_statut_propose_evaluation' => 'представлено',
642
+    'texte_statut_publie' => 'опубліковано',
643
+    'texte_statut_refuse' => 'відхилено',
644
+    'titre_ajouter_mot_cle' => 'ДОДАТИ КЛЮЧОВЕ СЛОВО:',
645
+    'titre_cadre_raccourcis' => 'ШВИДКИЙ ПЕРЕХІД:',
646
+    'titre_changer_couleur_interface' => 'Зміна кольору інтерфейсу',
647
+    'titre_image_admin_article' => 'Ви можете адмініструвати цю статтю ',
648
+    'titre_image_administrateur' => 'Адміністратор',
649
+    'titre_image_aide' => 'Допомога',
650
+    'titre_image_auteur_supprime' => 'Автора видалено',
651
+    'titre_image_redacteur' => 'Редактор без доступу',
652
+    'titre_image_redacteur_02' => 'Редактор',
653
+    'titre_image_selecteur' => 'Переглянути список',
654
+    'titre_image_visiteur' => 'Відвідувач',
655
+    'titre_joindre_document' => 'ДОДАТИ ДОКУМЕНТ',
656
+    'titre_mots_cles' => 'КЛЮЧОВІ СЛОВА',
657
+    'titre_probleme_technique' => 'Увага: неможливо підключитися до SQL серверу, сайт не працює. Ми намагаємось оперативно розв’язати проблему. Дякуємо за розуміння.',
658
+    'titre_publier_document' => 'ОПУБЛІКУВАТИ ДОКУМЕНТ В ЦІЙ РУБРИЦІ',
659
+    'titre_signatures_attente' => 'Підписи чекають схвалення',
660
+    'titre_signatures_confirmees' => 'Підписи підтверджено',
661
+    'titre_statistiques' => 'Статистика сайту',
662
+    'titre_titre_document' => 'Назва документу:',
663
+    'todo' => 'зробити',
664
+    'trad_definir_reference' => 'Виберіть "@titre@" як джерело для перекладу',
665
+    'trad_reference' => '(джерело для перекладів)',
666 666
 
667
-	// Z
668
-	'zbug_balise_b_aval' => ': B tag too late in loop',
669
-	'zbug_balise_inexistante' => 'Тег #@balise@ не коректно вказано для @from@ ',
670
-	'zbug_balise_sans_argument' => 'Не вистачає аргументу в тезі @balise@',
671
-	'zbug_boucle' => 'цикл (boucle)',
672
-	'zbug_boucle_recursive_undef' => 'невизначений рекурсивний цикл (boucle): @nom@',
673
-	'zbug_calcul' => 'обчислення',
674
-	'zbug_champ_hors_boucle' => 'Поле @champ@ знаходиться поза циклом (boucle)',
675
-	'zbug_champ_hors_motif' => 'Поле @champ@ знаходиться поза контекстом @motif@',
676
-	'zbug_code' => 'код ',
677
-	'zbug_critere_inconnu' => 'Невідомий критерій @critere@',
678
-	'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} в таблиці без первинного ключа',
679
-	'zbug_distant_interdit' => 'Зовнішні дані заборонено',
680
-	'zbug_doublon_table_sans_cle_primaire' => 'Дублікати записів в таблиці, що не має простого первинного ключа',
681
-	'zbug_doublon_table_sans_index' => 'Дублікати записів в таблиці без індексу',
682
-	'zbug_erreur_boucle_double' => 'Цикл @id@: подвійне визначення',
683
-	'zbug_erreur_boucle_fermant' => 'Цикл @id@: відсутній тег, що закриває',
684
-	'zbug_erreur_boucle_syntaxe' => 'Синтаксична помилка в циклі  @id@',
685
-	'zbug_erreur_compilation' => 'Помилка компіляції',
686
-	'zbug_erreur_execution_page' => 'Помилка виконання',
687
-	'zbug_erreur_filtre' => 'Невизначений фільтр @filtre@',
688
-	'zbug_erreur_meme_parent' => 'Критерій {meme_parent} може бути використаний лише в циклах (FORUMS) і (RUBRIQUES)',
689
-	'zbug_erreur_squelette' => 'Помилка(и) в шаблоні',
690
-	'zbug_hors_compilation' => 'Не скомпільовано',
691
-	'zbug_info_erreur_squelette' => 'Помилка на сайті',
692
-	'zbug_inversion_ordre_inexistant' => 'Реверсія неіснуючого порядку',
693
-	'zbug_pagination_sans_critere' => 'Використано тег #PAGINATION, але в циклі не вказаний критерій {pagination}. Можливо це рекурсивний цикл.',
694
-	'zbug_parametres_inclus_incorrects' => 'Невірний параметр, що включає: @param@',
695
-	'zbug_profile' => 'Час розрахунку: @time@',
696
-	'zbug_resultat' => 'результат',
697
-	'zbug_serveur_indefini' => 'Не визначений SQL сервер',
698
-	'zbug_statistiques' => 'Інформація про SQL запроси (відсортовано за часом виконання) ',
699
-	'zbug_table_inconnue' => 'Невідома SQL таблиця "@table@"',
700
-	'zxml_connus_attributs' => 'відомі атрибути',
701
-	'zxml_de' => 'з',
702
-	'zxml_inconnu_attribut' => 'невідомий атрибут',
703
-	'zxml_inconnu_balise' => 'невідомий тег',
704
-	'zxml_inconnu_entite' => 'невідомий запис',
705
-	'zxml_inconnu_id' => 'невідомий ID',
706
-	'zxml_mais_de' => 'але з',
707
-	'zxml_non_conforme' => 'не відповідає принципу',
708
-	'zxml_non_fils' => 'не є дочірнім по відношенню до',
709
-	'zxml_nonvide_balise' => 'тег не пустий',
710
-	'zxml_obligatoire_attribut' => 'потрібний атрибут, що відсутній в',
711
-	'zxml_succession_fils_incorrecte' => 'невірне дочірнє наслідування',
712
-	'zxml_survoler' => 'щоб побачити правильні, наведіть курсор',
713
-	'zxml_valeur_attribut' => 'значення атрибута',
714
-	'zxml_vide_balise' => 'пустий тег',
715
-	'zxml_vu' => 'вже проглядалося'
667
+    // Z
668
+    'zbug_balise_b_aval' => ': B tag too late in loop',
669
+    'zbug_balise_inexistante' => 'Тег #@balise@ не коректно вказано для @from@ ',
670
+    'zbug_balise_sans_argument' => 'Не вистачає аргументу в тезі @balise@',
671
+    'zbug_boucle' => 'цикл (boucle)',
672
+    'zbug_boucle_recursive_undef' => 'невизначений рекурсивний цикл (boucle): @nom@',
673
+    'zbug_calcul' => 'обчислення',
674
+    'zbug_champ_hors_boucle' => 'Поле @champ@ знаходиться поза циклом (boucle)',
675
+    'zbug_champ_hors_motif' => 'Поле @champ@ знаходиться поза контекстом @motif@',
676
+    'zbug_code' => 'код ',
677
+    'zbug_critere_inconnu' => 'Невідомий критерій @critere@',
678
+    'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} в таблиці без первинного ключа',
679
+    'zbug_distant_interdit' => 'Зовнішні дані заборонено',
680
+    'zbug_doublon_table_sans_cle_primaire' => 'Дублікати записів в таблиці, що не має простого первинного ключа',
681
+    'zbug_doublon_table_sans_index' => 'Дублікати записів в таблиці без індексу',
682
+    'zbug_erreur_boucle_double' => 'Цикл @id@: подвійне визначення',
683
+    'zbug_erreur_boucle_fermant' => 'Цикл @id@: відсутній тег, що закриває',
684
+    'zbug_erreur_boucle_syntaxe' => 'Синтаксична помилка в циклі  @id@',
685
+    'zbug_erreur_compilation' => 'Помилка компіляції',
686
+    'zbug_erreur_execution_page' => 'Помилка виконання',
687
+    'zbug_erreur_filtre' => 'Невизначений фільтр @filtre@',
688
+    'zbug_erreur_meme_parent' => 'Критерій {meme_parent} може бути використаний лише в циклах (FORUMS) і (RUBRIQUES)',
689
+    'zbug_erreur_squelette' => 'Помилка(и) в шаблоні',
690
+    'zbug_hors_compilation' => 'Не скомпільовано',
691
+    'zbug_info_erreur_squelette' => 'Помилка на сайті',
692
+    'zbug_inversion_ordre_inexistant' => 'Реверсія неіснуючого порядку',
693
+    'zbug_pagination_sans_critere' => 'Використано тег #PAGINATION, але в циклі не вказаний критерій {pagination}. Можливо це рекурсивний цикл.',
694
+    'zbug_parametres_inclus_incorrects' => 'Невірний параметр, що включає: @param@',
695
+    'zbug_profile' => 'Час розрахунку: @time@',
696
+    'zbug_resultat' => 'результат',
697
+    'zbug_serveur_indefini' => 'Не визначений SQL сервер',
698
+    'zbug_statistiques' => 'Інформація про SQL запроси (відсортовано за часом виконання) ',
699
+    'zbug_table_inconnue' => 'Невідома SQL таблиця "@table@"',
700
+    'zxml_connus_attributs' => 'відомі атрибути',
701
+    'zxml_de' => 'з',
702
+    'zxml_inconnu_attribut' => 'невідомий атрибут',
703
+    'zxml_inconnu_balise' => 'невідомий тег',
704
+    'zxml_inconnu_entite' => 'невідомий запис',
705
+    'zxml_inconnu_id' => 'невідомий ID',
706
+    'zxml_mais_de' => 'але з',
707
+    'zxml_non_conforme' => 'не відповідає принципу',
708
+    'zxml_non_fils' => 'не є дочірнім по відношенню до',
709
+    'zxml_nonvide_balise' => 'тег не пустий',
710
+    'zxml_obligatoire_attribut' => 'потрібний атрибут, що відсутній в',
711
+    'zxml_succession_fils_incorrecte' => 'невірне дочірнє наслідування',
712
+    'zxml_survoler' => 'щоб побачити правильні, наведіть курсор',
713
+    'zxml_valeur_attribut' => 'значення атрибута',
714
+    'zxml_vide_balise' => 'пустий тег',
715
+    'zxml_vu' => 'вже проглядалося'
716 716
 );
Please login to merge, or discard this patch.
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/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
-		[$usec, $sec] = explode(' ', $start);
65
-		[$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
+        [$usec, $sec] = explode(' ', $start);
65
+        [$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
-		[, $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
+        [, $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
-		[$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>' . (is_countable($temps) ? count($temps) : 0) . '</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
+        [$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>' . (is_countable($temps) ? count($temps) : 0) . '</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
 		[$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>' . (is_countable($temps) ? count($temps) : 0) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
196
+		('<tr><td>'.(is_countable($temps) ? count($temps) : 0).'</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_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   +1999 added lines, -1999 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
 /**
@@ -1707,19 +1707,19 @@  discard block
 block discarded – undo
1707 1707
  *     Ressource à utiliser avec sql_fetch()
1708 1708
  **/
1709 1709
 function spip_sqlite_table_exists(string $table, $serveur = '', $requeter = true) {
1710
-	$r = spip_sqlite_query(
1711
-		'SELECT name FROM sqlite_master WHERE'
1712
-		. ' type=\'table\''
1713
-		. ' AND name=' . spip_sqlite_quote($table, 'string')
1714
-		. ' AND name NOT LIKE \'sqlite_%\'',
1715
-		$serveur,
1716
-		$requeter
1717
-	);
1718
-	if (!$requeter) {
1719
-		return $r;
1720
-	}
1721
-	$res = spip_sqlite_fetch($r);
1722
-	return (bool) $res;
1710
+    $r = spip_sqlite_query(
1711
+        'SELECT name FROM sqlite_master WHERE'
1712
+        . ' type=\'table\''
1713
+        . ' AND name=' . spip_sqlite_quote($table, 'string')
1714
+        . ' AND name NOT LIKE \'sqlite_%\'',
1715
+        $serveur,
1716
+        $requeter
1717
+    );
1718
+    if (!$requeter) {
1719
+        return $r;
1720
+    }
1721
+    $res = spip_sqlite_fetch($r);
1722
+    return (bool) $res;
1723 1723
 }
1724 1724
 
1725 1725
 define('_SQLITE_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
@@ -1742,129 +1742,129 @@  discard block
 block discarded – undo
1742 1742
  *     - array description de la table sinon
1743 1743
  */
1744 1744
 function spip_sqlite_showtable($nom_table, $serveur = '', $requeter = true) {
1745
-	$query =
1746
-		'SELECT sql, type FROM'
1747
-		. ' (SELECT * FROM sqlite_master UNION ALL'
1748
-		. ' SELECT * FROM sqlite_temp_master)'
1749
-		. " WHERE tbl_name LIKE '$nom_table'"
1750
-		. " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'"
1751
-		. ' ORDER BY substr(type,2,1), name';
1752
-
1753
-	$a = spip_sqlite_query($query, $serveur, $requeter);
1754
-	if (!$a) {
1755
-		return '';
1756
-	}
1757
-	if (!$requeter) {
1758
-		return $a;
1759
-	}
1760
-	if (!($a = spip_sqlite_fetch($a, null, $serveur))) {
1761
-		return '';
1762
-	}
1763
-	$vue = ($a['type'] == 'view'); // table | vue
1764
-
1765
-	// c'est une table
1766
-	// il faut parser le create
1767
-	if (!$vue) {
1768
-		if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) {
1769
-			return '';
1770
-		} else {
1771
-			$desc = $r[1];
1772
-			// extraction d'une KEY éventuelle en prenant garde de ne pas
1773
-			// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
1774
-			if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
1775
-				$namedkeys = $r[2];
1776
-				$desc = $r[1];
1777
-			} else {
1778
-				$namedkeys = '';
1779
-			}
1780
-
1781
-			$fields = [];
1782
-			$keys = [];
1783
-
1784
-			// enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber
1785
-			// par exemple s'il contiennent une virgule.
1786
-			// /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager !
1787
-			list($desc, $echaps) = query_echappe_textes($desc);
1788
-
1789
-			// separer toutes les descriptions de champs, separes par des virgules
1790
-			# /!\ explode peut exploser aussi DECIMAL(10,2) !
1791
-			$k_precedent = null;
1792
-			foreach (explode(',', $desc) as $v) {
1793
-				preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r);
1794
-				// Les cles de champs peuvent etre entourees
1795
-				// de guillements doubles " , simples ', graves ` ou de crochets [ ],  ou rien.
1796
-				// http://www.sqlite.org/lang_keywords.html
1797
-				$k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]...
1798
-				if ($char = strpbrk($k[0], '\'"[`')) {
1799
-					$k = trim($k, $char);
1800
-					if ($char == '[') {
1801
-						$k = rtrim($k, ']');
1802
-					}
1803
-				}
1804
-				$def = query_reinjecte_textes($r[2], $echaps); // valeur du champ
1805
-
1806
-				// rustine pour DECIMAL(10,2)
1807
-				// s'il y a une parenthèse fermante dans la clé
1808
-				// ou dans la définition sans qu'il n'y ait une ouverture avant
1809
-				if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1810
-					$fields[$k_precedent] .= ',' . $k . ' ' . $def;
1811
-					continue;
1812
-				}
1813
-
1814
-				// la primary key peut etre dans une des descriptions de champs
1815
-				// et non en fin de table, cas encore decouvert avec Sqlite Manager
1816
-				if (stripos($r[2], 'PRIMARY KEY') !== false) {
1817
-					$keys['PRIMARY KEY'] = $k;
1818
-				}
1819
-
1820
-				$fields[$k] = $def;
1821
-				$k_precedent = $k;
1822
-			}
1823
-			// key inclues dans la requete
1824
-			foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
1825
-				if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
1826
-					$k = str_replace('`', '', trim($r[1]));
1827
-					$t = trim(strtolower(str_replace('`', '', $r[2])), '"');
1828
-					if ($k && !isset($keys[$k])) {
1829
-						$keys[$k] = $t;
1830
-					} else {
1831
-						$keys[] = $t;
1832
-					}
1833
-				}
1834
-			}
1835
-			// sinon ajouter les key index
1836
-			$query =
1837
-				'SELECT name,sql FROM'
1838
-				. ' (SELECT * FROM sqlite_master UNION ALL'
1839
-				. ' SELECT * FROM sqlite_temp_master)'
1840
-				. " WHERE tbl_name LIKE '$nom_table'"
1841
-				. " AND type='index' AND name NOT LIKE 'sqlite_%'"
1842
-				. 'ORDER BY substr(type,2,1), name';
1843
-			$a = spip_sqlite_query($query, $serveur, $requeter);
1844
-			while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1845
-				$key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1846
-				$keytype = 'KEY';
1847
-				if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1848
-					$keytype = 'UNIQUE KEY';
1849
-				}
1850
-				$colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1851
-				$keys[$keytype . ' ' . $key] = $colonnes;
1852
-			}
1853
-		}
1854
-	} // c'est une vue, on liste les champs disponibles simplement
1855
-	else {
1856
-		if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1
1857
-			$fields = [];
1858
-			foreach ($res as $c => $v) {
1859
-				$fields[$c] = '';
1860
-			}
1861
-			$keys = [];
1862
-		} else {
1863
-			return '';
1864
-		}
1865
-	}
1866
-
1867
-	return ['field' => $fields, 'key' => $keys];
1745
+    $query =
1746
+        'SELECT sql, type FROM'
1747
+        . ' (SELECT * FROM sqlite_master UNION ALL'
1748
+        . ' SELECT * FROM sqlite_temp_master)'
1749
+        . " WHERE tbl_name LIKE '$nom_table'"
1750
+        . " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'"
1751
+        . ' ORDER BY substr(type,2,1), name';
1752
+
1753
+    $a = spip_sqlite_query($query, $serveur, $requeter);
1754
+    if (!$a) {
1755
+        return '';
1756
+    }
1757
+    if (!$requeter) {
1758
+        return $a;
1759
+    }
1760
+    if (!($a = spip_sqlite_fetch($a, null, $serveur))) {
1761
+        return '';
1762
+    }
1763
+    $vue = ($a['type'] == 'view'); // table | vue
1764
+
1765
+    // c'est une table
1766
+    // il faut parser le create
1767
+    if (!$vue) {
1768
+        if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) {
1769
+            return '';
1770
+        } else {
1771
+            $desc = $r[1];
1772
+            // extraction d'une KEY éventuelle en prenant garde de ne pas
1773
+            // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
1774
+            if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
1775
+                $namedkeys = $r[2];
1776
+                $desc = $r[1];
1777
+            } else {
1778
+                $namedkeys = '';
1779
+            }
1780
+
1781
+            $fields = [];
1782
+            $keys = [];
1783
+
1784
+            // enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber
1785
+            // par exemple s'il contiennent une virgule.
1786
+            // /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager !
1787
+            list($desc, $echaps) = query_echappe_textes($desc);
1788
+
1789
+            // separer toutes les descriptions de champs, separes par des virgules
1790
+            # /!\ explode peut exploser aussi DECIMAL(10,2) !
1791
+            $k_precedent = null;
1792
+            foreach (explode(',', $desc) as $v) {
1793
+                preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r);
1794
+                // Les cles de champs peuvent etre entourees
1795
+                // de guillements doubles " , simples ', graves ` ou de crochets [ ],  ou rien.
1796
+                // http://www.sqlite.org/lang_keywords.html
1797
+                $k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]...
1798
+                if ($char = strpbrk($k[0], '\'"[`')) {
1799
+                    $k = trim($k, $char);
1800
+                    if ($char == '[') {
1801
+                        $k = rtrim($k, ']');
1802
+                    }
1803
+                }
1804
+                $def = query_reinjecte_textes($r[2], $echaps); // valeur du champ
1805
+
1806
+                // rustine pour DECIMAL(10,2)
1807
+                // s'il y a une parenthèse fermante dans la clé
1808
+                // ou dans la définition sans qu'il n'y ait une ouverture avant
1809
+                if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1810
+                    $fields[$k_precedent] .= ',' . $k . ' ' . $def;
1811
+                    continue;
1812
+                }
1813
+
1814
+                // la primary key peut etre dans une des descriptions de champs
1815
+                // et non en fin de table, cas encore decouvert avec Sqlite Manager
1816
+                if (stripos($r[2], 'PRIMARY KEY') !== false) {
1817
+                    $keys['PRIMARY KEY'] = $k;
1818
+                }
1819
+
1820
+                $fields[$k] = $def;
1821
+                $k_precedent = $k;
1822
+            }
1823
+            // key inclues dans la requete
1824
+            foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
1825
+                if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
1826
+                    $k = str_replace('`', '', trim($r[1]));
1827
+                    $t = trim(strtolower(str_replace('`', '', $r[2])), '"');
1828
+                    if ($k && !isset($keys[$k])) {
1829
+                        $keys[$k] = $t;
1830
+                    } else {
1831
+                        $keys[] = $t;
1832
+                    }
1833
+                }
1834
+            }
1835
+            // sinon ajouter les key index
1836
+            $query =
1837
+                'SELECT name,sql FROM'
1838
+                . ' (SELECT * FROM sqlite_master UNION ALL'
1839
+                . ' SELECT * FROM sqlite_temp_master)'
1840
+                . " WHERE tbl_name LIKE '$nom_table'"
1841
+                . " AND type='index' AND name NOT LIKE 'sqlite_%'"
1842
+                . 'ORDER BY substr(type,2,1), name';
1843
+            $a = spip_sqlite_query($query, $serveur, $requeter);
1844
+            while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1845
+                $key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1846
+                $keytype = 'KEY';
1847
+                if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1848
+                    $keytype = 'UNIQUE KEY';
1849
+                }
1850
+                $colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1851
+                $keys[$keytype . ' ' . $key] = $colonnes;
1852
+            }
1853
+        }
1854
+    } // c'est une vue, on liste les champs disponibles simplement
1855
+    else {
1856
+        if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1
1857
+            $fields = [];
1858
+            foreach ($res as $c => $v) {
1859
+                $fields[$c] = '';
1860
+            }
1861
+            $keys = [];
1862
+        } else {
1863
+            return '';
1864
+        }
1865
+    }
1866
+
1867
+    return ['field' => $fields, 'key' => $keys];
1868 1868
 }
1869 1869
 
1870 1870
 
@@ -1890,22 +1890,22 @@  discard block
 block discarded – undo
1890 1890
  *     - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
1891 1891
  */
1892 1892
 function spip_sqlite_update($table, $champs, $where = '', $desc = '', $serveur = '', $requeter = true) {
1893
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1894
-	$champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1893
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1894
+    $champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1895 1895
 
1896
-	$set = [];
1897
-	foreach ($champs as $champ => $val) {
1898
-		$set[] = $champ . "=$val";
1899
-	}
1900
-	if (!empty($set)) {
1901
-		return spip_sqlite_query(
1902
-			_sqlite_calculer_expression('UPDATE', $table, ',')
1903
-			. _sqlite_calculer_expression('SET', $set, ',')
1904
-			. _sqlite_calculer_expression('WHERE', $where),
1905
-			$serveur,
1906
-			$requeter
1907
-		);
1908
-	}
1896
+    $set = [];
1897
+    foreach ($champs as $champ => $val) {
1898
+        $set[] = $champ . "=$val";
1899
+    }
1900
+    if (!empty($set)) {
1901
+        return spip_sqlite_query(
1902
+            _sqlite_calculer_expression('UPDATE', $table, ',')
1903
+            . _sqlite_calculer_expression('SET', $set, ',')
1904
+            . _sqlite_calculer_expression('WHERE', $where),
1905
+            $serveur,
1906
+            $requeter
1907
+        );
1908
+    }
1909 1909
 }
1910 1910
 
1911 1911
 
@@ -1935,38 +1935,38 @@  discard block
 block discarded – undo
1935 1935
  */
1936 1936
 function spip_sqlite_updateq($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1937 1937
 
1938
-	if (!$champs) {
1939
-		return;
1940
-	}
1941
-	if (!$desc) {
1942
-		$desc = description_table($table, $serveur);
1943
-	}
1944
-	if (!$desc) {
1945
-		die("$table insertion sans description");
1946
-	}
1947
-	$fields = $desc['field'];
1948
-
1949
-	$set = [];
1950
-	foreach ($champs as $champ => $val) {
1951
-		$set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1952
-	}
1953
-
1954
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1955
-	// attention ils sont deja quotes
1956
-	$maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1957
-	foreach ($maj as $champ => $val) {
1958
-		if (!isset($set[$champ])) {
1959
-			$set[$champ] = $champ . '=' . $val;
1960
-		}
1961
-	}
1962
-
1963
-	return spip_sqlite_query(
1964
-		_sqlite_calculer_expression('UPDATE', $table, ',')
1965
-		. _sqlite_calculer_expression('SET', $set, ',')
1966
-		. _sqlite_calculer_expression('WHERE', $where),
1967
-		$serveur,
1968
-		$requeter
1969
-	);
1938
+    if (!$champs) {
1939
+        return;
1940
+    }
1941
+    if (!$desc) {
1942
+        $desc = description_table($table, $serveur);
1943
+    }
1944
+    if (!$desc) {
1945
+        die("$table insertion sans description");
1946
+    }
1947
+    $fields = $desc['field'];
1948
+
1949
+    $set = [];
1950
+    foreach ($champs as $champ => $val) {
1951
+        $set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1952
+    }
1953
+
1954
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1955
+    // attention ils sont deja quotes
1956
+    $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1957
+    foreach ($maj as $champ => $val) {
1958
+        if (!isset($set[$champ])) {
1959
+            $set[$champ] = $champ . '=' . $val;
1960
+        }
1961
+    }
1962
+
1963
+    return spip_sqlite_query(
1964
+        _sqlite_calculer_expression('UPDATE', $table, ',')
1965
+        . _sqlite_calculer_expression('SET', $set, ',')
1966
+        . _sqlite_calculer_expression('WHERE', $where),
1967
+        $serveur,
1968
+        $requeter
1969
+    );
1970 1970
 }
1971 1971
 
1972 1972
 
@@ -1984,17 +1984,17 @@  discard block
 block discarded – undo
1984 1984
  * @return void
1985 1985
  */
1986 1986
 function _sqlite_init() {
1987
-	if (!defined('_DIR_DB')) {
1988
-		define('_DIR_DB', _DIR_ETC . 'bases/');
1989
-	}
1990
-	if (!defined('_SQLITE_CHMOD')) {
1991
-		define('_SQLITE_CHMOD', _SPIP_CHMOD);
1992
-	}
1987
+    if (!defined('_DIR_DB')) {
1988
+        define('_DIR_DB', _DIR_ETC . 'bases/');
1989
+    }
1990
+    if (!defined('_SQLITE_CHMOD')) {
1991
+        define('_SQLITE_CHMOD', _SPIP_CHMOD);
1992
+    }
1993 1993
 
1994
-	if (!is_dir($d = _DIR_DB)) {
1995
-		include_spip('inc/flock');
1996
-		sous_repertoire($d);
1997
-	}
1994
+    if (!is_dir($d = _DIR_DB)) {
1995
+        include_spip('inc/flock');
1996
+        sous_repertoire($d);
1997
+    }
1998 1998
 }
1999 1999
 
2000 2000
 
@@ -2008,20 +2008,20 @@  discard block
 block discarded – undo
2008 2008
  * @return bool|int
2009 2009
  */
2010 2010
 function _sqlite_is_version($version = '', $link = '', $serveur = '', $requeter = true) {
2011
-	if ($link === '') {
2012
-		$link = _sqlite_link($serveur);
2013
-	}
2014
-	if (!$link) {
2015
-		return false;
2016
-	}
2011
+    if ($link === '') {
2012
+        $link = _sqlite_link($serveur);
2013
+    }
2014
+    if (!$link) {
2015
+        return false;
2016
+    }
2017 2017
 
2018
-	$v = 3;
2018
+    $v = 3;
2019 2019
 
2020
-	if (!$version) {
2021
-		return $v;
2022
-	}
2020
+    if (!$version) {
2021
+        return $v;
2022
+    }
2023 2023
 
2024
-	return ($version == $v);
2024
+    return ($version == $v);
2025 2025
 }
2026 2026
 
2027 2027
 
@@ -2032,9 +2032,9 @@  discard block
 block discarded – undo
2032 2032
  * @return Object Information de connexion pour SQLite
2033 2033
  */
2034 2034
 function _sqlite_link($serveur = '') {
2035
-	$link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
2035
+    $link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
2036 2036
 
2037
-	return $link;
2037
+    return $link;
2038 2038
 }
2039 2039
 
2040 2040
 
@@ -2049,52 +2049,52 @@  discard block
 block discarded – undo
2049 2049
  * @return string|number     Texte ou nombre échappé
2050 2050
  */
2051 2051
 function _sqlite_calculer_cite($v, $type) {
2052
-	if ($type) {
2053
-		if (
2054
-			is_null($v)
2055
-			and stripos($type, 'NOT NULL') === false
2056
-		) {
2057
-			return 'NULL';
2058
-		} // null php se traduit en NULL SQL
2059
-
2060
-		if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
2061
-			return $v;
2062
-		}
2063
-		if (sql_test_int($type)) {
2064
-			if (is_numeric($v)) {
2065
-				return $v;
2066
-			} elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) == 0) {
2067
-				return hexdec(substr($v, 2));
2068
-			} else {
2069
-				return intval($v);
2070
-			}
2071
-		}
2072
-	} else {
2073
-		// si on ne connait pas le type on le deduit de $v autant que possible
2074
-		if (is_bool($v)) {
2075
-			return strval(intval($v));
2076
-		}
2077
-		elseif (is_numeric($v)) {
2078
-			return strval($v);
2079
-		}
2080
-	}
2081
-
2082
-	// trouver un link sqlite pour faire l'echappement
2083
-	foreach ($GLOBALS['connexions'] as $s) {
2084
-		if (
2085
-			$l = $s['link']
2086
-			and is_object($l)
2087
-			and $l instanceof \PDO
2088
-			and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite'
2089
-		) {
2090
-			return $l->quote($v);
2091
-		}
2092
-	}
2093
-
2094
-	// echapper les ' en ''
2095
-	spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2096
-
2097
-	return ("'" . str_replace("'", "''", $v) . "'");
2052
+    if ($type) {
2053
+        if (
2054
+            is_null($v)
2055
+            and stripos($type, 'NOT NULL') === false
2056
+        ) {
2057
+            return 'NULL';
2058
+        } // null php se traduit en NULL SQL
2059
+
2060
+        if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
2061
+            return $v;
2062
+        }
2063
+        if (sql_test_int($type)) {
2064
+            if (is_numeric($v)) {
2065
+                return $v;
2066
+            } elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) == 0) {
2067
+                return hexdec(substr($v, 2));
2068
+            } else {
2069
+                return intval($v);
2070
+            }
2071
+        }
2072
+    } else {
2073
+        // si on ne connait pas le type on le deduit de $v autant que possible
2074
+        if (is_bool($v)) {
2075
+            return strval(intval($v));
2076
+        }
2077
+        elseif (is_numeric($v)) {
2078
+            return strval($v);
2079
+        }
2080
+    }
2081
+
2082
+    // trouver un link sqlite pour faire l'echappement
2083
+    foreach ($GLOBALS['connexions'] as $s) {
2084
+        if (
2085
+            $l = $s['link']
2086
+            and is_object($l)
2087
+            and $l instanceof \PDO
2088
+            and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite'
2089
+        ) {
2090
+            return $l->quote($v);
2091
+        }
2092
+    }
2093
+
2094
+    // echapper les ' en ''
2095
+    spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2096
+
2097
+    return ("'" . str_replace("'", "''", $v) . "'");
2098 2098
 }
2099 2099
 
2100 2100
 
@@ -2110,21 +2110,21 @@  discard block
 block discarded – undo
2110 2110
  * @return string            Texte de l'expression, une partie donc, du texte la requête.
2111 2111
  */
2112 2112
 function _sqlite_calculer_expression($expression, $v, $join = 'AND') {
2113
-	if (empty($v)) {
2114
-		return '';
2115
-	}
2113
+    if (empty($v)) {
2114
+        return '';
2115
+    }
2116 2116
 
2117
-	$exp = "\n$expression ";
2117
+    $exp = "\n$expression ";
2118 2118
 
2119
-	if (!is_array($v)) {
2120
-		return $exp . $v;
2121
-	} else {
2122
-		if (strtoupper($join) === 'AND') {
2123
-			return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2124
-		} else {
2125
-			return $exp . join($join, $v);
2126
-		}
2127
-	}
2119
+    if (!is_array($v)) {
2120
+        return $exp . $v;
2121
+    } else {
2122
+        if (strtoupper($join) === 'AND') {
2123
+            return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2124
+        } else {
2125
+            return $exp . join($join, $v);
2126
+        }
2127
+    }
2128 2128
 }
2129 2129
 
2130 2130
 
@@ -2140,7 +2140,7 @@  discard block
 block discarded – undo
2140 2140
  * @return string Texte du orderby préparé
2141 2141
  */
2142 2142
 function _sqlite_calculer_order($orderby) {
2143
-	return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
2143
+    return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
2144 2144
 }
2145 2145
 
2146 2146
 
@@ -2151,26 +2151,26 @@  discard block
 block discarded – undo
2151 2151
  * @return string Sélection de colonnes pour une clause SELECT
2152 2152
  */
2153 2153
 function _sqlite_calculer_select_as($args) {
2154
-	$res = '';
2155
-	foreach ($args as $k => $v) {
2156
-		if (substr($k, -1) == '@') {
2157
-			// c'est une jointure qui se refere au from precedent
2158
-			// pas de virgule
2159
-			$res .= '  ' . $v;
2160
-		} else {
2161
-			if (!is_numeric($k)) {
2162
-				$p = strpos($v, ' ');
2163
-				if ($p) {
2164
-					$v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2165
-				} else {
2166
-					$v .= " AS '$k'";
2167
-				}
2168
-			}
2169
-			$res .= ', ' . $v;
2170
-		}
2171
-	}
2172
-
2173
-	return substr($res, 2);
2154
+    $res = '';
2155
+    foreach ($args as $k => $v) {
2156
+        if (substr($k, -1) == '@') {
2157
+            // c'est une jointure qui se refere au from precedent
2158
+            // pas de virgule
2159
+            $res .= '  ' . $v;
2160
+        } else {
2161
+            if (!is_numeric($k)) {
2162
+                $p = strpos($v, ' ');
2163
+                if ($p) {
2164
+                    $v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2165
+                } else {
2166
+                    $v .= " AS '$k'";
2167
+                }
2168
+            }
2169
+            $res .= ', ' . $v;
2170
+        }
2171
+    }
2172
+
2173
+    return substr($res, 2);
2174 2174
 }
2175 2175
 
2176 2176
 
@@ -2193,26 +2193,26 @@  discard block
 block discarded – undo
2193 2193
  *     Contrainte pour clause WHERE
2194 2194
  */
2195 2195
 function _sqlite_calculer_where($v) {
2196
-	if (!is_array($v)) {
2197
-		return $v;
2198
-	}
2199
-
2200
-	$op = array_shift($v);
2201
-	if (!($n = count($v))) {
2202
-		return $op;
2203
-	} else {
2204
-		$arg = _sqlite_calculer_where(array_shift($v));
2205
-		if ($n == 1) {
2206
-			return "$op($arg)";
2207
-		} else {
2208
-			$arg2 = _sqlite_calculer_where(array_shift($v));
2209
-			if ($n == 2) {
2210
-				return "($arg $op $arg2)";
2211
-			} else {
2212
-				return "($arg $op ($arg2) : $v[0])";
2213
-			}
2214
-		}
2215
-	}
2196
+    if (!is_array($v)) {
2197
+        return $v;
2198
+    }
2199
+
2200
+    $op = array_shift($v);
2201
+    if (!($n = count($v))) {
2202
+        return $op;
2203
+    } else {
2204
+        $arg = _sqlite_calculer_where(array_shift($v));
2205
+        if ($n == 1) {
2206
+            return "$op($arg)";
2207
+        } else {
2208
+            $arg2 = _sqlite_calculer_where(array_shift($v));
2209
+            if ($n == 2) {
2210
+                return "($arg $op $arg2)";
2211
+            } else {
2212
+                return "($arg $op ($arg2) : $v[0])";
2213
+            }
2214
+        }
2215
+    }
2216 2216
 }
2217 2217
 
2218 2218
 
@@ -2227,19 +2227,19 @@  discard block
 block discarded – undo
2227 2227
  * @return array|bool
2228 2228
  */
2229 2229
 function _sqlite_charger_version($version = '') {
2230
-	$versions = [];
2230
+    $versions = [];
2231 2231
 
2232
-	// version 3
2233
-	if (!$version || $version == 3) {
2234
-		if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) {
2235
-			$versions[] = 3;
2236
-		}
2237
-	}
2238
-	if ($version) {
2239
-		return in_array($version, $versions);
2240
-	}
2232
+    // version 3
2233
+    if (!$version || $version == 3) {
2234
+        if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) {
2235
+            $versions[] = 3;
2236
+        }
2237
+    }
2238
+    if ($version) {
2239
+        return in_array($version, $versions);
2240
+    }
2241 2241
 
2242
-	return $versions;
2242
+    return $versions;
2243 2243
 }
2244 2244
 
2245 2245
 
@@ -2277,147 +2277,147 @@  discard block
 block discarded – undo
2277 2277
  */
2278 2278
 function _sqlite_modifier_table($table, $colonne, $opt = [], $serveur = '') {
2279 2279
 
2280
-	if (is_array($table)) {
2281
-		$table_destination = reset($table);
2282
-		$table_origine = key($table);
2283
-	} else {
2284
-		$table_origine = $table_destination = $table;
2285
-	}
2286
-	// ne prend actuellement qu'un changement
2287
-	// mais pourra etre adapte pour changer plus qu'une colonne a la fois
2288
-	if (is_array($colonne)) {
2289
-		$colonne_destination = reset($colonne);
2290
-		$colonne_origine = key($colonne);
2291
-	} else {
2292
-		$colonne_origine = $colonne_destination = $colonne;
2293
-	}
2294
-	if (!isset($opt['field'])) {
2295
-		$opt['field'] = [];
2296
-	}
2297
-	if (!isset($opt['key'])) {
2298
-		$opt['key'] = [];
2299
-	}
2300
-
2301
-	// si les noms de tables sont differents, pas besoin de table temporaire
2302
-	// on prendra directement le nom de la future table
2303
-	$meme_table = ($table_origine == $table_destination);
2304
-
2305
-	$def_origine = sql_showtable($table_origine, false, $serveur);
2306
-	if (!$def_origine or !isset($def_origine['field'])) {
2307
-		spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2308
-
2309
-		return false;
2310
-	}
2311
-
2312
-
2313
-	$table_tmp = $table_origine . '_tmp';
2314
-
2315
-	// 1) creer une table temporaire avec les modifications
2316
-	// - DROP : suppression de la colonne
2317
-	// - CHANGE : modification de la colonne
2318
-	// (foreach pour conserver l'ordre des champs)
2319
-
2320
-	// field
2321
-	$fields = [];
2322
-	// pour le INSERT INTO plus loin
2323
-	// stocker la correspondance nouvelles->anciennes colonnes
2324
-	$fields_correspondances = [];
2325
-	foreach ($def_origine['field'] as $c => $d) {
2326
-		if ($colonne_origine && ($c == $colonne_origine)) {
2327
-			// si pas DROP
2328
-			if ($colonne_destination) {
2329
-				$fields[$colonne_destination] = $opt['field'][$colonne_destination];
2330
-				$fields_correspondances[$colonne_destination] = $c;
2331
-			}
2332
-		} else {
2333
-			$fields[$c] = $d;
2334
-			$fields_correspondances[$c] = $c;
2335
-		}
2336
-	}
2337
-	// cas de ADD sqlite2 (ajout du champ en fin de table):
2338
-	if (!$colonne_origine && $colonne_destination) {
2339
-		$fields[$colonne_destination] = $opt['field'][$colonne_destination];
2340
-	}
2341
-
2342
-	// key...
2343
-	$keys = [];
2344
-	foreach ($def_origine['key'] as $c => $d) {
2345
-		$c = str_replace($colonne_origine, $colonne_destination, $c);
2346
-		$d = str_replace($colonne_origine, $colonne_destination, $d);
2347
-		// seulement si on ne supprime pas la colonne !
2348
-		if ($d) {
2349
-			$keys[$c] = $d;
2350
-		}
2351
-	}
2352
-
2353
-	// autres keys, on merge
2354
-	$keys = array_merge($keys, $opt['key']);
2355
-	$queries = [];
2356
-
2357
-	// copier dans destination (si differente de origine), sinon tmp
2358
-	$table_copie = ($meme_table) ? $table_tmp : $table_destination;
2359
-	$autoinc = (isset($keys['PRIMARY KEY'])
2360
-		and $keys['PRIMARY KEY']
2361
-		and stripos($keys['PRIMARY KEY'], ',') === false
2362
-		and stripos($fields[$keys['PRIMARY KEY']], 'default') === false);
2363
-
2364
-	if (
2365
-		$q = _sqlite_requete_create(
2366
-			$table_copie,
2367
-			$fields,
2368
-			$keys,
2369
-			$autoinc,
2370
-			$temporary = false,
2371
-			$ifnotexists = true,
2372
-			$serveur
2373
-		)
2374
-	) {
2375
-		$queries[] = $q;
2376
-	}
2377
-
2378
-
2379
-	// 2) y copier les champs qui vont bien
2380
-	$champs_dest = join(', ', array_keys($fields_correspondances));
2381
-	$champs_ori = join(', ', $fields_correspondances);
2382
-	$queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine";
2383
-
2384
-	// 3) supprimer la table d'origine
2385
-	$queries[] = "DROP TABLE $table_origine";
2386
-
2387
-	// 4) renommer la table temporaire
2388
-	// avec le nom de la table destination
2389
-	// si necessaire
2390
-	if ($meme_table) {
2391
-		$queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination";
2392
-	}
2393
-
2394
-	// 5) remettre les index !
2395
-	foreach ($keys as $k => $v) {
2396
-		if ($k == 'PRIMARY KEY') {
2397
-		} else {
2398
-			// enlever KEY
2399
-			$k = substr($k, 4);
2400
-			$queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2401
-		}
2402
-	}
2403
-
2404
-
2405
-	if (count($queries)) {
2406
-		spip_sqlite::demarrer_transaction($serveur);
2407
-		// il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas
2408
-		foreach ($queries as $q) {
2409
-			if (!spip_sqlite::executer_requete($q, $serveur)) {
2410
-				spip_log('SQLite : ALTER TABLE table :'
2411
-					. " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2412
-				spip_sqlite::annuler_transaction($serveur);
2413
-
2414
-				return false;
2415
-			}
2416
-		}
2417
-		spip_sqlite::finir_transaction($serveur);
2418
-	}
2419
-
2420
-	return true;
2280
+    if (is_array($table)) {
2281
+        $table_destination = reset($table);
2282
+        $table_origine = key($table);
2283
+    } else {
2284
+        $table_origine = $table_destination = $table;
2285
+    }
2286
+    // ne prend actuellement qu'un changement
2287
+    // mais pourra etre adapte pour changer plus qu'une colonne a la fois
2288
+    if (is_array($colonne)) {
2289
+        $colonne_destination = reset($colonne);
2290
+        $colonne_origine = key($colonne);
2291
+    } else {
2292
+        $colonne_origine = $colonne_destination = $colonne;
2293
+    }
2294
+    if (!isset($opt['field'])) {
2295
+        $opt['field'] = [];
2296
+    }
2297
+    if (!isset($opt['key'])) {
2298
+        $opt['key'] = [];
2299
+    }
2300
+
2301
+    // si les noms de tables sont differents, pas besoin de table temporaire
2302
+    // on prendra directement le nom de la future table
2303
+    $meme_table = ($table_origine == $table_destination);
2304
+
2305
+    $def_origine = sql_showtable($table_origine, false, $serveur);
2306
+    if (!$def_origine or !isset($def_origine['field'])) {
2307
+        spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2308
+
2309
+        return false;
2310
+    }
2311
+
2312
+
2313
+    $table_tmp = $table_origine . '_tmp';
2314
+
2315
+    // 1) creer une table temporaire avec les modifications
2316
+    // - DROP : suppression de la colonne
2317
+    // - CHANGE : modification de la colonne
2318
+    // (foreach pour conserver l'ordre des champs)
2319
+
2320
+    // field
2321
+    $fields = [];
2322
+    // pour le INSERT INTO plus loin
2323
+    // stocker la correspondance nouvelles->anciennes colonnes
2324
+    $fields_correspondances = [];
2325
+    foreach ($def_origine['field'] as $c => $d) {
2326
+        if ($colonne_origine && ($c == $colonne_origine)) {
2327
+            // si pas DROP
2328
+            if ($colonne_destination) {
2329
+                $fields[$colonne_destination] = $opt['field'][$colonne_destination];
2330
+                $fields_correspondances[$colonne_destination] = $c;
2331
+            }
2332
+        } else {
2333
+            $fields[$c] = $d;
2334
+            $fields_correspondances[$c] = $c;
2335
+        }
2336
+    }
2337
+    // cas de ADD sqlite2 (ajout du champ en fin de table):
2338
+    if (!$colonne_origine && $colonne_destination) {
2339
+        $fields[$colonne_destination] = $opt['field'][$colonne_destination];
2340
+    }
2341
+
2342
+    // key...
2343
+    $keys = [];
2344
+    foreach ($def_origine['key'] as $c => $d) {
2345
+        $c = str_replace($colonne_origine, $colonne_destination, $c);
2346
+        $d = str_replace($colonne_origine, $colonne_destination, $d);
2347
+        // seulement si on ne supprime pas la colonne !
2348
+        if ($d) {
2349
+            $keys[$c] = $d;
2350
+        }
2351
+    }
2352
+
2353
+    // autres keys, on merge
2354
+    $keys = array_merge($keys, $opt['key']);
2355
+    $queries = [];
2356
+
2357
+    // copier dans destination (si differente de origine), sinon tmp
2358
+    $table_copie = ($meme_table) ? $table_tmp : $table_destination;
2359
+    $autoinc = (isset($keys['PRIMARY KEY'])
2360
+        and $keys['PRIMARY KEY']
2361
+        and stripos($keys['PRIMARY KEY'], ',') === false
2362
+        and stripos($fields[$keys['PRIMARY KEY']], 'default') === false);
2363
+
2364
+    if (
2365
+        $q = _sqlite_requete_create(
2366
+            $table_copie,
2367
+            $fields,
2368
+            $keys,
2369
+            $autoinc,
2370
+            $temporary = false,
2371
+            $ifnotexists = true,
2372
+            $serveur
2373
+        )
2374
+    ) {
2375
+        $queries[] = $q;
2376
+    }
2377
+
2378
+
2379
+    // 2) y copier les champs qui vont bien
2380
+    $champs_dest = join(', ', array_keys($fields_correspondances));
2381
+    $champs_ori = join(', ', $fields_correspondances);
2382
+    $queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine";
2383
+
2384
+    // 3) supprimer la table d'origine
2385
+    $queries[] = "DROP TABLE $table_origine";
2386
+
2387
+    // 4) renommer la table temporaire
2388
+    // avec le nom de la table destination
2389
+    // si necessaire
2390
+    if ($meme_table) {
2391
+        $queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination";
2392
+    }
2393
+
2394
+    // 5) remettre les index !
2395
+    foreach ($keys as $k => $v) {
2396
+        if ($k == 'PRIMARY KEY') {
2397
+        } else {
2398
+            // enlever KEY
2399
+            $k = substr($k, 4);
2400
+            $queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2401
+        }
2402
+    }
2403
+
2404
+
2405
+    if (count($queries)) {
2406
+        spip_sqlite::demarrer_transaction($serveur);
2407
+        // il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas
2408
+        foreach ($queries as $q) {
2409
+            if (!spip_sqlite::executer_requete($q, $serveur)) {
2410
+                spip_log('SQLite : ALTER TABLE table :'
2411
+                    . " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2412
+                spip_sqlite::annuler_transaction($serveur);
2413
+
2414
+                return false;
2415
+            }
2416
+        }
2417
+        spip_sqlite::finir_transaction($serveur);
2418
+    }
2419
+
2420
+    return true;
2421 2421
 }
2422 2422
 
2423 2423
 
@@ -2427,61 +2427,61 @@  discard block
 block discarded – undo
2427 2427
  * @return array
2428 2428
  */
2429 2429
 function _sqlite_ref_fonctions() {
2430
-	$fonctions = [
2431
-		'alter' => 'spip_sqlite_alter',
2432
-		'count' => 'spip_sqlite_count',
2433
-		'countsel' => 'spip_sqlite_countsel',
2434
-		'create' => 'spip_sqlite_create',
2435
-		'create_base' => 'spip_sqlite_create_base',
2436
-		'create_view' => 'spip_sqlite_create_view',
2437
-		'date_proche' => 'spip_sqlite_date_proche',
2438
-		'delete' => 'spip_sqlite_delete',
2439
-		'drop_table' => 'spip_sqlite_drop_table',
2440
-		'drop_view' => 'spip_sqlite_drop_view',
2441
-		'errno' => 'spip_sqlite_errno',
2442
-		'error' => 'spip_sqlite_error',
2443
-		'explain' => 'spip_sqlite_explain',
2444
-		'fetch' => 'spip_sqlite_fetch',
2445
-		'seek' => 'spip_sqlite_seek',
2446
-		'free' => 'spip_sqlite_free',
2447
-		'hex' => 'spip_sqlite_hex',
2448
-		'in' => 'spip_sqlite_in',
2449
-		'insert' => 'spip_sqlite_insert',
2450
-		'insertq' => 'spip_sqlite_insertq',
2451
-		'insertq_multi' => 'spip_sqlite_insertq_multi',
2452
-		'listdbs' => 'spip_sqlite_listdbs',
2453
-		'multi' => 'spip_sqlite_multi',
2454
-		'optimize' => 'spip_sqlite_optimize',
2455
-		'query' => 'spip_sqlite_query',
2456
-		'quote' => 'spip_sqlite_quote',
2457
-		'repair' => 'spip_sqlite_repair',
2458
-		'replace' => 'spip_sqlite_replace',
2459
-		'replace_multi' => 'spip_sqlite_replace_multi',
2460
-		'select' => 'spip_sqlite_select',
2461
-		'selectdb' => 'spip_sqlite_selectdb',
2462
-		'set_charset' => 'spip_sqlite_set_charset',
2463
-		'get_charset' => 'spip_sqlite_get_charset',
2464
-		'showbase' => 'spip_sqlite_showbase',
2465
-		'showtable' => 'spip_sqlite_showtable',
2466
-		'table_exists' => 'spip_sqlite_table_exists',
2467
-		'update' => 'spip_sqlite_update',
2468
-		'updateq' => 'spip_sqlite_updateq',
2469
-		'preferer_transaction' => 'spip_sqlite_preferer_transaction',
2470
-		'demarrer_transaction' => 'spip_sqlite_demarrer_transaction',
2471
-		'terminer_transaction' => 'spip_sqlite_terminer_transaction',
2472
-	];
2473
-
2474
-	// association de chaque nom http d'un charset aux couples sqlite
2475
-	// SQLite supporte utf-8 et utf-16 uniquement.
2476
-	$charsets = [
2477
-		'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'],
2478
-		//'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la
2479
-		//'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE')
2480
-	];
2481
-
2482
-	$fonctions['charsets'] = $charsets;
2483
-
2484
-	return $fonctions;
2430
+    $fonctions = [
2431
+        'alter' => 'spip_sqlite_alter',
2432
+        'count' => 'spip_sqlite_count',
2433
+        'countsel' => 'spip_sqlite_countsel',
2434
+        'create' => 'spip_sqlite_create',
2435
+        'create_base' => 'spip_sqlite_create_base',
2436
+        'create_view' => 'spip_sqlite_create_view',
2437
+        'date_proche' => 'spip_sqlite_date_proche',
2438
+        'delete' => 'spip_sqlite_delete',
2439
+        'drop_table' => 'spip_sqlite_drop_table',
2440
+        'drop_view' => 'spip_sqlite_drop_view',
2441
+        'errno' => 'spip_sqlite_errno',
2442
+        'error' => 'spip_sqlite_error',
2443
+        'explain' => 'spip_sqlite_explain',
2444
+        'fetch' => 'spip_sqlite_fetch',
2445
+        'seek' => 'spip_sqlite_seek',
2446
+        'free' => 'spip_sqlite_free',
2447
+        'hex' => 'spip_sqlite_hex',
2448
+        'in' => 'spip_sqlite_in',
2449
+        'insert' => 'spip_sqlite_insert',
2450
+        'insertq' => 'spip_sqlite_insertq',
2451
+        'insertq_multi' => 'spip_sqlite_insertq_multi',
2452
+        'listdbs' => 'spip_sqlite_listdbs',
2453
+        'multi' => 'spip_sqlite_multi',
2454
+        'optimize' => 'spip_sqlite_optimize',
2455
+        'query' => 'spip_sqlite_query',
2456
+        'quote' => 'spip_sqlite_quote',
2457
+        'repair' => 'spip_sqlite_repair',
2458
+        'replace' => 'spip_sqlite_replace',
2459
+        'replace_multi' => 'spip_sqlite_replace_multi',
2460
+        'select' => 'spip_sqlite_select',
2461
+        'selectdb' => 'spip_sqlite_selectdb',
2462
+        'set_charset' => 'spip_sqlite_set_charset',
2463
+        'get_charset' => 'spip_sqlite_get_charset',
2464
+        'showbase' => 'spip_sqlite_showbase',
2465
+        'showtable' => 'spip_sqlite_showtable',
2466
+        'table_exists' => 'spip_sqlite_table_exists',
2467
+        'update' => 'spip_sqlite_update',
2468
+        'updateq' => 'spip_sqlite_updateq',
2469
+        'preferer_transaction' => 'spip_sqlite_preferer_transaction',
2470
+        'demarrer_transaction' => 'spip_sqlite_demarrer_transaction',
2471
+        'terminer_transaction' => 'spip_sqlite_terminer_transaction',
2472
+    ];
2473
+
2474
+    // association de chaque nom http d'un charset aux couples sqlite
2475
+    // SQLite supporte utf-8 et utf-16 uniquement.
2476
+    $charsets = [
2477
+        'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'],
2478
+        //'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la
2479
+        //'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE')
2480
+    ];
2481
+
2482
+    $fonctions['charsets'] = $charsets;
2483
+
2484
+    return $fonctions;
2485 2485
 }
2486 2486
 
2487 2487
 
@@ -2493,56 +2493,56 @@  discard block
 block discarded – undo
2493 2493
  * @return mixed
2494 2494
  */
2495 2495
 function _sqlite_remplacements_definitions_table($query, $autoinc = false) {
2496
-	// quelques remplacements
2497
-	$num = '(\s*\([0-9]*\))?';
2498
-	$enum = '(\s*\([^\)]*\))?';
2499
-
2500
-	$remplace = [
2501
-		'/enum' . $enum . '/is' => 'VARCHAR(255)',
2502
-		'/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2503
-		'/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2504
-		'/auto_increment/is' => '',
2505
-		'/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2506
-		'/(timestamp .* )ON .*$/is' => '\\1',
2507
-		'/character set \w+/is' => '',
2508
-		'/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2509
-		'/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2510
-		'/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2511
-		'/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2512
-		'/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2513
-	];
2514
-
2515
-	// pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2516
-	$remplace_autocinc = [
2517
-		'/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2518
-	];
2519
-	// pour les int non autoincrement, il faut un DEFAULT
2520
-	$remplace_nonautocinc = [
2521
-		'/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2522
-	];
2523
-
2524
-	if (is_string($query)) {
2525
-		$query = preg_replace(array_keys($remplace), $remplace, $query);
2526
-		if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) {
2527
-			$query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query);
2528
-		} else {
2529
-			$query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query);
2530
-			$query = _sqlite_collate_ci($query);
2531
-		}
2532
-	} elseif (is_array($query)) {
2533
-		foreach ($query as $k => $q) {
2534
-			$ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q));
2535
-			$query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]);
2536
-			if ($ai) {
2537
-				$query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]);
2538
-			} else {
2539
-				$query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]);
2540
-				$query[$k] = _sqlite_collate_ci($query[$k]);
2541
-			}
2542
-		}
2543
-	}
2544
-
2545
-	return $query;
2496
+    // quelques remplacements
2497
+    $num = '(\s*\([0-9]*\))?';
2498
+    $enum = '(\s*\([^\)]*\))?';
2499
+
2500
+    $remplace = [
2501
+        '/enum' . $enum . '/is' => 'VARCHAR(255)',
2502
+        '/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2503
+        '/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2504
+        '/auto_increment/is' => '',
2505
+        '/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2506
+        '/(timestamp .* )ON .*$/is' => '\\1',
2507
+        '/character set \w+/is' => '',
2508
+        '/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2509
+        '/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2510
+        '/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2511
+        '/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2512
+        '/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2513
+    ];
2514
+
2515
+    // pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2516
+    $remplace_autocinc = [
2517
+        '/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2518
+    ];
2519
+    // pour les int non autoincrement, il faut un DEFAULT
2520
+    $remplace_nonautocinc = [
2521
+        '/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2522
+    ];
2523
+
2524
+    if (is_string($query)) {
2525
+        $query = preg_replace(array_keys($remplace), $remplace, $query);
2526
+        if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) {
2527
+            $query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query);
2528
+        } else {
2529
+            $query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query);
2530
+            $query = _sqlite_collate_ci($query);
2531
+        }
2532
+    } elseif (is_array($query)) {
2533
+        foreach ($query as $k => $q) {
2534
+            $ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q));
2535
+            $query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]);
2536
+            if ($ai) {
2537
+                $query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]);
2538
+            } else {
2539
+                $query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]);
2540
+                $query[$k] = _sqlite_collate_ci($query[$k]);
2541
+            }
2542
+        }
2543
+    }
2544
+
2545
+    return $query;
2546 2546
 }
2547 2547
 
2548 2548
 /**
@@ -2553,17 +2553,17 @@  discard block
 block discarded – undo
2553 2553
  * @return string
2554 2554
  */
2555 2555
 function _sqlite_collate_ci($champ) {
2556
-	if (stripos($champ, 'COLLATE') !== false) {
2557
-		return $champ;
2558
-	}
2559
-	if (stripos($champ, 'BINARY') !== false) {
2560
-		return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2561
-	}
2562
-	if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2563
-		return $champ . ' COLLATE NOCASE';
2564
-	}
2556
+    if (stripos($champ, 'COLLATE') !== false) {
2557
+        return $champ;
2558
+    }
2559
+    if (stripos($champ, 'BINARY') !== false) {
2560
+        return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2561
+    }
2562
+    if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2563
+        return $champ . ' COLLATE NOCASE';
2564
+    }
2565 2565
 
2566
-	return $champ;
2566
+    return $champ;
2567 2567
 }
2568 2568
 
2569 2569
 
@@ -2582,84 +2582,84 @@  discard block
 block discarded – undo
2582 2582
  * @return bool|string
2583 2583
  */
2584 2584
 function _sqlite_requete_create(
2585
-	$nom,
2586
-	$champs,
2587
-	$cles,
2588
-	$autoinc = false,
2589
-	$temporary = false,
2590
-	$_ifnotexists = true,
2591
-	$serveur = '',
2592
-	$requeter = true
2585
+    $nom,
2586
+    $champs,
2587
+    $cles,
2588
+    $autoinc = false,
2589
+    $temporary = false,
2590
+    $_ifnotexists = true,
2591
+    $serveur = '',
2592
+    $requeter = true
2593 2593
 ) {
2594
-	$query = $keys = $s = $p = '';
2595
-
2596
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
2597
-	// sans les renseigner (laisse le compilo recuperer la description)
2598
-	if (!is_array($champs) || !is_array($cles)) {
2599
-		return;
2600
-	}
2601
-
2602
-	// sqlite ne gere pas KEY tout court dans une requete CREATE TABLE
2603
-	// il faut passer par des create index
2604
-	// Il gere par contre primary key !
2605
-	// Soit la PK est definie dans les cles, soit dans un champs
2606
-	// soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !)
2607
-	$pk = 'PRIMARY KEY';
2608
-	// le champ de cle primaire
2609
-	$champ_pk = !empty($cles[$pk]) ? $cles[$pk] : '';
2610
-
2611
-	foreach ($champs as $k => $v) {
2612
-		if (false !== stripos($v, $pk)) {
2613
-			$champ_pk = $k;
2614
-			// on n'en a plus besoin dans field, vu que defini dans key
2615
-			$champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
2616
-			break;
2617
-		}
2618
-	}
2619
-
2620
-	if ($champ_pk) {
2621
-		$keys = "\n\t\t$pk ($champ_pk)";
2622
-	}
2623
-	// Pas de DEFAULT 0 sur les cles primaires en auto-increment
2624
-	if (
2625
-		isset($champs[$champ_pk])
2626
-		and stripos($champs[$champ_pk], 'default 0') !== false
2627
-	) {
2628
-		$champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk]));
2629
-	}
2630
-
2631
-	$champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false);
2632
-	foreach ($champs as $k => $v) {
2633
-		$query .= "$s\n\t\t$k $v";
2634
-		$s = ',';
2635
-	}
2636
-
2637
-	$ifnotexists = '';
2638
-	if ($_ifnotexists) {
2639
-		$version = spip_sqlite_fetch(
2640
-			spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur),
2641
-			'',
2642
-			$serveur
2643
-		);
2644
-		if (!function_exists('spip_version_compare')) {
2645
-			include_spip('plugins/installer');
2646
-		}
2647
-
2648
-		if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
2649
-			$ifnotexists = ' IF NOT EXISTS';
2650
-		} else {
2651
-			/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2652
-			$a = spip_sqlite_showtable($nom, $serveur);
2653
-			if (isset($a['key']['KEY ' . $nom])) {
2654
-				return true;
2655
-			}
2656
-		}
2657
-	}
2658
-
2659
-	$temporary = $temporary ? ' TEMPORARY' : '';
2660
-	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2661
-
2662
-	return $q;
2594
+    $query = $keys = $s = $p = '';
2595
+
2596
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
2597
+    // sans les renseigner (laisse le compilo recuperer la description)
2598
+    if (!is_array($champs) || !is_array($cles)) {
2599
+        return;
2600
+    }
2601
+
2602
+    // sqlite ne gere pas KEY tout court dans une requete CREATE TABLE
2603
+    // il faut passer par des create index
2604
+    // Il gere par contre primary key !
2605
+    // Soit la PK est definie dans les cles, soit dans un champs
2606
+    // soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !)
2607
+    $pk = 'PRIMARY KEY';
2608
+    // le champ de cle primaire
2609
+    $champ_pk = !empty($cles[$pk]) ? $cles[$pk] : '';
2610
+
2611
+    foreach ($champs as $k => $v) {
2612
+        if (false !== stripos($v, $pk)) {
2613
+            $champ_pk = $k;
2614
+            // on n'en a plus besoin dans field, vu que defini dans key
2615
+            $champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
2616
+            break;
2617
+        }
2618
+    }
2619
+
2620
+    if ($champ_pk) {
2621
+        $keys = "\n\t\t$pk ($champ_pk)";
2622
+    }
2623
+    // Pas de DEFAULT 0 sur les cles primaires en auto-increment
2624
+    if (
2625
+        isset($champs[$champ_pk])
2626
+        and stripos($champs[$champ_pk], 'default 0') !== false
2627
+    ) {
2628
+        $champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk]));
2629
+    }
2630
+
2631
+    $champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false);
2632
+    foreach ($champs as $k => $v) {
2633
+        $query .= "$s\n\t\t$k $v";
2634
+        $s = ',';
2635
+    }
2636
+
2637
+    $ifnotexists = '';
2638
+    if ($_ifnotexists) {
2639
+        $version = spip_sqlite_fetch(
2640
+            spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur),
2641
+            '',
2642
+            $serveur
2643
+        );
2644
+        if (!function_exists('spip_version_compare')) {
2645
+            include_spip('plugins/installer');
2646
+        }
2647
+
2648
+        if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
2649
+            $ifnotexists = ' IF NOT EXISTS';
2650
+        } else {
2651
+            /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2652
+            $a = spip_sqlite_showtable($nom, $serveur);
2653
+            if (isset($a['key']['KEY ' . $nom])) {
2654
+                return true;
2655
+            }
2656
+        }
2657
+    }
2658
+
2659
+    $temporary = $temporary ? ' TEMPORARY' : '';
2660
+    $q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2661
+
2662
+    return $q;
2663 2663
 }
2664 2664
 
2665 2665
 
@@ -2678,41 +2678,41 @@  discard block
 block discarded – undo
2678 2678
  * @return
2679 2679
  */
2680 2680
 function _sqlite_ajouter_champs_timestamp($table, $couples, $desc = '', $serveur = '') {
2681
-	static $tables = [];
2682
-
2683
-	if (!isset($tables[$table])) {
2684
-		if (!$desc) {
2685
-			$trouver_table = charger_fonction('trouver_table', 'base');
2686
-			$desc = $trouver_table($table, $serveur);
2687
-			// si pas de description, on ne fait rien, ou on die() ?
2688
-			if (!$desc) {
2689
-				return $couples;
2690
-			}
2691
-		}
2692
-
2693
-		// recherche des champs avec simplement 'TIMESTAMP'
2694
-		// cependant, il faudra peut etre etendre
2695
-		// avec la gestion de DEFAULT et ON UPDATE
2696
-		// mais ceux-ci ne sont pas utilises dans le core
2697
-		$tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []];
2698
-
2699
-		$now = _sqlite_func_now(true);
2700
-		foreach ($desc['field'] as $k => $v) {
2701
-			if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) {
2702
-				$tables[$table]['desc'][$k] = $v;
2703
-				$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2704
-			}
2705
-		}
2706
-	}
2707
-	else {
2708
-		$now = _sqlite_func_now(true);
2709
-		foreach (array_keys($tables[$table]['desc']) as $k) {
2710
-			$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2711
-		}
2712
-	}
2713
-
2714
-	// ajout des champs type 'timestamp' absents
2715
-	return array_merge($tables[$table]['valeur'], $couples);
2681
+    static $tables = [];
2682
+
2683
+    if (!isset($tables[$table])) {
2684
+        if (!$desc) {
2685
+            $trouver_table = charger_fonction('trouver_table', 'base');
2686
+            $desc = $trouver_table($table, $serveur);
2687
+            // si pas de description, on ne fait rien, ou on die() ?
2688
+            if (!$desc) {
2689
+                return $couples;
2690
+            }
2691
+        }
2692
+
2693
+        // recherche des champs avec simplement 'TIMESTAMP'
2694
+        // cependant, il faudra peut etre etendre
2695
+        // avec la gestion de DEFAULT et ON UPDATE
2696
+        // mais ceux-ci ne sont pas utilises dans le core
2697
+        $tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []];
2698
+
2699
+        $now = _sqlite_func_now(true);
2700
+        foreach ($desc['field'] as $k => $v) {
2701
+            if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) {
2702
+                $tables[$table]['desc'][$k] = $v;
2703
+                $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2704
+            }
2705
+        }
2706
+    }
2707
+    else {
2708
+        $now = _sqlite_func_now(true);
2709
+        foreach (array_keys($tables[$table]['desc']) as $k) {
2710
+            $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2711
+        }
2712
+    }
2713
+
2714
+    // ajout des champs type 'timestamp' absents
2715
+    return array_merge($tables[$table]['valeur'], $couples);
2716 2716
 }
2717 2717
 
2718 2718
 
@@ -2723,7 +2723,7 @@  discard block
 block discarded – undo
2723 2723
  * @return array|bool
2724 2724
  */
2725 2725
 function spip_versions_sqlite() {
2726
-	return _sqlite_charger_version();
2726
+    return _sqlite_charger_version();
2727 2727
 }
2728 2728
 
2729 2729
 /**
@@ -2731,114 +2731,114 @@  discard block
 block discarded – undo
2731 2731
  * encadrées de transactions.
2732 2732
  **/
2733 2733
 class spip_sqlite {
2734
-	/** @var sqlite_requeteur[] Liste des instances de requêteurs créés */
2735
-	public static $requeteurs = [];
2736
-	/** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */
2737
-	public static $transaction_en_cours = [];
2738
-
2739
-
2740
-	/**
2741
-	 * Retourne une unique instance du requêteur
2742
-	 *
2743
-	 * Retourne une instance unique du requêteur pour une connexion SQLite
2744
-	 * donnée
2745
-	 *
2746
-	 * @param string $serveur
2747
-	 *    Nom du connecteur
2748
-	 * @return sqlite_requeteur
2749
-	 *    Instance unique du requêteur
2750
-	 **/
2751
-	public static function requeteur($serveur) {
2752
-		if (!isset(spip_sqlite::$requeteurs[$serveur])) {
2753
-			spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur);
2754
-		}
2755
-
2756
-		return spip_sqlite::$requeteurs[$serveur];
2757
-	}
2758
-
2759
-	/**
2760
-	 * Prépare le texte d'une requête avant son exécution
2761
-	 *
2762
-	 * Adapte la requête au format plus ou moins MySQL par un format
2763
-	 * compris de SQLite.
2764
-	 *
2765
-	 * Change les préfixes de tables SPIP par ceux véritables
2766
-	 *
2767
-	 * @param string $query Requête à préparer
2768
-	 * @param string $serveur Nom de la connexion
2769
-	 * @return string           Requête préparée
2770
-	 */
2771
-	public static function traduire_requete($query, $serveur) {
2772
-		$requeteur = spip_sqlite::requeteur($serveur);
2773
-		$traducteur = new sqlite_traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version);
2774
-
2775
-		return $traducteur->traduire_requete();
2776
-	}
2777
-
2778
-	/**
2779
-	 * Démarre une transaction
2780
-	 *
2781
-	 * @param string $serveur Nom de la connexion
2782
-	 **/
2783
-	public static function demarrer_transaction($serveur) {
2784
-		spip_sqlite::executer_requete('BEGIN TRANSACTION', $serveur);
2785
-		spip_sqlite::$transaction_en_cours[$serveur] = true;
2786
-	}
2787
-
2788
-	/**
2789
-	 * Exécute la requête donnée
2790
-	 *
2791
-	 * @param string $query Requête
2792
-	 * @param string $serveur Nom de la connexion
2793
-	 * @param null|bool $tracer Demander des statistiques (temps) ?
2794
-	 **/
2795
-	public static function executer_requete($query, $serveur, $tracer = null) {
2796
-		$requeteur = spip_sqlite::requeteur($serveur);
2797
-
2798
-		return $requeteur->executer_requete($query, $tracer);
2799
-	}
2800
-
2801
-	/**
2802
-	 * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2803
-	 *
2804
-	 * @param string $serveur Nom de la connexion
2805
-	 * return int                Identifiant
2806
-	 **/
2807
-	public static function last_insert_id($serveur) {
2808
-		$requeteur = spip_sqlite::requeteur($serveur);
2809
-
2810
-		return $requeteur->last_insert_id($serveur);
2811
-	}
2812
-
2813
-	/**
2814
-	 * Annule une transaction
2815
-	 *
2816
-	 * @param string $serveur Nom de la connexion
2817
-	 **/
2818
-	public static function annuler_transaction($serveur) {
2819
-		spip_sqlite::executer_requete('ROLLBACK', $serveur);
2820
-		spip_sqlite::$transaction_en_cours[$serveur] = false;
2821
-	}
2822
-
2823
-	/**
2824
-	 * Termine une transaction
2825
-	 *
2826
-	 * @param string $serveur Nom de la connexion
2827
-	 **/
2828
-	public static function finir_transaction($serveur) {
2829
-		// si pas de transaction en cours, ne rien faire et le dire
2830
-		if (
2831
-			!isset(spip_sqlite::$transaction_en_cours[$serveur])
2832
-			or spip_sqlite::$transaction_en_cours[$serveur] == false
2833
-		) {
2834
-			return false;
2835
-		}
2836
-		// sinon fermer la transaction et retourner true
2837
-		spip_sqlite::executer_requete('COMMIT', $serveur);
2838
-		spip_sqlite::$transaction_en_cours[$serveur] = false;
2839
-
2840
-		return true;
2841
-	}
2734
+    /** @var sqlite_requeteur[] Liste des instances de requêteurs créés */
2735
+    public static $requeteurs = [];
2736
+    /** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */
2737
+    public static $transaction_en_cours = [];
2738
+
2739
+
2740
+    /**
2741
+     * Retourne une unique instance du requêteur
2742
+     *
2743
+     * Retourne une instance unique du requêteur pour une connexion SQLite
2744
+     * donnée
2745
+     *
2746
+     * @param string $serveur
2747
+     *    Nom du connecteur
2748
+     * @return sqlite_requeteur
2749
+     *    Instance unique du requêteur
2750
+     **/
2751
+    public static function requeteur($serveur) {
2752
+        if (!isset(spip_sqlite::$requeteurs[$serveur])) {
2753
+            spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur);
2754
+        }
2755
+
2756
+        return spip_sqlite::$requeteurs[$serveur];
2757
+    }
2758
+
2759
+    /**
2760
+     * Prépare le texte d'une requête avant son exécution
2761
+     *
2762
+     * Adapte la requête au format plus ou moins MySQL par un format
2763
+     * compris de SQLite.
2764
+     *
2765
+     * Change les préfixes de tables SPIP par ceux véritables
2766
+     *
2767
+     * @param string $query Requête à préparer
2768
+     * @param string $serveur Nom de la connexion
2769
+     * @return string           Requête préparée
2770
+     */
2771
+    public static function traduire_requete($query, $serveur) {
2772
+        $requeteur = spip_sqlite::requeteur($serveur);
2773
+        $traducteur = new sqlite_traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version);
2774
+
2775
+        return $traducteur->traduire_requete();
2776
+    }
2777
+
2778
+    /**
2779
+     * Démarre une transaction
2780
+     *
2781
+     * @param string $serveur Nom de la connexion
2782
+     **/
2783
+    public static function demarrer_transaction($serveur) {
2784
+        spip_sqlite::executer_requete('BEGIN TRANSACTION', $serveur);
2785
+        spip_sqlite::$transaction_en_cours[$serveur] = true;
2786
+    }
2787
+
2788
+    /**
2789
+     * Exécute la requête donnée
2790
+     *
2791
+     * @param string $query Requête
2792
+     * @param string $serveur Nom de la connexion
2793
+     * @param null|bool $tracer Demander des statistiques (temps) ?
2794
+     **/
2795
+    public static function executer_requete($query, $serveur, $tracer = null) {
2796
+        $requeteur = spip_sqlite::requeteur($serveur);
2797
+
2798
+        return $requeteur->executer_requete($query, $tracer);
2799
+    }
2800
+
2801
+    /**
2802
+     * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2803
+     *
2804
+     * @param string $serveur Nom de la connexion
2805
+     * return int                Identifiant
2806
+     **/
2807
+    public static function last_insert_id($serveur) {
2808
+        $requeteur = spip_sqlite::requeteur($serveur);
2809
+
2810
+        return $requeteur->last_insert_id($serveur);
2811
+    }
2812
+
2813
+    /**
2814
+     * Annule une transaction
2815
+     *
2816
+     * @param string $serveur Nom de la connexion
2817
+     **/
2818
+    public static function annuler_transaction($serveur) {
2819
+        spip_sqlite::executer_requete('ROLLBACK', $serveur);
2820
+        spip_sqlite::$transaction_en_cours[$serveur] = false;
2821
+    }
2822
+
2823
+    /**
2824
+     * Termine une transaction
2825
+     *
2826
+     * @param string $serveur Nom de la connexion
2827
+     **/
2828
+    public static function finir_transaction($serveur) {
2829
+        // si pas de transaction en cours, ne rien faire et le dire
2830
+        if (
2831
+            !isset(spip_sqlite::$transaction_en_cours[$serveur])
2832
+            or spip_sqlite::$transaction_en_cours[$serveur] == false
2833
+        ) {
2834
+            return false;
2835
+        }
2836
+        // sinon fermer la transaction et retourner true
2837
+        spip_sqlite::executer_requete('COMMIT', $serveur);
2838
+        spip_sqlite::$transaction_en_cours[$serveur] = false;
2839
+
2840
+        return true;
2841
+    }
2842 2842
 }
2843 2843
 
2844 2844
 /*
@@ -2851,127 +2851,127 @@  discard block
 block discarded – undo
2851 2851
  */
2852 2852
 
2853 2853
 class sqlite_requeteur {
2854
-	/** @var string Texte de la requête */
2855
-	public $query = ''; // la requete
2856
-	/** @var string Nom de la connexion */
2857
-	public $serveur = '';
2858
-	/** @var Ressource Identifiant de la connexion SQLite */
2859
-	public $link = '';
2860
-	/** @var string Prefixe des tables SPIP */
2861
-	public $prefixe = '';
2862
-	/** @var string Nom de la base de donnée */
2863
-	public $db = '';
2864
-	/** @var bool Doit-on tracer les requetes (var_profile) ? */
2865
-	public $tracer = false; // doit-on tracer les requetes (var_profile)
2866
-
2867
-	/** @var string Version de SQLite (2 ou 3) */
2868
-	public $sqlite_version = '';
2869
-
2870
-	/**
2871
-	 * Constructeur
2872
-	 *
2873
-	 * @param string $serveur
2874
-	 * @return bool
2875
-	 */
2876
-	public function __construct($serveur = '') {
2877
-		_sqlite_init();
2878
-		$this->serveur = strtolower($serveur);
2879
-
2880
-		if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2881
-			spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2882
-
2883
-			return false;
2884
-		}
2885
-
2886
-		$this->sqlite_version = _sqlite_is_version('', $this->link);
2887
-
2888
-		$this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
2889
-		$this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
2890
-
2891
-		// tracage des requetes ?
2892
-		$this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
2893
-	}
2894
-
2895
-	/**
2896
-	 * Lancer la requête transmise et faire le tracage si demandé
2897
-	 *
2898
-	 * @param string $query
2899
-	 *     Requête à exécuter
2900
-	 * @param bool|null $tracer
2901
-	 *     true pour tracer la requête
2902
-	 * @return bool|SQLiteResult
2903
-	 */
2904
-	public function executer_requete($query, $tracer = null) {
2905
-		if (is_null($tracer)) {
2906
-			$tracer = $this->tracer;
2907
-		}
2908
-		$err = '';
2909
-		$t = 0;
2910
-		if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
2911
-			include_spip('public/tracer');
2912
-			$t = trace_query_start();
2913
-		}
2914
-
2915
-		# spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
2916
-		if ($this->link) {
2917
-			// memoriser la derniere erreur PHP vue
2918
-			$last_error = (function_exists('error_get_last') ? error_get_last() : '');
2919
-			$e = null;
2920
-			// sauver la derniere requete
2921
-			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
2922
-			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++;
2923
-
2924
-			try {
2925
-				$r = $this->link->query($query);
2926
-			} catch (\PDOException $e) {
2927
-				spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2928
-				$r = false;
2929
-			}
2930
-			// sauvegarde de la requete (elle y est deja dans $r->queryString)
2931
-			# $r->spipQueryString = $query;
2932
-
2933
-			// comptage : oblige de compter le nombre d'entrees retournees
2934
-			// par une requete SELECT
2935
-			// aucune autre solution ne donne le nombre attendu :( !
2936
-			// particulierement s'il y a des LIMIT dans la requete.
2937
-			if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') {
2938
-				if ($r) {
2939
-					// noter le link et la query pour faire le comptage *si* on en a besoin
2940
-					$r->spipSqliteRowCount = [$this->link, $query];
2941
-				} elseif ($r instanceof PDOStatement) {
2942
-					$r->spipSqliteRowCount = 0;
2943
-				}
2944
-			}
2945
-
2946
-			// loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2947
-			if ($e and $e instanceof \PDOException) {
2948
-				$err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2949
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2950
-			} elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2951
-				$err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2952
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2953
-			} else {
2954
-				$err = '';
2955
-			}
2956
-		} else {
2957
-			$r = false;
2958
-		}
2959
-
2960
-		if (spip_sqlite_errno($this->serveur)) {
2961
-			$err .= spip_sqlite_error($query, $this->serveur);
2962
-		}
2963
-
2964
-		return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
2965
-	}
2966
-
2967
-	/**
2968
-	 * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2969
-	 *
2970
-	 * @return int
2971
-	 **/
2972
-	public function last_insert_id() {
2973
-		return $this->link->lastInsertId();
2974
-	}
2854
+    /** @var string Texte de la requête */
2855
+    public $query = ''; // la requete
2856
+    /** @var string Nom de la connexion */
2857
+    public $serveur = '';
2858
+    /** @var Ressource Identifiant de la connexion SQLite */
2859
+    public $link = '';
2860
+    /** @var string Prefixe des tables SPIP */
2861
+    public $prefixe = '';
2862
+    /** @var string Nom de la base de donnée */
2863
+    public $db = '';
2864
+    /** @var bool Doit-on tracer les requetes (var_profile) ? */
2865
+    public $tracer = false; // doit-on tracer les requetes (var_profile)
2866
+
2867
+    /** @var string Version de SQLite (2 ou 3) */
2868
+    public $sqlite_version = '';
2869
+
2870
+    /**
2871
+     * Constructeur
2872
+     *
2873
+     * @param string $serveur
2874
+     * @return bool
2875
+     */
2876
+    public function __construct($serveur = '') {
2877
+        _sqlite_init();
2878
+        $this->serveur = strtolower($serveur);
2879
+
2880
+        if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2881
+            spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2882
+
2883
+            return false;
2884
+        }
2885
+
2886
+        $this->sqlite_version = _sqlite_is_version('', $this->link);
2887
+
2888
+        $this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
2889
+        $this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
2890
+
2891
+        // tracage des requetes ?
2892
+        $this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
2893
+    }
2894
+
2895
+    /**
2896
+     * Lancer la requête transmise et faire le tracage si demandé
2897
+     *
2898
+     * @param string $query
2899
+     *     Requête à exécuter
2900
+     * @param bool|null $tracer
2901
+     *     true pour tracer la requête
2902
+     * @return bool|SQLiteResult
2903
+     */
2904
+    public function executer_requete($query, $tracer = null) {
2905
+        if (is_null($tracer)) {
2906
+            $tracer = $this->tracer;
2907
+        }
2908
+        $err = '';
2909
+        $t = 0;
2910
+        if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
2911
+            include_spip('public/tracer');
2912
+            $t = trace_query_start();
2913
+        }
2914
+
2915
+        # spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
2916
+        if ($this->link) {
2917
+            // memoriser la derniere erreur PHP vue
2918
+            $last_error = (function_exists('error_get_last') ? error_get_last() : '');
2919
+            $e = null;
2920
+            // sauver la derniere requete
2921
+            $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
2922
+            $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++;
2923
+
2924
+            try {
2925
+                $r = $this->link->query($query);
2926
+            } catch (\PDOException $e) {
2927
+                spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2928
+                $r = false;
2929
+            }
2930
+            // sauvegarde de la requete (elle y est deja dans $r->queryString)
2931
+            # $r->spipQueryString = $query;
2932
+
2933
+            // comptage : oblige de compter le nombre d'entrees retournees
2934
+            // par une requete SELECT
2935
+            // aucune autre solution ne donne le nombre attendu :( !
2936
+            // particulierement s'il y a des LIMIT dans la requete.
2937
+            if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') {
2938
+                if ($r) {
2939
+                    // noter le link et la query pour faire le comptage *si* on en a besoin
2940
+                    $r->spipSqliteRowCount = [$this->link, $query];
2941
+                } elseif ($r instanceof PDOStatement) {
2942
+                    $r->spipSqliteRowCount = 0;
2943
+                }
2944
+            }
2945
+
2946
+            // loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2947
+            if ($e and $e instanceof \PDOException) {
2948
+                $err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2949
+                spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2950
+            } elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2951
+                $err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2952
+                spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2953
+            } else {
2954
+                $err = '';
2955
+            }
2956
+        } else {
2957
+            $r = false;
2958
+        }
2959
+
2960
+        if (spip_sqlite_errno($this->serveur)) {
2961
+            $err .= spip_sqlite_error($query, $this->serveur);
2962
+        }
2963
+
2964
+        return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
2965
+    }
2966
+
2967
+    /**
2968
+     * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2969
+     *
2970
+     * @return int
2971
+     **/
2972
+    public function last_insert_id() {
2973
+        return $this->link->lastInsertId();
2974
+    }
2975 2975
 }
2976 2976
 
2977 2977
 
@@ -2981,206 +2981,206 @@  discard block
 block discarded – undo
2981 2981
  * (fonction pour proteger les textes)
2982 2982
  */
2983 2983
 class sqlite_traducteur {
2984
-	/** @var string $query Texte de la requête */
2985
-	public $query = '';
2986
-	/** @var string $prefixe Préfixe des tables */
2987
-	public $prefixe = '';
2988
-	/** @var string $sqlite_version Version de sqlite (2 ou 3) */
2989
-	public $sqlite_version = '';
2990
-
2991
-	/** Pour les corrections à effectuer sur les requêtes : array(code=>'texte') trouvé
2992
-	 *
2993
-	 * @var array
2994
-	 */
2995
-	public $textes = [];
2996
-
2997
-	/**
2998
-	 * Constructeur
2999
-	 *
3000
-	 * @param string $query Requête à préparer
3001
-	 * @param string $prefixe Prefixe des tables à utiliser
3002
-	 * @param string $sqlite_version Version SQLite (2 ou 3)
3003
-	 */
3004
-	public function __construct($query, $prefixe, $sqlite_version) {
3005
-		$this->query = $query;
3006
-		$this->prefixe = $prefixe;
3007
-		$this->sqlite_version = $sqlite_version;
3008
-	}
3009
-
3010
-	/**
3011
-	 * Transformer la requete pour SQLite
3012
-	 *
3013
-	 * Enlève les textes, transforme la requête pour quelle soit
3014
-	 * bien interprétée par SQLite, puis remet les textes
3015
-	 * la fonction affecte `$this->query`
3016
-	 */
3017
-	public function traduire_requete() {
3018
-		//
3019
-		// 1) Protection des textes en les remplacant par des codes
3020
-		//
3021
-		// enlever les 'textes' et initialiser avec
3022
-		list($this->query, $textes) = query_echappe_textes($this->query);
3023
-
3024
-		//
3025
-		// 2) Corrections de la requete
3026
-		//
3027
-		// Correction Create Database
3028
-		// Create Database -> requete ignoree
3029
-		if (strpos($this->query, 'CREATE DATABASE') === 0) {
3030
-			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3031
-			$this->query = 'SELECT 1';
3032
-		}
3033
-
3034
-		// Correction Insert Ignore
3035
-		// INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3036
-		if (strpos($this->query, 'INSERT IGNORE') === 0) {
3037
-			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3038
-			$this->query = 'INSERT ' . substr($this->query, '13');
3039
-		}
3040
-
3041
-		// Correction des dates avec INTERVAL
3042
-		// utiliser sql_date_proche() de preference
3043
-		if (strpos($this->query, 'INTERVAL') !== false) {
3044
-			$this->query = preg_replace_callback(
3045
-				'/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U',
3046
-				[&$this, '_remplacerDateParTime'],
3047
-				$this->query
3048
-			);
3049
-		}
3050
-
3051
-		if (strpos($this->query, 'LEFT(') !== false) {
3052
-			$this->query = str_replace('LEFT(', '_LEFT(', $this->query);
3053
-		}
3054
-
3055
-		if (strpos($this->query, 'TIMESTAMPDIFF(') !== false) {
3056
-			$this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims', "TIMESTAMPDIFF('\\1',", $this->query);
3057
-		}
3058
-
3059
-
3060
-		// Correction Using
3061
-		// USING (non reconnu en sqlite2)
3062
-		// problematique car la jointure ne se fait pas du coup.
3063
-		if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3064
-			spip_log(
3065
-				"'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3066
-				'sqlite.' . _LOG_ERREUR
3067
-			);
3068
-			$this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3069
-		}
3070
-
3071
-		// Correction Field
3072
-		// remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
3073
-		if (strpos($this->query, 'FIELD') !== false) {
3074
-			$this->query = preg_replace_callback(
3075
-				'/FIELD\s*\(([^\)]*)\)/',
3076
-				[&$this, '_remplacerFieldParCase'],
3077
-				$this->query
3078
-			);
3079
-		}
3080
-
3081
-		// Correction des noms de tables FROM
3082
-		// mettre les bons noms de table dans from, update, insert, replace...
3083
-		if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)) {
3084
-			$suite = strstr($this->query, $regs[0]);
3085
-			$this->query = substr($this->query, 0, -strlen($suite));
3086
-		} else {
3087
-			$suite = '';
3088
-		}
3089
-		$pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3090
-		$this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3091
-
3092
-		// Correction zero AS x
3093
-		// pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
3094
-		// n'apprecie pas du tout SELECT 0 as x ... ORDER BY x
3095
-		// il dit que x ne doit pas être un integer dans le order by !
3096
-		// on remplace du coup x par vide() dans ce cas uniquement
3097
-		//
3098
-		// 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}}
3099
-		// mais est-ce encore un soucis pour sqlite en 2021 ? (ie commenter le preg_replace marche très bien en sqlite 3.28)
3100
-		if ((strpos($this->query, '0 AS') !== false)) {
3101
-			// on ne remplace que dans ORDER BY ou GROUP BY
3102
-			if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)) {
3103
-				$suite = strstr($this->query, $regs[0]);
3104
-				$this->query = substr($this->query, 0, -strlen($suite));
3105
-
3106
-				// on cherche les noms des x dans 0 AS x
3107
-				// on remplace dans $suite le nom par vide()
3108
-				preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER);
3109
-				foreach ($matches[1] as $m) {
3110
-					if (strpos($suite, $m) !== false) {
3111
-						$suite = preg_replace(",\b$m\b,", 'VIDE()', $suite);
3112
-					}
3113
-				}
3114
-				$this->query .= $suite;
3115
-			}
3116
-		}
3117
-
3118
-		// Correction possible des divisions entieres
3119
-		// Le standard SQL (lequel? ou?) semble indiquer que
3120
-		// a/b=c doit donner c entier si a et b sont entiers 4/3=1.
3121
-		// C'est ce que retournent effectivement SQL Server et SQLite
3122
-		// Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333...
3123
-		//
3124
-		// On peut forcer la conversion en multipliant par 1.0 avant la division
3125
-		// /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus !
3126
-		// cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228
3127
-		//     http://www.sqlite.org/cvstrac/tktview?tn=3202
3128
-		// (4*1.0/3) n'est pas rendu dans ce cas !
3129
-		# $this->query = str_replace('/','* 1.00 / ',$this->query);
3130
-
3131
-
3132
-		// Correction critere REGEXP, non reconnu en sqlite2
3133
-		if (($this->sqlite_version == 2) && (strpos($this->query, 'REGEXP') !== false)) {
3134
-			$this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query);
3135
-		}
3136
-
3137
-		//
3138
-		// 3) Remise en place des textes d'origine
3139
-		//
3140
-		// Correction Antiquotes et echappements
3141
-		// ` => rien
3142
-		if (strpos($this->query, '`') !== false) {
3143
-			$this->query = str_replace('`', '', $this->query);
3144
-		}
3145
-
3146
-		$this->query = query_reinjecte_textes($this->query, $textes);
3147
-
3148
-		return $this->query;
3149
-	}
3150
-
3151
-
3152
-	/**
3153
-	 * Callback pour remplacer `DATE_` / `INTERVAL`
3154
-	 * par `DATE ... strtotime`
3155
-	 *
3156
-	 * @param array $matches Captures
3157
-	 * @return string Texte de date compris par SQLite
3158
-	 */
3159
-	public function _remplacerDateParTime($matches) {
3160
-		$op = strtoupper($matches[1] == 'ADD') ? '+' : '-';
3161
-
3162
-		return "datetime$matches[2] '$op$matches[3] $matches[4]')";
3163
-	}
3164
-
3165
-	/**
3166
-	 * Callback pour remplacer `FIELD(table,i,j,k...)`
3167
-	 * par `CASE WHEN table=i THEN n ... ELSE 0 END`
3168
-	 *
3169
-	 * @param array $matches Captures
3170
-	 * @return string Texte de liste ordonnée compris par SQLite
3171
-	 */
3172
-	public function _remplacerFieldParCase($matches) {
3173
-		$fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X)
3174
-		$t = explode(',', $fields);
3175
-		$index = array_shift($t);
3176
-
3177
-		$res = '';
3178
-		$n = 0;
3179
-		foreach ($t as $v) {
3180
-			$n++;
3181
-			$res .= "\nWHEN $index=$v THEN $n";
3182
-		}
3183
-
3184
-		return "CASE $res ELSE 0 END ";
3185
-	}
2984
+    /** @var string $query Texte de la requête */
2985
+    public $query = '';
2986
+    /** @var string $prefixe Préfixe des tables */
2987
+    public $prefixe = '';
2988
+    /** @var string $sqlite_version Version de sqlite (2 ou 3) */
2989
+    public $sqlite_version = '';
2990
+
2991
+    /** Pour les corrections à effectuer sur les requêtes : array(code=>'texte') trouvé
2992
+     *
2993
+     * @var array
2994
+     */
2995
+    public $textes = [];
2996
+
2997
+    /**
2998
+     * Constructeur
2999
+     *
3000
+     * @param string $query Requête à préparer
3001
+     * @param string $prefixe Prefixe des tables à utiliser
3002
+     * @param string $sqlite_version Version SQLite (2 ou 3)
3003
+     */
3004
+    public function __construct($query, $prefixe, $sqlite_version) {
3005
+        $this->query = $query;
3006
+        $this->prefixe = $prefixe;
3007
+        $this->sqlite_version = $sqlite_version;
3008
+    }
3009
+
3010
+    /**
3011
+     * Transformer la requete pour SQLite
3012
+     *
3013
+     * Enlève les textes, transforme la requête pour quelle soit
3014
+     * bien interprétée par SQLite, puis remet les textes
3015
+     * la fonction affecte `$this->query`
3016
+     */
3017
+    public function traduire_requete() {
3018
+        //
3019
+        // 1) Protection des textes en les remplacant par des codes
3020
+        //
3021
+        // enlever les 'textes' et initialiser avec
3022
+        list($this->query, $textes) = query_echappe_textes($this->query);
3023
+
3024
+        //
3025
+        // 2) Corrections de la requete
3026
+        //
3027
+        // Correction Create Database
3028
+        // Create Database -> requete ignoree
3029
+        if (strpos($this->query, 'CREATE DATABASE') === 0) {
3030
+            spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3031
+            $this->query = 'SELECT 1';
3032
+        }
3033
+
3034
+        // Correction Insert Ignore
3035
+        // INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3036
+        if (strpos($this->query, 'INSERT IGNORE') === 0) {
3037
+            spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3038
+            $this->query = 'INSERT ' . substr($this->query, '13');
3039
+        }
3040
+
3041
+        // Correction des dates avec INTERVAL
3042
+        // utiliser sql_date_proche() de preference
3043
+        if (strpos($this->query, 'INTERVAL') !== false) {
3044
+            $this->query = preg_replace_callback(
3045
+                '/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U',
3046
+                [&$this, '_remplacerDateParTime'],
3047
+                $this->query
3048
+            );
3049
+        }
3050
+
3051
+        if (strpos($this->query, 'LEFT(') !== false) {
3052
+            $this->query = str_replace('LEFT(', '_LEFT(', $this->query);
3053
+        }
3054
+
3055
+        if (strpos($this->query, 'TIMESTAMPDIFF(') !== false) {
3056
+            $this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims', "TIMESTAMPDIFF('\\1',", $this->query);
3057
+        }
3058
+
3059
+
3060
+        // Correction Using
3061
+        // USING (non reconnu en sqlite2)
3062
+        // problematique car la jointure ne se fait pas du coup.
3063
+        if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3064
+            spip_log(
3065
+                "'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3066
+                'sqlite.' . _LOG_ERREUR
3067
+            );
3068
+            $this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3069
+        }
3070
+
3071
+        // Correction Field
3072
+        // remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
3073
+        if (strpos($this->query, 'FIELD') !== false) {
3074
+            $this->query = preg_replace_callback(
3075
+                '/FIELD\s*\(([^\)]*)\)/',
3076
+                [&$this, '_remplacerFieldParCase'],
3077
+                $this->query
3078
+            );
3079
+        }
3080
+
3081
+        // Correction des noms de tables FROM
3082
+        // mettre les bons noms de table dans from, update, insert, replace...
3083
+        if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)) {
3084
+            $suite = strstr($this->query, $regs[0]);
3085
+            $this->query = substr($this->query, 0, -strlen($suite));
3086
+        } else {
3087
+            $suite = '';
3088
+        }
3089
+        $pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3090
+        $this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3091
+
3092
+        // Correction zero AS x
3093
+        // pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
3094
+        // n'apprecie pas du tout SELECT 0 as x ... ORDER BY x
3095
+        // il dit que x ne doit pas être un integer dans le order by !
3096
+        // on remplace du coup x par vide() dans ce cas uniquement
3097
+        //
3098
+        // 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}}
3099
+        // mais est-ce encore un soucis pour sqlite en 2021 ? (ie commenter le preg_replace marche très bien en sqlite 3.28)
3100
+        if ((strpos($this->query, '0 AS') !== false)) {
3101
+            // on ne remplace que dans ORDER BY ou GROUP BY
3102
+            if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)) {
3103
+                $suite = strstr($this->query, $regs[0]);
3104
+                $this->query = substr($this->query, 0, -strlen($suite));
3105
+
3106
+                // on cherche les noms des x dans 0 AS x
3107
+                // on remplace dans $suite le nom par vide()
3108
+                preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER);
3109
+                foreach ($matches[1] as $m) {
3110
+                    if (strpos($suite, $m) !== false) {
3111
+                        $suite = preg_replace(",\b$m\b,", 'VIDE()', $suite);
3112
+                    }
3113
+                }
3114
+                $this->query .= $suite;
3115
+            }
3116
+        }
3117
+
3118
+        // Correction possible des divisions entieres
3119
+        // Le standard SQL (lequel? ou?) semble indiquer que
3120
+        // a/b=c doit donner c entier si a et b sont entiers 4/3=1.
3121
+        // C'est ce que retournent effectivement SQL Server et SQLite
3122
+        // Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333...
3123
+        //
3124
+        // On peut forcer la conversion en multipliant par 1.0 avant la division
3125
+        // /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus !
3126
+        // cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228
3127
+        //     http://www.sqlite.org/cvstrac/tktview?tn=3202
3128
+        // (4*1.0/3) n'est pas rendu dans ce cas !
3129
+        # $this->query = str_replace('/','* 1.00 / ',$this->query);
3130
+
3131
+
3132
+        // Correction critere REGEXP, non reconnu en sqlite2
3133
+        if (($this->sqlite_version == 2) && (strpos($this->query, 'REGEXP') !== false)) {
3134
+            $this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query);
3135
+        }
3136
+
3137
+        //
3138
+        // 3) Remise en place des textes d'origine
3139
+        //
3140
+        // Correction Antiquotes et echappements
3141
+        // ` => rien
3142
+        if (strpos($this->query, '`') !== false) {
3143
+            $this->query = str_replace('`', '', $this->query);
3144
+        }
3145
+
3146
+        $this->query = query_reinjecte_textes($this->query, $textes);
3147
+
3148
+        return $this->query;
3149
+    }
3150
+
3151
+
3152
+    /**
3153
+     * Callback pour remplacer `DATE_` / `INTERVAL`
3154
+     * par `DATE ... strtotime`
3155
+     *
3156
+     * @param array $matches Captures
3157
+     * @return string Texte de date compris par SQLite
3158
+     */
3159
+    public function _remplacerDateParTime($matches) {
3160
+        $op = strtoupper($matches[1] == 'ADD') ? '+' : '-';
3161
+
3162
+        return "datetime$matches[2] '$op$matches[3] $matches[4]')";
3163
+    }
3164
+
3165
+    /**
3166
+     * Callback pour remplacer `FIELD(table,i,j,k...)`
3167
+     * par `CASE WHEN table=i THEN n ... ELSE 0 END`
3168
+     *
3169
+     * @param array $matches Captures
3170
+     * @return string Texte de liste ordonnée compris par SQLite
3171
+     */
3172
+    public function _remplacerFieldParCase($matches) {
3173
+        $fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X)
3174
+        $t = explode(',', $fields);
3175
+        $index = array_shift($t);
3176
+
3177
+        $res = '';
3178
+        $n = 0;
3179
+        foreach ($t as $v) {
3180
+            $n++;
3181
+            $res .= "\nWHEN $index=$v THEN $n";
3182
+        }
3183
+
3184
+        return "CASE $res ELSE 0 END ";
3185
+    }
3186 3186
 }
Please login to merge, or discard this patch.
Spacing   +95 added lines, -95 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
 	);
@@ -1710,7 +1710,7 @@  discard block
 block discarded – undo
1710 1710
 	$r = spip_sqlite_query(
1711 1711
 		'SELECT name FROM sqlite_master WHERE'
1712 1712
 		. ' type=\'table\''
1713
-		. ' AND name=' . spip_sqlite_quote($table, 'string')
1713
+		. ' AND name='.spip_sqlite_quote($table, 'string')
1714 1714
 		. ' AND name NOT LIKE \'sqlite_%\'',
1715 1715
 		$serveur,
1716 1716
 		$requeter
@@ -1807,7 +1807,7 @@  discard block
 block discarded – undo
1807 1807
 				// s'il y a une parenthèse fermante dans la clé
1808 1808
 				// ou dans la définition sans qu'il n'y ait une ouverture avant
1809 1809
 				if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1810
-					$fields[$k_precedent] .= ',' . $k . ' ' . $def;
1810
+					$fields[$k_precedent] .= ','.$k.' '.$def;
1811 1811
 					continue;
1812 1812
 				}
1813 1813
 
@@ -1842,13 +1842,13 @@  discard block
 block discarded – undo
1842 1842
 				. 'ORDER BY substr(type,2,1), name';
1843 1843
 			$a = spip_sqlite_query($query, $serveur, $requeter);
1844 1844
 			while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1845
-				$key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1845
+				$key = str_replace($nom_table.'_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1846 1846
 				$keytype = 'KEY';
1847 1847
 				if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1848 1848
 					$keytype = 'UNIQUE KEY';
1849 1849
 				}
1850 1850
 				$colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1851
-				$keys[$keytype . ' ' . $key] = $colonnes;
1851
+				$keys[$keytype.' '.$key] = $colonnes;
1852 1852
 			}
1853 1853
 		}
1854 1854
 	} // c'est une vue, on liste les champs disponibles simplement
@@ -1895,7 +1895,7 @@  discard block
 block discarded – undo
1895 1895
 
1896 1896
 	$set = [];
1897 1897
 	foreach ($champs as $champ => $val) {
1898
-		$set[] = $champ . "=$val";
1898
+		$set[] = $champ."=$val";
1899 1899
 	}
1900 1900
 	if (!empty($set)) {
1901 1901
 		return spip_sqlite_query(
@@ -1948,7 +1948,7 @@  discard block
 block discarded – undo
1948 1948
 
1949 1949
 	$set = [];
1950 1950
 	foreach ($champs as $champ => $val) {
1951
-		$set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1951
+		$set[$champ] = $champ.'='._sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1952 1952
 	}
1953 1953
 
1954 1954
 	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
@@ -1956,7 +1956,7 @@  discard block
 block discarded – undo
1956 1956
 	$maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1957 1957
 	foreach ($maj as $champ => $val) {
1958 1958
 		if (!isset($set[$champ])) {
1959
-			$set[$champ] = $champ . '=' . $val;
1959
+			$set[$champ] = $champ.'='.$val;
1960 1960
 		}
1961 1961
 	}
1962 1962
 
@@ -1985,7 +1985,7 @@  discard block
 block discarded – undo
1985 1985
  */
1986 1986
 function _sqlite_init() {
1987 1987
 	if (!defined('_DIR_DB')) {
1988
-		define('_DIR_DB', _DIR_ETC . 'bases/');
1988
+		define('_DIR_DB', _DIR_ETC.'bases/');
1989 1989
 	}
1990 1990
 	if (!defined('_SQLITE_CHMOD')) {
1991 1991
 		define('_SQLITE_CHMOD', _SPIP_CHMOD);
@@ -2092,9 +2092,9 @@  discard block
 block discarded – undo
2092 2092
 	}
2093 2093
 
2094 2094
 	// echapper les ' en ''
2095
-	spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2095
+	spip_log('Pas de methode ->quote pour echapper', 'sqlite.'._LOG_INFO_IMPORTANTE);
2096 2096
 
2097
-	return ("'" . str_replace("'", "''", $v) . "'");
2097
+	return ("'".str_replace("'", "''", $v)."'");
2098 2098
 }
2099 2099
 
2100 2100
 
@@ -2117,12 +2117,12 @@  discard block
 block discarded – undo
2117 2117
 	$exp = "\n$expression ";
2118 2118
 
2119 2119
 	if (!is_array($v)) {
2120
-		return $exp . $v;
2120
+		return $exp.$v;
2121 2121
 	} else {
2122 2122
 		if (strtoupper($join) === 'AND') {
2123
-			return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2123
+			return $exp.join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2124 2124
 		} else {
2125
-			return $exp . join($join, $v);
2125
+			return $exp.join($join, $v);
2126 2126
 		}
2127 2127
 	}
2128 2128
 }
@@ -2156,17 +2156,17 @@  discard block
 block discarded – undo
2156 2156
 		if (substr($k, -1) == '@') {
2157 2157
 			// c'est une jointure qui se refere au from precedent
2158 2158
 			// pas de virgule
2159
-			$res .= '  ' . $v;
2159
+			$res .= '  '.$v;
2160 2160
 		} else {
2161 2161
 			if (!is_numeric($k)) {
2162 2162
 				$p = strpos($v, ' ');
2163 2163
 				if ($p) {
2164
-					$v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2164
+					$v = substr($v, 0, $p)." AS '$k'".substr($v, $p);
2165 2165
 				} else {
2166 2166
 					$v .= " AS '$k'";
2167 2167
 				}
2168 2168
 			}
2169
-			$res .= ', ' . $v;
2169
+			$res .= ', '.$v;
2170 2170
 		}
2171 2171
 	}
2172 2172
 
@@ -2304,13 +2304,13 @@  discard block
 block discarded – undo
2304 2304
 
2305 2305
 	$def_origine = sql_showtable($table_origine, false, $serveur);
2306 2306
 	if (!$def_origine or !isset($def_origine['field'])) {
2307
-		spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2307
+		spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite'._LOG_ERREUR);
2308 2308
 
2309 2309
 		return false;
2310 2310
 	}
2311 2311
 
2312 2312
 
2313
-	$table_tmp = $table_origine . '_tmp';
2313
+	$table_tmp = $table_origine.'_tmp';
2314 2314
 
2315 2315
 	// 1) creer une table temporaire avec les modifications
2316 2316
 	// - DROP : suppression de la colonne
@@ -2397,7 +2397,7 @@  discard block
 block discarded – undo
2397 2397
 		} else {
2398 2398
 			// enlever KEY
2399 2399
 			$k = substr($k, 4);
2400
-			$queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2400
+			$queries[] = "CREATE INDEX $table_destination"."_$k ON $table_destination ($v)";
2401 2401
 		}
2402 2402
 	}
2403 2403
 
@@ -2408,7 +2408,7 @@  discard block
 block discarded – undo
2408 2408
 		foreach ($queries as $q) {
2409 2409
 			if (!spip_sqlite::executer_requete($q, $serveur)) {
2410 2410
 				spip_log('SQLite : ALTER TABLE table :'
2411
-					. " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2411
+					. " Erreur a l'execution de la requete : $q", 'sqlite.'._LOG_ERREUR);
2412 2412
 				spip_sqlite::annuler_transaction($serveur);
2413 2413
 
2414 2414
 				return false;
@@ -2498,27 +2498,27 @@  discard block
 block discarded – undo
2498 2498
 	$enum = '(\s*\([^\)]*\))?';
2499 2499
 
2500 2500
 	$remplace = [
2501
-		'/enum' . $enum . '/is' => 'VARCHAR(255)',
2501
+		'/enum'.$enum.'/is' => 'VARCHAR(255)',
2502 2502
 		'/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2503 2503
 		'/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2504 2504
 		'/auto_increment/is' => '',
2505 2505
 		'/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2506 2506
 		'/(timestamp .* )ON .*$/is' => '\\1',
2507 2507
 		'/character set \w+/is' => '',
2508
-		'/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2508
+		'/((big|small|medium|tiny)?int(eger)?)'.$num.'\s*unsigned/is' => '\\1 UNSIGNED',
2509 2509
 		'/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2510
-		'/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2510
+		'/((char|varchar)'.$num.'\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2511 2511
 		'/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2512 2512
 		'/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2513 2513
 	];
2514 2514
 
2515 2515
 	// pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2516 2516
 	$remplace_autocinc = [
2517
-		'/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2517
+		'/(big|small|medium|tiny)?int(eger)?'.$num.'/is' => 'INTEGER'
2518 2518
 	];
2519 2519
 	// pour les int non autoincrement, il faut un DEFAULT
2520 2520
 	$remplace_nonautocinc = [
2521
-		'/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2521
+		'/((big|small|medium|tiny)?int(eger)?'.$num.'\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2522 2522
 	];
2523 2523
 
2524 2524
 	if (is_string($query)) {
@@ -2560,7 +2560,7 @@  discard block
 block discarded – undo
2560 2560
 		return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2561 2561
 	}
2562 2562
 	if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2563
-		return $champ . ' COLLATE NOCASE';
2563
+		return $champ.' COLLATE NOCASE';
2564 2564
 	}
2565 2565
 
2566 2566
 	return $champ;
@@ -2650,14 +2650,14 @@  discard block
 block discarded – undo
2650 2650
 		} else {
2651 2651
 			/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2652 2652
 			$a = spip_sqlite_showtable($nom, $serveur);
2653
-			if (isset($a['key']['KEY ' . $nom])) {
2653
+			if (isset($a['key']['KEY '.$nom])) {
2654 2654
 				return true;
2655 2655
 			}
2656 2656
 		}
2657 2657
 	}
2658 2658
 
2659 2659
 	$temporary = $temporary ? ' TEMPORARY' : '';
2660
-	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2660
+	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query".($keys ? ",$keys" : '').")\n";
2661 2661
 
2662 2662
 	return $q;
2663 2663
 }
@@ -2878,7 +2878,7 @@  discard block
 block discarded – undo
2878 2878
 		$this->serveur = strtolower($serveur);
2879 2879
 
2880 2880
 		if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2881
-			spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2881
+			spip_log('Aucune connexion sqlite (link)', 'sqlite.'._LOG_ERREUR);
2882 2882
 
2883 2883
 			return false;
2884 2884
 		}
@@ -2924,7 +2924,7 @@  discard block
 block discarded – undo
2924 2924
 			try {
2925 2925
 				$r = $this->link->query($query);
2926 2926
 			} catch (\PDOException $e) {
2927
-				spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2927
+				spip_log('PDOException: '.$e->getMessage(), 'sqlite.'._LOG_DEBUG);
2928 2928
 				$r = false;
2929 2929
 			}
2930 2930
 			// sauvegarde de la requete (elle y est deja dans $r->queryString)
@@ -2945,11 +2945,11 @@  discard block
 block discarded – undo
2945 2945
 
2946 2946
 			// loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2947 2947
 			if ($e and $e instanceof \PDOException) {
2948
-				$err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2949
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2948
+				$err = strip_tags($e->getMessage()).' in '.$e->getFile().' line '.$e->getLine();
2949
+				spip_log("$err - ".$query, 'sqlite.'._LOG_ERREUR);
2950 2950
 			} elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2951
-				$err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2952
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2951
+				$err = strip_tags($err['message']).' in '.$err['file'].' line '.$err['line'];
2952
+				spip_log("$err - ".$query, 'sqlite.'._LOG_ERREUR);
2953 2953
 			} else {
2954 2954
 				$err = '';
2955 2955
 			}
@@ -3027,15 +3027,15 @@  discard block
 block discarded – undo
3027 3027
 		// Correction Create Database
3028 3028
 		// Create Database -> requete ignoree
3029 3029
 		if (strpos($this->query, 'CREATE DATABASE') === 0) {
3030
-			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3030
+			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.'._LOG_AVERTISSEMENT);
3031 3031
 			$this->query = 'SELECT 1';
3032 3032
 		}
3033 3033
 
3034 3034
 		// Correction Insert Ignore
3035 3035
 		// INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3036 3036
 		if (strpos($this->query, 'INSERT IGNORE') === 0) {
3037
-			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3038
-			$this->query = 'INSERT ' . substr($this->query, '13');
3037
+			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.'._LOG_DEBUG);
3038
+			$this->query = 'INSERT '.substr($this->query, '13');
3039 3039
 		}
3040 3040
 
3041 3041
 		// Correction des dates avec INTERVAL
@@ -3063,7 +3063,7 @@  discard block
 block discarded – undo
3063 3063
 		if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3064 3064
 			spip_log(
3065 3065
 				"'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3066
-				'sqlite.' . _LOG_ERREUR
3066
+				'sqlite.'._LOG_ERREUR
3067 3067
 			);
3068 3068
 			$this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3069 3069
 		}
@@ -3086,8 +3086,8 @@  discard block
 block discarded – undo
3086 3086
 		} else {
3087 3087
 			$suite = '';
3088 3088
 		}
3089
-		$pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3090
-		$this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3089
+		$pref = ($this->prefixe) ? $this->prefixe.'_' : '';
3090
+		$this->query = preg_replace('/([,\s])spip_/S', '\1'.$pref, $this->query).$suite;
3091 3091
 
3092 3092
 		// Correction zero AS x
3093 3093
 		// pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
Please login to merge, or discard this patch.
ecrire/lang/spip_ja.php 1 patch
Indentation   +656 added lines, -656 removed lines patch added patch discarded remove patch
@@ -4,684 +4,684 @@
 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> MySQLは、データベースを@version@にアップデート出来ませんでした。 
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> MySQLは、データベースを@version@にアップデート出来ませんでした。 
25 25
 データベースのアクセス権に問題があると思われます。プロバイダにお問い合わせく
26 26
 ださい。',
27
-	'alerte_modif_info_concourante' => '<b>警告</b> この情報は他の所で修正されました。現在の情報は:',
28
-	'analyse_xml' => 'XML解析',
29
-	'annuler' => '取り消す',
30
-	'antispam_champ_vide' => '空白のままに残してください。',
31
-	'articles_recents' => '最新の記事',
32
-	'avis_1_erreur_saisie' => 'エラーが1件あり、入力された情報を確認してください。',
33
-	'avis_archive_incorrect' => 'この圧縮ファイルは、SPIP用のファイルではありません。',
34
-	'avis_archive_invalide' => 'この圧縮ファイルは無効です。',
35
-	'avis_attention' => '警戒!',
36
-	'avis_champ_incorrect_type_objet' => 'タイプ@type@のオブジェクトに対して、フィールド名@name@が無効です。',
37
-	'avis_colonne_inexistante' => 'カラム@col@がありません。',
38
-	'avis_erreur' => 'エラー: 下記を見る',
39
-	'avis_erreur_connexion' => '接続エラー',
40
-	'avis_erreur_cookie' => 'クッキーの問題',
41
-	'avis_erreur_fonction_contexte' => '開発のエラーです。この機能は前後関係で呼び出されるべきではありません。',
42
-	'avis_erreur_mysql' => 'SQLエラー',
43
-	'avis_erreur_sauvegarde' => 'バックアップエラー (@type@@id_objet@)!',
44
-	'avis_erreur_visiteur' => '管理エリアへのアクセスエラー',
45
-	'avis_nb_erreurs_saisie' => 'エラーが@nb@件あり、入力された情報を確認してください。',
27
+    'alerte_modif_info_concourante' => '<b>警告</b> この情報は他の所で修正されました。現在の情報は:',
28
+    'analyse_xml' => 'XML解析',
29
+    'annuler' => '取り消す',
30
+    'antispam_champ_vide' => '空白のままに残してください。',
31
+    'articles_recents' => '最新の記事',
32
+    'avis_1_erreur_saisie' => 'エラーが1件あり、入力された情報を確認してください。',
33
+    'avis_archive_incorrect' => 'この圧縮ファイルは、SPIP用のファイルではありません。',
34
+    'avis_archive_invalide' => 'この圧縮ファイルは無効です。',
35
+    'avis_attention' => '警戒!',
36
+    'avis_champ_incorrect_type_objet' => 'タイプ@type@のオブジェクトに対して、フィールド名@name@が無効です。',
37
+    'avis_colonne_inexistante' => 'カラム@col@がありません。',
38
+    'avis_erreur' => 'エラー: 下記を見る',
39
+    'avis_erreur_connexion' => '接続エラー',
40
+    'avis_erreur_cookie' => 'クッキーの問題',
41
+    'avis_erreur_fonction_contexte' => '開発のエラーです。この機能は前後関係で呼び出されるべきではありません。',
42
+    'avis_erreur_mysql' => 'SQLエラー',
43
+    'avis_erreur_sauvegarde' => 'バックアップエラー (@type@@id_objet@)!',
44
+    'avis_erreur_visiteur' => '管理エリアへのアクセスエラー',
45
+    'avis_nb_erreurs_saisie' => 'エラーが@nb@件あり、入力された情報を確認してください。',
46 46
 
47
-	// B
48
-	'barre_a_accent_grave' => 'アクセント記号つきの大文字Aを挿入してください。',
49
-	'barre_aide' => 'ページレイアウトを充実させるために、「ショートカット」を使用してください。',
50
-	'barre_e_accent_aigu' => '鋭いアクセントで大文字Eを挿入してください',
51
-	'barre_eo' => 'OとEの合字の挿入(訳注:主にフランス語で使用)',
52
-	'barre_eo_maj' => 'OとEの合字の大文字を挿入(訳注:主にフランス語で使用)',
53
-	'barre_euro' => '「€」記号を入れてください。',
54
-	'barre_gras' => '太字にする {{ボールド}}',
55
-	'barre_guillemets' => '\\"2重引用符\\"の間の場所',
56
-	'barre_guillemets_simples' => '’一重引用符’の間の場所',
57
-	'barre_intertitre' => '変える {{{subheading}}}',
58
-	'barre_italic' => '{イタリック} にする',
59
-	'barre_lien' => 'ハイパーリンクの差込 [リンク先->http://...]',
60
-	'barre_lien_input' => 'あなたのハイパーリンクの目標を入力してください (あなたはフォームのURLに
47
+    // B
48
+    'barre_a_accent_grave' => 'アクセント記号つきの大文字Aを挿入してください。',
49
+    'barre_aide' => 'ページレイアウトを充実させるために、「ショートカット」を使用してください。',
50
+    'barre_e_accent_aigu' => '鋭いアクセントで大文字Eを挿入してください',
51
+    'barre_eo' => 'OとEの合字の挿入(訳注:主にフランス語で使用)',
52
+    'barre_eo_maj' => 'OとEの合字の大文字を挿入(訳注:主にフランス語で使用)',
53
+    'barre_euro' => '「€」記号を入れてください。',
54
+    'barre_gras' => '太字にする {{ボールド}}',
55
+    'barre_guillemets' => '\\"2重引用符\\"の間の場所',
56
+    'barre_guillemets_simples' => '’一重引用符’の間の場所',
57
+    'barre_intertitre' => '変える {{{subheading}}}',
58
+    'barre_italic' => '{イタリック} にする',
59
+    'barre_lien' => 'ハイパーリンクの差込 [リンク先->http://...]',
60
+    'barre_lien_input' => 'あなたのハイパーリンクの目標を入力してください (あなたはフォームのURLに
61 61
 http://mysite.com、あるいは単純にこのサイトの記事番号を与えてもよいです)。',
62
-	'barre_note' => '変える [[Footnote]]',
63
-	'barre_paragraphe' => '段落を作成する',
64
-	'barre_quote' => '<quote>メッセージへ引用符</quote>',
65
-	'bouton_changer' => '修正する',
66
-	'bouton_chercher' => '検索する',
67
-	'bouton_choisir' => '選択する',
68
-	'bouton_deplacer' => '移動する',
69
-	'bouton_download' => 'ダウンロードする',
70
-	'bouton_enregistrer' => '保存する',
71
-	'bouton_radio_desactiver_messagerie_interne' => '内部のメッセージ交換を停止する',
72
-	'bouton_radio_envoi_annonces' => '編集告知を送信する',
73
-	'bouton_radio_non_envoi_annonces' => '編集告知を送信しない',
74
-	'bouton_radio_non_envoi_liste_nouveautes' => '最新ニュースリストを送信しない',
75
-	'bouton_recharger_page' => 'ページを再読み込む',
76
-	'bouton_telecharger' => 'アップロードする',
77
-	'bouton_upload' => 'アップロードする',
78
-	'bouton_valider' => '確認する',
62
+    'barre_note' => '変える [[Footnote]]',
63
+    'barre_paragraphe' => '段落を作成する',
64
+    'barre_quote' => '<quote>メッセージへ引用符</quote>',
65
+    'bouton_changer' => '修正する',
66
+    'bouton_chercher' => '検索する',
67
+    'bouton_choisir' => '選択する',
68
+    'bouton_deplacer' => '移動する',
69
+    'bouton_download' => 'ダウンロードする',
70
+    'bouton_enregistrer' => '保存する',
71
+    'bouton_radio_desactiver_messagerie_interne' => '内部のメッセージ交換を停止する',
72
+    'bouton_radio_envoi_annonces' => '編集告知を送信する',
73
+    'bouton_radio_non_envoi_annonces' => '編集告知を送信しない',
74
+    'bouton_radio_non_envoi_liste_nouveautes' => '最新ニュースリストを送信しない',
75
+    'bouton_recharger_page' => 'ページを再読み込む',
76
+    'bouton_telecharger' => 'アップロードする',
77
+    'bouton_upload' => 'アップロードする',
78
+    'bouton_valider' => '確認する',
79 79
 
80
-	// C
81
-	'cal_apresmidi' => '午後',
82
-	'cal_jour_entier' => '終日',
83
-	'cal_matin' => '午前',
84
-	'cal_par_jour' => '日めくりカレンダー',
85
-	'cal_par_mois' => '月めくりカレンダー',
86
-	'cal_par_semaine' => '週めくりカレンダー',
87
-	'choix_couleur_interface' => '色',
88
-	'choix_interface' => 'インターフェイスを選択する',
89
-	'colonne' => 'コラム',
90
-	'confirm_changer_statut' => '警戒!記事のステータスの変更をしてもらうように頼みました。続けますか。',
91
-	'correcte' => '正解',
80
+    // C
81
+    'cal_apresmidi' => '午後',
82
+    'cal_jour_entier' => '終日',
83
+    'cal_matin' => '午前',
84
+    'cal_par_jour' => '日めくりカレンダー',
85
+    'cal_par_mois' => '月めくりカレンダー',
86
+    'cal_par_semaine' => '週めくりカレンダー',
87
+    'choix_couleur_interface' => '色',
88
+    'choix_interface' => 'インターフェイスを選択する',
89
+    'colonne' => 'コラム',
90
+    'confirm_changer_statut' => '警戒!記事のステータスの変更をしてもらうように頼みました。続けますか。',
91
+    'correcte' => '正解',
92 92
 
93
-	// D
94
-	'date_aujourdhui' => '今日',
95
-	'date_avant_jc' => '紀元前',
96
-	'date_dans' => '@delai@後',
97
-	'date_de_mois_1' => '@nommois@@j@日',
98
-	'date_de_mois_10' => '@nommois@@j@日',
99
-	'date_de_mois_11' => '@nommois@@j@日',
100
-	'date_de_mois_12' => '@nommois@@j@日',
101
-	'date_de_mois_2' => '@nommois@@j@日',
102
-	'date_de_mois_3' => '@nommois@@j@日',
103
-	'date_de_mois_4' => '@nommois@@j@日',
104
-	'date_de_mois_5' => '@nommois@@j@日',
105
-	'date_de_mois_6' => '@nommois@@j@日',
106
-	'date_de_mois_7' => '@nommois@@j@日',
107
-	'date_de_mois_8' => '@nommois@@j@日',
108
-	'date_de_mois_9' => '@nommois@@j@日',
109
-	'date_demain' => '明日',
110
-	'date_fmt_heures_minutes' => '@h@時@m@分',
111
-	'date_fmt_heures_minutes_court' => '@h@時@m@分',
112
-	'date_fmt_jour' => '@nomjour@ @jour@',
113
-	'date_fmt_jour_heure' => '@jour@の@heure@',
114
-	'date_fmt_jour_heure_debut_fin' => '@jour@に、@heure_debut@より@heure_fin@まで',
115
-	'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@に、@heure_debut@@dtabbr@より@dtend@@heure_fin@@dtabbr@まで',
116
-	'date_fmt_jour_mois' => '@nommois@@jour@日',
117
-	'date_fmt_jour_mois_annee' => '@annee@年@nommois@@jour@日',
118
-	'date_fmt_mois_annee' => '@annee@年@nommois@',
119
-	'date_fmt_nomjour' => '@date@に@nomjour@日',
120
-	'date_fmt_nomjour_date' => '@date@に@nomjour@日',
121
-	'date_fmt_periode' => '@date_debut@より@date_fin@まで',
122
-	'date_fmt_periode_abbr' => '@dtart@@date_debut@@dtabbr@より @dtend@@date_fin@@dtabbr@まで',
123
-	'date_fmt_periode_from' => 'より',
124
-	'date_fmt_periode_to' => 'まで',
125
-	'date_fmt_saison_annee' => '@annee@年の@saison@',
126
-	'date_heures' => '時間',
127
-	'date_hier' => '昨日',
128
-	'date_il_y_a' => '@delai@前',
129
-	'date_jnum1' => '1',
130
-	'date_jnum10' => '10',
131
-	'date_jnum11' => '11',
132
-	'date_jnum12' => '12',
133
-	'date_jnum13' => '13',
134
-	'date_jnum14' => '14',
135
-	'date_jnum15' => '15',
136
-	'date_jnum16' => '16',
137
-	'date_jnum17' => '17',
138
-	'date_jnum18' => '18',
139
-	'date_jnum19' => '19',
140
-	'date_jnum2' => '2',
141
-	'date_jnum20' => '20',
142
-	'date_jnum21' => '21',
143
-	'date_jnum22' => '22',
144
-	'date_jnum23' => '23',
145
-	'date_jnum24' => '24',
146
-	'date_jnum25' => '25',
147
-	'date_jnum26' => '26',
148
-	'date_jnum27' => '27',
149
-	'date_jnum28' => '28',
150
-	'date_jnum29' => '29',
151
-	'date_jnum3' => '3',
152
-	'date_jnum30' => '30',
153
-	'date_jnum31' => '31',
154
-	'date_jnum4' => '4',
155
-	'date_jnum5' => '5',
156
-	'date_jnum6' => '6',
157
-	'date_jnum7' => '7',
158
-	'date_jnum8' => '8',
159
-	'date_jnum9' => '9',
160
-	'date_jour_1' => '日曜日',
161
-	'date_jour_1_abbr' => '日',
162
-	'date_jour_1_initiale' => '日',
163
-	'date_jour_2' => '月曜日',
164
-	'date_jour_2_abbr' => '月',
165
-	'date_jour_2_initiale' => '月',
166
-	'date_jour_3' => '火曜日',
167
-	'date_jour_3_abbr' => '火',
168
-	'date_jour_3_initiale' => '火',
169
-	'date_jour_4' => '水曜日',
170
-	'date_jour_4_abbr' => '水',
171
-	'date_jour_4_initiale' => '水',
172
-	'date_jour_5' => '木曜日',
173
-	'date_jour_5_abbr' => '木',
174
-	'date_jour_5_initiale' => '木',
175
-	'date_jour_6' => '金曜日',
176
-	'date_jour_6_abbr' => '金',
177
-	'date_jour_6_initiale' => '金',
178
-	'date_jour_7' => '土曜日',
179
-	'date_jour_7_abbr' => '土',
180
-	'date_jour_7_initiale' => '土',
181
-	'date_jours' => '日',
182
-	'date_minutes' => '分',
183
-	'date_mois' => 'ヶ月',
184
-	'date_mois_1' => '1月',
185
-	'date_mois_10' => '10月',
186
-	'date_mois_10_abbr' => '10月',
187
-	'date_mois_11' => '11月',
188
-	'date_mois_11_abbr' => '11月',
189
-	'date_mois_12' => '12月',
190
-	'date_mois_12_abbr' => '12月',
191
-	'date_mois_1_abbr' => '1月',
192
-	'date_mois_2' => '2月',
193
-	'date_mois_2_abbr' => '2月',
194
-	'date_mois_3' => '3月',
195
-	'date_mois_3_abbr' => '3月',
196
-	'date_mois_4' => '4月',
197
-	'date_mois_4_abbr' => '4月',
198
-	'date_mois_5' => '5月',
199
-	'date_mois_5_abbr' => '5月',
200
-	'date_mois_6' => '6月',
201
-	'date_mois_6_abbr' => '6月',
202
-	'date_mois_7' => '7月',
203
-	'date_mois_7_abbr' => '7月',
204
-	'date_mois_8' => '8月',
205
-	'date_mois_8_abbr' => '8月',
206
-	'date_mois_9' => '9月',
207
-	'date_mois_9_abbr' => '9月',
208
-	'date_saison_1' => '冬',
209
-	'date_saison_2' => '春',
210
-	'date_saison_3' => '夏',
211
-	'date_saison_4' => '秋',
212
-	'date_secondes' => '秒',
213
-	'date_semaines' => '週',
214
-	'date_un_mois' => '月',
215
-	'date_une_heure' => '時間',
216
-	'date_une_minute' => '分',
217
-	'date_une_seconde' => '秒',
218
-	'date_une_semaine' => '週間',
219
-	'dirs_commencer' => '本インストールを始める前に…',
220
-	'dirs_preliminaire' => 'まず: <b>アクセス権を設定する</b>',
221
-	'dirs_probleme_droits' => 'アクセス権エラー',
222
-	'dirs_repertoires_absents' => '<b>次のフォルダは見つかりませんでした: <ul>@bad_dirs@</ul></b><p>考えられる原因は小文字大文字の扱い方が間違っている。これらのフォルダの小文字大文字が上に表示されているものと一致しているかどうか確認してください。エラーを修正するために、FTPクライアントで、フォルダをリネームした上、出来ることになる。</p>',
223
-	'dirs_repertoires_suivants' => '<b>次のフォルダに書き込む許可がありません: <ul>@bad_dirs@</ul></b><p>エラーを修正するために、FTPクライアントで、これらのフォルダにアクセス権を修正してください。手順はインストールガイドに記述してあります。</p>',
224
-	'double_occurrence' => '二つの@balise@共起',
93
+    // D
94
+    'date_aujourdhui' => '今日',
95
+    'date_avant_jc' => '紀元前',
96
+    'date_dans' => '@delai@後',
97
+    'date_de_mois_1' => '@nommois@@j@日',
98
+    'date_de_mois_10' => '@nommois@@j@日',
99
+    'date_de_mois_11' => '@nommois@@j@日',
100
+    'date_de_mois_12' => '@nommois@@j@日',
101
+    'date_de_mois_2' => '@nommois@@j@日',
102
+    'date_de_mois_3' => '@nommois@@j@日',
103
+    'date_de_mois_4' => '@nommois@@j@日',
104
+    'date_de_mois_5' => '@nommois@@j@日',
105
+    'date_de_mois_6' => '@nommois@@j@日',
106
+    'date_de_mois_7' => '@nommois@@j@日',
107
+    'date_de_mois_8' => '@nommois@@j@日',
108
+    'date_de_mois_9' => '@nommois@@j@日',
109
+    'date_demain' => '明日',
110
+    'date_fmt_heures_minutes' => '@h@時@m@分',
111
+    'date_fmt_heures_minutes_court' => '@h@時@m@分',
112
+    'date_fmt_jour' => '@nomjour@ @jour@',
113
+    'date_fmt_jour_heure' => '@jour@の@heure@',
114
+    'date_fmt_jour_heure_debut_fin' => '@jour@に、@heure_debut@より@heure_fin@まで',
115
+    'date_fmt_jour_heure_debut_fin_abbr' => '@dtstart@@jour@に、@heure_debut@@dtabbr@より@dtend@@heure_fin@@dtabbr@まで',
116
+    'date_fmt_jour_mois' => '@nommois@@jour@日',
117
+    'date_fmt_jour_mois_annee' => '@annee@年@nommois@@jour@日',
118
+    'date_fmt_mois_annee' => '@annee@年@nommois@',
119
+    'date_fmt_nomjour' => '@date@に@nomjour@日',
120
+    'date_fmt_nomjour_date' => '@date@に@nomjour@日',
121
+    'date_fmt_periode' => '@date_debut@より@date_fin@まで',
122
+    'date_fmt_periode_abbr' => '@dtart@@date_debut@@dtabbr@より @dtend@@date_fin@@dtabbr@まで',
123
+    'date_fmt_periode_from' => 'より',
124
+    'date_fmt_periode_to' => 'まで',
125
+    'date_fmt_saison_annee' => '@annee@年の@saison@',
126
+    'date_heures' => '時間',
127
+    'date_hier' => '昨日',
128
+    'date_il_y_a' => '@delai@前',
129
+    'date_jnum1' => '1',
130
+    'date_jnum10' => '10',
131
+    'date_jnum11' => '11',
132
+    'date_jnum12' => '12',
133
+    'date_jnum13' => '13',
134
+    'date_jnum14' => '14',
135
+    'date_jnum15' => '15',
136
+    'date_jnum16' => '16',
137
+    'date_jnum17' => '17',
138
+    'date_jnum18' => '18',
139
+    'date_jnum19' => '19',
140
+    'date_jnum2' => '2',
141
+    'date_jnum20' => '20',
142
+    'date_jnum21' => '21',
143
+    'date_jnum22' => '22',
144
+    'date_jnum23' => '23',
145
+    'date_jnum24' => '24',
146
+    'date_jnum25' => '25',
147
+    'date_jnum26' => '26',
148
+    'date_jnum27' => '27',
149
+    'date_jnum28' => '28',
150
+    'date_jnum29' => '29',
151
+    'date_jnum3' => '3',
152
+    'date_jnum30' => '30',
153
+    'date_jnum31' => '31',
154
+    'date_jnum4' => '4',
155
+    'date_jnum5' => '5',
156
+    'date_jnum6' => '6',
157
+    'date_jnum7' => '7',
158
+    'date_jnum8' => '8',
159
+    'date_jnum9' => '9',
160
+    'date_jour_1' => '日曜日',
161
+    'date_jour_1_abbr' => '日',
162
+    'date_jour_1_initiale' => '日',
163
+    'date_jour_2' => '月曜日',
164
+    'date_jour_2_abbr' => '月',
165
+    'date_jour_2_initiale' => '月',
166
+    'date_jour_3' => '火曜日',
167
+    'date_jour_3_abbr' => '火',
168
+    'date_jour_3_initiale' => '火',
169
+    'date_jour_4' => '水曜日',
170
+    'date_jour_4_abbr' => '水',
171
+    'date_jour_4_initiale' => '水',
172
+    'date_jour_5' => '木曜日',
173
+    'date_jour_5_abbr' => '木',
174
+    'date_jour_5_initiale' => '木',
175
+    'date_jour_6' => '金曜日',
176
+    'date_jour_6_abbr' => '金',
177
+    'date_jour_6_initiale' => '金',
178
+    'date_jour_7' => '土曜日',
179
+    'date_jour_7_abbr' => '土',
180
+    'date_jour_7_initiale' => '土',
181
+    'date_jours' => '日',
182
+    'date_minutes' => '分',
183
+    'date_mois' => 'ヶ月',
184
+    'date_mois_1' => '1月',
185
+    'date_mois_10' => '10月',
186
+    'date_mois_10_abbr' => '10月',
187
+    'date_mois_11' => '11月',
188
+    'date_mois_11_abbr' => '11月',
189
+    'date_mois_12' => '12月',
190
+    'date_mois_12_abbr' => '12月',
191
+    'date_mois_1_abbr' => '1月',
192
+    'date_mois_2' => '2月',
193
+    'date_mois_2_abbr' => '2月',
194
+    'date_mois_3' => '3月',
195
+    'date_mois_3_abbr' => '3月',
196
+    'date_mois_4' => '4月',
197
+    'date_mois_4_abbr' => '4月',
198
+    'date_mois_5' => '5月',
199
+    'date_mois_5_abbr' => '5月',
200
+    'date_mois_6' => '6月',
201
+    'date_mois_6_abbr' => '6月',
202
+    'date_mois_7' => '7月',
203
+    'date_mois_7_abbr' => '7月',
204
+    'date_mois_8' => '8月',
205
+    'date_mois_8_abbr' => '8月',
206
+    'date_mois_9' => '9月',
207
+    'date_mois_9_abbr' => '9月',
208
+    'date_saison_1' => '冬',
209
+    'date_saison_2' => '春',
210
+    'date_saison_3' => '夏',
211
+    'date_saison_4' => '秋',
212
+    'date_secondes' => '秒',
213
+    'date_semaines' => '週',
214
+    'date_un_mois' => '月',
215
+    'date_une_heure' => '時間',
216
+    'date_une_minute' => '分',
217
+    'date_une_seconde' => '秒',
218
+    'date_une_semaine' => '週間',
219
+    'dirs_commencer' => '本インストールを始める前に…',
220
+    'dirs_preliminaire' => 'まず: <b>アクセス権を設定する</b>',
221
+    'dirs_probleme_droits' => 'アクセス権エラー',
222
+    'dirs_repertoires_absents' => '<b>次のフォルダは見つかりませんでした: <ul>@bad_dirs@</ul></b><p>考えられる原因は小文字大文字の扱い方が間違っている。これらのフォルダの小文字大文字が上に表示されているものと一致しているかどうか確認してください。エラーを修正するために、FTPクライアントで、フォルダをリネームした上、出来ることになる。</p>',
223
+    'dirs_repertoires_suivants' => '<b>次のフォルダに書き込む許可がありません: <ul>@bad_dirs@</ul></b><p>エラーを修正するために、FTPクライアントで、これらのフォルダにアクセス権を修正してください。手順はインストールガイドに記述してあります。</p>',
224
+    'double_occurrence' => '二つの@balise@共起',
225 225
 
226
-	// E
227
-	'en_cours' => '処理中',
228
-	'envoi_via_le_site' => 'サイトで送信する',
229
-	'erreur' => 'エラー',
230
-	'erreur_balise_non_fermee' => '最後のタグは閉じられていない。',
231
-	'erreur_technique_ajaxform' => '予期のないエラーが起きて、フォームは送信されていません。やり直してください。',
232
-	'erreur_technique_enregistrement_champs' => '技術的なエラーが起きて、フィルド@champs@が登録されません。',
233
-	'erreur_technique_enregistrement_impossible' => '技術的なエラーが起きて、登録が不可能です。',
234
-	'erreur_texte' => 'エラー',
235
-	'etape' => '階',
226
+    // E
227
+    'en_cours' => '処理中',
228
+    'envoi_via_le_site' => 'サイトで送信する',
229
+    'erreur' => 'エラー',
230
+    'erreur_balise_non_fermee' => '最後のタグは閉じられていない。',
231
+    'erreur_technique_ajaxform' => '予期のないエラーが起きて、フォームは送信されていません。やり直してください。',
232
+    'erreur_technique_enregistrement_champs' => '技術的なエラーが起きて、フィルド@champs@が登録されません。',
233
+    'erreur_technique_enregistrement_impossible' => '技術的なエラーが起きて、登録が不可能です。',
234
+    'erreur_texte' => 'エラー',
235
+    'etape' => '階',
236 236
 
237
-	// F
238
-	'fichier_introuvable' => 'ファイル@fichier@は見つからない。',
239
-	'form_auteur_confirmation' => 'メールアドレスを確認してください。',
240
-	'form_auteur_email_modifie' => 'メールアドレスは変更されました。',
241
-	'form_auteur_envoi_mail_confirmation' => '@email@に確認メールが送信されました。 このメールに記載されているウェブアドレスにアクセスしてから、登録されたメールアドレスを確認してください。',
242
-	'form_auteur_mail_confirmation' => 'こんにちは。メールアドレスを変更してもらうように依頼しました。 新しいメールアドレスを確認するには、下のウェブアドレスに接続する必要があります。 (さもないと御要求は無視になります。):@url@',
243
-	'form_deja_inscrit' => '既に申し込み済みです。',
244
-	'form_email_non_valide' => 'メールアドレスは有効ではありません。',
245
-	'form_forum_access_refuse' => '当サイトにアクセスはもう禁止です。',
246
-	'form_forum_bonjour' => '@nom@、こんにちは!',
247
-	'form_forum_confirmer_email' => 'メールアドレスを確認するには、このリンク@url_confirm@をご覧ください。',
248
-	'form_forum_email_deja_enregistre' => 'メールアドレスは登録済みで、いつものパスワードを使ってください。',
249
-	'form_forum_identifiant_mail' => '新規IDは、メールで送信されました。',
250
-	'form_forum_identifiants' => '個人ID',
251
-	'form_forum_indiquer_nom_email' => 'お名前とEメールアドレスを入力してください。 個人IDをメールですぐに送信します。',
252
-	'form_forum_login' => 'ログインID:',
253
-	'form_forum_message_auto' => '(自動送信メッセージです)',
254
-	'form_forum_pass' => 'パスワード:',
255
-	'form_forum_probleme_mail' => 'メールエラー:IDを送ることが出来ませんでした。',
256
-	'form_forum_voici1' => 'サイトの生活に協力するために、この個人IDを使ってください。"@nom_site_spip@" (@adresse_site@):',
257
-	'form_forum_voici2' => '当サイトに記事を提出するために、この個人IDを使ってください。 "@nom_site_spip@" (@adresse_login@):',
258
-	'form_indiquer_email' => 'メールアドレスを入力して下さい。',
259
-	'form_indiquer_nom' => 'お名前を入力して下さい。',
260
-	'form_indiquer_nom_site' => 'あなたのサイトの名前を入力して下さい。',
261
-	'form_pet_deja_enregistre' => 'このサイトは既に登録済みです。',
262
-	'form_pet_signature_pasprise' => 'あなたの署名は無視されました。',
263
-	'form_prop_confirmer_envoi' => '送信します。',
264
-	'form_prop_description' => '説明/コメント',
265
-	'form_prop_enregistre' => 'ご提案は登録されており、当サイトの管理者による検証した上で公開されます。',
266
-	'form_prop_envoyer' => 'メッセージを送る',
267
-	'form_prop_indiquer_email' => '有効なメールアドレスを入力して下さい。',
268
-	'form_prop_indiquer_nom_site' => 'サイトの名前を入力して下さい。',
269
-	'form_prop_indiquer_sujet' => '題名を入力して下さい。',
270
-	'form_prop_message_envoye' => 'メッセージは送られました。',
271
-	'form_prop_non_enregistre' => 'ご提案は登録されませんでした。',
272
-	'form_prop_sujet' => '題名',
273
-	'form_prop_url_site' => 'サイトのURL',
274
-	'format_date_incorrecte' => '日付か日付書式は正しくない。',
275
-	'format_heure_incorrecte' => '時間か時間書式は正しくない。',
276
-	'forum_non_inscrit' => '未登録かアドレスとパスワードが不合かどちらかです。',
277
-	'forum_par_auteur' => '@auteur@で',
278
-	'forum_titre_erreur' => 'エラー…',
237
+    // F
238
+    'fichier_introuvable' => 'ファイル@fichier@は見つからない。',
239
+    'form_auteur_confirmation' => 'メールアドレスを確認してください。',
240
+    'form_auteur_email_modifie' => 'メールアドレスは変更されました。',
241
+    'form_auteur_envoi_mail_confirmation' => '@email@に確認メールが送信されました。 このメールに記載されているウェブアドレスにアクセスしてから、登録されたメールアドレスを確認してください。',
242
+    'form_auteur_mail_confirmation' => 'こんにちは。メールアドレスを変更してもらうように依頼しました。 新しいメールアドレスを確認するには、下のウェブアドレスに接続する必要があります。 (さもないと御要求は無視になります。):@url@',
243
+    'form_deja_inscrit' => '既に申し込み済みです。',
244
+    'form_email_non_valide' => 'メールアドレスは有効ではありません。',
245
+    'form_forum_access_refuse' => '当サイトにアクセスはもう禁止です。',
246
+    'form_forum_bonjour' => '@nom@、こんにちは!',
247
+    'form_forum_confirmer_email' => 'メールアドレスを確認するには、このリンク@url_confirm@をご覧ください。',
248
+    'form_forum_email_deja_enregistre' => 'メールアドレスは登録済みで、いつものパスワードを使ってください。',
249
+    'form_forum_identifiant_mail' => '新規IDは、メールで送信されました。',
250
+    'form_forum_identifiants' => '個人ID',
251
+    'form_forum_indiquer_nom_email' => 'お名前とEメールアドレスを入力してください。 個人IDをメールですぐに送信します。',
252
+    'form_forum_login' => 'ログインID:',
253
+    'form_forum_message_auto' => '(自動送信メッセージです)',
254
+    'form_forum_pass' => 'パスワード:',
255
+    'form_forum_probleme_mail' => 'メールエラー:IDを送ることが出来ませんでした。',
256
+    'form_forum_voici1' => 'サイトの生活に協力するために、この個人IDを使ってください。"@nom_site_spip@" (@adresse_site@):',
257
+    'form_forum_voici2' => '当サイトに記事を提出するために、この個人IDを使ってください。 "@nom_site_spip@" (@adresse_login@):',
258
+    'form_indiquer_email' => 'メールアドレスを入力して下さい。',
259
+    'form_indiquer_nom' => 'お名前を入力して下さい。',
260
+    'form_indiquer_nom_site' => 'あなたのサイトの名前を入力して下さい。',
261
+    'form_pet_deja_enregistre' => 'このサイトは既に登録済みです。',
262
+    'form_pet_signature_pasprise' => 'あなたの署名は無視されました。',
263
+    'form_prop_confirmer_envoi' => '送信します。',
264
+    'form_prop_description' => '説明/コメント',
265
+    'form_prop_enregistre' => 'ご提案は登録されており、当サイトの管理者による検証した上で公開されます。',
266
+    'form_prop_envoyer' => 'メッセージを送る',
267
+    'form_prop_indiquer_email' => '有効なメールアドレスを入力して下さい。',
268
+    'form_prop_indiquer_nom_site' => 'サイトの名前を入力して下さい。',
269
+    'form_prop_indiquer_sujet' => '題名を入力して下さい。',
270
+    'form_prop_message_envoye' => 'メッセージは送られました。',
271
+    'form_prop_non_enregistre' => 'ご提案は登録されませんでした。',
272
+    'form_prop_sujet' => '題名',
273
+    'form_prop_url_site' => 'サイトのURL',
274
+    'format_date_incorrecte' => '日付か日付書式は正しくない。',
275
+    'format_heure_incorrecte' => '時間か時間書式は正しくない。',
276
+    'forum_non_inscrit' => '未登録かアドレスとパスワードが不合かどちらかです。',
277
+    'forum_par_auteur' => '@auteur@で',
278
+    'forum_titre_erreur' => 'エラー…',
279 279
 
280
-	// I
281
-	'ical_texte_rss_articles' => 'サイト内の記事の「バックエンド」が次のアドレスにあります:',
282
-	'ical_texte_rss_articles2' => 'サイトの各セクションの記事のバックエンドファイルを取得することが出来ます:',
283
-	'ical_texte_rss_breves' => 'さらに、サイト内のニュースを含んでいるファイルがあります。セクション番号を選択することによって、そのセクションだけのニュースを取得できます。',
284
-	'icone_a_suivre' => 'つづき',
285
-	'icone_admin_site' => 'サイトの管理',
286
-	'icone_agenda' => 'カレンダー',
287
-	'icone_aide_ligne' => 'ヘルプ',
288
-	'icone_articles' => '記事',
289
-	'icone_auteurs' => '著者',
290
-	'icone_brouteur' => '素早いブラウジング',
291
-	'icone_configuration_site' => '環境設定',
292
-	'icone_configurer_site' => 'サイトの環境設定',
293
-	'icone_creer_nouvel_auteur' => '新規著者を作成する',
294
-	'icone_creer_rubrique' => '新規セクションを作成する',
295
-	'icone_creer_sous_rubrique' => 'サブセクションを作成する',
296
-	'icone_deconnecter' => 'ログアウト',
297
-	'icone_discussions' => '話題',
298
-	'icone_doc_rubrique' => 'セクション内のファイル',
299
-	'icone_ecrire_article' => '新規記事を書く',
300
-	'icone_edition_site' => '編集',
301
-	'icone_gestion_langues' => '言語管理',
302
-	'icone_informations_personnelles' => '個人情報',
303
-	'icone_interface_complet' => '完全なインターフェース',
304
-	'icone_interface_simple' => 'シンプルなインターフェース',
305
-	'icone_maintenance_site' => 'サイトの整備',
306
-	'icone_messagerie_personnelle' => '個人メッセージング',
307
-	'icone_repartition_debut' => '初めからの配分を表示する',
308
-	'icone_rubriques' => 'セクション',
309
-	'icone_sauver_site' => 'サイトのバックアップ',
310
-	'icone_site_entier' => 'サイトの全体',
311
-	'icone_sites_references' => '参照されたサイト',
312
-	'icone_statistiques' => 'サイトの統計',
313
-	'icone_suivi_activite' => 'サイトへの協力',
314
-	'icone_suivi_actualite' => 'サイトの進化',
315
-	'icone_suivi_pettions' => '請願書の管理',
316
-	'icone_suivi_revisions' => '記事修正の進化',
317
-	'icone_supprimer_document' => 'このドキュメントを削除',
318
-	'icone_supprimer_image' => 'この画像を削除する',
319
-	'icone_tous_articles' => '私のすべての記事',
320
-	'icone_tous_auteur' => 'すべての著者',
321
-	'icone_tous_visiteur' => 'すべての訪問者',
322
-	'icone_visiter_site' => '公開サイトを訪れる',
323
-	'icone_voir_en_ligne' => 'オンラインで見る',
324
-	'img_indisponible' => 'イメージは見つからない',
325
-	'impossible' => '不可能',
326
-	'info_a_suivre' => 'つづき',
327
-	'info_acces_interdit' => 'アクセス禁止',
328
-	'info_acces_refuse' => 'アクセスが拒否されました。',
329
-	'info_action' => 'アクション:@action@',
330
-	'info_administrer_rubriques' => 'このセクションとサブセクションを管理することができます。',
331
-	'info_adresse_non_indiquee' => 'テストをするためのアドレスを指定しませんでした!',
332
-	'info_aide' => 'ヘルプ:',
333
-	'info_ajouter_mot' => 'このキーワードを追加する',
334
-	'info_annonce' => '告知',
335
-	'info_annonces_generales' => '一般告知:',
336
-	'info_article_propose' => '提出済みの記事',
337
-	'info_article_publie' => '公開された記事',
338
-	'info_article_redaction' => '編集中の記事',
339
-	'info_article_refuse' => '拒否された記事',
340
-	'info_article_supprime' => '削除された記事',
341
-	'info_articles' => '記事',
342
-	'info_articles_a_valider' => '確認すべきの記事',
343
-	'info_articles_nb' => '記事@nb@件',
344
-	'info_articles_proposes' => '提出済みの記事',
345
-	'info_articles_un' => '記事1件',
346
-	'info_auteurs_nombre' => '著者:',
347
-	'info_authentification_ftp' => 'FTPによる認証',
348
-	'info_breves_2' => 'ニュース',
349
-	'info_breves_nb' => 'ニュース@nb@件',
350
-	'info_breves_un' => 'ニュース 1 件',
351
-	'info_connexion_refusee' => '接続が拒否されました。',
352
-	'info_contact_developpeur' => '開発者と連絡して下さい。',
353
-	'info_contenance' => '当サイトの内容:',
354
-	'info_contribution' => '掲示板の投稿',
355
-	'info_copyright' => '@spip@は、@lien_gpl@で配布されるフリーソフトです。',
356
-	'info_copyright_doc' => '詳細情報は<a href="@spipnet@">@spipnet_affiche@</a>をご覧ください。',
357
-	'info_copyright_gpl' => 'GPLライセンスのもとで',
358
-	'info_cours_edition' => '編集中の記事', # MODIF
359
-	'info_creer_repertoire' => 'ファイルかフォルダかかを作成してください:',
360
-	'info_creer_repertoire_2' => 'サブフォルダー<b>@repertoire@</b>内、そして',
361
-	'info_creer_vignette' => 'サムネイルの自動制作',
362
-	'info_creerdansrubrique_non_autorise' => 'このセクションでコンテンツを作成するために、アクセス権が足りません。',
363
-	'info_deplier' => '表示する',
364
-	'info_descriptif_nombre' => '記述:',
365
-	'info_description' => '記述:',
366
-	'info_description_2' => '記述:',
367
-	'info_dimension' => 'サイズ:',
368
-	'info_documents_nb' => 'ファイル@nb@件',
369
-	'info_documents_un' => 'ファイル 1 件',
370
-	'info_ecire_message_prive' => 'プライベートメッセージを書く',
371
-	'info_email_invalide' => 'メールアドレスは無効です。',
372
-	'info_en_cours_validation' => '確認すべきの私の記事',
373
-	'info_en_ligne' => 'オンライン中:',
374
-	'info_envoyer_message_prive' => 'この著者にプライベートメッセージを送る',
375
-	'info_erreur_requete' => 'クエリのエラー:',
376
-	'info_erreur_squelette2' => 'テンプレート<b>@fichier@</b> が見つからない',
377
-	'info_erreur_systeme' => 'システムエラー(エラー番号:@errsys@)',
378
-	'info_erreur_systeme2' => 'ハードドライブがいっぱいになったか、データベースが破損している可能性があります。<br/>
280
+    // I
281
+    'ical_texte_rss_articles' => 'サイト内の記事の「バックエンド」が次のアドレスにあります:',
282
+    'ical_texte_rss_articles2' => 'サイトの各セクションの記事のバックエンドファイルを取得することが出来ます:',
283
+    'ical_texte_rss_breves' => 'さらに、サイト内のニュースを含んでいるファイルがあります。セクション番号を選択することによって、そのセクションだけのニュースを取得できます。',
284
+    'icone_a_suivre' => 'つづき',
285
+    'icone_admin_site' => 'サイトの管理',
286
+    'icone_agenda' => 'カレンダー',
287
+    'icone_aide_ligne' => 'ヘルプ',
288
+    'icone_articles' => '記事',
289
+    'icone_auteurs' => '著者',
290
+    'icone_brouteur' => '素早いブラウジング',
291
+    'icone_configuration_site' => '環境設定',
292
+    'icone_configurer_site' => 'サイトの環境設定',
293
+    'icone_creer_nouvel_auteur' => '新規著者を作成する',
294
+    'icone_creer_rubrique' => '新規セクションを作成する',
295
+    'icone_creer_sous_rubrique' => 'サブセクションを作成する',
296
+    'icone_deconnecter' => 'ログアウト',
297
+    'icone_discussions' => '話題',
298
+    'icone_doc_rubrique' => 'セクション内のファイル',
299
+    'icone_ecrire_article' => '新規記事を書く',
300
+    'icone_edition_site' => '編集',
301
+    'icone_gestion_langues' => '言語管理',
302
+    'icone_informations_personnelles' => '個人情報',
303
+    'icone_interface_complet' => '完全なインターフェース',
304
+    'icone_interface_simple' => 'シンプルなインターフェース',
305
+    'icone_maintenance_site' => 'サイトの整備',
306
+    'icone_messagerie_personnelle' => '個人メッセージング',
307
+    'icone_repartition_debut' => '初めからの配分を表示する',
308
+    'icone_rubriques' => 'セクション',
309
+    'icone_sauver_site' => 'サイトのバックアップ',
310
+    'icone_site_entier' => 'サイトの全体',
311
+    'icone_sites_references' => '参照されたサイト',
312
+    'icone_statistiques' => 'サイトの統計',
313
+    'icone_suivi_activite' => 'サイトへの協力',
314
+    'icone_suivi_actualite' => 'サイトの進化',
315
+    'icone_suivi_pettions' => '請願書の管理',
316
+    'icone_suivi_revisions' => '記事修正の進化',
317
+    'icone_supprimer_document' => 'このドキュメントを削除',
318
+    'icone_supprimer_image' => 'この画像を削除する',
319
+    'icone_tous_articles' => '私のすべての記事',
320
+    'icone_tous_auteur' => 'すべての著者',
321
+    'icone_tous_visiteur' => 'すべての訪問者',
322
+    'icone_visiter_site' => '公開サイトを訪れる',
323
+    'icone_voir_en_ligne' => 'オンラインで見る',
324
+    'img_indisponible' => 'イメージは見つからない',
325
+    'impossible' => '不可能',
326
+    'info_a_suivre' => 'つづき',
327
+    'info_acces_interdit' => 'アクセス禁止',
328
+    'info_acces_refuse' => 'アクセスが拒否されました。',
329
+    'info_action' => 'アクション:@action@',
330
+    'info_administrer_rubriques' => 'このセクションとサブセクションを管理することができます。',
331
+    'info_adresse_non_indiquee' => 'テストをするためのアドレスを指定しませんでした!',
332
+    'info_aide' => 'ヘルプ:',
333
+    'info_ajouter_mot' => 'このキーワードを追加する',
334
+    'info_annonce' => '告知',
335
+    'info_annonces_generales' => '一般告知:',
336
+    'info_article_propose' => '提出済みの記事',
337
+    'info_article_publie' => '公開された記事',
338
+    'info_article_redaction' => '編集中の記事',
339
+    'info_article_refuse' => '拒否された記事',
340
+    'info_article_supprime' => '削除された記事',
341
+    'info_articles' => '記事',
342
+    'info_articles_a_valider' => '確認すべきの記事',
343
+    'info_articles_nb' => '記事@nb@件',
344
+    'info_articles_proposes' => '提出済みの記事',
345
+    'info_articles_un' => '記事1件',
346
+    'info_auteurs_nombre' => '著者:',
347
+    'info_authentification_ftp' => 'FTPによる認証',
348
+    'info_breves_2' => 'ニュース',
349
+    'info_breves_nb' => 'ニュース@nb@件',
350
+    'info_breves_un' => 'ニュース 1 件',
351
+    'info_connexion_refusee' => '接続が拒否されました。',
352
+    'info_contact_developpeur' => '開発者と連絡して下さい。',
353
+    'info_contenance' => '当サイトの内容:',
354
+    'info_contribution' => '掲示板の投稿',
355
+    'info_copyright' => '@spip@は、@lien_gpl@で配布されるフリーソフトです。',
356
+    'info_copyright_doc' => '詳細情報は<a href="@spipnet@">@spipnet_affiche@</a>をご覧ください。',
357
+    'info_copyright_gpl' => 'GPLライセンスのもとで',
358
+    'info_cours_edition' => '編集中の記事', # MODIF
359
+    'info_creer_repertoire' => 'ファイルかフォルダかかを作成してください:',
360
+    'info_creer_repertoire_2' => 'サブフォルダー<b>@repertoire@</b>内、そして',
361
+    'info_creer_vignette' => 'サムネイルの自動制作',
362
+    'info_creerdansrubrique_non_autorise' => 'このセクションでコンテンツを作成するために、アクセス権が足りません。',
363
+    'info_deplier' => '表示する',
364
+    'info_descriptif_nombre' => '記述:',
365
+    'info_description' => '記述:',
366
+    'info_description_2' => '記述:',
367
+    'info_dimension' => 'サイズ:',
368
+    'info_documents_nb' => 'ファイル@nb@件',
369
+    'info_documents_un' => 'ファイル 1 件',
370
+    'info_ecire_message_prive' => 'プライベートメッセージを書く',
371
+    'info_email_invalide' => 'メールアドレスは無効です。',
372
+    'info_en_cours_validation' => '確認すべきの私の記事',
373
+    'info_en_ligne' => 'オンライン中:',
374
+    'info_envoyer_message_prive' => 'この著者にプライベートメッセージを送る',
375
+    'info_erreur_requete' => 'クエリのエラー:',
376
+    'info_erreur_squelette2' => 'テンプレート<b>@fichier@</b> が見つからない',
377
+    'info_erreur_systeme' => 'システムエラー(エラー番号:@errsys@)',
378
+    'info_erreur_systeme2' => 'ハードドライブがいっぱいになったか、データベースが破損している可能性があります。<br/>
379 379
 <span style="color:red;"><a href="@script@">データベースを修理する</a>か、プロバイダーに問い合わせてください。</span>',
380
-	'info_fini' => '作業済み!',
381
-	'info_format_image' => 'サムネイルの作成に使用できる画像フォーマット:@gd_formats@。',
382
-	'info_format_non_defini' => '未定義のフォーマット',
383
-	'info_grand_ecran' => '大きく表示する',
384
-	'info_image_aide' => 'ヘルプ',
385
-	'info_image_process_titre' => 'サムネイルの作り方',
386
-	'info_impossible_lire_page' => '<b>エラー!</b>プロキシ経由で<code><html>@test_proxy@</html></code>ページを読むことが出来ませんでした。',
387
-	'info_installation_systeme_publication' => '出版システムインストール…',
388
-	'info_installer_documents' => '@upload@フォルダーにあるすべてのファイルを自動的にインストール出来ます。',
389
-	'info_installer_ftp' => '管理者なら@upload@フォルダーに(FTPで)ファイルを置いておけば、後でここから直接そのファイルを選択できるようになります。',
390
-	'info_installer_images' => 'JPEG、GIF、PNGフォーマットの画像をインストール出来ます。',
391
-	'info_installer_images_dossier' => '@upload@フォルダにインストールしたファイルをここで選択することが出来ます。',
392
-	'info_interface_complete' => '完全なインターフェース',
393
-	'info_interface_simple' => 'シンプルなインターフェース',
394
-	'info_joindre_document_article' => 'この記事に添付が出来るファイルのタイプ:',
395
-	'info_joindre_document_rubrique' => 'このセクションに添付が出来るファイルのタイプ:',
396
-	'info_joindre_documents_article' => 'この記事に添付が出来るファイルのタイプ:',
397
-	'info_l_article' => 'その記事',
398
-	'info_la_breve' => 'そのニュース',
399
-	'info_la_rubrique' => 'そのセクション',
400
-	'info_langue_principale' => 'サイトの主な言語',
401
-	'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ ピクセル',
402
-	'info_les_auteurs_1' => '@les_auteurs@で',
403
-	'info_logo_format_interdit' => '@formats@フォーマットのロゴのみ許可します。',
404
-	'info_logo_max_poids' => 'ロゴは、@maxi@より少ないべきです(このファイルは@actuel@)。',
405
-	'info_mail_fournisseur' => '[email protected]',
406
-	'info_message_2' => 'メッセージ',
407
-	'info_message_supprime' => 'メッセージは削除された',
408
-	'info_messages_nb' => 'メッセージ@nb@件',
409
-	'info_messages_un' => 'メッセージ1件',
410
-	'info_mise_en_ligne' => '公開された日付:',
411
-	'info_modification_parametres_securite' => 'セキュリティ設定の変更する',
412
-	'info_mois_courant' => '今月の間:',
413
-	'info_mot_cle_ajoute' => '次のキーワードが追加された',
414
-	'info_multi_herit' => 'デフォルト言語',
415
-	'info_multi_langues_soulignees' => '<u>下線が引かれている言語は</u> インターフェースが翻訳されています。その言語を選んだら、公開のサイトの多くの要素(日付、形式など)は自動的に翻訳されます。下線が引かれていない言語は、サイトのメイン言語で現れます。',
416
-	'info_multilinguisme' => '多言語',
417
-	'info_nom_non_utilisateurs_connectes' => 'お名前は接続しているユーザーのリストに現れない。',
418
-	'info_nom_utilisateurs_connectes' => 'お名前は接続しているユーザーのリストに現れる。',
419
-	'info_nombre_en_ligne' => '今オンライン:',
420
-	'info_non_resultat' => '「@cherche_mot@」に関する結果はありません。',
421
-	'info_non_utilisation_messagerie' => 'サイトの内部のメッセージ交換を使用していない。',
422
-	'info_nouveau_message' => 'メッセージが1通届いています',
423
-	'info_nouveaux_messages' => 'メッセージが@total_messages@通届いています。',
424
-	'info_numero_abbreviation' => '#',
425
-	'info_obligatoire' => 'この情報は必須です。',
426
-	'info_pense_bete' => 'メモ',
427
-	'info_petit_ecran' => '小さく表示',
428
-	'info_petition_close' => '請願終了',
429
-	'info_pixels' => 'ピクセル',
430
-	'info_plusieurs_mots_trouves' => '「@cherche_mot@」についていくつかのキーワードが見つかりました:',
431
-	'info_portfolio_automatique' => '自動写真集:',
432
-	'info_premier_resultat' => '[@total@件の合計より、結果の、最初の@debut_limit@件]',
433
-	'info_premier_resultat_sur' => '[@debut_limit@ 最初の結果、トータル @total@]',
434
-	'info_propose_1' => '[@nom_site_spip@]提出されました: @titre@',
435
-	'info_propose_2' => '提出された記事',
436
-	'info_propose_3' => '記事「@titre@」は公開のために提出されました。',
437
-	'info_propose_4' => '記事をよく調べて、意見を出してください。',
438
-	'info_propose_5' => '次のURLで、記事の付いた掲示板に移ります:',
439
-	'info_publie_01' => '@connect_nom@は、「@titre@」を確認しました。',
440
-	'info_publie_1' => '公開された[@nom_site_spip@]:「@titre@」です。',
441
-	'info_publie_2' => '公開された記事',
442
-	'info_rechercher' => 'サイト内検索',
443
-	'info_rechercher_02' => '検索:',
444
-	'info_remplacer_vignette' => 'デフォルトサムネイルをカスタムロゴに置き換える:',
445
-	'info_rubriques_nb' => 'セクション@nb@つ',
446
-	'info_rubriques_un' => 'セクション 1 つ',
447
-	'info_sans_titre_2' => '名称未設定',
448
-	'info_selectionner_fichier' => '@upload@フォルダのファイルを選択することが出来ます。',
449
-	'info_selectionner_fichier_2' => 'ファイルを選択する:',
450
-	'info_sites_nb' => 'サイト@nb@件',
451
-	'info_sites_un' => 'サイト1件',
452
-	'info_supprimer_vignette' => 'サムネイルを削除する',
453
-	'info_symbole_bleu' => '<b>青色</b>は、<b>メモ</b>、つまり個人的なメッセージを表します:',
454
-	'info_symbole_jaune' => '<b>黄色</b>は、<b>全著者向きの告知</b>を表します。つまり著者は皆読み、それに管理者は編集も出来ます。',
455
-	'info_symbole_vert' => '<b>緑色</b>は、サイトの<b>その他のユーザー</b>と交換されるメッセージを表します。',
456
-	'info_telecharger_nouveau_logo' => '新規ロゴをアップロードする:',
457
-	'info_telecharger_ordinateur' => '当コンピュータよりアップロードする:',
458
-	'info_tous_resultats_enregistres' => '[すべての結果は登録されます。]',
459
-	'info_tout_afficher' => 'すべてを表示する',
460
-	'info_travaux_texte' => 'このサイトは準備中なので、後ほど来てください。',
461
-	'info_travaux_titre' => '開発中',
462
-	'info_trop_resultat' => '「@cherche_mot@」に関する結果が多すぎて、 検索を改善して下さい。',
463
-	'info_utilisation_messagerie_interne' => '内部メッセージングを使っています。',
464
-	'info_valider_lien' => 'リンクを確認する',
465
-	'info_verifier_image' => '、画像が正しく転送されたことを確認して下さい。',
466
-	'info_vignette_defaut' => 'デフォルトサムネイル',
467
-	'info_vignette_personnalisee' => 'カスタマイズサムネイル',
468
-	'info_visite' => '訪問:',
469
-	'info_vos_rendez_vous' => '今後の約束',
470
-	'infos_vos_pense_bete' => 'メモ',
380
+    'info_fini' => '作業済み!',
381
+    'info_format_image' => 'サムネイルの作成に使用できる画像フォーマット:@gd_formats@。',
382
+    'info_format_non_defini' => '未定義のフォーマット',
383
+    'info_grand_ecran' => '大きく表示する',
384
+    'info_image_aide' => 'ヘルプ',
385
+    'info_image_process_titre' => 'サムネイルの作り方',
386
+    'info_impossible_lire_page' => '<b>エラー!</b>プロキシ経由で<code><html>@test_proxy@</html></code>ページを読むことが出来ませんでした。',
387
+    'info_installation_systeme_publication' => '出版システムインストール…',
388
+    'info_installer_documents' => '@upload@フォルダーにあるすべてのファイルを自動的にインストール出来ます。',
389
+    'info_installer_ftp' => '管理者なら@upload@フォルダーに(FTPで)ファイルを置いておけば、後でここから直接そのファイルを選択できるようになります。',
390
+    'info_installer_images' => 'JPEG、GIF、PNGフォーマットの画像をインストール出来ます。',
391
+    'info_installer_images_dossier' => '@upload@フォルダにインストールしたファイルをここで選択することが出来ます。',
392
+    'info_interface_complete' => '完全なインターフェース',
393
+    'info_interface_simple' => 'シンプルなインターフェース',
394
+    'info_joindre_document_article' => 'この記事に添付が出来るファイルのタイプ:',
395
+    'info_joindre_document_rubrique' => 'このセクションに添付が出来るファイルのタイプ:',
396
+    'info_joindre_documents_article' => 'この記事に添付が出来るファイルのタイプ:',
397
+    'info_l_article' => 'その記事',
398
+    'info_la_breve' => 'そのニュース',
399
+    'info_la_rubrique' => 'そのセクション',
400
+    'info_langue_principale' => 'サイトの主な言語',
401
+    'info_largeur_vignette' => '@largeur_vignette@ × @hauteur_vignette@ ピクセル',
402
+    'info_les_auteurs_1' => '@les_auteurs@で',
403
+    'info_logo_format_interdit' => '@formats@フォーマットのロゴのみ許可します。',
404
+    'info_logo_max_poids' => 'ロゴは、@maxi@より少ないべきです(このファイルは@actuel@)。',
405
+    'info_mail_fournisseur' => '[email protected]',
406
+    'info_message_2' => 'メッセージ',
407
+    'info_message_supprime' => 'メッセージは削除された',
408
+    'info_messages_nb' => 'メッセージ@nb@件',
409
+    'info_messages_un' => 'メッセージ1件',
410
+    'info_mise_en_ligne' => '公開された日付:',
411
+    'info_modification_parametres_securite' => 'セキュリティ設定の変更する',
412
+    'info_mois_courant' => '今月の間:',
413
+    'info_mot_cle_ajoute' => '次のキーワードが追加された',
414
+    'info_multi_herit' => 'デフォルト言語',
415
+    'info_multi_langues_soulignees' => '<u>下線が引かれている言語は</u> インターフェースが翻訳されています。その言語を選んだら、公開のサイトの多くの要素(日付、形式など)は自動的に翻訳されます。下線が引かれていない言語は、サイトのメイン言語で現れます。',
416
+    'info_multilinguisme' => '多言語',
417
+    'info_nom_non_utilisateurs_connectes' => 'お名前は接続しているユーザーのリストに現れない。',
418
+    'info_nom_utilisateurs_connectes' => 'お名前は接続しているユーザーのリストに現れる。',
419
+    'info_nombre_en_ligne' => '今オンライン:',
420
+    'info_non_resultat' => '「@cherche_mot@」に関する結果はありません。',
421
+    'info_non_utilisation_messagerie' => 'サイトの内部のメッセージ交換を使用していない。',
422
+    'info_nouveau_message' => 'メッセージが1通届いています',
423
+    'info_nouveaux_messages' => 'メッセージが@total_messages@通届いています。',
424
+    'info_numero_abbreviation' => '#',
425
+    'info_obligatoire' => 'この情報は必須です。',
426
+    'info_pense_bete' => 'メモ',
427
+    'info_petit_ecran' => '小さく表示',
428
+    'info_petition_close' => '請願終了',
429
+    'info_pixels' => 'ピクセル',
430
+    'info_plusieurs_mots_trouves' => '「@cherche_mot@」についていくつかのキーワードが見つかりました:',
431
+    'info_portfolio_automatique' => '自動写真集:',
432
+    'info_premier_resultat' => '[@total@件の合計より、結果の、最初の@debut_limit@件]',
433
+    'info_premier_resultat_sur' => '[@debut_limit@ 最初の結果、トータル @total@]',
434
+    'info_propose_1' => '[@nom_site_spip@]提出されました: @titre@',
435
+    'info_propose_2' => '提出された記事',
436
+    'info_propose_3' => '記事「@titre@」は公開のために提出されました。',
437
+    'info_propose_4' => '記事をよく調べて、意見を出してください。',
438
+    'info_propose_5' => '次のURLで、記事の付いた掲示板に移ります:',
439
+    'info_publie_01' => '@connect_nom@は、「@titre@」を確認しました。',
440
+    'info_publie_1' => '公開された[@nom_site_spip@]:「@titre@」です。',
441
+    'info_publie_2' => '公開された記事',
442
+    'info_rechercher' => 'サイト内検索',
443
+    'info_rechercher_02' => '検索:',
444
+    'info_remplacer_vignette' => 'デフォルトサムネイルをカスタムロゴに置き換える:',
445
+    'info_rubriques_nb' => 'セクション@nb@つ',
446
+    'info_rubriques_un' => 'セクション 1 つ',
447
+    'info_sans_titre_2' => '名称未設定',
448
+    'info_selectionner_fichier' => '@upload@フォルダのファイルを選択することが出来ます。',
449
+    'info_selectionner_fichier_2' => 'ファイルを選択する:',
450
+    'info_sites_nb' => 'サイト@nb@件',
451
+    'info_sites_un' => 'サイト1件',
452
+    'info_supprimer_vignette' => 'サムネイルを削除する',
453
+    'info_symbole_bleu' => '<b>青色</b>は、<b>メモ</b>、つまり個人的なメッセージを表します:',
454
+    'info_symbole_jaune' => '<b>黄色</b>は、<b>全著者向きの告知</b>を表します。つまり著者は皆読み、それに管理者は編集も出来ます。',
455
+    'info_symbole_vert' => '<b>緑色</b>は、サイトの<b>その他のユーザー</b>と交換されるメッセージを表します。',
456
+    'info_telecharger_nouveau_logo' => '新規ロゴをアップロードする:',
457
+    'info_telecharger_ordinateur' => '当コンピュータよりアップロードする:',
458
+    'info_tous_resultats_enregistres' => '[すべての結果は登録されます。]',
459
+    'info_tout_afficher' => 'すべてを表示する',
460
+    'info_travaux_texte' => 'このサイトは準備中なので、後ほど来てください。',
461
+    'info_travaux_titre' => '開発中',
462
+    'info_trop_resultat' => '「@cherche_mot@」に関する結果が多すぎて、 検索を改善して下さい。',
463
+    'info_utilisation_messagerie_interne' => '内部メッセージングを使っています。',
464
+    'info_valider_lien' => 'リンクを確認する',
465
+    'info_verifier_image' => '、画像が正しく転送されたことを確認して下さい。',
466
+    'info_vignette_defaut' => 'デフォルトサムネイル',
467
+    'info_vignette_personnalisee' => 'カスタマイズサムネイル',
468
+    'info_visite' => '訪問:',
469
+    'info_vos_rendez_vous' => '今後の約束',
470
+    'infos_vos_pense_bete' => 'メモ',
471 471
 
472
-	// L
473
-	'label_ajout_id_rapide' => 'クイック追加',
474
-	'label_poids_fichier' => 'サイズ',
475
-	'lien_afficher_icones_seuls' => 'アイコンのみ表示する',
476
-	'lien_afficher_texte_icones' => 'アイコンとテキスト表示する',
477
-	'lien_afficher_texte_seul' => 'テキストのみ表示する',
478
-	'lien_liberer' => 'リリーズする',
479
-	'lien_liberer_tous' => '全てリリーズする',
480
-	'lien_nouvea_pense_bete' => '新規メモ',
481
-	'lien_nouveau_message' => '新規メッセージ',
482
-	'lien_nouvelle_annonce' => '新規アナウンス',
483
-	'lien_petitions' => '請願書',
484
-	'lien_popularite' => '人気度:@popularite@%',
485
-	'lien_racine_site' => 'サイトのルート',
486
-	'lien_reessayer' => 'やり直す',
487
-	'lien_repondre_message' => 'このメッセージに返信する',
488
-	'lien_supprimer' => '削除する',
489
-	'lien_tout_afficher' => 'すべて表示',
490
-	'lien_visite_site' => 'このサイトを訪問する',
491
-	'lien_visites' => '@visites@訪問',
492
-	'lien_voir_auteur' => 'この著者のページを訪れる',
493
-	'ligne' => '一行',
494
-	'login' => 'ログイン',
495
-	'login_acces_prive' => '管理エリアへアクセスする',
496
-	'login_autre_identifiant' => '他のIDで接続する',
497
-	'login_cookie_accepte' => '(なるべくこのサイトのため)クッキーを許可するように、ブラウザを設定してください。',
498
-	'login_cookie_oblige' => 'このサイト上で安全にログインするには、クッキーを受け入れる必要があります。',
499
-	'login_deconnexion_ok' => 'ログアウト済み',
500
-	'login_erreur_pass' => 'パスワードエラー',
501
-	'login_espace_prive' => '管理エリア',
502
-	'login_identifiant_inconnu' => 'ID、「@login@」は不明です。',
503
-	'login_login' => 'ログインID:',
504
-	'login_login2' => 'ログインID(このサイトに接続するためのID):',
505
-	'login_login_pass_incorrect' => '(ログインID、または、パスワードは一致しません)',
506
-	'login_motpasseoublie' => 'パスワードを忘れましたか?',
507
-	'login_non_securise' => '警告:このフォームは安全ではありません。 パスワードをネット上で傍受される恐れがないように、ブラウザでJavascriptを有効にしてください。',
508
-	'login_nouvelle_tentative' => '新しい試み',
509
-	'login_par_ici' => '登録済みなので… どうぞ…',
510
-	'login_pass2' => 'パスワード:',
511
-	'login_preferez_refuser' => '<b>クッキーを拒絶したければ</b>、(それほど安全でない)別の接続方法を使うことが出来ます:',
512
-	'login_recharger' => 'このページをリフレッシュする',
513
-	'login_rester_identifie' => 'しばらく接続したままにする', # MODIF
514
-	'login_retour_public' => '公開サイトに戻る',
515
-	'login_retour_site' => 'パブリックなサイトへ戻る',
516
-	'login_retoursitepublic' => '公開サイトに戻る',
517
-	'login_sans_cookie' => 'クッキーを拒絶して、ログインする。',
518
-	'login_securise' => '安全ログイン',
519
-	'login_sinscrire' => '申し込む',
520
-	'login_test_navigateur' => 'ブラウザテスト、接続をやり直す',
521
-	'login_verifiez_navigateur' => '(ところが、ブラウザがパスワードを登録しなかったことを確かめて下さい。)',
472
+    // L
473
+    'label_ajout_id_rapide' => 'クイック追加',
474
+    'label_poids_fichier' => 'サイズ',
475
+    'lien_afficher_icones_seuls' => 'アイコンのみ表示する',
476
+    'lien_afficher_texte_icones' => 'アイコンとテキスト表示する',
477
+    'lien_afficher_texte_seul' => 'テキストのみ表示する',
478
+    'lien_liberer' => 'リリーズする',
479
+    'lien_liberer_tous' => '全てリリーズする',
480
+    'lien_nouvea_pense_bete' => '新規メモ',
481
+    'lien_nouveau_message' => '新規メッセージ',
482
+    'lien_nouvelle_annonce' => '新規アナウンス',
483
+    'lien_petitions' => '請願書',
484
+    'lien_popularite' => '人気度:@popularite@%',
485
+    'lien_racine_site' => 'サイトのルート',
486
+    'lien_reessayer' => 'やり直す',
487
+    'lien_repondre_message' => 'このメッセージに返信する',
488
+    'lien_supprimer' => '削除する',
489
+    'lien_tout_afficher' => 'すべて表示',
490
+    'lien_visite_site' => 'このサイトを訪問する',
491
+    'lien_visites' => '@visites@訪問',
492
+    'lien_voir_auteur' => 'この著者のページを訪れる',
493
+    'ligne' => '一行',
494
+    'login' => 'ログイン',
495
+    'login_acces_prive' => '管理エリアへアクセスする',
496
+    'login_autre_identifiant' => '他のIDで接続する',
497
+    'login_cookie_accepte' => '(なるべくこのサイトのため)クッキーを許可するように、ブラウザを設定してください。',
498
+    'login_cookie_oblige' => 'このサイト上で安全にログインするには、クッキーを受け入れる必要があります。',
499
+    'login_deconnexion_ok' => 'ログアウト済み',
500
+    'login_erreur_pass' => 'パスワードエラー',
501
+    'login_espace_prive' => '管理エリア',
502
+    'login_identifiant_inconnu' => 'ID、「@login@」は不明です。',
503
+    'login_login' => 'ログインID:',
504
+    'login_login2' => 'ログインID(このサイトに接続するためのID):',
505
+    'login_login_pass_incorrect' => '(ログインID、または、パスワードは一致しません)',
506
+    'login_motpasseoublie' => 'パスワードを忘れましたか?',
507
+    'login_non_securise' => '警告:このフォームは安全ではありません。 パスワードをネット上で傍受される恐れがないように、ブラウザでJavascriptを有効にしてください。',
508
+    'login_nouvelle_tentative' => '新しい試み',
509
+    'login_par_ici' => '登録済みなので… どうぞ…',
510
+    'login_pass2' => 'パスワード:',
511
+    'login_preferez_refuser' => '<b>クッキーを拒絶したければ</b>、(それほど安全でない)別の接続方法を使うことが出来ます:',
512
+    'login_recharger' => 'このページをリフレッシュする',
513
+    'login_rester_identifie' => 'しばらく接続したままにする', # MODIF
514
+    'login_retour_public' => '公開サイトに戻る',
515
+    'login_retour_site' => 'パブリックなサイトへ戻る',
516
+    'login_retoursitepublic' => '公開サイトに戻る',
517
+    'login_sans_cookie' => 'クッキーを拒絶して、ログインする。',
518
+    'login_securise' => '安全ログイン',
519
+    'login_sinscrire' => '申し込む',
520
+    'login_test_navigateur' => 'ブラウザテスト、接続をやり直す',
521
+    'login_verifiez_navigateur' => '(ところが、ブラウザがパスワードを登録しなかったことを確かめて下さい。)',
522 522
 
523
-	// M
524
-	'masquer_colonne' => 'このコラムを非表示にする',
525
-	'masquer_trad' => '翻訳を非表示にする',
526
-	'message_nouveaux_identifiants_echec' => '新規IDの制作失敗',
527
-	'message_nouveaux_identifiants_echec_envoi' => '新しいログインID送信が出来ませんでした。',
528
-	'message_nouveaux_identifiants_ok' => '新しいログインIDは@email@に送信されました。',
529
-	'module_fichiers_langues' => '言語ファイル',
523
+    // M
524
+    'masquer_colonne' => 'このコラムを非表示にする',
525
+    'masquer_trad' => '翻訳を非表示にする',
526
+    'message_nouveaux_identifiants_echec' => '新規IDの制作失敗',
527
+    'message_nouveaux_identifiants_echec_envoi' => '新しいログインID送信が出来ませんでした。',
528
+    'message_nouveaux_identifiants_ok' => '新しいログインIDは@email@に送信されました。',
529
+    'module_fichiers_langues' => '言語ファイル',
530 530
 
531
-	// N
532
-	'navigateur_pas_redirige' => 'ブラウザがリダイレクトされない場合、ここをクリックして続行してください。',
533
-	'numero' => '番号',
531
+    // N
532
+    'navigateur_pas_redirige' => 'ブラウザがリダイレクトされない場合、ここをクリックして続行してください。',
533
+    'numero' => '番号',
534 534
 
535
-	// O
536
-	'occurence' => '生起',
537
-	'onglet_affacer_base' => 'データベースを削除する',
538
-	'onglet_auteur' => '著者',
539
-	'onglet_contenu_site' => 'そのサイトの内容',
540
-	'onglet_evolution_visite_mod' => '訪問率',
541
-	'onglet_fonctions_avances' => '高度な機能',
542
-	'onglet_informations_personnelles' => '個人情報',
543
-	'onglet_interactivite' => '対話性',
544
-	'onglet_messagerie' => 'メッセージング',
545
-	'onglet_repartition_rubrique' => 'セクションによる配分',
546
-	'onglet_save_restaur_base' => 'データベースバックアップ/復元する',
547
-	'onglet_vider_cache' => 'キャッシュを空白にする',
535
+    // O
536
+    'occurence' => '生起',
537
+    'onglet_affacer_base' => 'データベースを削除する',
538
+    'onglet_auteur' => '著者',
539
+    'onglet_contenu_site' => 'そのサイトの内容',
540
+    'onglet_evolution_visite_mod' => '訪問率',
541
+    'onglet_fonctions_avances' => '高度な機能',
542
+    'onglet_informations_personnelles' => '個人情報',
543
+    'onglet_interactivite' => '対話性',
544
+    'onglet_messagerie' => 'メッセージング',
545
+    'onglet_repartition_rubrique' => 'セクションによる配分',
546
+    'onglet_save_restaur_base' => 'データベースバックアップ/復元する',
547
+    'onglet_vider_cache' => 'キャッシュを空白にする',
548 548
 
549
-	// P
550
-	'pass_choix_pass' => '新しいパスワードを決めてください:',
551
-	'pass_erreur' => 'エラー',
552
-	'pass_erreur_acces_refuse' => '<b>エラー:</b> もはや、このサイトへのアクセスが拒否されました。',
553
-	'pass_erreur_code_inconnu' => '<b>エラー:</b> このコードは、このサイトにアクセスするどの訪問者にも対応していません。',
554
-	'pass_erreur_non_enregistre' => '<b>エラー:</b> アドレス <tt>@email_oubli@</tt> は登録されていません。',
555
-	'pass_erreur_non_valide' => '<b>エラー:</b> そのアドレス<tt>@email_oubli@</tt> は有効ではありません。',
556
-	'pass_erreur_probleme_technique' => '<b>エラー:</b> このメールは、技術的な問題によって送信が出来ませんでした。',
557
-	'pass_espace_prive_bla' => '管理エリアは、登録済みの訪問者に開かれています。登録されたら、記事の閲覧、記事の投稿、フォーラムへの参加が可能になります。',
558
-	'pass_forum_bla' => '登録された訪問者用のフォーラムに介入させてもらうように願いました。',
559
-	'pass_indiquez_cidessous' => '登録されたメールアドレスを下に入力してください。アクセスが再び出来るように、取り扱い説明をメールで送信します。',
560
-	'pass_mail_passcookie' => '(自動メッセージ)サイト@nom_site_spip@(@adresse_site@)へのアクセスを取り戻すように、次のアドレスに行ってください:@sendcookie@。それで新しいパスワードを入力すると再接続ができます。',
561
-	'pass_mot_oublie' => 'パスワードを忘れました。',
562
-	'pass_nouveau_enregistre' => '新しいパスワードが登録されました。',
563
-	'pass_nouveau_pass' => '新規パスワード',
564
-	'pass_ok' => 'オケー',
565
-	'pass_oubli_mot' => 'パスワードは忘れています。',
566
-	'pass_procedure_changer' => 'パスワードを変更するには、アカウントを作成した時のメールアドレスを入力してください。',
567
-	'pass_quitter_fenetre' => 'このウィンドウを閉じる',
568
-	'pass_rappel_login' => 'リマインダー: あなたのID (ログインID) は「@login@」です。',
569
-	'pass_recevoir_mail' => 'パスワードをリセットするために、リンクをメールアドレスに送信されました。',
570
-	'pass_retour_public' => '公開サイトへ戻る',
571
-	'pass_rien_a_faire_ici' => '居るべきではありません。',
572
-	'pass_vousinscrire' => 'サイトに登録する',
573
-	'precedent' => '前',
574
-	'previsualisation' => 'プレビュー',
575
-	'previsualiser' => 'プレビューを表示する',
549
+    // P
550
+    'pass_choix_pass' => '新しいパスワードを決めてください:',
551
+    'pass_erreur' => 'エラー',
552
+    'pass_erreur_acces_refuse' => '<b>エラー:</b> もはや、このサイトへのアクセスが拒否されました。',
553
+    'pass_erreur_code_inconnu' => '<b>エラー:</b> このコードは、このサイトにアクセスするどの訪問者にも対応していません。',
554
+    'pass_erreur_non_enregistre' => '<b>エラー:</b> アドレス <tt>@email_oubli@</tt> は登録されていません。',
555
+    'pass_erreur_non_valide' => '<b>エラー:</b> そのアドレス<tt>@email_oubli@</tt> は有効ではありません。',
556
+    'pass_erreur_probleme_technique' => '<b>エラー:</b> このメールは、技術的な問題によって送信が出来ませんでした。',
557
+    'pass_espace_prive_bla' => '管理エリアは、登録済みの訪問者に開かれています。登録されたら、記事の閲覧、記事の投稿、フォーラムへの参加が可能になります。',
558
+    'pass_forum_bla' => '登録された訪問者用のフォーラムに介入させてもらうように願いました。',
559
+    'pass_indiquez_cidessous' => '登録されたメールアドレスを下に入力してください。アクセスが再び出来るように、取り扱い説明をメールで送信します。',
560
+    'pass_mail_passcookie' => '(自動メッセージ)サイト@nom_site_spip@(@adresse_site@)へのアクセスを取り戻すように、次のアドレスに行ってください:@sendcookie@。それで新しいパスワードを入力すると再接続ができます。',
561
+    'pass_mot_oublie' => 'パスワードを忘れました。',
562
+    'pass_nouveau_enregistre' => '新しいパスワードが登録されました。',
563
+    'pass_nouveau_pass' => '新規パスワード',
564
+    'pass_ok' => 'オケー',
565
+    'pass_oubli_mot' => 'パスワードは忘れています。',
566
+    'pass_procedure_changer' => 'パスワードを変更するには、アカウントを作成した時のメールアドレスを入力してください。',
567
+    'pass_quitter_fenetre' => 'このウィンドウを閉じる',
568
+    'pass_rappel_login' => 'リマインダー: あなたのID (ログインID) は「@login@」です。',
569
+    'pass_recevoir_mail' => 'パスワードをリセットするために、リンクをメールアドレスに送信されました。',
570
+    'pass_retour_public' => '公開サイトへ戻る',
571
+    'pass_rien_a_faire_ici' => '居るべきではありません。',
572
+    'pass_vousinscrire' => 'サイトに登録する',
573
+    'precedent' => '前',
574
+    'previsualisation' => 'プレビュー',
575
+    'previsualiser' => 'プレビューを表示する',
576 576
 
577
-	// R
578
-	'retour' => '戻る',
577
+    // R
578
+    'retour' => '戻る',
579 579
 
580
-	// S
581
-	'spip_conforme_dtd' => 'SPIPはこの文書がDOCTYPEに準拠していると認めます:',
582
-	'squelette' => 'テンプレート',
583
-	'squelette_inclus_ligne' => 'テンプレート、ラインを含む',
584
-	'squelette_ligne' => 'テンプレート、ライン',
585
-	'stats_visites_et_popularite' => '訪問数:@visites@; 人気率:@popularite@',
586
-	'suivant' => '次へ',
580
+    // S
581
+    'spip_conforme_dtd' => 'SPIPはこの文書がDOCTYPEに準拠していると認めます:',
582
+    'squelette' => 'テンプレート',
583
+    'squelette_inclus_ligne' => 'テンプレート、ラインを含む',
584
+    'squelette_ligne' => 'テンプレート、ライン',
585
+    'stats_visites_et_popularite' => '訪問数:@visites@; 人気率:@popularite@',
586
+    'suivant' => '次へ',
587 587
 
588
-	// T
589
-	'taille_go' => '@taille@ Gb',
590
-	'taille_ko' => '@taille@ kb',
591
-	'taille_mo' => '@taille@ Mb',
592
-	'taille_octets' => '@taille@ バイト',
593
-	'texte_actualite_site_1' => 'インターフェースに精通した時、「',
594
-	'texte_actualite_site_2' => '完全なインターフェース',
595
-	'texte_actualite_site_3' => '」さらに多くの特徴を利用可能にするようにクリックしてください。',
596
-	'texte_creation_automatique_vignette' => 'プレビューサムネイルの自動制作が有効になっています。このフォームを通して画像のフォーマット@gd_formats@であれば、@size_preview@pixelsの最大サイズのサムネイルが添付されます。',
597
-	'texte_documents_associes' => '次のファイルは記事に関連付けられていますが、挿入されていません。 公開サイトのレイアウトによって、添付ドキュメントとして表示されることもあります。',
598
-	'texte_erreur_mise_niveau_base' => 'アップグレード中のデータベースエラー。画像 <b>@fichier@</b> をパスすることが出来なかった(記事@id_article@)。注意を払ってこの参照を残してください。また記事に画像が現れることを確認して下さい。',
599
-	'texte_erreur_visiteur' => '権利のないIDを使用して管理エリアにアクセスしようとしました。',
600
-	'texte_inc_auth_1' => 'ID<b>@auth_login@</b>でログインしていますが、このIDはデータベースにはもはや存在していません。',
601
-	'texte_inc_auth_2' => 'ブラウザを再起動した後、',
602
-	'texte_inc_auth_3' => 'もう一度接続をしてください。',
603
-	'texte_inc_config' => 'このページの変更は、サイトの作動に大きな影響を与えます。 SPIPの操作に慣れるまで設定を変更しないことをお勧めします。<br/>基本的には、これらのページの設定変更を管理者に任せておくことを強くお勧めします。',
604
-	'texte_inc_meta_1' => 'ファイル<code>@file@</ code>の書き込みながら、エラーが発生しました。',
605
-	'texte_inc_meta_2' => 'サイト管理者として、',
606
-	'texte_inc_meta_3' => '<code>@directory@</ code>フォルダの書き込み権を確認してください。',
607
-	'texte_statut_en_cours_redaction' => '編集中',
608
-	'texte_statut_poubelle' => 'ゴミ箱の中',
609
-	'texte_statut_propose_evaluation' => '確認のため提出する',
610
-	'texte_statut_publie' => 'オンラインに公開する',
611
-	'texte_statut_refuse' => '拒否する',
612
-	'titre_ajouter_mot_cle' => 'キーワードを追加する:',
613
-	'titre_cadre_raccourcis' => 'ショートカット:',
614
-	'titre_changer_couleur_interface' => 'インターフェースの色を変える',
615
-	'titre_image_admin_article' => 'この記事を管理することになりました。',
616
-	'titre_image_administrateur' => '管理者',
617
-	'titre_image_aide' => 'この項目に関するのヘルプ',
618
-	'titre_image_auteur_supprime' => '著者は削除された',
619
-	'titre_image_redacteur' => 'アクセス無しの編集者',
620
-	'titre_image_redacteur_02' => '編集者',
621
-	'titre_image_selecteur' => 'リストを表示する',
622
-	'titre_image_visiteur' => '訪問者',
623
-	'titre_joindre_document' => 'ファイルを添付する',
624
-	'titre_mots_cles' => 'キーワード',
625
-	'titre_probleme_technique' => '警告:技術的なエラーが発生して(SQLサーバー)、サイトのこの部分へのアクセスが出来ません。 ご理解いただき、ありがとうございます。',
626
-	'titre_publier_document' => 'このセクションにファイルを公開する',
627
-	'titre_signatures_attente' => '署名確認中',
628
-	'titre_signatures_confirmees' => '署名は確認された',
629
-	'titre_statistiques' => 'サイトの統計',
630
-	'titre_titre_document' => 'ファイルの名称:',
631
-	'todo' => 'するべき事',
632
-	'trad_definir_reference' => '翻訳のために参考記事「@titre@」を選んでください。',
633
-	'trad_reference' => '(参考記事)',
588
+    // T
589
+    'taille_go' => '@taille@ Gb',
590
+    'taille_ko' => '@taille@ kb',
591
+    'taille_mo' => '@taille@ Mb',
592
+    'taille_octets' => '@taille@ バイト',
593
+    'texte_actualite_site_1' => 'インターフェースに精通した時、「',
594
+    'texte_actualite_site_2' => '完全なインターフェース',
595
+    'texte_actualite_site_3' => '」さらに多くの特徴を利用可能にするようにクリックしてください。',
596
+    'texte_creation_automatique_vignette' => 'プレビューサムネイルの自動制作が有効になっています。このフォームを通して画像のフォーマット@gd_formats@であれば、@size_preview@pixelsの最大サイズのサムネイルが添付されます。',
597
+    'texte_documents_associes' => '次のファイルは記事に関連付けられていますが、挿入されていません。 公開サイトのレイアウトによって、添付ドキュメントとして表示されることもあります。',
598
+    'texte_erreur_mise_niveau_base' => 'アップグレード中のデータベースエラー。画像 <b>@fichier@</b> をパスすることが出来なかった(記事@id_article@)。注意を払ってこの参照を残してください。また記事に画像が現れることを確認して下さい。',
599
+    'texte_erreur_visiteur' => '権利のないIDを使用して管理エリアにアクセスしようとしました。',
600
+    'texte_inc_auth_1' => 'ID<b>@auth_login@</b>でログインしていますが、このIDはデータベースにはもはや存在していません。',
601
+    'texte_inc_auth_2' => 'ブラウザを再起動した後、',
602
+    'texte_inc_auth_3' => 'もう一度接続をしてください。',
603
+    'texte_inc_config' => 'このページの変更は、サイトの作動に大きな影響を与えます。 SPIPの操作に慣れるまで設定を変更しないことをお勧めします。<br/>基本的には、これらのページの設定変更を管理者に任せておくことを強くお勧めします。',
604
+    'texte_inc_meta_1' => 'ファイル<code>@file@</ code>の書き込みながら、エラーが発生しました。',
605
+    'texte_inc_meta_2' => 'サイト管理者として、',
606
+    'texte_inc_meta_3' => '<code>@directory@</ code>フォルダの書き込み権を確認してください。',
607
+    'texte_statut_en_cours_redaction' => '編集中',
608
+    'texte_statut_poubelle' => 'ゴミ箱の中',
609
+    'texte_statut_propose_evaluation' => '確認のため提出する',
610
+    'texte_statut_publie' => 'オンラインに公開する',
611
+    'texte_statut_refuse' => '拒否する',
612
+    'titre_ajouter_mot_cle' => 'キーワードを追加する:',
613
+    'titre_cadre_raccourcis' => 'ショートカット:',
614
+    'titre_changer_couleur_interface' => 'インターフェースの色を変える',
615
+    'titre_image_admin_article' => 'この記事を管理することになりました。',
616
+    'titre_image_administrateur' => '管理者',
617
+    'titre_image_aide' => 'この項目に関するのヘルプ',
618
+    'titre_image_auteur_supprime' => '著者は削除された',
619
+    'titre_image_redacteur' => 'アクセス無しの編集者',
620
+    'titre_image_redacteur_02' => '編集者',
621
+    'titre_image_selecteur' => 'リストを表示する',
622
+    'titre_image_visiteur' => '訪問者',
623
+    'titre_joindre_document' => 'ファイルを添付する',
624
+    'titre_mots_cles' => 'キーワード',
625
+    'titre_probleme_technique' => '警告:技術的なエラーが発生して(SQLサーバー)、サイトのこの部分へのアクセスが出来ません。 ご理解いただき、ありがとうございます。',
626
+    'titre_publier_document' => 'このセクションにファイルを公開する',
627
+    'titre_signatures_attente' => '署名確認中',
628
+    'titre_signatures_confirmees' => '署名は確認された',
629
+    'titre_statistiques' => 'サイトの統計',
630
+    'titre_titre_document' => 'ファイルの名称:',
631
+    'todo' => 'するべき事',
632
+    'trad_definir_reference' => '翻訳のために参考記事「@titre@」を選んでください。',
633
+    'trad_reference' => '(参考記事)',
634 634
 
635
-	// U
636
-	'upload_limit' => 'このファイルのサイズは大きすぎます。 <b>アップロード</b>に許可される最大サイズは@max@です。',
635
+    // U
636
+    'upload_limit' => 'このファイルのサイズは大きすぎます。 <b>アップロード</b>に許可される最大サイズは@max@です。',
637 637
 
638
-	// Z
639
-	'zbug_balise_b_aval' => ': Bタグはループ内で遅すぎる',
640
-	'zbug_balise_inexistante' => '@from@エラー:タグ#@balise@は存在していません。',
641
-	'zbug_balise_sans_argument' => '@balise@タグのパラメーターが足りません。',
642
-	'zbug_boucle' => 'ループ',
643
-	'zbug_boucle_recursive_undef' => '@nom@:未定義な回帰的なループ',
644
-	'zbug_calcul' => '制作',
645
-	'zbug_champ_hors_boucle' => 'ループ外の@champ@フィールド',
646
-	'zbug_champ_hors_motif' => 'フィルドは @champ@ 外部の文脈 @motif@',
647
-	'zbug_code' => 'コード',
648
-	'zbug_critere_inconnu' => '未知の基準@critere@',
649
-	'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} on a table without atomic primary key',
650
-	'zbug_distant_interdit' => '外部のデータは禁止',
651
-	'zbug_doublon_table_sans_cle_primaire' => 'Duplicate entries on a table which does not have a simple primary key',
652
-	'zbug_doublon_table_sans_index' => 'Duplicate entries on a table without an index',
653
-	'zbug_erreur_boucle_double' => 'ループ@id@:二重定義',
654
-	'zbug_erreur_boucle_fermant' => '歪んでいる@id@: 欠けている終了タグ',
655
-	'zbug_erreur_boucle_syntaxe' => 'ループ@id@に構文エラー(BOUCLE)',
656
-	'zbug_erreur_compilation' => 'コンパイルエラー',
657
-	'zbug_erreur_execution_page' => 'ページの制作失敗',
658
-	'zbug_erreur_filtre' => 'エラー:未定義のフィルター「<b>@filtre@</b>」',
659
-	'zbug_erreur_meme_parent' => '条件{meme_parent}はループ(FORUMS)または(RUBRIQUES)だけに適用されます。',
660
-	'zbug_erreur_squelette' => 'テンプレート内にエラーがあります。',
661
-	'zbug_hors_compilation' => 'コンパイルされていない',
662
-	'zbug_info_erreur_squelette' => 'サイトのエラー',
663
-	'zbug_inversion_ordre_inexistant' => '実在しない順番の逆転',
664
-	'zbug_pagination_sans_critere' => '基準{pagination}をもたない#PAGINATION。または再帰的ループで使用される基準。',
665
-	'zbug_parametres_inclus_incorrects' => 'インクルードパラメータエラー:@param@',
666
-	'zbug_profile' => '制作時間:@time@',
667
-	'zbug_resultat' => '結果',
668
-	'zbug_serveur_indefini' => '未定義のSQLサーバー',
669
-	'zbug_statistiques' => '期間にソートされたSQLクエリ統計',
670
-	'zbug_table_inconnue' => 'SQLテーブル「@table@」は見つからない',
671
-	'zxml_connus_attributs' => '既知の属性',
672
-	'zxml_de' => 'より',
673
-	'zxml_inconnu_attribut' => '無知の属性',
674
-	'zxml_inconnu_balise' => '無知のタグ',
675
-	'zxml_inconnu_entite' => '無知の項目',
676
-	'zxml_inconnu_id' => '無知のID',
677
-	'zxml_mais_de' => 'より',
678
-	'zxml_non_conforme' => '準拠していない',
679
-	'zxml_non_fils' => 'の子ではない',
680
-	'zxml_nonvide_balise' => '空白のないタグ',
681
-	'zxml_obligatoire_attribut' => '必須なのに不在',
682
-	'zxml_succession_fils_incorrecte' => '不正な子の継承',
683
-	'zxml_survoler' => '正しいのを表すには、カーソルをその上に移動してください。',
684
-	'zxml_valeur_attribut' => '属性の値',
685
-	'zxml_vide_balise' => '空白のタグ',
686
-	'zxml_vu' => '先ほど見た'
638
+    // Z
639
+    'zbug_balise_b_aval' => ': Bタグはループ内で遅すぎる',
640
+    'zbug_balise_inexistante' => '@from@エラー:タグ#@balise@は存在していません。',
641
+    'zbug_balise_sans_argument' => '@balise@タグのパラメーターが足りません。',
642
+    'zbug_boucle' => 'ループ',
643
+    'zbug_boucle_recursive_undef' => '@nom@:未定義な回帰的なループ',
644
+    'zbug_calcul' => '制作',
645
+    'zbug_champ_hors_boucle' => 'ループ外の@champ@フィールド',
646
+    'zbug_champ_hors_motif' => 'フィルドは @champ@ 外部の文脈 @motif@',
647
+    'zbug_code' => 'コード',
648
+    'zbug_critere_inconnu' => '未知の基準@critere@',
649
+    'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} on a table without atomic primary key',
650
+    'zbug_distant_interdit' => '外部のデータは禁止',
651
+    'zbug_doublon_table_sans_cle_primaire' => 'Duplicate entries on a table which does not have a simple primary key',
652
+    'zbug_doublon_table_sans_index' => 'Duplicate entries on a table without an index',
653
+    'zbug_erreur_boucle_double' => 'ループ@id@:二重定義',
654
+    'zbug_erreur_boucle_fermant' => '歪んでいる@id@: 欠けている終了タグ',
655
+    'zbug_erreur_boucle_syntaxe' => 'ループ@id@に構文エラー(BOUCLE)',
656
+    'zbug_erreur_compilation' => 'コンパイルエラー',
657
+    'zbug_erreur_execution_page' => 'ページの制作失敗',
658
+    'zbug_erreur_filtre' => 'エラー:未定義のフィルター「<b>@filtre@</b>」',
659
+    'zbug_erreur_meme_parent' => '条件{meme_parent}はループ(FORUMS)または(RUBRIQUES)だけに適用されます。',
660
+    'zbug_erreur_squelette' => 'テンプレート内にエラーがあります。',
661
+    'zbug_hors_compilation' => 'コンパイルされていない',
662
+    'zbug_info_erreur_squelette' => 'サイトのエラー',
663
+    'zbug_inversion_ordre_inexistant' => '実在しない順番の逆転',
664
+    'zbug_pagination_sans_critere' => '基準{pagination}をもたない#PAGINATION。または再帰的ループで使用される基準。',
665
+    'zbug_parametres_inclus_incorrects' => 'インクルードパラメータエラー:@param@',
666
+    'zbug_profile' => '制作時間:@time@',
667
+    'zbug_resultat' => '結果',
668
+    'zbug_serveur_indefini' => '未定義のSQLサーバー',
669
+    'zbug_statistiques' => '期間にソートされたSQLクエリ統計',
670
+    'zbug_table_inconnue' => 'SQLテーブル「@table@」は見つからない',
671
+    'zxml_connus_attributs' => '既知の属性',
672
+    'zxml_de' => 'より',
673
+    'zxml_inconnu_attribut' => '無知の属性',
674
+    'zxml_inconnu_balise' => '無知のタグ',
675
+    'zxml_inconnu_entite' => '無知の項目',
676
+    'zxml_inconnu_id' => '無知のID',
677
+    'zxml_mais_de' => 'より',
678
+    'zxml_non_conforme' => '準拠していない',
679
+    'zxml_non_fils' => 'の子ではない',
680
+    'zxml_nonvide_balise' => '空白のないタグ',
681
+    'zxml_obligatoire_attribut' => '必須なのに不在',
682
+    'zxml_succession_fils_incorrecte' => '不正な子の継承',
683
+    'zxml_survoler' => '正しいのを表すには、カーソルをその上に移動してください。',
684
+    'zxml_valeur_attribut' => '属性の値',
685
+    'zxml_vide_balise' => '空白のタグ',
686
+    'zxml_vu' => '先ほど見た'
687 687
 );
Please login to merge, or discard this patch.