Completed
Push — master ( 48c2d1...cd3c15 )
by cam
01:45
created
ecrire/action/super_cron.php 1 patch
Indentation   +4 added lines, -4 removed lines patch added patch discarded remove patch
@@ -17,7 +17,7 @@  discard block
 block discarded – undo
17 17
  */
18 18
 
19 19
 if (!defined('_ECRIRE_INC_VERSION')) {
20
-	return;
20
+    return;
21 21
 }
22 22
 
23 23
 /**
@@ -39,7 +39,7 @@  discard block
 block discarded – undo
39 39
  * @uses queue_lancer_url_http_async()
40 40
  */
41 41
 function action_super_cron_dist() {
42
-	$url_cron = generer_url_action('cron');
43
-	include_spip('inc/queue');
44
-	queue_lancer_url_http_async($url_cron);
42
+    $url_cron = generer_url_action('cron');
43
+    include_spip('inc/queue');
44
+    queue_lancer_url_http_async($url_cron);
45 45
 }
Please login to merge, or discard this patch.
ecrire/lang/ecrire_ar.php 1 patch
Indentation   +836 added lines, -836 removed lines patch added patch discarded remove patch
@@ -4,436 +4,436 @@  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
-	'activer_plugin' => 'تفعيل الملحق',
14
-	'affichage' => 'عرض',
15
-	'aide_non_disponible' => 'هذا القسم من التعليمات الفورية غير متوافر حالياً بهذه اللغة.',
16
-	'annuler_recherche' => 'إلغاء البحث',
17
-	'auteur' => 'المؤلف:',
18
-	'avis_acces_interdit' => 'الدخول محظور',
19
-	'avis_acces_interdit_prive' => 'ليس لديكم الأذونات الكافية للدخول الى الصفح <b>@exec@</b>.',
20
-	'avis_article_modifie' => 'تحذير، @nom_auteur_modif@ عمل على هذا المقال منذ @date_diff@ دقيقة',
21
-	'avis_aucun_resultat' => 'لا توجد نتائج.',
22
-	'avis_base_inaccessible' => 'لا يمكن الاتصال بقاعدة بيانات @base@.',
23
-	'avis_chemin_invalide_1' => 'لا يبدو المسار',
24
-	'avis_chemin_invalide_2' => 'الذي حددته صالحاً. الرجاء العودة الى الصفحة السابقة والتأكد من المعلومات المدخلة. والتأكد من المعلومات المدخلة.',
25
-	'avis_connexion_echec_1' => 'فشل الاتصال بقاعدة البيانات.',
26
-	'avis_connexion_echec_2' => 'عد الى الصفحة السابقة وتأكد من صحة المعلومات التي أدخلتها.',
27
-	'avis_connexion_echec_3' => '<b>ملاحظة</b> في العديد من اجهزة الخدمة، عليك <b>بطلب</b> تفعيل الدخول الى قاعدة البيانات قبل التمكن من استخدامها. اذا لم تتمكن من الاتصال بالقاعدة، تأكد من انك نفذت هذه الخطوة.',
28
-	'avis_connexion_erreur_creer_base' => 'لم يتم إنشاء قاعدة البيانات',
29
-	'avis_connexion_erreur_nom_base' => 'لا يجب ان يحتوي اسم القاعدة الا احرف وأرقام',
30
-	'avis_connexion_ldap_echec_1' => 'الاتصال بخادم LDAP فشل.',
31
-	'avis_connexion_ldap_echec_2' => 'عد الى الصفحة السابقة وتأكد من صحة المعلومات التي أدخلتها.',
32
-	'avis_connexion_ldap_echec_3' => 'وإلا، لا تستخدم دعم LDAP لجلب المستخدمين.',
33
-	'avis_deplacement_rubrique' => 'تحذير! يحتوي هذا القسم على @contient_breves@ خبر@scb@: إذا قمت بنقله، الرجاء تأشير هذا الخيار لتأكيد طلبك.',
34
-	'avis_erreur_connexion_mysql' => 'خطأ اتصالي SQL',
35
-	'avis_espace_interdit' => '<b>مجال ممنوع</b> <div>SPIP مثبت مسبقاً.</div>',
36
-	'avis_lecture_noms_bases_1' => 'لم يتمكن المثبت من قراءة أسماء قواعد البيانات المثبتة.',
37
-	'avis_lecture_noms_bases_2' => 'إما لا توجد قاعدة بيانات متوافرة أو تم ايقاف وظيفة عرض قواعد البيانات
12
+    // A
13
+    'activer_plugin' => 'تفعيل الملحق',
14
+    'affichage' => 'عرض',
15
+    'aide_non_disponible' => 'هذا القسم من التعليمات الفورية غير متوافر حالياً بهذه اللغة.',
16
+    'annuler_recherche' => 'إلغاء البحث',
17
+    'auteur' => 'المؤلف:',
18
+    'avis_acces_interdit' => 'الدخول محظور',
19
+    'avis_acces_interdit_prive' => 'ليس لديكم الأذونات الكافية للدخول الى الصفح <b>@exec@</b>.',
20
+    'avis_article_modifie' => 'تحذير، @nom_auteur_modif@ عمل على هذا المقال منذ @date_diff@ دقيقة',
21
+    'avis_aucun_resultat' => 'لا توجد نتائج.',
22
+    'avis_base_inaccessible' => 'لا يمكن الاتصال بقاعدة بيانات @base@.',
23
+    'avis_chemin_invalide_1' => 'لا يبدو المسار',
24
+    'avis_chemin_invalide_2' => 'الذي حددته صالحاً. الرجاء العودة الى الصفحة السابقة والتأكد من المعلومات المدخلة. والتأكد من المعلومات المدخلة.',
25
+    'avis_connexion_echec_1' => 'فشل الاتصال بقاعدة البيانات.',
26
+    'avis_connexion_echec_2' => 'عد الى الصفحة السابقة وتأكد من صحة المعلومات التي أدخلتها.',
27
+    'avis_connexion_echec_3' => '<b>ملاحظة</b> في العديد من اجهزة الخدمة، عليك <b>بطلب</b> تفعيل الدخول الى قاعدة البيانات قبل التمكن من استخدامها. اذا لم تتمكن من الاتصال بالقاعدة، تأكد من انك نفذت هذه الخطوة.',
28
+    'avis_connexion_erreur_creer_base' => 'لم يتم إنشاء قاعدة البيانات',
29
+    'avis_connexion_erreur_nom_base' => 'لا يجب ان يحتوي اسم القاعدة الا احرف وأرقام',
30
+    'avis_connexion_ldap_echec_1' => 'الاتصال بخادم LDAP فشل.',
31
+    'avis_connexion_ldap_echec_2' => 'عد الى الصفحة السابقة وتأكد من صحة المعلومات التي أدخلتها.',
32
+    'avis_connexion_ldap_echec_3' => 'وإلا، لا تستخدم دعم LDAP لجلب المستخدمين.',
33
+    'avis_deplacement_rubrique' => 'تحذير! يحتوي هذا القسم على @contient_breves@ خبر@scb@: إذا قمت بنقله، الرجاء تأشير هذا الخيار لتأكيد طلبك.',
34
+    'avis_erreur_connexion_mysql' => 'خطأ اتصالي SQL',
35
+    'avis_espace_interdit' => '<b>مجال ممنوع</b> <div>SPIP مثبت مسبقاً.</div>',
36
+    'avis_lecture_noms_bases_1' => 'لم يتمكن المثبت من قراءة أسماء قواعد البيانات المثبتة.',
37
+    'avis_lecture_noms_bases_2' => 'إما لا توجد قاعدة بيانات متوافرة أو تم ايقاف وظيفة عرض قواعد البيانات
38 38
 لأسباب أمنية (هكذا الحال لدى العديد من المضيفين).',
39
-	'avis_lecture_noms_bases_3' => 'إذا كانت الحال الثانية صحيحة، قد يكون هناك قاعدة بيانات تحمل إسم معرّف الدخول لديك يمكن استخدامها:',
40
-	'avis_non_acces_page' => 'لا تملك إمتياز الدخول الى هذه الصفحة.',
41
-	'avis_operation_echec' => 'العملية فشلت.',
42
-	'avis_operation_impossible' => 'عملية غير ممكنة',
43
-	'avis_suppression_base' => 'تحذير، حذف البيانات لا يمكن التراجع عنه',
39
+    'avis_lecture_noms_bases_3' => 'إذا كانت الحال الثانية صحيحة، قد يكون هناك قاعدة بيانات تحمل إسم معرّف الدخول لديك يمكن استخدامها:',
40
+    'avis_non_acces_page' => 'لا تملك إمتياز الدخول الى هذه الصفحة.',
41
+    'avis_operation_echec' => 'العملية فشلت.',
42
+    'avis_operation_impossible' => 'عملية غير ممكنة',
43
+    'avis_suppression_base' => 'تحذير، حذف البيانات لا يمكن التراجع عنه',
44 44
 
45
-	// B
46
-	'bouton_acces_ldap' => 'إضافة الوصول الى LDAP',
47
-	'bouton_ajouter' => 'إضافة',
48
-	'bouton_annuler' => 'الغاء',
49
-	'bouton_cache_activer' => 'إعادة تشغيل الذاكرة المخبأة',
50
-	'bouton_cache_desactiver' => 'إيقاف الذاكرة المخبأة مؤقتاً',
51
-	'bouton_demande_publication' => 'طلب نشر هذا المقال',
52
-	'bouton_desactive_tout' => 'تعطيل الكل',
53
-	'bouton_desinstaller' => 'إزالة التثبيت',
54
-	'bouton_effacer_tout' => 'حذف الكل',
55
-	'bouton_envoyer_message' => 'صيغة نهائية : إرسال',
56
-	'bouton_fermer' => 'إغلاق',
57
-	'bouton_mettre_a_jour_base' => 'تحديث قاعدة البيانات',
58
-	'bouton_modifier' => 'تغيير',
59
-	'bouton_radio_afficher' => 'إظهار',
60
-	'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'الظهور في قائمة المحررين المتصلين',
61
-	'bouton_radio_envoi_annonces_adresse' => 'إرسال الإعلانات الى العنوان:',
62
-	'bouton_radio_envoi_liste_nouveautes' => 'إرسال قائمة بالأخبار',
63
-	'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'عدم الظهور في قائمة المحررين',
64
-	'bouton_radio_non_envoi_annonces_editoriales' => 'عدم إرسال أي إعلان تحرير',
65
-	'bouton_redirection' => 'إعادة توجيه',
66
-	'bouton_reinitialiser_aux_valeurs_par_defaut' => 'إعادة التأصيل الى القيم القياسية',
67
-	'bouton_relancer_inscription' => 'إعادة تشغيل التسجيل',
68
-	'bouton_relancer_inscriptions' => 'إعادة تشغيل التسجيلات',
69
-	'bouton_relancer_installation' => 'إعادة إطلاق عملية التثبيت',
70
-	'bouton_reset_password' => 'إنشاء كلمة سر جديدة وإرسالها بالبريد الإلكتروني',
71
-	'bouton_suivant' => 'التالي',
72
-	'bouton_tenter_recuperation' => 'محاولة إصلاح',
73
-	'bouton_test_proxy' => 'اختبار الجهاز الوكيل',
74
-	'bouton_vider_cache' => 'تفريغ ذاكرة كاش',
45
+    // B
46
+    'bouton_acces_ldap' => 'إضافة الوصول الى LDAP',
47
+    'bouton_ajouter' => 'إضافة',
48
+    'bouton_annuler' => 'الغاء',
49
+    'bouton_cache_activer' => 'إعادة تشغيل الذاكرة المخبأة',
50
+    'bouton_cache_desactiver' => 'إيقاف الذاكرة المخبأة مؤقتاً',
51
+    'bouton_demande_publication' => 'طلب نشر هذا المقال',
52
+    'bouton_desactive_tout' => 'تعطيل الكل',
53
+    'bouton_desinstaller' => 'إزالة التثبيت',
54
+    'bouton_effacer_tout' => 'حذف الكل',
55
+    'bouton_envoyer_message' => 'صيغة نهائية : إرسال',
56
+    'bouton_fermer' => 'إغلاق',
57
+    'bouton_mettre_a_jour_base' => 'تحديث قاعدة البيانات',
58
+    'bouton_modifier' => 'تغيير',
59
+    'bouton_radio_afficher' => 'إظهار',
60
+    'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'الظهور في قائمة المحررين المتصلين',
61
+    'bouton_radio_envoi_annonces_adresse' => 'إرسال الإعلانات الى العنوان:',
62
+    'bouton_radio_envoi_liste_nouveautes' => 'إرسال قائمة بالأخبار',
63
+    'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'عدم الظهور في قائمة المحررين',
64
+    'bouton_radio_non_envoi_annonces_editoriales' => 'عدم إرسال أي إعلان تحرير',
65
+    'bouton_redirection' => 'إعادة توجيه',
66
+    'bouton_reinitialiser_aux_valeurs_par_defaut' => 'إعادة التأصيل الى القيم القياسية',
67
+    'bouton_relancer_inscription' => 'إعادة تشغيل التسجيل',
68
+    'bouton_relancer_inscriptions' => 'إعادة تشغيل التسجيلات',
69
+    'bouton_relancer_installation' => 'إعادة إطلاق عملية التثبيت',
70
+    'bouton_reset_password' => 'إنشاء كلمة سر جديدة وإرسالها بالبريد الإلكتروني',
71
+    'bouton_suivant' => 'التالي',
72
+    'bouton_tenter_recuperation' => 'محاولة إصلاح',
73
+    'bouton_test_proxy' => 'اختبار الجهاز الوكيل',
74
+    'bouton_vider_cache' => 'تفريغ ذاكرة كاش',
75 75
 
76
-	// C
77
-	'cache_modifiable_webmestre' => 'يتم تعديل هذه القيمة من قبل مسؤول الموقع.',
78
-	'calendrier_synchro' => 'اذا كنت تستخدم برنامج ادارة مواعيد يتوافق مع <b>iCal</b>، يمكنك ان تطابقه مع نشاط هذا الموقع التحريري.',
79
-	'config_activer_champs' => 'تفعيل الحقول التالية',
80
-	'config_choix_base_sup' => 'تحديد قاعدة في هذا الخادم',
81
-	'config_erreur_base_sup' => 'لا يمكن لنظام SPIP الوصول الى لائحة القواعد المتاحة',
82
-	'config_info_base_sup' => 'اذا كان لديك قواعد بيانات اخرى لاستفسارها عبر SPIP، بواسطة خادم SQL الخاص به او بواسطة خادم اخر، تتيح لك الاستمارة ادناه بالإعلان عن تلك القواعد. اذا تركت حقولاً فارغة سيتم استخدام معرّفات الاتصال بقاعدة البيانات الأساسية.',
83
-	'config_info_base_sup_disponibles' => 'قواعد اضافية يمكن استفسارها:',
84
-	'config_info_enregistree' => 'تم حفظ الإعداد الجديد',
85
-	'config_info_logos' => 'اي عنصر من الموقع يمكن ان يملك رمزاً مثل «رمز الحوم» ',
86
-	'config_info_logos_utiliser' => 'استخدام الرموز',
87
-	'config_info_logos_utiliser_non' => 'عدم استخدام الرموز',
88
-	'config_info_logos_utiliser_survol' => 'استخدام رموز الحوم',
89
-	'config_info_logos_utiliser_survol_non' => 'عدم استخدام رموز الحوم',
90
-	'config_info_redirection' => 'بتفعيل هذا الخيار، يمكنك انشاء مقالات افتراضية تشكل مرجعاً بيسطاً لمقالات منشورة في مواقع اخرى او خارج SPIP.',
91
-	'config_redirection' => 'مقالات افتراضية',
92
-	'config_titre_base_sup' => 'الاعلان عن قاعدة اضافية',
93
-	'config_titre_base_sup_choix' => 'اختيار قاعدة اضافية',
94
-	'connexion_ldap' => 'اتصال:',
95
-	'creer_et_associer_un_auteur' => 'إنشاء مؤلف وربطه',
76
+    // C
77
+    'cache_modifiable_webmestre' => 'يتم تعديل هذه القيمة من قبل مسؤول الموقع.',
78
+    'calendrier_synchro' => 'اذا كنت تستخدم برنامج ادارة مواعيد يتوافق مع <b>iCal</b>، يمكنك ان تطابقه مع نشاط هذا الموقع التحريري.',
79
+    'config_activer_champs' => 'تفعيل الحقول التالية',
80
+    'config_choix_base_sup' => 'تحديد قاعدة في هذا الخادم',
81
+    'config_erreur_base_sup' => 'لا يمكن لنظام SPIP الوصول الى لائحة القواعد المتاحة',
82
+    'config_info_base_sup' => 'اذا كان لديك قواعد بيانات اخرى لاستفسارها عبر SPIP، بواسطة خادم SQL الخاص به او بواسطة خادم اخر، تتيح لك الاستمارة ادناه بالإعلان عن تلك القواعد. اذا تركت حقولاً فارغة سيتم استخدام معرّفات الاتصال بقاعدة البيانات الأساسية.',
83
+    'config_info_base_sup_disponibles' => 'قواعد اضافية يمكن استفسارها:',
84
+    'config_info_enregistree' => 'تم حفظ الإعداد الجديد',
85
+    'config_info_logos' => 'اي عنصر من الموقع يمكن ان يملك رمزاً مثل «رمز الحوم» ',
86
+    'config_info_logos_utiliser' => 'استخدام الرموز',
87
+    'config_info_logos_utiliser_non' => 'عدم استخدام الرموز',
88
+    'config_info_logos_utiliser_survol' => 'استخدام رموز الحوم',
89
+    'config_info_logos_utiliser_survol_non' => 'عدم استخدام رموز الحوم',
90
+    'config_info_redirection' => 'بتفعيل هذا الخيار، يمكنك انشاء مقالات افتراضية تشكل مرجعاً بيسطاً لمقالات منشورة في مواقع اخرى او خارج SPIP.',
91
+    'config_redirection' => 'مقالات افتراضية',
92
+    'config_titre_base_sup' => 'الاعلان عن قاعدة اضافية',
93
+    'config_titre_base_sup_choix' => 'اختيار قاعدة اضافية',
94
+    'connexion_ldap' => 'اتصال:',
95
+    'creer_et_associer_un_auteur' => 'إنشاء مؤلف وربطه',
96 96
 
97
-	// D
98
-	'date_mot_heures' => 'ساعات',
97
+    // D
98
+    'date_mot_heures' => 'ساعات',
99 99
 
100
-	// E
101
-	'ecran_connexion_couleur_principale' => 'اللون الأساسي',
102
-	'ecran_connexion_image_fond' => 'صورة الخلفية',
103
-	'ecran_connexion_image_fond_explication' => 'استخدام صورة (تنسيق JPEG، ١٩٢٠ x ١٠٨٠ نقطة)',
104
-	'ecran_connexion_image_revenir_couleur_defaut' => 'عودة الى اللون الافتراضي',
105
-	'ecran_connexion_titre' => 'شاشة الدخول',
106
-	'ecran_securite' => '+ شاشة الأمان @version@',
107
-	'email' => 'البريد الالكتروني',
108
-	'email_2' => 'البريد الالكتروني :',
109
-	'en_savoir_plus' => 'مزيد من المعلومات',
110
-	'entree_adresse_annuaire' => 'عنوان الدليل',
111
-	'entree_adresse_email' => 'عنوانك الالكتروني',
112
-	'entree_adresse_email_2' => 'عنوان البريد الالكتروني',
113
-	'entree_base_donnee_1' => 'عنوان قاعدة البيانات',
114
-	'entree_base_donnee_2' => '(غالباً ما يتطابق هذا العنوان مع عنوان موقعك وأحياناً قد يكون عبارة «localhost» وأحياناً أخرى يترك فارغاً.)',
115
-	'entree_biographie' => 'سيرتك في بضع كلمات.',
116
-	'entree_chemin_acces' => '<b>إدخال</b> المسار:',
117
-	'entree_cle_pgp' => 'مفتاح PGP لديك',
118
-	'entree_cle_pgp_2' => 'مفتاح PGP',
119
-	'entree_contenu_rubrique' => '(محتوى القسم ببضع كلمات.)',
120
-	'entree_identifiants_connexion' => 'بيانات إتصالك...',
121
-	'entree_identifiants_connexion_2' => 'بيانات الاتصال',
122
-	'entree_informations_connexion_ldap' => 'الرجاء إدخال معلومات الاتصال بدليل LDAP في هذه الاستمارة.
100
+    // E
101
+    'ecran_connexion_couleur_principale' => 'اللون الأساسي',
102
+    'ecran_connexion_image_fond' => 'صورة الخلفية',
103
+    'ecran_connexion_image_fond_explication' => 'استخدام صورة (تنسيق JPEG، ١٩٢٠ x ١٠٨٠ نقطة)',
104
+    'ecran_connexion_image_revenir_couleur_defaut' => 'عودة الى اللون الافتراضي',
105
+    'ecran_connexion_titre' => 'شاشة الدخول',
106
+    'ecran_securite' => '+ شاشة الأمان @version@',
107
+    'email' => 'البريد الالكتروني',
108
+    'email_2' => 'البريد الالكتروني :',
109
+    'en_savoir_plus' => 'مزيد من المعلومات',
110
+    'entree_adresse_annuaire' => 'عنوان الدليل',
111
+    'entree_adresse_email' => 'عنوانك الالكتروني',
112
+    'entree_adresse_email_2' => 'عنوان البريد الالكتروني',
113
+    'entree_base_donnee_1' => 'عنوان قاعدة البيانات',
114
+    'entree_base_donnee_2' => '(غالباً ما يتطابق هذا العنوان مع عنوان موقعك وأحياناً قد يكون عبارة «localhost» وأحياناً أخرى يترك فارغاً.)',
115
+    'entree_biographie' => 'سيرتك في بضع كلمات.',
116
+    'entree_chemin_acces' => '<b>إدخال</b> المسار:',
117
+    'entree_cle_pgp' => 'مفتاح PGP لديك',
118
+    'entree_cle_pgp_2' => 'مفتاح PGP',
119
+    'entree_contenu_rubrique' => '(محتوى القسم ببضع كلمات.)',
120
+    'entree_identifiants_connexion' => 'بيانات إتصالك...',
121
+    'entree_identifiants_connexion_2' => 'بيانات الاتصال',
122
+    'entree_informations_connexion_ldap' => 'الرجاء إدخال معلومات الاتصال بدليل LDAP في هذه الاستمارة.
123 123
 من المفترض أن تكون حصلت على هذه المعلومات من المسؤول عن نظامك
124 124
 أو شبكتك.',
125
-	'entree_infos_perso' => 'عرّف بنفسك :',
126
-	'entree_infos_perso_2' => 'من هو المؤلف؟',
127
-	'entree_interieur_rubrique' => 'في القسم:	',
128
-	'entree_liens_sites' => '<b>وصلة هايبرتكست<b> (مرجع، موقع للزيارة...)',
129
-	'entree_login' => 'معرّف دخولك',
130
-	'entree_login_connexion_1' => 'معرّف الاتصال',
131
-	'entree_login_connexion_2' => '(أحياناً يتطابق مع معرّف دخول بروتوكول FTP  وأحياناً أخرى يترك فارغاً)',
132
-	'entree_mot_passe' => 'كلمة سرك',
133
-	'entree_mot_passe_1' => 'كلمة سر الاتصال',
134
-	'entree_mot_passe_2' => '(أحياناً يتطابق مع كلمة سر بروتوكول FTPوأحياناً أخرى يترك فارغاً)',
135
-	'entree_nom_fichier' => 'الرجاء إدخال اسم الملف @texte_compresse@:',
136
-	'entree_nom_pseudo' => 'الإسم او اللقب',
137
-	'entree_nom_pseudo_1' => '(الإسم او اللقب)',
138
-	'entree_nom_pseudo_2' => 'الاسم او اللقب',
139
-	'entree_nom_site' => 'إسم موقعك',
140
-	'entree_nom_site_2' => 'اسم موقع المؤلف',
141
-	'entree_nouveau_passe' => 'كلمة السر الجديدة',
142
-	'entree_passe_ldap' => 'كلمة السر',
143
-	'entree_port_annuaire' => 'رقم منفذ الدليل',
144
-	'entree_signature' => 'التوقيع',
145
-	'entree_titre_obligatoire' => '<b>العنوان</b> [إجباري]<br />',
146
-	'entree_url' => 'عنوان موقعك',
147
-	'entree_url_2' => 'عنوان الموقع',
148
-	'erreur_connect_deja_existant' => 'يوجد حالياً جهاز خدمة بهذا الاسم',
149
-	'erreur_contenu_suspect' => 'تركيبة النص غير سليمة ',
150
-	'erreur_email_deja_existant' => 'هذا العنوان الالكتروني مسجل مسبقاً',
151
-	'erreur_nom_connect_incorrect' => 'هذا الاسم لجهاز الخدمة غير مسموح به',
152
-	'erreur_plugin_attribut_balise_manquant' => 'الخاصية @attribut@ غير موجودة في علامة @balise@.',
153
-	'erreur_plugin_desinstalation_echouee' => 'فشل الغاء تثبيت الملحق. ولكن يمكنك ايقافه.',
154
-	'erreur_plugin_fichier_absent' => 'ملف غير موجود',
155
-	'erreur_plugin_fichier_def_absent' => 'ملف اعداد غير موجود',
156
-	'erreur_plugin_nom_fonction_interdit' => 'اسم دالة غير مسموح به:',
157
-	'erreur_plugin_nom_manquant' => 'اسم الملحق غير الموجود',
158
-	'erreur_plugin_prefix_manquant' => 'حقل تسمية الملحق غير محدد',
159
-	'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; غير موجود في ملف التعريف',
160
-	'erreur_plugin_version_manquant' => 'اصدار الملحق غير موجود',
161
-	'erreur_type_fichier' => 'نوع ملفات غير صحيح',
125
+    'entree_infos_perso' => 'عرّف بنفسك :',
126
+    'entree_infos_perso_2' => 'من هو المؤلف؟',
127
+    'entree_interieur_rubrique' => 'في القسم:	',
128
+    'entree_liens_sites' => '<b>وصلة هايبرتكست<b> (مرجع، موقع للزيارة...)',
129
+    'entree_login' => 'معرّف دخولك',
130
+    'entree_login_connexion_1' => 'معرّف الاتصال',
131
+    'entree_login_connexion_2' => '(أحياناً يتطابق مع معرّف دخول بروتوكول FTP  وأحياناً أخرى يترك فارغاً)',
132
+    'entree_mot_passe' => 'كلمة سرك',
133
+    'entree_mot_passe_1' => 'كلمة سر الاتصال',
134
+    'entree_mot_passe_2' => '(أحياناً يتطابق مع كلمة سر بروتوكول FTPوأحياناً أخرى يترك فارغاً)',
135
+    'entree_nom_fichier' => 'الرجاء إدخال اسم الملف @texte_compresse@:',
136
+    'entree_nom_pseudo' => 'الإسم او اللقب',
137
+    'entree_nom_pseudo_1' => '(الإسم او اللقب)',
138
+    'entree_nom_pseudo_2' => 'الاسم او اللقب',
139
+    'entree_nom_site' => 'إسم موقعك',
140
+    'entree_nom_site_2' => 'اسم موقع المؤلف',
141
+    'entree_nouveau_passe' => 'كلمة السر الجديدة',
142
+    'entree_passe_ldap' => 'كلمة السر',
143
+    'entree_port_annuaire' => 'رقم منفذ الدليل',
144
+    'entree_signature' => 'التوقيع',
145
+    'entree_titre_obligatoire' => '<b>العنوان</b> [إجباري]<br />',
146
+    'entree_url' => 'عنوان موقعك',
147
+    'entree_url_2' => 'عنوان الموقع',
148
+    'erreur_connect_deja_existant' => 'يوجد حالياً جهاز خدمة بهذا الاسم',
149
+    'erreur_contenu_suspect' => 'تركيبة النص غير سليمة ',
150
+    'erreur_email_deja_existant' => 'هذا العنوان الالكتروني مسجل مسبقاً',
151
+    'erreur_nom_connect_incorrect' => 'هذا الاسم لجهاز الخدمة غير مسموح به',
152
+    'erreur_plugin_attribut_balise_manquant' => 'الخاصية @attribut@ غير موجودة في علامة @balise@.',
153
+    'erreur_plugin_desinstalation_echouee' => 'فشل الغاء تثبيت الملحق. ولكن يمكنك ايقافه.',
154
+    'erreur_plugin_fichier_absent' => 'ملف غير موجود',
155
+    'erreur_plugin_fichier_def_absent' => 'ملف اعداد غير موجود',
156
+    'erreur_plugin_nom_fonction_interdit' => 'اسم دالة غير مسموح به:',
157
+    'erreur_plugin_nom_manquant' => 'اسم الملحق غير الموجود',
158
+    'erreur_plugin_prefix_manquant' => 'حقل تسمية الملحق غير محدد',
159
+    'erreur_plugin_tag_plugin_absent' => '&lt;plugin&gt; غير موجود في ملف التعريف',
160
+    'erreur_plugin_version_manquant' => 'اصدار الملحق غير موجود',
161
+    'erreur_type_fichier' => 'نوع ملفات غير صحيح',
162 162
 
163
-	// H
164
-	'htaccess_a_simuler' => 'تحذير: إن إعداد خادم HTTP لديك يتجاهل ملفات @htaccess@. لتوفير أمان فعّال لموقعك، يجب تغيير الإعداد بخصوص هذه المسألة، او ان تكون قيم الثوابت @constantes@ (التي يمكن تحديدها في ملف mes_options.php) مجلدات من خارج @document_root@.',
165
-	'htaccess_inoperant' => 'htaccess غير فعّال',
163
+    // H
164
+    'htaccess_a_simuler' => 'تحذير: إن إعداد خادم HTTP لديك يتجاهل ملفات @htaccess@. لتوفير أمان فعّال لموقعك، يجب تغيير الإعداد بخصوص هذه المسألة، او ان تكون قيم الثوابت @constantes@ (التي يمكن تحديدها في ملف mes_options.php) مجلدات من خارج @document_root@.',
165
+    'htaccess_inoperant' => 'htaccess غير فعّال',
166 166
 
167
-	// I
168
-	'ical_info1' => 'تقدم هذه الصفحة وسائل عدة للاتصال بنشاط الموقع.',
169
-	'ical_info2' => 'لمزيد من المعلومات حول هذه التقنيات يمكنك زيارة <a href="@spipnet@">توثيق SPIP</a>.',
170
-	'ical_info_calendrier' => 'هناك روزتامتان تحت تصرفك. الاولى هي عبارة عن خريطة للموقع تعلن عن كل المقالات المنشورة. اما الثانية، فتحتوي على اعلانات التحرير اضافة الى احدث رسائلك الشخصية: وهي مخصصة لك يحميها مفتاح شخصي يمكنك تغييره في اي وقت يتجديد كلمة سرك.',
171
-	'ical_methode_http' => 'تحميل',
172
-	'ical_methode_webcal' => 'تزامن (webcal://)',
173
-	'ical_texte_js' => 'يتيح لك سطر جافاسكريبت واحد عرض المقالات الحديثة التي تم نشرها في اي موقع يخصك.',
174
-	'ical_texte_prive' => 'تعلمك هذه الروزنامة، المحصورة بالاستخدام الشخصي، بالنشاط التحريري الخاص في هذا الموقع (المهمات والمواعيد الشخصية والاخبار المقترحة...).',
175
-	'ical_texte_public' => 'تتيح لك هذه الروزنامة متابعة النشاط العمومي في هذا الموقع (المقالات والاخبار المنشورة).',
176
-	'ical_texte_rss' => 'يمكنك ترخيص جديد هذا الموقع من خلال اي معالج ملفات بتنسيق XML/RSS (اي RDF Site Summary). وهو ايضاً التنسيق الذي يسمح لـSPIP بقراءة احدث ما ينشر في مواقع اخرى وذلك باستخدام تنسيق تبادل متوافق (مواقع مرخصة). ',
177
-	'ical_titre_js' => 'جافاسكريبت',
178
-	'ical_titre_mailing' => 'القائمة البريدية',
179
-	'ical_titre_rss' => 'ملفات الترخيص',
180
-	'icone_accueil' => 'الأساسية',
181
-	'icone_activer_cookie' => 'وضع كعكة',
182
-	'icone_activite' => 'نشاط الموقع',
183
-	'icone_admin_plugin' => 'ادارة الملحقات',
184
-	'icone_administration' => 'صيانة',
185
-	'icone_afficher_auteurs' => 'إظهار المؤلفين',
186
-	'icone_afficher_visiteurs' => 'عرض الزوار',
187
-	'icone_arret_discussion' => 'إيقاف المشاركة في هذا النقاش',
188
-	'icone_calendrier' => 'الروزنامة',
189
-	'icone_configuration' => 'إعداد',
190
-	'icone_creer_auteur' => 'إضافة مؤلف جديد وإشراكه في هذا المقال',
191
-	'icone_creer_mot_cle' => 'إنشاء مفتاح جديد وربطه بهذا المقال',
192
-	'icone_creer_rubrique_2' => 'إنشاء قسم جديد',
193
-	'icone_developpement' => 'تطوير',
194
-	'icone_edition' => 'تحرير',
195
-	'icone_ma_langue' => 'لغتي',
196
-	'icone_mes_infos' => 'بياناتي',
197
-	'icone_mes_preferences' => 'تفضيلاتي',
198
-	'icone_modifier_article' => 'تعديل هذا المقال',
199
-	'icone_modifier_rubrique' => 'تعديل هذا القسم',
200
-	'icone_publication' => 'نشر',
201
-	'icone_relancer_signataire' => 'تذكير الموقع',
202
-	'icone_retour' => 'رجوع',
203
-	'icone_retour_article' => 'عودة إلى المقال',
204
-	'icone_squelette' => 'صفحات نموذجية',
205
-	'icone_suivi_publication' => 'متابعة النشر',
206
-	'icone_supprimer_cookie' => 'حذف الكعكة',
207
-	'icone_supprimer_rubrique' => 'حذف هذا القسم',
208
-	'icone_supprimer_signature' => 'حذف هذا التوقيع',
209
-	'icone_valider_signature' => 'التصديق على هذا التوقيع',
210
-	'image_administrer_rubrique' => 'يمكنك إدارة هذا القسم',
211
-	'impossible_modifier_login_auteur' => 'لا يمكن تغيير المعرّف.',
212
-	'impossible_modifier_pass_auteur' => 'لا يمكن تغيير كلمة السر.',
213
-	'info_1_article' => 'مقال واحد',
214
-	'info_1_auteur' => 'مؤلف واحد',
215
-	'info_1_message' => 'رسالة واحدة',
216
-	'info_1_mot_cle' => 'مفتاح واحد',
217
-	'info_1_rubrique' => 'قسم واحد',
218
-	'info_1_visiteur' => 'زائر واحد',
219
-	'info_activer_cookie' => 'يمكنك تفعيل <b>كعكة إدارية</b>، تتيح لك 
167
+    // I
168
+    'ical_info1' => 'تقدم هذه الصفحة وسائل عدة للاتصال بنشاط الموقع.',
169
+    'ical_info2' => 'لمزيد من المعلومات حول هذه التقنيات يمكنك زيارة <a href="@spipnet@">توثيق SPIP</a>.',
170
+    'ical_info_calendrier' => 'هناك روزتامتان تحت تصرفك. الاولى هي عبارة عن خريطة للموقع تعلن عن كل المقالات المنشورة. اما الثانية، فتحتوي على اعلانات التحرير اضافة الى احدث رسائلك الشخصية: وهي مخصصة لك يحميها مفتاح شخصي يمكنك تغييره في اي وقت يتجديد كلمة سرك.',
171
+    'ical_methode_http' => 'تحميل',
172
+    'ical_methode_webcal' => 'تزامن (webcal://)',
173
+    'ical_texte_js' => 'يتيح لك سطر جافاسكريبت واحد عرض المقالات الحديثة التي تم نشرها في اي موقع يخصك.',
174
+    'ical_texte_prive' => 'تعلمك هذه الروزنامة، المحصورة بالاستخدام الشخصي، بالنشاط التحريري الخاص في هذا الموقع (المهمات والمواعيد الشخصية والاخبار المقترحة...).',
175
+    'ical_texte_public' => 'تتيح لك هذه الروزنامة متابعة النشاط العمومي في هذا الموقع (المقالات والاخبار المنشورة).',
176
+    'ical_texte_rss' => 'يمكنك ترخيص جديد هذا الموقع من خلال اي معالج ملفات بتنسيق XML/RSS (اي RDF Site Summary). وهو ايضاً التنسيق الذي يسمح لـSPIP بقراءة احدث ما ينشر في مواقع اخرى وذلك باستخدام تنسيق تبادل متوافق (مواقع مرخصة). ',
177
+    'ical_titre_js' => 'جافاسكريبت',
178
+    'ical_titre_mailing' => 'القائمة البريدية',
179
+    'ical_titre_rss' => 'ملفات الترخيص',
180
+    'icone_accueil' => 'الأساسية',
181
+    'icone_activer_cookie' => 'وضع كعكة',
182
+    'icone_activite' => 'نشاط الموقع',
183
+    'icone_admin_plugin' => 'ادارة الملحقات',
184
+    'icone_administration' => 'صيانة',
185
+    'icone_afficher_auteurs' => 'إظهار المؤلفين',
186
+    'icone_afficher_visiteurs' => 'عرض الزوار',
187
+    'icone_arret_discussion' => 'إيقاف المشاركة في هذا النقاش',
188
+    'icone_calendrier' => 'الروزنامة',
189
+    'icone_configuration' => 'إعداد',
190
+    'icone_creer_auteur' => 'إضافة مؤلف جديد وإشراكه في هذا المقال',
191
+    'icone_creer_mot_cle' => 'إنشاء مفتاح جديد وربطه بهذا المقال',
192
+    'icone_creer_rubrique_2' => 'إنشاء قسم جديد',
193
+    'icone_developpement' => 'تطوير',
194
+    'icone_edition' => 'تحرير',
195
+    'icone_ma_langue' => 'لغتي',
196
+    'icone_mes_infos' => 'بياناتي',
197
+    'icone_mes_preferences' => 'تفضيلاتي',
198
+    'icone_modifier_article' => 'تعديل هذا المقال',
199
+    'icone_modifier_rubrique' => 'تعديل هذا القسم',
200
+    'icone_publication' => 'نشر',
201
+    'icone_relancer_signataire' => 'تذكير الموقع',
202
+    'icone_retour' => 'رجوع',
203
+    'icone_retour_article' => 'عودة إلى المقال',
204
+    'icone_squelette' => 'صفحات نموذجية',
205
+    'icone_suivi_publication' => 'متابعة النشر',
206
+    'icone_supprimer_cookie' => 'حذف الكعكة',
207
+    'icone_supprimer_rubrique' => 'حذف هذا القسم',
208
+    'icone_supprimer_signature' => 'حذف هذا التوقيع',
209
+    'icone_valider_signature' => 'التصديق على هذا التوقيع',
210
+    'image_administrer_rubrique' => 'يمكنك إدارة هذا القسم',
211
+    'impossible_modifier_login_auteur' => 'لا يمكن تغيير المعرّف.',
212
+    'impossible_modifier_pass_auteur' => 'لا يمكن تغيير كلمة السر.',
213
+    'info_1_article' => 'مقال واحد',
214
+    'info_1_auteur' => 'مؤلف واحد',
215
+    'info_1_message' => 'رسالة واحدة',
216
+    'info_1_mot_cle' => 'مفتاح واحد',
217
+    'info_1_rubrique' => 'قسم واحد',
218
+    'info_1_visiteur' => 'زائر واحد',
219
+    'info_activer_cookie' => 'يمكنك تفعيل <b>كعكة إدارية</b>، تتيح لك 
220 220
 التنقل بسهولة بين الموقع العمومي والمجال الخاص.',
221
-	'info_activer_menu_developpement' => 'عرض قائمة التطوير',
222
-	'info_admin_etre_webmestre' => 'إعطائي حقوق المشرف',
223
-	'info_admin_je_suis_webmestre' => 'أنا <b>مشرف</b>',
224
-	'info_admin_statuer_webmestre' => 'اعطاء حقوق مسؤول الموقع لهذا المدير',
225
-	'info_admin_webmestre' => 'هذا المدير هو <b>مسؤول الموقع</b>',
226
-	'info_administrateur' => 'مدير',
227
-	'info_administrateur_1' => 'مدير',
228
-	'info_administrateur_2' => 'الموقع (إستخدمه بحذر)',
229
-	'info_administrateur_site_01' => 'اذا كنت احد مدراء هذا الموقع، الرجاء',
230
-	'info_administrateur_site_02' => 'نقر هذه الوصلة',
231
-	'info_administrateurs' => 'مدراء',
232
-	'info_administrer_rubrique' => 'يمكنك إدارة هذا القسم',
233
-	'info_adresse' => 'الى العنوان:',
234
-	'info_adresse_desinscription' => 'عنوان حذف التسجيل :',
235
-	'info_adresse_url' => 'عنوان الموقع العمومي',
236
-	'info_afficher_par_nb' => 'عرض حسب',
237
-	'info_aide_en_ligne' => 'تعليمات SPIP الفورية',
238
-	'info_ajout_image' => 'عندما تضيف صوراً على شكل مستندات مربوطة بمقال ما،
221
+    'info_activer_menu_developpement' => 'عرض قائمة التطوير',
222
+    'info_admin_etre_webmestre' => 'إعطائي حقوق المشرف',
223
+    'info_admin_je_suis_webmestre' => 'أنا <b>مشرف</b>',
224
+    'info_admin_statuer_webmestre' => 'اعطاء حقوق مسؤول الموقع لهذا المدير',
225
+    'info_admin_webmestre' => 'هذا المدير هو <b>مسؤول الموقع</b>',
226
+    'info_administrateur' => 'مدير',
227
+    'info_administrateur_1' => 'مدير',
228
+    'info_administrateur_2' => 'الموقع (إستخدمه بحذر)',
229
+    'info_administrateur_site_01' => 'اذا كنت احد مدراء هذا الموقع، الرجاء',
230
+    'info_administrateur_site_02' => 'نقر هذه الوصلة',
231
+    'info_administrateurs' => 'مدراء',
232
+    'info_administrer_rubrique' => 'يمكنك إدارة هذا القسم',
233
+    'info_adresse' => 'الى العنوان:',
234
+    'info_adresse_desinscription' => 'عنوان حذف التسجيل :',
235
+    'info_adresse_url' => 'عنوان الموقع العمومي',
236
+    'info_afficher_par_nb' => 'عرض حسب',
237
+    'info_aide_en_ligne' => 'تعليمات SPIP الفورية',
238
+    'info_ajout_image' => 'عندما تضيف صوراً على شكل مستندات مربوطة بمقال ما،
239 239
 يمكن لـ SPIP ان ينشئ آلياً مصغرات عن
240 240
 الصور المدرجة. ويتيح ذلك مثلاً، إنشاء
241 241
 معرض صور او محفظة.',
242
-	'info_ajouter_rubrique' => 'إضافة قسم آخر الى الإدارة:',
243
-	'info_annonce_nouveautes' => 'إعلان عن آخر الأخبار',
244
-	'info_article' => 'مقال',
245
-	'info_article_2' => 'مقال',
246
-	'info_article_a_paraitre' => 'المقالات المؤجلة التي تنتظر النشر',
247
-	'info_articles_02' => 'مقال',
248
-	'info_articles_2' => 'المقالات',
249
-	'info_articles_auteur' => 'مقالات هذا المؤلف',
250
-	'info_articles_miens' => 'مقالاتي',
251
-	'info_articles_tous' => 'كل المقالات',
252
-	'info_articles_trouves' => 'المقالات التي عثر عليها',
253
-	'info_attente_validation' => 'مقالاتك المنتظرة التصديق',
254
-	'info_aucun_article' => 'لا يوجد مقالات',
255
-	'info_aucun_auteur' => 'لا يوجد مؤلفون',
256
-	'info_aucun_message' => 'لا توجد رسائل',
257
-	'info_aucun_rubrique' => 'لا توجد أقسام',
258
-	'info_aujourdhui' => 'اليوم:',
259
-	'info_auteur_gere_rubriques' => 'هذا المؤلف يدير الأقسام التالية:',
260
-	'info_auteur_gere_toutes_rubriques' => 'هذا المؤلف يدير <b>كل الأقسام</b>',
261
-	'info_auteur_gere_toutes_rubriques_2' => 'أدير <b>كل الأقسام</b>',
262
-	'info_auteurs' => 'المؤلفون',
263
-	'info_auteurs_par_tri' => 'المؤلفون@partri@',
264
-	'info_auteurs_trouves' => 'المؤلفون الذين عثر عليهم',
265
-	'info_authentification_externe' => 'التحقق الخارجي',
266
-	'info_avertissement' => 'تحذير',
267
-	'info_barre_outils' => 'مع شريط أدواته؟',
268
-	'info_base_installee' => '<b>تم تثبيت بنية قاعدة البيانات. ',
269
-	'info_bio' => 'السيرة',
270
-	'info_cache_desactive' => 'الذاكرة المخبأة متوقفة مؤقتاً.',
271
-	'info_chapeau' => 'المقدمة',
272
-	'info_chapeau_2' => 'المقدمة:',
273
-	'info_chemin_acces_1' => 'خيارات: <b>مسار الدخول في الدليل</b>',
274
-	'info_chemin_acces_2' => 'من الآن، عليك بإعداد مسار الدخول الى معلومات الدليل. هذه المعلومات أساسية لقراءة بيانات المستخدمين المحفوظة في الدليل.',
275
-	'info_chemin_acces_annuaire' => 'خيارات: <b>مسار الدخول في الدليل</b>',
276
-	'info_choix_base' => 'الخطوة الثالثة: ',
277
-	'info_classement_1' => ' من أصل @liste@ مقال',
278
-	'info_classement_2' => 'من أصل @liste@ مقال',
279
-	'info_code_acces' => 'لا تنسى بيانات الدخول الخاصة بك!',
280
-	'info_config_suivi' => 'اذا كان هذا العنوان يدل الى قائمة بريدية، يمكنك ادخال العنوان حيث يقوم المشاركون في الموفع بتسجيل انفسهم، ادناه. ويمكن لهذا العنوان ان يكون عنوان URL (مثلاً صفحة التسجيل في القائمة عبر النسيج) او عنوان بريدي يحمل موضوعاً محدداً (مثلاً: <tt>@adresse_suivi@?subject=subscribe</tt>):',
281
-	'info_config_suivi_explication' => 'يمكنك الاشتراك في القائمة البريدية في هذا الموقع. ستحصل عندها آلياً في رسالة الكترونية على اعلانات حول المقالات والاخبار المقترحة للنشر. ',
282
-	'info_confirmer_passe' => 'تأكيد كلمة السر الجديدة:',
283
-	'info_conflit_edition_avis_non_sauvegarde' => 'تنبيه، تم تعديل الحقول التالية في مكان آخر. لذلك لم يتم تسجيل نعديلاتك.',
284
-	'info_conflit_edition_differences' => 'الفروق:',
285
-	'info_conflit_edition_version_enregistree' => 'الاصدار المسجل:',
286
-	'info_conflit_edition_votre_version' => 'إصدارك:',
287
-	'info_connexion_base' => 'محاولة الاتصال بقاعدة البيانات',
288
-	'info_connexion_base_donnee' => 'الاتصال بقاعدة بياناتك',
289
-	'info_connexion_ldap_ok' => 'نجح إتصال LDAP.</b><p> يمكنك الانتقال الى الخطوة التالية.</p>',
290
-	'info_connexion_mysql' => 'الاتصال بخادم SQL',
291
-	'info_connexion_ok' => 'نجح الاتصال.',
292
-	'info_contact' => 'الاتصال',
293
-	'info_contenu_articles' => 'محتوى المقالات',
294
-	'info_contributions' => 'المساهمات',
295
-	'info_creation_paragraphe' => 'لإنشاء فقرات يكفي ترك سطور فارغة.',
296
-	'info_creation_rubrique' => 'قبل التمكن من كتابة مقالات،<br />يجب عليك إنشاء قسم واحد على الأقل.<br />',
297
-	'info_creation_tables' => 'إنشاء جداول قاعدة البيانات',
298
-	'info_creer_base' => '<b>قم بإنشاء</b>  قاعدة بيانات جديدة:',
299
-	'info_dans_rubrique' => 'في القسم:	',
300
-	'info_date_publication_anterieure' => 'تاريخ النشر السابق:',
301
-	'info_date_referencement' => 'تاريخ تبويب هذا الموقع:',
302
-	'info_derniere_etape' => 'إنتهى!',
303
-	'info_descriptif' => 'الوصف:',
304
-	'info_desinstaller_plugin' => 'يحذف البيانات ويعطل الملحقات',
305
-	'info_discussion_cours' => 'النقاشات النشطة',
306
-	'info_ecrire_article' => 'قبل التمكن من كتابة مقالات، يجب عليك إنشاء قسم واحد على الأقل.',
307
-	'info_email_envoi' => 'العنوان الالكتروني للارسال (اختياري)',
308
-	'info_email_envoi_txt' => 'ادخل هنا العنوان المطلوب استخدامه لبعث الرسائل (والا، سيتم استخدام عنوان المرسل اليه كعنوان ارسال):',
309
-	'info_email_webmestre' => 'عنوان بريد المشرف على الموقع',
310
-	'info_envoi_email_automatique' => 'إرسال البريد الآلي',
311
-	'info_envoyer_maintenant' => 'إرسال الآن',
312
-	'info_etape_suivante' => 'إنتقل الى الخطوة التالية',
313
-	'info_etape_suivante_1' => 'يمكنك الانتقال الى الخطوة التالية.',
314
-	'info_etape_suivante_2' => 'يمكنك الانتقال الى الخطوة التالية.',
315
-	'info_exceptions_proxy' => 'استثناءات للجهاز الوكيل',
316
-	'info_exportation_base' => 'نقل قاعدة البيانات الى @archive@',
317
-	'info_facilite_suivi_activite' => 'لتسهيل متابعة أنشطة تحرير
242
+    'info_ajouter_rubrique' => 'إضافة قسم آخر الى الإدارة:',
243
+    'info_annonce_nouveautes' => 'إعلان عن آخر الأخبار',
244
+    'info_article' => 'مقال',
245
+    'info_article_2' => 'مقال',
246
+    'info_article_a_paraitre' => 'المقالات المؤجلة التي تنتظر النشر',
247
+    'info_articles_02' => 'مقال',
248
+    'info_articles_2' => 'المقالات',
249
+    'info_articles_auteur' => 'مقالات هذا المؤلف',
250
+    'info_articles_miens' => 'مقالاتي',
251
+    'info_articles_tous' => 'كل المقالات',
252
+    'info_articles_trouves' => 'المقالات التي عثر عليها',
253
+    'info_attente_validation' => 'مقالاتك المنتظرة التصديق',
254
+    'info_aucun_article' => 'لا يوجد مقالات',
255
+    'info_aucun_auteur' => 'لا يوجد مؤلفون',
256
+    'info_aucun_message' => 'لا توجد رسائل',
257
+    'info_aucun_rubrique' => 'لا توجد أقسام',
258
+    'info_aujourdhui' => 'اليوم:',
259
+    'info_auteur_gere_rubriques' => 'هذا المؤلف يدير الأقسام التالية:',
260
+    'info_auteur_gere_toutes_rubriques' => 'هذا المؤلف يدير <b>كل الأقسام</b>',
261
+    'info_auteur_gere_toutes_rubriques_2' => 'أدير <b>كل الأقسام</b>',
262
+    'info_auteurs' => 'المؤلفون',
263
+    'info_auteurs_par_tri' => 'المؤلفون@partri@',
264
+    'info_auteurs_trouves' => 'المؤلفون الذين عثر عليهم',
265
+    'info_authentification_externe' => 'التحقق الخارجي',
266
+    'info_avertissement' => 'تحذير',
267
+    'info_barre_outils' => 'مع شريط أدواته؟',
268
+    'info_base_installee' => '<b>تم تثبيت بنية قاعدة البيانات. ',
269
+    'info_bio' => 'السيرة',
270
+    'info_cache_desactive' => 'الذاكرة المخبأة متوقفة مؤقتاً.',
271
+    'info_chapeau' => 'المقدمة',
272
+    'info_chapeau_2' => 'المقدمة:',
273
+    'info_chemin_acces_1' => 'خيارات: <b>مسار الدخول في الدليل</b>',
274
+    'info_chemin_acces_2' => 'من الآن، عليك بإعداد مسار الدخول الى معلومات الدليل. هذه المعلومات أساسية لقراءة بيانات المستخدمين المحفوظة في الدليل.',
275
+    'info_chemin_acces_annuaire' => 'خيارات: <b>مسار الدخول في الدليل</b>',
276
+    'info_choix_base' => 'الخطوة الثالثة: ',
277
+    'info_classement_1' => ' من أصل @liste@ مقال',
278
+    'info_classement_2' => 'من أصل @liste@ مقال',
279
+    'info_code_acces' => 'لا تنسى بيانات الدخول الخاصة بك!',
280
+    'info_config_suivi' => 'اذا كان هذا العنوان يدل الى قائمة بريدية، يمكنك ادخال العنوان حيث يقوم المشاركون في الموفع بتسجيل انفسهم، ادناه. ويمكن لهذا العنوان ان يكون عنوان URL (مثلاً صفحة التسجيل في القائمة عبر النسيج) او عنوان بريدي يحمل موضوعاً محدداً (مثلاً: <tt>@adresse_suivi@?subject=subscribe</tt>):',
281
+    'info_config_suivi_explication' => 'يمكنك الاشتراك في القائمة البريدية في هذا الموقع. ستحصل عندها آلياً في رسالة الكترونية على اعلانات حول المقالات والاخبار المقترحة للنشر. ',
282
+    'info_confirmer_passe' => 'تأكيد كلمة السر الجديدة:',
283
+    'info_conflit_edition_avis_non_sauvegarde' => 'تنبيه، تم تعديل الحقول التالية في مكان آخر. لذلك لم يتم تسجيل نعديلاتك.',
284
+    'info_conflit_edition_differences' => 'الفروق:',
285
+    'info_conflit_edition_version_enregistree' => 'الاصدار المسجل:',
286
+    'info_conflit_edition_votre_version' => 'إصدارك:',
287
+    'info_connexion_base' => 'محاولة الاتصال بقاعدة البيانات',
288
+    'info_connexion_base_donnee' => 'الاتصال بقاعدة بياناتك',
289
+    'info_connexion_ldap_ok' => 'نجح إتصال LDAP.</b><p> يمكنك الانتقال الى الخطوة التالية.</p>',
290
+    'info_connexion_mysql' => 'الاتصال بخادم SQL',
291
+    'info_connexion_ok' => 'نجح الاتصال.',
292
+    'info_contact' => 'الاتصال',
293
+    'info_contenu_articles' => 'محتوى المقالات',
294
+    'info_contributions' => 'المساهمات',
295
+    'info_creation_paragraphe' => 'لإنشاء فقرات يكفي ترك سطور فارغة.',
296
+    'info_creation_rubrique' => 'قبل التمكن من كتابة مقالات،<br />يجب عليك إنشاء قسم واحد على الأقل.<br />',
297
+    'info_creation_tables' => 'إنشاء جداول قاعدة البيانات',
298
+    'info_creer_base' => '<b>قم بإنشاء</b>  قاعدة بيانات جديدة:',
299
+    'info_dans_rubrique' => 'في القسم:	',
300
+    'info_date_publication_anterieure' => 'تاريخ النشر السابق:',
301
+    'info_date_referencement' => 'تاريخ تبويب هذا الموقع:',
302
+    'info_derniere_etape' => 'إنتهى!',
303
+    'info_descriptif' => 'الوصف:',
304
+    'info_desinstaller_plugin' => 'يحذف البيانات ويعطل الملحقات',
305
+    'info_discussion_cours' => 'النقاشات النشطة',
306
+    'info_ecrire_article' => 'قبل التمكن من كتابة مقالات، يجب عليك إنشاء قسم واحد على الأقل.',
307
+    'info_email_envoi' => 'العنوان الالكتروني للارسال (اختياري)',
308
+    'info_email_envoi_txt' => 'ادخل هنا العنوان المطلوب استخدامه لبعث الرسائل (والا، سيتم استخدام عنوان المرسل اليه كعنوان ارسال):',
309
+    'info_email_webmestre' => 'عنوان بريد المشرف على الموقع',
310
+    'info_envoi_email_automatique' => 'إرسال البريد الآلي',
311
+    'info_envoyer_maintenant' => 'إرسال الآن',
312
+    'info_etape_suivante' => 'إنتقل الى الخطوة التالية',
313
+    'info_etape_suivante_1' => 'يمكنك الانتقال الى الخطوة التالية.',
314
+    'info_etape_suivante_2' => 'يمكنك الانتقال الى الخطوة التالية.',
315
+    'info_exceptions_proxy' => 'استثناءات للجهاز الوكيل',
316
+    'info_exportation_base' => 'نقل قاعدة البيانات الى @archive@',
317
+    'info_facilite_suivi_activite' => 'لتسهيل متابعة أنشطة تحرير
318 318
 الموقع، يرسل SPIP عبر البريد الى لائحة احد المحررين البريدية مثلاً،
319 319
 الإعلان عن
320 320
 طلبات النشر وتصديق المقالات.',
321
-	'info_fichiers_authent' => 'ملف التحقق «.htpasswd»',
322
-	'info_forums_abo_invites' => 'يحتوي موقعك على منتديات بالاشتراك. يشترك الزوار اذاً من الموقع العمومي.',
323
-	'info_gauche_admin_tech' => '<b>لا يحق إلا لمسؤولي الموقع الوصول الى هذه الصفحة.</b><p> إنها توفر الوصول الى وظائف
321
+    'info_fichiers_authent' => 'ملف التحقق «.htpasswd»',
322
+    'info_forums_abo_invites' => 'يحتوي موقعك على منتديات بالاشتراك. يشترك الزوار اذاً من الموقع العمومي.',
323
+    'info_gauche_admin_tech' => '<b>لا يحق إلا لمسؤولي الموقع الوصول الى هذه الصفحة.</b><p> إنها توفر الوصول الى وظائف
324 324
 متنوعة للصيانة التقنية. وتتطلب بعض هذه الوظائف عملية تحقق محددة
325 325
 تحتاج الى الدخول الى الموقع عبر بروتوكول FTP .</p>',
326
-	'info_gauche_admin_vider' => '<b>لا يحق إلا لمسؤولي الموقع الوصول الى هذه الصفحة.</b><p> إنها توفر الوصول الى وظائف
326
+    'info_gauche_admin_vider' => '<b>لا يحق إلا لمسؤولي الموقع الوصول الى هذه الصفحة.</b><p> إنها توفر الوصول الى وظائف
327 327
 متنوعة للصيانة التقنية. وتتطلب بعض هذه الوظائف عملية تحقق محددة
328 328
 تحتاج الى الدخول الى الموقع عبر بروتوكول FTP .</p>',
329
-	'info_gauche_auteurs' => 'ستجد هنا جميع مؤلفي الموقع.
329
+    'info_gauche_auteurs' => 'ستجد هنا جميع مؤلفي الموقع.
330 330
 يدل لون رمز كل مؤلف على وضعه (مدير = أخضر؛ محرر = أصفر).',
331
-	'info_gauche_auteurs_exterieurs' => 'المؤلفون الخارجيون، الذين لا يتمتعون بحق الدخول الى الموقع، معرّفون برمز أزرق؛
331
+    'info_gauche_auteurs_exterieurs' => 'المؤلفون الخارجيون، الذين لا يتمتعون بحق الدخول الى الموقع، معرّفون برمز أزرق؛
332 332
 اما المؤلفون المحذوفون فبرمز رمادي.',
333
-	'info_gauche_messagerie' => 'تتيح المراسلة تبادل الرسائل بين المحررين والحفاظ على المذكرات (لاستخدامك الشخصي) وعرض الإعلانات في الصفحة الرئيسية للمجال الخاص (إذا كنت مديراً).',
334
-	'info_gauche_statistiques_referers' => 'تعرض هذه الصفحة قائمة <i>مواقع المصدر</i>، أي المواقع التي تحتوي على وصلات تقود الى موقعك، fبين البارحة واليوم فقط: فيتم تأصيل هذه القائمة كل 24 ساعة.',
335
-	'info_gauche_visiteurs_enregistres' => 'ستجد هنا الزوار المسجلين
333
+    'info_gauche_messagerie' => 'تتيح المراسلة تبادل الرسائل بين المحررين والحفاظ على المذكرات (لاستخدامك الشخصي) وعرض الإعلانات في الصفحة الرئيسية للمجال الخاص (إذا كنت مديراً).',
334
+    'info_gauche_statistiques_referers' => 'تعرض هذه الصفحة قائمة <i>مواقع المصدر</i>، أي المواقع التي تحتوي على وصلات تقود الى موقعك، fبين البارحة واليوم فقط: فيتم تأصيل هذه القائمة كل 24 ساعة.',
335
+    'info_gauche_visiteurs_enregistres' => 'ستجد هنا الزوار المسجلين
336 336
 في مجال الموقع العام (المنتديات بالاشتراك).',
337
-	'info_generation_miniatures_images' => 'إنشاء مصغرات الصور',
338
-	'info_gerer_trad_objets' => '@objets@: إدارة روابط الترجمة',
339
-	'info_hebergeur_desactiver_envoi_email' => 'بعض خدام المواقع يوقفون إرسال البريد الآلي
337
+    'info_generation_miniatures_images' => 'إنشاء مصغرات الصور',
338
+    'info_gerer_trad_objets' => '@objets@: إدارة روابط الترجمة',
339
+    'info_hebergeur_desactiver_envoi_email' => 'بعض خدام المواقع يوقفون إرسال البريد الآلي
340 340
 في أجهزتهم. في هذه الحال، لا يمكن تفعيل
341 341
 وظائف SPIP التالية.',
342
-	'info_hier' => 'البارحة:',
343
-	'info_identification_publique' => 'هويتك العمومية...',
344
-	'info_image_process' => 'الرجاء اختيار افضل طريقة لإنشاء المصغرات بالنقر على الصورة المناسبة.',
345
-	'info_image_process2' => 'اذا لم تظهر اية صورة يكون جهاز الخدمة الذي يستضيف موقعك غير معدّ لاستخدام هذه الأدوات. اذا رغبت في استخدام هذه الوظائف، اتصل بالمسؤول التقني واطلب تثبيت أحد الملحقين «GD» او «Imagick».',
346
-	'info_images_auto' => 'يتم حساب هذه الصور آلياً',
347
-	'info_informations_personnelles' => 'المعلومات الشخصية',
348
-	'info_inscription' => 'التسجيل في',
349
-	'info_inscription_automatique' => 'تسجيل آلي للمحررين الجدد',
350
-	'info_jeu_caractere' => 'طقم حروف الموقع',
351
-	'info_jours' => 'يوم',
352
-	'info_laisser_champs_vides' => 'ترك هذه الحقول فارغة)',
353
-	'info_langues' => 'لغات الموقع',
354
-	'info_ldap_ok' => 'تم تثبيت تحقق LDAP .',
355
-	'info_lien_hypertexte' => 'وصلة هايبرتكست:',
356
-	'info_liste_nouveautes_envoyee' => 'تم إرسال لائحة جديد الموقع',
357
-	'info_liste_redacteurs_connectes' => 'قائمة المحررين المتصلين',
358
-	'info_login_existant' => 'هذا المعرّف موجود سابقاً.',
359
-	'info_login_trop_court' => 'معرّف الدخول قصيز جداً.',
360
-	'info_login_trop_court_car_pluriel' => 'يجب ان يحتوي المعرّف @nb@ أحرف على الأقل.',
361
-	'info_logos' => 'الرموز',
362
-	'info_maximum' => 'الحد الأقصى:',
363
-	'info_meme_rubrique' => 'في القسم نفسه',
364
-	'info_message_en_redaction' => 'رسالتك قيد التحرير',
365
-	'info_message_technique' => 'رسالة تقنية:',
366
-	'info_messagerie_interne' => 'المراسلة الداخلية',
367
-	'info_mise_a_niveau_base' => 'ترقية قاعدة بيانات SQL',
368
-	'info_mise_a_niveau_base_2' => '{{تحذير!}} قمت بتثبيت إصدار
342
+    'info_hier' => 'البارحة:',
343
+    'info_identification_publique' => 'هويتك العمومية...',
344
+    'info_image_process' => 'الرجاء اختيار افضل طريقة لإنشاء المصغرات بالنقر على الصورة المناسبة.',
345
+    'info_image_process2' => 'اذا لم تظهر اية صورة يكون جهاز الخدمة الذي يستضيف موقعك غير معدّ لاستخدام هذه الأدوات. اذا رغبت في استخدام هذه الوظائف، اتصل بالمسؤول التقني واطلب تثبيت أحد الملحقين «GD» او «Imagick».',
346
+    'info_images_auto' => 'يتم حساب هذه الصور آلياً',
347
+    'info_informations_personnelles' => 'المعلومات الشخصية',
348
+    'info_inscription' => 'التسجيل في',
349
+    'info_inscription_automatique' => 'تسجيل آلي للمحررين الجدد',
350
+    'info_jeu_caractere' => 'طقم حروف الموقع',
351
+    'info_jours' => 'يوم',
352
+    'info_laisser_champs_vides' => 'ترك هذه الحقول فارغة)',
353
+    'info_langues' => 'لغات الموقع',
354
+    'info_ldap_ok' => 'تم تثبيت تحقق LDAP .',
355
+    'info_lien_hypertexte' => 'وصلة هايبرتكست:',
356
+    'info_liste_nouveautes_envoyee' => 'تم إرسال لائحة جديد الموقع',
357
+    'info_liste_redacteurs_connectes' => 'قائمة المحررين المتصلين',
358
+    'info_login_existant' => 'هذا المعرّف موجود سابقاً.',
359
+    'info_login_trop_court' => 'معرّف الدخول قصيز جداً.',
360
+    'info_login_trop_court_car_pluriel' => 'يجب ان يحتوي المعرّف @nb@ أحرف على الأقل.',
361
+    'info_logos' => 'الرموز',
362
+    'info_maximum' => 'الحد الأقصى:',
363
+    'info_meme_rubrique' => 'في القسم نفسه',
364
+    'info_message_en_redaction' => 'رسالتك قيد التحرير',
365
+    'info_message_technique' => 'رسالة تقنية:',
366
+    'info_messagerie_interne' => 'المراسلة الداخلية',
367
+    'info_mise_a_niveau_base' => 'ترقية قاعدة بيانات SQL',
368
+    'info_mise_a_niveau_base_2' => '{{تحذير!}} قمت بتثبيت إصدار
369 369
 من ملفات SPIP {{أقدم}} من الإصدار الذي
370 370
 كان موجوداً في هذا الموقع: قد تواجه خطر فقدان قاعدة البيانات
371 371
 مما يحول دون عمل موقعك بشكل سليم.<br />{{إعادة تثبيت
372 372
 ملفات SPIP.}}',
373
-	'info_modification_enregistree' => 'تم تسجيل تعديلاتك',
374
-	'info_modifier_auteur' => 'تغيير المؤلف:',
375
-	'info_modifier_rubrique' => 'تعديل القسم:',
376
-	'info_modifier_titre' => 'تغيير: @titre@',
377
-	'info_mon_site_spip' => 'موقع SPIP',
378
-	'info_moyenne' => 'المتوسط:',
379
-	'info_multi_cet_article' => 'لغة هذا المقال:',
380
-	'info_multi_langues_choisies' => 'الرجاء تحديد ادناه اللغات التي ستكون متوافرة لمحرري موقعك.
373
+    'info_modification_enregistree' => 'تم تسجيل تعديلاتك',
374
+    'info_modifier_auteur' => 'تغيير المؤلف:',
375
+    'info_modifier_rubrique' => 'تعديل القسم:',
376
+    'info_modifier_titre' => 'تغيير: @titre@',
377
+    'info_mon_site_spip' => 'موقع SPIP',
378
+    'info_moyenne' => 'المتوسط:',
379
+    'info_multi_cet_article' => 'لغة هذا المقال:',
380
+    'info_multi_langues_choisies' => 'الرجاء تحديد ادناه اللغات التي ستكون متوافرة لمحرري موقعك.
381 381
   لا يمكن ايقاف اللغات المستخدمة حالياً في موقعك (والظاهرة في اول القائمة).',
382
-	'info_multi_objets' => '@objets@: تفعيل قائمة اللغات',
383
-	'info_multi_secteurs' => '... للأقسام الموجودة في اصل الموقع فقط ',
384
-	'info_nb_articles' => '@nb@ مقال',
385
-	'info_nb_auteurs' => '@nb@ مؤلف',
386
-	'info_nb_messages' => '@nb@ رسالة',
387
-	'info_nb_mots_cles' => '@nb@ مفتاح',
388
-	'info_nb_rubriques' => '@nb@ قسم',
389
-	'info_nb_visiteurs' => '@nb@ زائر',
390
-	'info_nom' => 'الإسم',
391
-	'info_nom_destinataire' => 'إسم المرسل اليه',
392
-	'info_nom_pas_conforme' => 'علامات html غير مسموح بها',
393
-	'info_nom_site' => 'إسم موقعك',
394
-	'info_nombre_articles' => '@nb_articles@ مقال،',
395
-	'info_nombre_rubriques' => '@nb_rubriques@ قسم،',
396
-	'info_nombre_sites' => '@nb_sites@ موقع،',
397
-	'info_non_deplacer' => 'عدم التحريك...',
398
-	'info_non_envoi_annonce_dernieres_nouveautes' => 'يستطيع SPIP إرسال إعلانات عن آخر الأخبار بانتظام.
382
+    'info_multi_objets' => '@objets@: تفعيل قائمة اللغات',
383
+    'info_multi_secteurs' => '... للأقسام الموجودة في اصل الموقع فقط ',
384
+    'info_nb_articles' => '@nb@ مقال',
385
+    'info_nb_auteurs' => '@nb@ مؤلف',
386
+    'info_nb_messages' => '@nb@ رسالة',
387
+    'info_nb_mots_cles' => '@nb@ مفتاح',
388
+    'info_nb_rubriques' => '@nb@ قسم',
389
+    'info_nb_visiteurs' => '@nb@ زائر',
390
+    'info_nom' => 'الإسم',
391
+    'info_nom_destinataire' => 'إسم المرسل اليه',
392
+    'info_nom_pas_conforme' => 'علامات html غير مسموح بها',
393
+    'info_nom_site' => 'إسم موقعك',
394
+    'info_nombre_articles' => '@nb_articles@ مقال،',
395
+    'info_nombre_rubriques' => '@nb_rubriques@ قسم،',
396
+    'info_nombre_sites' => '@nb_sites@ موقع،',
397
+    'info_non_deplacer' => 'عدم التحريك...',
398
+    'info_non_envoi_annonce_dernieres_nouveautes' => 'يستطيع SPIP إرسال إعلانات عن آخر الأخبار بانتظام.
399 399
 (المقالات والأخبار المنشورة حديثاً).',
400
-	'info_non_envoi_liste_nouveautes' => 'عدم إرسال قائمة بآخر الأخبار',
401
-	'info_non_modifiable' => '</i>لا يمكن تغييره<i>',
402
-	'info_non_suppression_mot_cle' => 'كلا لا أريد حذف هذا المفتاح.',
403
-	'info_notes' => 'حواشي',
404
-	'info_nouvel_article' => 'مقال جديد',
405
-	'info_nouvelle_traduction' => 'ترجمة جديدة:',
406
-	'info_numero_article' => 'المقال رقم:',
407
-	'info_obligatoire_02' => '(إجباري)',
408
-	'info_option_accepter_visiteurs' => 'قبول تسجيل الزوار من الموقع العمومي',
409
-	'info_option_ne_pas_accepter_visiteurs' => 'رفض تسجيل الزوار من الموقع العمومي',
410
-	'info_options_avancees' => 'الخيارات المتطورة',
411
-	'info_ou' => 'أو...',
412
-	'info_page_interdite' => 'صفحة محظورة',
413
-	'info_par_nom' => 'حسب الاسم',
414
-	'info_par_nombre_article' => 'حسب عدد المقالات',
415
-	'info_par_statut' => 'حسب الوضع',
416
-	'info_par_tri' => '’(حسب @tri@)’',
417
-	'info_passe_trop_court' => 'كلمة السر قصيرة جداً.',
418
-	'info_passe_trop_court_car_pluriel' => 'يجب ان تحتوي كلمة السر @nb@ أحرف على الأقل.',
419
-	'info_passes_identiques' => 'كلمتا السر ليستا متطابقتان.',
420
-	'info_plus_cinq_car' => 'أكثر من خمسة أحرف',
421
-	'info_plus_cinq_car_2' => '(أكثر من خمسة أحرف)',
422
-	'info_plus_trois_car' => '(أكثر من ثلاثة أحرف)',
423
-	'info_popularite' => 'الشعبية: @popularite@؛ الزيارات: @visites@',
424
-	'info_post_scriptum' => 'الملحق',
425
-	'info_post_scriptum_2' => 'الملحق:',
426
-	'info_pour' => 'لـ',
427
-	'info_preview_texte' => 'من الممكن تفعيل العرض المسبق للعناصر التحريرية التي تتمتع على الاقل بوضعية «مقترح»، إضافة الى العناصر «قيد التحرير» العائدة للمؤلف المتصل. هل تتاح هذه الوظيفة للمدراء فقط او لجميع المحررين او تُعطل؟',
428
-	'info_procedez_par_etape' => 'الرجاء إتباع الخطوة خطوة ',
429
-	'info_procedure_maj_version' => 'يجب تنفيذ عملية الترقية لتكييف
400
+    'info_non_envoi_liste_nouveautes' => 'عدم إرسال قائمة بآخر الأخبار',
401
+    'info_non_modifiable' => '</i>لا يمكن تغييره<i>',
402
+    'info_non_suppression_mot_cle' => 'كلا لا أريد حذف هذا المفتاح.',
403
+    'info_notes' => 'حواشي',
404
+    'info_nouvel_article' => 'مقال جديد',
405
+    'info_nouvelle_traduction' => 'ترجمة جديدة:',
406
+    'info_numero_article' => 'المقال رقم:',
407
+    'info_obligatoire_02' => '(إجباري)',
408
+    'info_option_accepter_visiteurs' => 'قبول تسجيل الزوار من الموقع العمومي',
409
+    'info_option_ne_pas_accepter_visiteurs' => 'رفض تسجيل الزوار من الموقع العمومي',
410
+    'info_options_avancees' => 'الخيارات المتطورة',
411
+    'info_ou' => 'أو...',
412
+    'info_page_interdite' => 'صفحة محظورة',
413
+    'info_par_nom' => 'حسب الاسم',
414
+    'info_par_nombre_article' => 'حسب عدد المقالات',
415
+    'info_par_statut' => 'حسب الوضع',
416
+    'info_par_tri' => '’(حسب @tri@)’',
417
+    'info_passe_trop_court' => 'كلمة السر قصيرة جداً.',
418
+    'info_passe_trop_court_car_pluriel' => 'يجب ان تحتوي كلمة السر @nb@ أحرف على الأقل.',
419
+    'info_passes_identiques' => 'كلمتا السر ليستا متطابقتان.',
420
+    'info_plus_cinq_car' => 'أكثر من خمسة أحرف',
421
+    'info_plus_cinq_car_2' => '(أكثر من خمسة أحرف)',
422
+    'info_plus_trois_car' => '(أكثر من ثلاثة أحرف)',
423
+    'info_popularite' => 'الشعبية: @popularite@؛ الزيارات: @visites@',
424
+    'info_post_scriptum' => 'الملحق',
425
+    'info_post_scriptum_2' => 'الملحق:',
426
+    'info_pour' => 'لـ',
427
+    'info_preview_texte' => 'من الممكن تفعيل العرض المسبق للعناصر التحريرية التي تتمتع على الاقل بوضعية «مقترح»، إضافة الى العناصر «قيد التحرير» العائدة للمؤلف المتصل. هل تتاح هذه الوظيفة للمدراء فقط او لجميع المحررين او تُعطل؟',
428
+    'info_procedez_par_etape' => 'الرجاء إتباع الخطوة خطوة ',
429
+    'info_procedure_maj_version' => 'يجب تنفيذ عملية الترقية لتكييف
430 430
 قاعدة البيانات مع إصدار SPIP الجديد.',
431
-	'info_proxy_ok' => 'نجح اختبار الجهاز الوكيل.',
432
-	'info_ps' => 'ملاحظة',
433
-	'info_publier' => 'نشر',
434
-	'info_publies' => 'مقالاتك المنشورة',
435
-	'info_question_accepter_visiteurs' => 'اذا كانت صفحات موقعك النموذجية تفسح المجال للزوار الذين لا يتمتعون بحق الدخول الى المجال الخاص لتسجيل انفسهم، قم بتفعيل الخيار التالي:',
436
-	'info_question_inscription_nouveaux_redacteurs' => 'هل تسمح بتسجيل محررين جدد من
431
+    'info_proxy_ok' => 'نجح اختبار الجهاز الوكيل.',
432
+    'info_ps' => 'ملاحظة',
433
+    'info_publier' => 'نشر',
434
+    'info_publies' => 'مقالاتك المنشورة',
435
+    'info_question_accepter_visiteurs' => 'اذا كانت صفحات موقعك النموذجية تفسح المجال للزوار الذين لا يتمتعون بحق الدخول الى المجال الخاص لتسجيل انفسهم، قم بتفعيل الخيار التالي:',
436
+    'info_question_inscription_nouveaux_redacteurs' => 'هل تسمح بتسجيل محررين جدد من
437 437
 الموقع العمومي؟ إذا وافقت، سيتمكن الزوار من التسجيل
438 438
 عبر إستمارة آلية والدخول الى المجال الخاص
439 439
 لعرض مقالاتهم. <div class="notice">خلال عملية التسجيل،
@@ -442,366 +442,366 @@  discard block
 block discarded – undo
442 442
  خدام المواقع يعطلون إرسال البريد الآلي في
443 443
 أجهزتهم: في هذه الحال، لا يمكن تفعيل
444 444
 التسجيل الآلي.</div>',
445
-	'info_qui_edite' => '@nom_auteur_modif@ عمل على هذا المحتوى منذ @date_diff@ دقيقة ',
446
-	'info_racine_site' => 'أصل الموقع',
447
-	'info_recharger_page' => 'الرجاء إعادة تحميل الصفحة بعد لحظات.',
448
-	'info_recherche_auteur_zero' => 'لا توجد نتائج لـ «@cherche_auteur@».',
449
-	'info_recommencer' => 'الرجاء إعادة المحاولة.',
450
-	'info_redacteur_1' => 'محرر',
451
-	'info_redacteur_2' => 'يملك حق الدخول الى المجال الخاص (ينصح به)',
452
-	'info_redacteurs' => 'محررون',
453
-	'info_redaction_en_cours' => 'قيد التحرير',
454
-	'info_redirection' => 'إعادة توجيه',
455
-	'info_redirection_activee' => 'تم تفعيل إعادة التحويل.',
456
-	'info_redirection_boucle' => 'محاولة إعادة توجيه مقال الى ذاته.',
457
-	'info_redirection_desactivee' => 'تم حذف إعادة التحويل.',
458
-	'info_refuses' => 'مقالاتك المرفوضة',
459
-	'info_reglage_ldap' => 'خيارات: <b>ضبط جلب LDAP </b>',
460
-	'info_renvoi_article' => '<b>إعادة توجيه.</b> هذا المقال يحيل الى الصفحة: ',
461
-	'info_reserve_admin' => 'المدراء وحدهم يمكنهم تغيير هذا العنوان.',
462
-	'info_restreindre_rubrique' => 'حصر الإدارة في القسم:',
463
-	'info_resultat_recherche' => 'نتائج البحث:',
464
-	'info_rubriques' => 'الأقسام',
465
-	'info_rubriques_02' => 'الأقسام',
466
-	'info_rubriques_trouvees' => 'الأقسام التي عثر عليها',
467
-	'info_sans_titre' => 'بدون عنوان',
468
-	'info_selection_chemin_acces' => '<b>حدد</b> أدناه مسار الدخول في الدليل:',
469
-	'info_signatures' => 'التوقيعات',
470
-	'info_site' => 'الموقع',
471
-	'info_site_2' => 'الموقع:',
472
-	'info_site_min' => 'الموقع',
473
-	'info_site_reference_2' => 'موقع مبوب',
474
-	'info_site_web' => 'الموقع:',
475
-	'info_sites' => ' مواقع',
476
-	'info_sites_lies_mot' => 'المواقع المبوبة المرتبطة بهذا المفتاح',
477
-	'info_sites_proxy' => 'إستخدام جهاز وكيل',
478
-	'info_sites_trouves' => 'المواقع التي عثر عليها',
479
-	'info_sous_titre' => 'العنوان الفرعي:',
480
-	'info_statut_administrateur' => 'مدير',
481
-	'info_statut_auteur' => 'وضع هذا المؤلف:',
482
-	'info_statut_auteur_2' => 'أنا',
483
-	'info_statut_auteur_a_confirmer' => 'التسجيل المطلوب التأكد منه',
484
-	'info_statut_auteur_autre' => 'وضعية اخرى:',
485
-	'info_statut_redacteur' => 'محرر',
486
-	'info_statut_utilisateurs_1' => 'الوضع الافتراضي للمستخدمين المجلوبين',
487
-	'info_statut_utilisateurs_2' => 'قم باختيار الوضع المخصص للأشخاص الموجودين في دليل LDAP عندما سيتصلون للمرة الأولى. لاحقاً، يمكنك تغيير هذه القيمة لكل مؤلف على حدى.',
488
-	'info_suivi_activite' => 'متابعة أنشطة التحرير',
489
-	'info_surtitre' => 'عنوان المدخل:',
490
-	'info_syndication_integrale_1' => 'يقدم موقعك ملفات ترخيص (انظر «<a href="@url@">@titre@</a>»).',
491
-	'info_syndication_integrale_2' => 'هل ترغب في تقديم المقالات بكاملها او الاكتفاء بنشر ملخص من بضعة مئات من الكلمات؟',
492
-	'info_table_prefix' => 'يمكنك تغيير بادئة اسماء جداول البيانات (هذا ضروري في حال تثبيت عدة مواقع لقاعدة بيانات واحدة). تكتب هذه البادئة بأحرف صغيرة بدون صوتيات ومسافات. ',
493
-	'info_taille_maximale_images' => 'سيقوم SPIP بتفقد الحد الاقصى لحجم الصور التي يمكنه معالجتها (بملايين النقاط).<br /> لن يتم تصغير الصور التي تتعدى هذا الحد.',
494
-	'info_taille_maximale_vignette' => 'الحد الأقصى لأبعاد المصغرات التي ينتجها النظام:',
495
-	'info_terminer_installation' => 'يمكنك الآن إتمام عملية التثبيت العادية',
496
-	'info_texte' => 'المادة',
497
-	'info_texte_explicatif' => 'نص توضيحي',
498
-	'info_texte_long' => '(المادة طويلة جداً: ستظهر بعدة أجزاء تتم إعادة تجميعها بعد النقر على الإدخال.)',
499
-	'info_texte_message' => 'نص مشاركتك:',
500
-	'info_texte_message_02' => 'نص الرسالة',
501
-	'info_titre' => 'الموضوع:',
502
-	'info_total' => 'المجموع:',
503
-	'info_tous_articles_en_redaction' => 'كل المقالات قيد التحرير',
504
-	'info_tous_articles_presents' => 'كل المقالات المنشورة في هذا القسم',
505
-	'info_tous_articles_refuses' => 'كل المقالات المرفوضة',
506
-	'info_tous_les' => 'كل:',
507
-	'info_tout_site' => 'الموقع بالكامل',
508
-	'info_tout_site2' => 'لم يُترجم المقال الى هذه اللغة.',
509
-	'info_tout_site3' => 'تمت ترجمة المقال الى هذه اللغة لكن طرأت تعديلات على المقال المرجع في ما بعد. يجب تحديث الترجمة.',
510
-	'info_tout_site4' => 'تمت ترجمة المقال الى هذه اللغة والترجمة حديثة.',
511
-	'info_tout_site5' => 'المقال الاصلي.',
512
-	'info_tout_site6' => '<b>تحذير:</b> المقالات الاصلية وحدها هي المعروضة.
445
+    'info_qui_edite' => '@nom_auteur_modif@ عمل على هذا المحتوى منذ @date_diff@ دقيقة ',
446
+    'info_racine_site' => 'أصل الموقع',
447
+    'info_recharger_page' => 'الرجاء إعادة تحميل الصفحة بعد لحظات.',
448
+    'info_recherche_auteur_zero' => 'لا توجد نتائج لـ «@cherche_auteur@».',
449
+    'info_recommencer' => 'الرجاء إعادة المحاولة.',
450
+    'info_redacteur_1' => 'محرر',
451
+    'info_redacteur_2' => 'يملك حق الدخول الى المجال الخاص (ينصح به)',
452
+    'info_redacteurs' => 'محررون',
453
+    'info_redaction_en_cours' => 'قيد التحرير',
454
+    'info_redirection' => 'إعادة توجيه',
455
+    'info_redirection_activee' => 'تم تفعيل إعادة التحويل.',
456
+    'info_redirection_boucle' => 'محاولة إعادة توجيه مقال الى ذاته.',
457
+    'info_redirection_desactivee' => 'تم حذف إعادة التحويل.',
458
+    'info_refuses' => 'مقالاتك المرفوضة',
459
+    'info_reglage_ldap' => 'خيارات: <b>ضبط جلب LDAP </b>',
460
+    'info_renvoi_article' => '<b>إعادة توجيه.</b> هذا المقال يحيل الى الصفحة: ',
461
+    'info_reserve_admin' => 'المدراء وحدهم يمكنهم تغيير هذا العنوان.',
462
+    'info_restreindre_rubrique' => 'حصر الإدارة في القسم:',
463
+    'info_resultat_recherche' => 'نتائج البحث:',
464
+    'info_rubriques' => 'الأقسام',
465
+    'info_rubriques_02' => 'الأقسام',
466
+    'info_rubriques_trouvees' => 'الأقسام التي عثر عليها',
467
+    'info_sans_titre' => 'بدون عنوان',
468
+    'info_selection_chemin_acces' => '<b>حدد</b> أدناه مسار الدخول في الدليل:',
469
+    'info_signatures' => 'التوقيعات',
470
+    'info_site' => 'الموقع',
471
+    'info_site_2' => 'الموقع:',
472
+    'info_site_min' => 'الموقع',
473
+    'info_site_reference_2' => 'موقع مبوب',
474
+    'info_site_web' => 'الموقع:',
475
+    'info_sites' => ' مواقع',
476
+    'info_sites_lies_mot' => 'المواقع المبوبة المرتبطة بهذا المفتاح',
477
+    'info_sites_proxy' => 'إستخدام جهاز وكيل',
478
+    'info_sites_trouves' => 'المواقع التي عثر عليها',
479
+    'info_sous_titre' => 'العنوان الفرعي:',
480
+    'info_statut_administrateur' => 'مدير',
481
+    'info_statut_auteur' => 'وضع هذا المؤلف:',
482
+    'info_statut_auteur_2' => 'أنا',
483
+    'info_statut_auteur_a_confirmer' => 'التسجيل المطلوب التأكد منه',
484
+    'info_statut_auteur_autre' => 'وضعية اخرى:',
485
+    'info_statut_redacteur' => 'محرر',
486
+    'info_statut_utilisateurs_1' => 'الوضع الافتراضي للمستخدمين المجلوبين',
487
+    'info_statut_utilisateurs_2' => 'قم باختيار الوضع المخصص للأشخاص الموجودين في دليل LDAP عندما سيتصلون للمرة الأولى. لاحقاً، يمكنك تغيير هذه القيمة لكل مؤلف على حدى.',
488
+    'info_suivi_activite' => 'متابعة أنشطة التحرير',
489
+    'info_surtitre' => 'عنوان المدخل:',
490
+    'info_syndication_integrale_1' => 'يقدم موقعك ملفات ترخيص (انظر «<a href="@url@">@titre@</a>»).',
491
+    'info_syndication_integrale_2' => 'هل ترغب في تقديم المقالات بكاملها او الاكتفاء بنشر ملخص من بضعة مئات من الكلمات؟',
492
+    'info_table_prefix' => 'يمكنك تغيير بادئة اسماء جداول البيانات (هذا ضروري في حال تثبيت عدة مواقع لقاعدة بيانات واحدة). تكتب هذه البادئة بأحرف صغيرة بدون صوتيات ومسافات. ',
493
+    'info_taille_maximale_images' => 'سيقوم SPIP بتفقد الحد الاقصى لحجم الصور التي يمكنه معالجتها (بملايين النقاط).<br /> لن يتم تصغير الصور التي تتعدى هذا الحد.',
494
+    'info_taille_maximale_vignette' => 'الحد الأقصى لأبعاد المصغرات التي ينتجها النظام:',
495
+    'info_terminer_installation' => 'يمكنك الآن إتمام عملية التثبيت العادية',
496
+    'info_texte' => 'المادة',
497
+    'info_texte_explicatif' => 'نص توضيحي',
498
+    'info_texte_long' => '(المادة طويلة جداً: ستظهر بعدة أجزاء تتم إعادة تجميعها بعد النقر على الإدخال.)',
499
+    'info_texte_message' => 'نص مشاركتك:',
500
+    'info_texte_message_02' => 'نص الرسالة',
501
+    'info_titre' => 'الموضوع:',
502
+    'info_total' => 'المجموع:',
503
+    'info_tous_articles_en_redaction' => 'كل المقالات قيد التحرير',
504
+    'info_tous_articles_presents' => 'كل المقالات المنشورة في هذا القسم',
505
+    'info_tous_articles_refuses' => 'كل المقالات المرفوضة',
506
+    'info_tous_les' => 'كل:',
507
+    'info_tout_site' => 'الموقع بالكامل',
508
+    'info_tout_site2' => 'لم يُترجم المقال الى هذه اللغة.',
509
+    'info_tout_site3' => 'تمت ترجمة المقال الى هذه اللغة لكن طرأت تعديلات على المقال المرجع في ما بعد. يجب تحديث الترجمة.',
510
+    'info_tout_site4' => 'تمت ترجمة المقال الى هذه اللغة والترجمة حديثة.',
511
+    'info_tout_site5' => 'المقال الاصلي.',
512
+    'info_tout_site6' => '<b>تحذير:</b> المقالات الاصلية وحدها هي المعروضة.
513 513
 الترجمات مرتبطة بالاصلي،
514 514
 يلون يدل على حالتها:',
515
-	'info_traductions' => 'الترجمات',
516
-	'info_travail_colaboratif' => 'تحرير المقالات المشترك',
517
-	'info_un_article' => 'مقال، ',
518
-	'info_un_site' => 'موقع،',
519
-	'info_une_rubrique' => 'قسم،',
520
-	'info_une_rubrique_02' => 'قسم واحد',
521
-	'info_url' => 'عنوان URL:',
522
-	'info_url_proxy' => 'عنوان URL للجهاز الوكيل',
523
-	'info_url_proxy_pas_conforme' => 'عنوان الجهاز الوكيل غير صالح.',
524
-	'info_url_site_pas_conforme' => 'عنوان URL غير صالح.',
525
-	'info_url_test_proxy' => 'عنوان URL للاختبار',
526
-	'info_urlref' => 'وصلة هايبرتكست:',
527
-	'info_utilisation_spip' => 'أصبح نظام النشر الآلي جاهزاً للاستخدام...',
528
-	'info_visites_par_mois' => 'عرض حسب الشهر:',
529
-	'info_visiteur_1' => 'زائر',
530
-	'info_visiteur_2' => 'للموقع العمومي',
531
-	'info_visiteurs' => 'الزوار',
532
-	'info_visiteurs_02' => 'زوار الموقع العمومي',
533
-	'info_webmestre_forces' => 'المشرفون محددون حالياً في <tt>@file_options@</tt>.',
534
-	'install_adresse_base_hebergeur' => 'عنوان قاعدة البيانات التي خصصها لك المضيف',
535
-	'install_connect_ok' => 'تم فعلاً تعريف قاعدة البيانات باسم جهاز الخدمة @connect@.',
536
-	'install_echec_annonce' => 'الارجح ان التثبيت سيفشل او يؤدي الى موقع غير سليم...',
537
-	'install_extension_mbstring' => 'لا يعمل SPIP مع:',
538
-	'install_extension_php_obligatoire' => 'يتطلب SPIP ملحق php:',
539
-	'install_login_base_hebergeur' => 'معرّف الدخول الذي خصصه لك المضيف',
540
-	'install_nom_base_hebergeur' => 'اسم قاعدة البيانات الدي خصصه لك المضيف:',
541
-	'install_pas_table' => 'قاعدة من دون جداول حالياً',
542
-	'install_pass_base_hebergeur' => 'كلمة سر الاتصال التي خصصها لك المضيف',
543
-	'install_php_version' => 'اصدار @version@ من PHP غير كاف(الحد الادنى = @minimum@)',
544
-	'install_select_langue' => 'إختر لغة ثم انقر على الزر« التالي»  للبدء بعملية التثبيت.',
545
-	'install_select_type_db' => 'تحديد نوع قاعدة البيانات:',
546
-	'install_select_type_mysql' => 'MySQL',
547
-	'install_select_type_pg' => 'PostgreSQL',
548
-	'install_select_type_sqlite2' => 'SQLite 2',
549
-	'install_select_type_sqlite3' => 'SQLite 3',
550
-	'install_serveur_hebergeur' => 'خادم قواعد البيانات الذي يوفره المضيف ',
551
-	'install_table_prefix_hebergeur' => 'بادئة اسماء الجداول التي خصصها لك المضيف:',
552
-	'install_tables_base' => 'جداول القاعدة',
553
-	'install_types_db_connus' => 'يستطيع SPIP استخدام <b>MySQL</b> (الاكثر انتشاراً) و<b>SQLite</b>.',
554
-	'install_types_db_connus_avertissement' => 'يتوافر دعم <b>PostgreSQL</b> أيضاً على سبيل الاختبار',
555
-	'instituer_erreur_statut_a_change' => 'لقد تم تعديل الوضع من قبل',
556
-	'instituer_erreur_statut_non_autorise' => 'لا يمكن اختيار هذا الوضع',
557
-	'intem_redacteur' => 'محرر',
558
-	'intitule_licence' => 'الرخصة',
559
-	'item_accepter_inscriptions' => 'السماح بالتسجيل',
560
-	'item_activer_messages_avertissement' => 'تفعيل رسائل التحذير',
561
-	'item_administrateur_2' => 'مدير',
562
-	'item_afficher_calendrier' => 'إظهار في الروزنامة',
563
-	'item_autoriser_syndication_integrale' => 'نشر كامل المقالات في ملفات الترخيص',
564
-	'item_choix_administrateurs' => 'المدراء',
565
-	'item_choix_generation_miniature' => 'إنشاء مصغرات عن الصور آلياً.',
566
-	'item_choix_non_generation_miniature' => 'عدم إنشاء مصغرات عن الصور.',
567
-	'item_choix_redacteurs' => 'المحررون',
568
-	'item_choix_visiteurs' => 'زوار الموقع العمومي',
569
-	'item_creer_fichiers_authent' => 'إنشاء ملفات .htpasswd',
570
-	'item_login' => ' المعرّف',
571
-	'item_messagerie_agenda' => 'تفعيل المراسلة والمفكرة',
572
-	'item_mots_cles_association_articles' => 'المقالات',
573
-	'item_mots_cles_association_rubriques' => 'الأقسام',
574
-	'item_mots_cles_association_sites' => 'المواقع المبوبة او المرخصة.',
575
-	'item_non' => 'كلا',
576
-	'item_non_accepter_inscriptions' => 'عدم السماح بالتسجيل',
577
-	'item_non_activer_messages_avertissement' => 'تعطيل رسائل التحذير',
578
-	'item_non_afficher_calendrier' => 'عدم إظهار في الروزنامة',
579
-	'item_non_autoriser_syndication_integrale' => 'الاكتفاء بنشر ملخص',
580
-	'item_non_creer_fichiers_authent' => 'عدم إنشاء هذه الملفات',
581
-	'item_non_messagerie_agenda' => 'تعطيل المراسلة والمفكرة',
582
-	'item_non_publier_articles' => 'عدم نشر المقالات قبل تاريخها.',
583
-	'item_nouvel_auteur' => 'مؤلف جديد',
584
-	'item_nouvelle_rubrique' => 'قسم جديد',
585
-	'item_oui' => 'نعم',
586
-	'item_publier_articles' => 'نشر المقالات مهما كان تاريخها.',
587
-	'item_reponse_article' => 'الرد على المقال',
588
-	'item_visiteur' => 'زائر',
515
+    'info_traductions' => 'الترجمات',
516
+    'info_travail_colaboratif' => 'تحرير المقالات المشترك',
517
+    'info_un_article' => 'مقال، ',
518
+    'info_un_site' => 'موقع،',
519
+    'info_une_rubrique' => 'قسم،',
520
+    'info_une_rubrique_02' => 'قسم واحد',
521
+    'info_url' => 'عنوان URL:',
522
+    'info_url_proxy' => 'عنوان URL للجهاز الوكيل',
523
+    'info_url_proxy_pas_conforme' => 'عنوان الجهاز الوكيل غير صالح.',
524
+    'info_url_site_pas_conforme' => 'عنوان URL غير صالح.',
525
+    'info_url_test_proxy' => 'عنوان URL للاختبار',
526
+    'info_urlref' => 'وصلة هايبرتكست:',
527
+    'info_utilisation_spip' => 'أصبح نظام النشر الآلي جاهزاً للاستخدام...',
528
+    'info_visites_par_mois' => 'عرض حسب الشهر:',
529
+    'info_visiteur_1' => 'زائر',
530
+    'info_visiteur_2' => 'للموقع العمومي',
531
+    'info_visiteurs' => 'الزوار',
532
+    'info_visiteurs_02' => 'زوار الموقع العمومي',
533
+    'info_webmestre_forces' => 'المشرفون محددون حالياً في <tt>@file_options@</tt>.',
534
+    'install_adresse_base_hebergeur' => 'عنوان قاعدة البيانات التي خصصها لك المضيف',
535
+    'install_connect_ok' => 'تم فعلاً تعريف قاعدة البيانات باسم جهاز الخدمة @connect@.',
536
+    'install_echec_annonce' => 'الارجح ان التثبيت سيفشل او يؤدي الى موقع غير سليم...',
537
+    'install_extension_mbstring' => 'لا يعمل SPIP مع:',
538
+    'install_extension_php_obligatoire' => 'يتطلب SPIP ملحق php:',
539
+    'install_login_base_hebergeur' => 'معرّف الدخول الذي خصصه لك المضيف',
540
+    'install_nom_base_hebergeur' => 'اسم قاعدة البيانات الدي خصصه لك المضيف:',
541
+    'install_pas_table' => 'قاعدة من دون جداول حالياً',
542
+    'install_pass_base_hebergeur' => 'كلمة سر الاتصال التي خصصها لك المضيف',
543
+    'install_php_version' => 'اصدار @version@ من PHP غير كاف(الحد الادنى = @minimum@)',
544
+    'install_select_langue' => 'إختر لغة ثم انقر على الزر« التالي»  للبدء بعملية التثبيت.',
545
+    'install_select_type_db' => 'تحديد نوع قاعدة البيانات:',
546
+    'install_select_type_mysql' => 'MySQL',
547
+    'install_select_type_pg' => 'PostgreSQL',
548
+    'install_select_type_sqlite2' => 'SQLite 2',
549
+    'install_select_type_sqlite3' => 'SQLite 3',
550
+    'install_serveur_hebergeur' => 'خادم قواعد البيانات الذي يوفره المضيف ',
551
+    'install_table_prefix_hebergeur' => 'بادئة اسماء الجداول التي خصصها لك المضيف:',
552
+    'install_tables_base' => 'جداول القاعدة',
553
+    'install_types_db_connus' => 'يستطيع SPIP استخدام <b>MySQL</b> (الاكثر انتشاراً) و<b>SQLite</b>.',
554
+    'install_types_db_connus_avertissement' => 'يتوافر دعم <b>PostgreSQL</b> أيضاً على سبيل الاختبار',
555
+    'instituer_erreur_statut_a_change' => 'لقد تم تعديل الوضع من قبل',
556
+    'instituer_erreur_statut_non_autorise' => 'لا يمكن اختيار هذا الوضع',
557
+    'intem_redacteur' => 'محرر',
558
+    'intitule_licence' => 'الرخصة',
559
+    'item_accepter_inscriptions' => 'السماح بالتسجيل',
560
+    'item_activer_messages_avertissement' => 'تفعيل رسائل التحذير',
561
+    'item_administrateur_2' => 'مدير',
562
+    'item_afficher_calendrier' => 'إظهار في الروزنامة',
563
+    'item_autoriser_syndication_integrale' => 'نشر كامل المقالات في ملفات الترخيص',
564
+    'item_choix_administrateurs' => 'المدراء',
565
+    'item_choix_generation_miniature' => 'إنشاء مصغرات عن الصور آلياً.',
566
+    'item_choix_non_generation_miniature' => 'عدم إنشاء مصغرات عن الصور.',
567
+    'item_choix_redacteurs' => 'المحررون',
568
+    'item_choix_visiteurs' => 'زوار الموقع العمومي',
569
+    'item_creer_fichiers_authent' => 'إنشاء ملفات .htpasswd',
570
+    'item_login' => ' المعرّف',
571
+    'item_messagerie_agenda' => 'تفعيل المراسلة والمفكرة',
572
+    'item_mots_cles_association_articles' => 'المقالات',
573
+    'item_mots_cles_association_rubriques' => 'الأقسام',
574
+    'item_mots_cles_association_sites' => 'المواقع المبوبة او المرخصة.',
575
+    'item_non' => 'كلا',
576
+    'item_non_accepter_inscriptions' => 'عدم السماح بالتسجيل',
577
+    'item_non_activer_messages_avertissement' => 'تعطيل رسائل التحذير',
578
+    'item_non_afficher_calendrier' => 'عدم إظهار في الروزنامة',
579
+    'item_non_autoriser_syndication_integrale' => 'الاكتفاء بنشر ملخص',
580
+    'item_non_creer_fichiers_authent' => 'عدم إنشاء هذه الملفات',
581
+    'item_non_messagerie_agenda' => 'تعطيل المراسلة والمفكرة',
582
+    'item_non_publier_articles' => 'عدم نشر المقالات قبل تاريخها.',
583
+    'item_nouvel_auteur' => 'مؤلف جديد',
584
+    'item_nouvelle_rubrique' => 'قسم جديد',
585
+    'item_oui' => 'نعم',
586
+    'item_publier_articles' => 'نشر المقالات مهما كان تاريخها.',
587
+    'item_reponse_article' => 'الرد على المقال',
588
+    'item_visiteur' => 'زائر',
589 589
 
590
-	// J
591
-	'jour_non_connu_nc' => 'غير معروف',
590
+    // J
591
+    'jour_non_connu_nc' => 'غير معروف',
592 592
 
593
-	// L
594
-	'label_bando_outils' => 'شريط الأدوات',
595
-	'label_bando_outils_afficher' => 'عرض الأدوات',
596
-	'label_bando_outils_masquer' => 'إخفاء الأدوات',
597
-	'label_choix_langue' => 'حدد لغتك',
598
-	'label_nom_fichier_connect' => 'أدخل الاسم الذي يستخدمه هذا الخادم',
599
-	'label_slogan_site' => 'شعار الموقع',
600
-	'label_taille_ecran' => 'عرض الشاشة',
601
-	'label_texte_et_icones_navigation' => 'قائمة التصفح',
602
-	'label_texte_et_icones_page' => 'عرض في الصفحة',
603
-	'ldap_correspondance' => 'استلام من الحقل @champ@',
604
-	'ldap_correspondance_1' => 'استلام حقول LDAP',
605
-	'ldap_correspondance_2' => 'لكل من حقول SPIP التالية، حدد اسم حقل LDAP المناسب. يمكن ترك حقل فارغ، استخدام المسافات او الفواصل لتجربة عدة حقول LDAP.',
606
-	'lien_ajouter_auteur' => 'إضافة هذا المؤلف',
607
-	'lien_ajouter_une_rubrique' => 'إضافة هذا القسم',
608
-	'lien_email' => 'البريد الالكتروني',
609
-	'lien_nom_site' => 'إسم الموقع:',
610
-	'lien_rapide_contenu' => 'الذهاب الى المحتوى',
611
-	'lien_rapide_navigation' => 'الذهاب اى التصفح',
612
-	'lien_rapide_recherche' => 'الذهاب الى البحث',
613
-	'lien_retirer_auteur' => 'حذف المؤلف',
614
-	'lien_retirer_rubrique' => 'سحب القسم',
615
-	'lien_retirer_tous_auteurs' => 'إزالة جميع المؤلفين',
616
-	'lien_retirer_toutes_rubriques' => 'سحب كل الأقسام',
617
-	'lien_site' => 'الموقع',
618
-	'lien_tout_decocher' => 'إزالة تحديد الكل',
619
-	'lien_tout_deplier' => 'بسط الكل',
620
-	'lien_tout_replier' => 'طي الكل',
621
-	'lien_tout_supprimer' => 'حذف الكل',
622
-	'lien_trier_nom' => 'فرز حسب الإسم  ',
623
-	'lien_trier_nombre_articles' => 'فرز حسب عدد المقالات',
624
-	'lien_trier_statut' => 'فرز حسب الوضع',
625
-	'lien_voir_en_ligne' => 'عرض مباشر:',
626
-	'logo_article' => 'رمز المقال',
627
-	'logo_auteur' => 'رمز المؤلف',
628
-	'logo_rubrique' => 'رمز القسم',
629
-	'logo_site' => 'رمز هذا الموقع',
630
-	'logo_standard_rubrique' => 'رمز الأقسام القياسي',
631
-	'logo_survol' => 'رمز الحوم',
593
+    // L
594
+    'label_bando_outils' => 'شريط الأدوات',
595
+    'label_bando_outils_afficher' => 'عرض الأدوات',
596
+    'label_bando_outils_masquer' => 'إخفاء الأدوات',
597
+    'label_choix_langue' => 'حدد لغتك',
598
+    'label_nom_fichier_connect' => 'أدخل الاسم الذي يستخدمه هذا الخادم',
599
+    'label_slogan_site' => 'شعار الموقع',
600
+    'label_taille_ecran' => 'عرض الشاشة',
601
+    'label_texte_et_icones_navigation' => 'قائمة التصفح',
602
+    'label_texte_et_icones_page' => 'عرض في الصفحة',
603
+    'ldap_correspondance' => 'استلام من الحقل @champ@',
604
+    'ldap_correspondance_1' => 'استلام حقول LDAP',
605
+    'ldap_correspondance_2' => 'لكل من حقول SPIP التالية، حدد اسم حقل LDAP المناسب. يمكن ترك حقل فارغ، استخدام المسافات او الفواصل لتجربة عدة حقول LDAP.',
606
+    'lien_ajouter_auteur' => 'إضافة هذا المؤلف',
607
+    'lien_ajouter_une_rubrique' => 'إضافة هذا القسم',
608
+    'lien_email' => 'البريد الالكتروني',
609
+    'lien_nom_site' => 'إسم الموقع:',
610
+    'lien_rapide_contenu' => 'الذهاب الى المحتوى',
611
+    'lien_rapide_navigation' => 'الذهاب اى التصفح',
612
+    'lien_rapide_recherche' => 'الذهاب الى البحث',
613
+    'lien_retirer_auteur' => 'حذف المؤلف',
614
+    'lien_retirer_rubrique' => 'سحب القسم',
615
+    'lien_retirer_tous_auteurs' => 'إزالة جميع المؤلفين',
616
+    'lien_retirer_toutes_rubriques' => 'سحب كل الأقسام',
617
+    'lien_site' => 'الموقع',
618
+    'lien_tout_decocher' => 'إزالة تحديد الكل',
619
+    'lien_tout_deplier' => 'بسط الكل',
620
+    'lien_tout_replier' => 'طي الكل',
621
+    'lien_tout_supprimer' => 'حذف الكل',
622
+    'lien_trier_nom' => 'فرز حسب الإسم  ',
623
+    'lien_trier_nombre_articles' => 'فرز حسب عدد المقالات',
624
+    'lien_trier_statut' => 'فرز حسب الوضع',
625
+    'lien_voir_en_ligne' => 'عرض مباشر:',
626
+    'logo_article' => 'رمز المقال',
627
+    'logo_auteur' => 'رمز المؤلف',
628
+    'logo_rubrique' => 'رمز القسم',
629
+    'logo_site' => 'رمز هذا الموقع',
630
+    'logo_standard_rubrique' => 'رمز الأقسام القياسي',
631
+    'logo_survol' => 'رمز الحوم',
632 632
 
633
-	// M
634
-	'menu_aide_installation_choix_base' => 'إختيار قاعدة البيانات',
635
-	'module_fichier_langue' => 'ملف اللغة',
636
-	'module_raccourci' => 'اختصار',
637
-	'module_texte_affiche' => 'النص المعروض',
638
-	'module_texte_explicatif' => 'يمكن ادراج الاختصارات التالية في صفحات الموقع النموذجية. سوف تُترجم آلياً في مختلف اللغات التي يتوافر لها ملف لغة.',
639
-	'module_texte_traduction' => 'ملف اللغة «@module@» متوافر بـ:',
640
-	'mois_non_connu' => 'غير معروف',
633
+    // M
634
+    'menu_aide_installation_choix_base' => 'إختيار قاعدة البيانات',
635
+    'module_fichier_langue' => 'ملف اللغة',
636
+    'module_raccourci' => 'اختصار',
637
+    'module_texte_affiche' => 'النص المعروض',
638
+    'module_texte_explicatif' => 'يمكن ادراج الاختصارات التالية في صفحات الموقع النموذجية. سوف تُترجم آلياً في مختلف اللغات التي يتوافر لها ملف لغة.',
639
+    'module_texte_traduction' => 'ملف اللغة «@module@» متوافر بـ:',
640
+    'mois_non_connu' => 'غير معروف',
641 641
 
642
-	// N
643
-	'nouvelle_version_spip' => 'ترقية SPIP رقم @version@ متوافرة الآن',
644
-	'nouvelle_version_spip_majeure' => 'إصدار جديد من رقم @version@ من SPIP متوافر الآن',
642
+    // N
643
+    'nouvelle_version_spip' => 'ترقية SPIP رقم @version@ متوافرة الآن',
644
+    'nouvelle_version_spip_majeure' => 'إصدار جديد من رقم @version@ من SPIP متوافر الآن',
645 645
 
646
-	// O
647
-	'onglet_contenu' => 'المحتوى',
648
-	'onglet_declarer_une_autre_base' => 'الاعلان عن قاعدة اخرى',
649
-	'onglet_discuter' => 'النقاش',
650
-	'onglet_interactivite' => 'التفاعلية',
651
-	'onglet_proprietes' => 'الخصائص',
652
-	'onglet_repartition_actuelle' => 'حالياً',
653
-	'onglet_sous_rubriques' => 'الأقسام الفرعية',
646
+    // O
647
+    'onglet_contenu' => 'المحتوى',
648
+    'onglet_declarer_une_autre_base' => 'الاعلان عن قاعدة اخرى',
649
+    'onglet_discuter' => 'النقاش',
650
+    'onglet_interactivite' => 'التفاعلية',
651
+    'onglet_proprietes' => 'الخصائص',
652
+    'onglet_repartition_actuelle' => 'حالياً',
653
+    'onglet_sous_rubriques' => 'الأقسام الفرعية',
654 654
 
655
-	// P
656
-	'page_pas_proxy' => 'لا يجب ان تمر هذه الصفحة عبر جهاز بروكسي',
657
-	'pas_de_proxy_pour' => 'لدى الضرورة، حدد الاجهزة او النطاقات التي لا يجب ان ينطبق عليها الوكيل (مثلاً: @exemple@) ',
658
-	'phpinfo' => 'إعدادات PHP',
659
-	'plugin_charge_paquet' => 'تحميل رزمة @name@',
660
-	'plugin_charger' => 'تحميل',
661
-	'plugin_erreur_charger' => 'خطأ: لا يمكن تحميل @zip@',
662
-	'plugin_erreur_droit1' => 'المجلد <code>@dest@</code> لا يسمح بالكتابة فيه.',
663
-	'plugin_erreur_droit2' => 'الرجاء التأكد من الامتيازات على هذا المجلد (وانشائه اذا اقتضى الامر)، او تثبيت الملفات عبر FTP.',
664
-	'plugin_erreur_zip' => 'فشل pclzip: خطأ @status@',
665
-	'plugin_etat_developpement' => 'قيد التطوير',
666
-	'plugin_etat_experimental' => 'اختباري',
667
-	'plugin_etat_stable' => 'ثابت',
668
-	'plugin_etat_test' => 'قيد الاختبار',
669
-	'plugin_impossible_activer' => 'لا يمكن تفعيل الملحق @plugin@',
670
-	'plugin_info_automatique1' => 'اذا اردت السماح بالتثبيت الآلي للملحقات، الرجاء:',
671
-	'plugin_info_automatique1_lib' => 'أذا رغبت في السماح بالتثبيت الآلي لهذه المكتبة، يرجى:',
672
-	'plugin_info_automatique2' => 'انشاء المجلد <code>@rep@</code>،',
673
-	'plugin_info_automatique3' => 'التأكد من ان جهاز الخدمة يمكنه الكتابة في هذا المجلد.',
674
-	'plugin_info_automatique_creer' => 'يتم انشاؤه في اصل الموقع.',
675
-	'plugin_info_automatique_exemples' => 'أمثلة:',
676
-	'plugin_info_automatique_ftp' => 'يمكنك تثبيت الملحقات بواسطة FTP في المجلد <tt>@rep@</tt>',
677
-	'plugin_info_automatique_lib' => 'بعض الملحقات تتطلب ايضاً القدرة على تحميل ملفات في مجلد <code>lib/</code> الذي يتم انشاؤه في اصل الموقع اذا لزم الامر.',
678
-	'plugin_info_automatique_liste' => 'لوائح الملحقات:',
679
-	'plugin_info_automatique_liste_officielle' => 'الملحقات الرسمية',
680
-	'plugin_info_automatique_liste_update' => 'تحديث اللوائح',
681
-	'plugin_info_automatique_ou' => 'او...',
682
-	'plugin_info_automatique_select' => 'اختر احد الملحقات ادناه: سيقوم SPIP بتحميله وتثبيته في المجلد <code>@rep@</code>. اذا كان هذا الملحق موجوداً سوف يتم تحديثه.',
683
-	'plugin_info_credit' => 'الحقوق',
684
-	'plugin_info_erreur_xml' => 'تعريف هذا الملحق غير صحيح',
685
-	'plugin_info_install_ok' => 'نجح التثبيت',
686
-	'plugin_info_necessite' => 'يتطلب:',
687
-	'plugin_info_non_compatible_spip' => 'لا يتوافق هذا الملحق مع هذا الإصدار من SPIP',
688
-	'plugin_info_plugins_dist_1' => 'تم تحميل الإضافات أدناه وتفعيلها في مجلد @plugins_dist@.',
689
-	'plugin_info_plugins_dist_2' => 'لا يمكن إيقافها.',
690
-	'plugin_info_telecharger' => 'للتحميل من @url@ والتثبيت في @rep@',
691
-	'plugin_info_upgrade_ok' => 'نجحت الترقية',
692
-	'plugin_librairies_installees' => 'المكتبات المثبتة',
693
-	'plugin_necessite_extension_php' => 'يتطلب ملحق PHP @plugin@ إصدار @version@.',
694
-	'plugin_necessite_extension_php_sans_version' => 'يتطلب ملحق  PHP @plugin@',
695
-	'plugin_necessite_lib' => 'هذا الملحق يتطلب المكتبة @lib@',
696
-	'plugin_necessite_php' => 'يتطلب @plugin@ إصدار @version@.',
697
-	'plugin_necessite_plugin' => 'يتطلب الملحق @plugin@ بالاصدار @version@.',
698
-	'plugin_necessite_plugin_sans_version' => 'يتطلب الملحق @plugin@',
699
-	'plugin_necessite_spip' => 'يتطلب SPIP باصدار @version@ على الاقل.',
700
-	'plugin_source' => 'المصدر:',
701
-	'plugin_titre_automatique' => 'تثبيت آلي',
702
-	'plugin_titre_automatique_ajouter' => 'إضافة ملحقات',
703
-	'plugin_titre_installation' => 'تثبيت الملحق @plugin@',
704
-	'plugin_titre_modifier' => 'ملحقاتي',
705
-	'plugin_utilise_extension_php' => 'إصدار ملحق  PHP @plugin@ يجب ان يكون @version@.',
706
-	'plugin_utilise_php' => 'إصدار @plugin@ يجب ان يكون @version@.',
707
-	'plugin_utilise_plugin' => 'إصدار الملحق @plugin@ يجب ان يكون @version@.',
708
-	'plugin_zip_active' => 'تابع للتفعيل',
709
-	'plugin_zip_adresse' => 'ادخل ادناه عنوان ملف zip لملحق مطلوب تحميله او عنوان لائحة ملاحق.',
710
-	'plugin_zip_adresse_champ' => 'عنوان الملحق او اللائحة ',
711
-	'plugin_zip_content' => 'يحتوي الملفات التالية (@taille@)، بانتظار تثبيتها في المجلد <code>@rep@</code>',
712
-	'plugin_zip_installe_finie' => 'تم ازالة ضغط الملف @zip@ وتثبيته.',
713
-	'plugin_zip_installe_rep_finie' => 'تم ازالة ضغط الملف @zip@ وتثبيته في المجلد @rep@',
714
-	'plugin_zip_installer' => 'بمكنك الآن تثبيته.',
715
-	'plugin_zip_telecharge' => 'تم تحميل الملف @zip@',
716
-	'plugins_actif_aucun' => 'لا يوجد ملحقات نشطة',
717
-	'plugins_actif_un' => 'ملحق واحد نشط.',
718
-	'plugins_actifs' => '@count@ ملحق ناشط.',
719
-	'plugins_actifs_liste' => 'النشطة',
720
-	'plugins_compte' => '@count@ ملحق',
721
-	'plugins_disponible_un' => 'ملحق واحد متاح.',
722
-	'plugins_disponibles' => '@count@ ملحق متوافر.',
723
-	'plugins_erreur' => 'خطأ في الملحقات: @plugins@',
724
-	'plugins_liste' => 'لائحة الملحقات',
725
-	'plugins_liste_dist' => 'الملحقات المقفلة',
726
-	'plugins_recents' => 'أحدث الملحقات.',
727
-	'plugins_tous_liste' => 'الكل',
728
-	'plugins_vue_hierarchie' => 'الهرمية',
729
-	'plugins_vue_liste' => 'لائحة',
730
-	'protocole_ldap' => 'إصدار البروتوكول:',
655
+    // P
656
+    'page_pas_proxy' => 'لا يجب ان تمر هذه الصفحة عبر جهاز بروكسي',
657
+    'pas_de_proxy_pour' => 'لدى الضرورة، حدد الاجهزة او النطاقات التي لا يجب ان ينطبق عليها الوكيل (مثلاً: @exemple@) ',
658
+    'phpinfo' => 'إعدادات PHP',
659
+    'plugin_charge_paquet' => 'تحميل رزمة @name@',
660
+    'plugin_charger' => 'تحميل',
661
+    'plugin_erreur_charger' => 'خطأ: لا يمكن تحميل @zip@',
662
+    'plugin_erreur_droit1' => 'المجلد <code>@dest@</code> لا يسمح بالكتابة فيه.',
663
+    'plugin_erreur_droit2' => 'الرجاء التأكد من الامتيازات على هذا المجلد (وانشائه اذا اقتضى الامر)، او تثبيت الملفات عبر FTP.',
664
+    'plugin_erreur_zip' => 'فشل pclzip: خطأ @status@',
665
+    'plugin_etat_developpement' => 'قيد التطوير',
666
+    'plugin_etat_experimental' => 'اختباري',
667
+    'plugin_etat_stable' => 'ثابت',
668
+    'plugin_etat_test' => 'قيد الاختبار',
669
+    'plugin_impossible_activer' => 'لا يمكن تفعيل الملحق @plugin@',
670
+    'plugin_info_automatique1' => 'اذا اردت السماح بالتثبيت الآلي للملحقات، الرجاء:',
671
+    'plugin_info_automatique1_lib' => 'أذا رغبت في السماح بالتثبيت الآلي لهذه المكتبة، يرجى:',
672
+    'plugin_info_automatique2' => 'انشاء المجلد <code>@rep@</code>،',
673
+    'plugin_info_automatique3' => 'التأكد من ان جهاز الخدمة يمكنه الكتابة في هذا المجلد.',
674
+    'plugin_info_automatique_creer' => 'يتم انشاؤه في اصل الموقع.',
675
+    'plugin_info_automatique_exemples' => 'أمثلة:',
676
+    'plugin_info_automatique_ftp' => 'يمكنك تثبيت الملحقات بواسطة FTP في المجلد <tt>@rep@</tt>',
677
+    'plugin_info_automatique_lib' => 'بعض الملحقات تتطلب ايضاً القدرة على تحميل ملفات في مجلد <code>lib/</code> الذي يتم انشاؤه في اصل الموقع اذا لزم الامر.',
678
+    'plugin_info_automatique_liste' => 'لوائح الملحقات:',
679
+    'plugin_info_automatique_liste_officielle' => 'الملحقات الرسمية',
680
+    'plugin_info_automatique_liste_update' => 'تحديث اللوائح',
681
+    'plugin_info_automatique_ou' => 'او...',
682
+    'plugin_info_automatique_select' => 'اختر احد الملحقات ادناه: سيقوم SPIP بتحميله وتثبيته في المجلد <code>@rep@</code>. اذا كان هذا الملحق موجوداً سوف يتم تحديثه.',
683
+    'plugin_info_credit' => 'الحقوق',
684
+    'plugin_info_erreur_xml' => 'تعريف هذا الملحق غير صحيح',
685
+    'plugin_info_install_ok' => 'نجح التثبيت',
686
+    'plugin_info_necessite' => 'يتطلب:',
687
+    'plugin_info_non_compatible_spip' => 'لا يتوافق هذا الملحق مع هذا الإصدار من SPIP',
688
+    'plugin_info_plugins_dist_1' => 'تم تحميل الإضافات أدناه وتفعيلها في مجلد @plugins_dist@.',
689
+    'plugin_info_plugins_dist_2' => 'لا يمكن إيقافها.',
690
+    'plugin_info_telecharger' => 'للتحميل من @url@ والتثبيت في @rep@',
691
+    'plugin_info_upgrade_ok' => 'نجحت الترقية',
692
+    'plugin_librairies_installees' => 'المكتبات المثبتة',
693
+    'plugin_necessite_extension_php' => 'يتطلب ملحق PHP @plugin@ إصدار @version@.',
694
+    'plugin_necessite_extension_php_sans_version' => 'يتطلب ملحق  PHP @plugin@',
695
+    'plugin_necessite_lib' => 'هذا الملحق يتطلب المكتبة @lib@',
696
+    'plugin_necessite_php' => 'يتطلب @plugin@ إصدار @version@.',
697
+    'plugin_necessite_plugin' => 'يتطلب الملحق @plugin@ بالاصدار @version@.',
698
+    'plugin_necessite_plugin_sans_version' => 'يتطلب الملحق @plugin@',
699
+    'plugin_necessite_spip' => 'يتطلب SPIP باصدار @version@ على الاقل.',
700
+    'plugin_source' => 'المصدر:',
701
+    'plugin_titre_automatique' => 'تثبيت آلي',
702
+    'plugin_titre_automatique_ajouter' => 'إضافة ملحقات',
703
+    'plugin_titre_installation' => 'تثبيت الملحق @plugin@',
704
+    'plugin_titre_modifier' => 'ملحقاتي',
705
+    'plugin_utilise_extension_php' => 'إصدار ملحق  PHP @plugin@ يجب ان يكون @version@.',
706
+    'plugin_utilise_php' => 'إصدار @plugin@ يجب ان يكون @version@.',
707
+    'plugin_utilise_plugin' => 'إصدار الملحق @plugin@ يجب ان يكون @version@.',
708
+    'plugin_zip_active' => 'تابع للتفعيل',
709
+    'plugin_zip_adresse' => 'ادخل ادناه عنوان ملف zip لملحق مطلوب تحميله او عنوان لائحة ملاحق.',
710
+    'plugin_zip_adresse_champ' => 'عنوان الملحق او اللائحة ',
711
+    'plugin_zip_content' => 'يحتوي الملفات التالية (@taille@)، بانتظار تثبيتها في المجلد <code>@rep@</code>',
712
+    'plugin_zip_installe_finie' => 'تم ازالة ضغط الملف @zip@ وتثبيته.',
713
+    'plugin_zip_installe_rep_finie' => 'تم ازالة ضغط الملف @zip@ وتثبيته في المجلد @rep@',
714
+    'plugin_zip_installer' => 'بمكنك الآن تثبيته.',
715
+    'plugin_zip_telecharge' => 'تم تحميل الملف @zip@',
716
+    'plugins_actif_aucun' => 'لا يوجد ملحقات نشطة',
717
+    'plugins_actif_un' => 'ملحق واحد نشط.',
718
+    'plugins_actifs' => '@count@ ملحق ناشط.',
719
+    'plugins_actifs_liste' => 'النشطة',
720
+    'plugins_compte' => '@count@ ملحق',
721
+    'plugins_disponible_un' => 'ملحق واحد متاح.',
722
+    'plugins_disponibles' => '@count@ ملحق متوافر.',
723
+    'plugins_erreur' => 'خطأ في الملحقات: @plugins@',
724
+    'plugins_liste' => 'لائحة الملحقات',
725
+    'plugins_liste_dist' => 'الملحقات المقفلة',
726
+    'plugins_recents' => 'أحدث الملحقات.',
727
+    'plugins_tous_liste' => 'الكل',
728
+    'plugins_vue_hierarchie' => 'الهرمية',
729
+    'plugins_vue_liste' => 'لائحة',
730
+    'protocole_ldap' => 'إصدار البروتوكول:',
731 731
 
732
-	// Q
733
-	'queue_executer_maintenant' => 'تنفيذ الآن',
734
-	'queue_info_purger' => 'يمكنك حذف كل الأعمال في الانتظار وتأصيل لائحة الأعمال الدورية',
735
-	'queue_nb_jobs_in_queue' => '@nb@ عمل بالانتظار',
736
-	'queue_next_job_in_nb_sec' => 'العمل القادم خلال @nb@ ثانية',
737
-	'queue_no_job_in_queue' => 'لا توجد أعمال بالانتظار',
738
-	'queue_one_job_in_queue' => 'عمل واحد بالانتظار',
739
-	'queue_priorite_tache' => 'الأفضلية',
740
-	'queue_purger_queue' => 'تأصيل لائحة الأعمال',
741
-	'queue_titre' => 'أعمال الخلفية',
732
+    // Q
733
+    'queue_executer_maintenant' => 'تنفيذ الآن',
734
+    'queue_info_purger' => 'يمكنك حذف كل الأعمال في الانتظار وتأصيل لائحة الأعمال الدورية',
735
+    'queue_nb_jobs_in_queue' => '@nb@ عمل بالانتظار',
736
+    'queue_next_job_in_nb_sec' => 'العمل القادم خلال @nb@ ثانية',
737
+    'queue_no_job_in_queue' => 'لا توجد أعمال بالانتظار',
738
+    'queue_one_job_in_queue' => 'عمل واحد بالانتظار',
739
+    'queue_priorite_tache' => 'الأفضلية',
740
+    'queue_purger_queue' => 'تأصيل لائحة الأعمال',
741
+    'queue_titre' => 'أعمال الخلفية',
742 742
 
743
-	// R
744
-	'repertoire_plugins' => 'دليل:',
745
-	'required' => '(إجباري)',
743
+    // R
744
+    'repertoire_plugins' => 'دليل:',
745
+    'required' => '(إجباري)',
746 746
 
747
-	// S
748
-	'sans_heure' => 'بدون توقيت الساعات',
749
-	'statut_admin_restreint' => 'إدارة محدودة',
750
-	'statut_webmestre' => 'المشرف على الموقع',
747
+    // S
748
+    'sans_heure' => 'بدون توقيت الساعات',
749
+    'statut_admin_restreint' => 'إدارة محدودة',
750
+    'statut_webmestre' => 'المشرف على الموقع',
751 751
 
752
-	// T
753
-	'tache_cron_asap' => 'مهمة CRON @function@ (في أسرع وقت)',
754
-	'tache_cron_secondes' => 'مهمةCRON @function@ (كل @nb@ ثانية)',
755
-	'taille_cache_image' => 'تحتل الصور التي حسبها SPIP آلياً (مصغرات مستندات، عناوين معروضة كصور، دالات رياضية بتنسيق TeX...) مساحة اجمالية تبلغ @taille@ في الدليل @dir@.',
756
-	'taille_cache_infinie' => 'لا يضع هذا الموقع اي حدود لحجم دليل الذاكرة المخبأة.',
757
-	'taille_cache_maxi' => 'يحاول SPIP الحد من حجم دليل الذاكرة المخبأة في هذا الموقع لكي لا يتعدى <b>@octets@</b> من البيانات.',
758
-	'taille_cache_moins_de' => 'حجم الذاكرة المخبأة أقل من @octets@.',
759
-	'taille_cache_octets' => 'يبلغ حجم الذاكرة المخبأة حالياً @octets@ تقريباً.',
760
-	'taille_cache_vide' => 'الذاكرة المخبأة فارغة.',
761
-	'taille_repertoire_cache' => 'حجم دليل الذاكرة المخبأة',
762
-	'text_article_propose_publication' => 'مقال معروض للنشر.',
763
-	'texte_acces_ldap_anonyme_1' => 'بعض خدام LDAP تمنع الدخول المغفل. في هذه الحال عليك بإدخال بيانات دخول أولية لتتمكن من البحث عن معلومات في الدليل لاحقاً. إلا أنه، في معظم الأحيان، يمكن ترك الحقول التالية فارغة.',
764
-	'texte_admin_effacer_01' => 'يقوم هذا الأمر بحذف  كامل محتوى قاعدة البيانات،
752
+    // T
753
+    'tache_cron_asap' => 'مهمة CRON @function@ (في أسرع وقت)',
754
+    'tache_cron_secondes' => 'مهمةCRON @function@ (كل @nb@ ثانية)',
755
+    'taille_cache_image' => 'تحتل الصور التي حسبها SPIP آلياً (مصغرات مستندات، عناوين معروضة كصور، دالات رياضية بتنسيق TeX...) مساحة اجمالية تبلغ @taille@ في الدليل @dir@.',
756
+    'taille_cache_infinie' => 'لا يضع هذا الموقع اي حدود لحجم دليل الذاكرة المخبأة.',
757
+    'taille_cache_maxi' => 'يحاول SPIP الحد من حجم دليل الذاكرة المخبأة في هذا الموقع لكي لا يتعدى <b>@octets@</b> من البيانات.',
758
+    'taille_cache_moins_de' => 'حجم الذاكرة المخبأة أقل من @octets@.',
759
+    'taille_cache_octets' => 'يبلغ حجم الذاكرة المخبأة حالياً @octets@ تقريباً.',
760
+    'taille_cache_vide' => 'الذاكرة المخبأة فارغة.',
761
+    'taille_repertoire_cache' => 'حجم دليل الذاكرة المخبأة',
762
+    'text_article_propose_publication' => 'مقال معروض للنشر.',
763
+    'texte_acces_ldap_anonyme_1' => 'بعض خدام LDAP تمنع الدخول المغفل. في هذه الحال عليك بإدخال بيانات دخول أولية لتتمكن من البحث عن معلومات في الدليل لاحقاً. إلا أنه، في معظم الأحيان، يمكن ترك الحقول التالية فارغة.',
764
+    'texte_admin_effacer_01' => 'يقوم هذا الأمر بحذف  كامل محتوى قاعدة البيانات،
765 765
 بما في ذلك كل  وسائط الوصول للمحررين والمدراء. بعد تنفيذه، يتحتم عليك
766 766
 إعادة تثبيت SPIP لإعادة إنتاج قاعدة جديدة ووسيط دخول أول مدير.',
767
-	'texte_adresse_annuaire_1' => 'إذا كان دليلك مثبت على الجهاز نفسه الذي يحتوي موقعك، فإنه على الأرجح «localhost»)).',
768
-	'texte_ajout_auteur' => 'تمت إضافة المؤلف التالي الى المقال:',
769
-	'texte_annuaire_ldap_1' => 'إذا كان لديك إمكتان وصول الى دليل LDAP، يمكنك استخدامه لجلب المستخدمين آلياً الى SPIP.',
770
-	'texte_article_statut' => 'هذا المقال:',
771
-	'texte_article_virtuel' => 'مقال إفتراضي',
772
-	'texte_article_virtuel_reference' => '<b>مقال إفتراضي: <b/>مقال مبوّب في موقع SPIP لديك، لكنه موجه الى عنوان آخر. لإلغاء التوجيه، قم بحذف العنوان أعلاه.',
773
-	'texte_aucun_resultat_auteur' => 'لا توجد نتائج لـ "@cherche_auteur@"',
774
-	'texte_auteur_messagerie' => 'يمكن لهذا الموقع رصد قائمة المحررين المتصلين بشكل دائم مما يتيح لك تبادل الرسائل في الوقت الحقيقي. يمكنك التقرير بعدم الظهور في هذه القائمة (وبالتالي تكون «مخفياً» بالنسبة للمستخدمين الآخرين).',
775
-	'texte_auteurs' => 'المؤلفون',
776
-	'texte_choix_base_1' => 'حدد قاعدة بياناتك:',
777
-	'texte_choix_base_2' => 'يحتوي خادم SQL على عدة قواعد بيانات.',
778
-	'texte_choix_base_3' => '<b>حدد</b> أدناه القاعدة التي خصصها مضيفك لك:',
779
-	'texte_choix_table_prefix' => 'بادئة الجداول:',
780
-	'texte_compte_element' => 'عنصر@count@',
781
-	'texte_compte_elements' => 'عنصر@count@',
782
-	'texte_conflit_edition_correction' => 'الرجاء التدقيق ادناه في الفوارق بين إصداري النص. يمكنك ايضاً تسخ تعديلاتك ثم البدء من جديد.',
783
-	'texte_connexion_mysql' => 'راجع المعلومات التي زودك بها مضيفك:  من المفترض ان تجد فيها خادم قاعدة البيانات وبيانات اتصالك الشخصية بالقاعدة.',
784
-	'texte_contenu_article' => '(محتوى المقال في بضع كلمات.)',
785
-	'texte_contenu_articles' => 'اعتماداً على تصميم موقعك، يمكنك اختيار
767
+    'texte_adresse_annuaire_1' => 'إذا كان دليلك مثبت على الجهاز نفسه الذي يحتوي موقعك، فإنه على الأرجح «localhost»)).',
768
+    'texte_ajout_auteur' => 'تمت إضافة المؤلف التالي الى المقال:',
769
+    'texte_annuaire_ldap_1' => 'إذا كان لديك إمكتان وصول الى دليل LDAP، يمكنك استخدامه لجلب المستخدمين آلياً الى SPIP.',
770
+    'texte_article_statut' => 'هذا المقال:',
771
+    'texte_article_virtuel' => 'مقال إفتراضي',
772
+    'texte_article_virtuel_reference' => '<b>مقال إفتراضي: <b/>مقال مبوّب في موقع SPIP لديك، لكنه موجه الى عنوان آخر. لإلغاء التوجيه، قم بحذف العنوان أعلاه.',
773
+    'texte_aucun_resultat_auteur' => 'لا توجد نتائج لـ "@cherche_auteur@"',
774
+    'texte_auteur_messagerie' => 'يمكن لهذا الموقع رصد قائمة المحررين المتصلين بشكل دائم مما يتيح لك تبادل الرسائل في الوقت الحقيقي. يمكنك التقرير بعدم الظهور في هذه القائمة (وبالتالي تكون «مخفياً» بالنسبة للمستخدمين الآخرين).',
775
+    'texte_auteurs' => 'المؤلفون',
776
+    'texte_choix_base_1' => 'حدد قاعدة بياناتك:',
777
+    'texte_choix_base_2' => 'يحتوي خادم SQL على عدة قواعد بيانات.',
778
+    'texte_choix_base_3' => '<b>حدد</b> أدناه القاعدة التي خصصها مضيفك لك:',
779
+    'texte_choix_table_prefix' => 'بادئة الجداول:',
780
+    'texte_compte_element' => 'عنصر@count@',
781
+    'texte_compte_elements' => 'عنصر@count@',
782
+    'texte_conflit_edition_correction' => 'الرجاء التدقيق ادناه في الفوارق بين إصداري النص. يمكنك ايضاً تسخ تعديلاتك ثم البدء من جديد.',
783
+    'texte_connexion_mysql' => 'راجع المعلومات التي زودك بها مضيفك:  من المفترض ان تجد فيها خادم قاعدة البيانات وبيانات اتصالك الشخصية بالقاعدة.',
784
+    'texte_contenu_article' => '(محتوى المقال في بضع كلمات.)',
785
+    'texte_contenu_articles' => 'اعتماداً على تصميم موقعك، يمكنك اختيار
786 786
 عدم استخدام بعض عناصر المقالات.
787 787
 إستخدم القائمة التالية لاختيار العناصر التي ستكون متاحة.',
788
-	'texte_crash_base' => 'إذا حصل عطل في
788
+    'texte_crash_base' => 'إذا حصل عطل في
789 789
 قاعدتك، يمكنك محاولة إصلاحها
790 790
 آلياً.',
791
-	'texte_creer_rubrique' => 'قبل التمكن من كتابة مقالات،<br />يجب عليك إنشاء قسم واحد على الأقل.',
792
-	'texte_date_creation_article' => 'تاريخ إنشاء المقال:',
793
-	'texte_date_creation_objet' => 'تاريخ الانشاء:', # on ajoute le &quot;:&quot;
794
-	'texte_date_publication_anterieure' => 'تاريخ النشر السابق:',
795
-	'texte_date_publication_anterieure_nonaffichee' => 'إخفاء تاريخ النشر السابق.',
796
-	'texte_date_publication_article' => 'تاريخ النشر:',
797
-	'texte_date_publication_objet' => 'تاريخ النشر:',
798
-	'texte_definir_comme_traduction_rubrique' => 'هذا القسم هو ترجمة للقسم رقم:',
799
-	'texte_descriptif_rapide' => 'وصف مقتضب',
800
-	'texte_effacer_base' => 'حذف قاعدة بيانات SPIP',
801
-	'texte_effacer_statistiques' => 'حذف الاحصاءات',
802
-	'texte_en_cours_validation' => 'المقالات والأخبار التالية معروضة للنشر.',
803
-	'texte_enrichir_mise_a_jour' => 'يمكنك استخدام «إختصارات الكتابة» لتحسين مظهر مادتك.',
804
-	'texte_fichier_authent' => '<b>هل يقوم SPIP بإنشاء الملفات الخاصة<tt>.htpasswd</tt>
791
+    'texte_creer_rubrique' => 'قبل التمكن من كتابة مقالات،<br />يجب عليك إنشاء قسم واحد على الأقل.',
792
+    'texte_date_creation_article' => 'تاريخ إنشاء المقال:',
793
+    'texte_date_creation_objet' => 'تاريخ الانشاء:', # on ajoute le &quot;:&quot;
794
+    'texte_date_publication_anterieure' => 'تاريخ النشر السابق:',
795
+    'texte_date_publication_anterieure_nonaffichee' => 'إخفاء تاريخ النشر السابق.',
796
+    'texte_date_publication_article' => 'تاريخ النشر:',
797
+    'texte_date_publication_objet' => 'تاريخ النشر:',
798
+    'texte_definir_comme_traduction_rubrique' => 'هذا القسم هو ترجمة للقسم رقم:',
799
+    'texte_descriptif_rapide' => 'وصف مقتضب',
800
+    'texte_effacer_base' => 'حذف قاعدة بيانات SPIP',
801
+    'texte_effacer_statistiques' => 'حذف الاحصاءات',
802
+    'texte_en_cours_validation' => 'المقالات والأخبار التالية معروضة للنشر.',
803
+    'texte_enrichir_mise_a_jour' => 'يمكنك استخدام «إختصارات الكتابة» لتحسين مظهر مادتك.',
804
+    'texte_fichier_authent' => '<b>هل يقوم SPIP بإنشاء الملفات الخاصة<tt>.htpasswd</tt>
805 805
 و<tt>.htpasswd-admin</tt> في المجلد @dossier@؟</b>
806 806
 <p>تستخدم هذه الملفات للحد من دخول المؤلفين
807 807
  والمدراء الى اجزاء اخرى من الموقع
@@ -809,42 +809,42 @@  discard block
 block discarded – undo
809 809
 إذا كنت لا تحتاج الى هذه الملفات يمكنك الإبقاء على القيمة
810 810
 الافتراضية لهذا الخيار (عدم إنشاء 
811 811
 الملفات).</p>',
812
-	'texte_informations_personnelles_1' => 'سيزودك النظام الآن بدخول شخصي الى الموقع.',
813
-	'texte_informations_personnelles_2' => '(ملاحظة: هذه إعادة تثبيت، اذا كان دخولك لا يزال يعمل، يمكنك',
814
-	'texte_introductif_article' => '(نص تقديمي للمقال)',
815
-	'texte_jeu_caractere' => 'يستحسن استخدام طقم الحروف الشامل (<tt>utf-8</tt>): يسمح هذا الطقم بعرض نصوص بجميع اللغات ولا يتسبب بمشاكل توافق مع برامج التصفح الحديثة.',
816
-	'texte_jeu_caractere_3' => 'موقعك يستخدم حالياً طقم الحروف:',
817
-	'texte_jeu_caractere_4' => 'اذا كان ذلك لا يتناسب مع واقع بياناتك (من جراء استرجاع نسخة احتياطية من القاعدة مثلاً) او اذا كنت <strong>تباشر في اطلاق هذا الموقع</strong> وترغب في استخدام طقم حروف آخر، الرجاء تحديد هذا الطقم هنا:',
818
-	'texte_login_ldap_1' => ')أتركه فارغاً للدخول المغفل أو قم بإدخال المسار الكامل، مثلاً «<tt>uid=salim, ou=users, dc=mon-domaine, dc=com</tt>»).',
819
-	'texte_login_precaution' => 'تحذير! هذا هو المعرّف الذي تتصل من خلاله الآن.
812
+    'texte_informations_personnelles_1' => 'سيزودك النظام الآن بدخول شخصي الى الموقع.',
813
+    'texte_informations_personnelles_2' => '(ملاحظة: هذه إعادة تثبيت، اذا كان دخولك لا يزال يعمل، يمكنك',
814
+    'texte_introductif_article' => '(نص تقديمي للمقال)',
815
+    'texte_jeu_caractere' => 'يستحسن استخدام طقم الحروف الشامل (<tt>utf-8</tt>): يسمح هذا الطقم بعرض نصوص بجميع اللغات ولا يتسبب بمشاكل توافق مع برامج التصفح الحديثة.',
816
+    'texte_jeu_caractere_3' => 'موقعك يستخدم حالياً طقم الحروف:',
817
+    'texte_jeu_caractere_4' => 'اذا كان ذلك لا يتناسب مع واقع بياناتك (من جراء استرجاع نسخة احتياطية من القاعدة مثلاً) او اذا كنت <strong>تباشر في اطلاق هذا الموقع</strong> وترغب في استخدام طقم حروف آخر، الرجاء تحديد هذا الطقم هنا:',
818
+    'texte_login_ldap_1' => ')أتركه فارغاً للدخول المغفل أو قم بإدخال المسار الكامل، مثلاً «<tt>uid=salim, ou=users, dc=mon-domaine, dc=com</tt>»).',
819
+    'texte_login_precaution' => 'تحذير! هذا هو المعرّف الذي تتصل من خلاله الآن.
820 820
 إستخدم هذه الاستمارة بحذر...',
821
-	'texte_messagerie_agenda' => 'يتيح نظام مراسلة لمحرري الموقع التواصل بين بعضهم مباشرة في المجال الخاص. وهو مرتبط بالمفكرة.',
822
-	'texte_mise_a_niveau_base_1' => 'لقد قمت بتحديث ملفات SPIP.
821
+    'texte_messagerie_agenda' => 'يتيح نظام مراسلة لمحرري الموقع التواصل بين بعضهم مباشرة في المجال الخاص. وهو مرتبط بالمفكرة.',
822
+    'texte_mise_a_niveau_base_1' => 'لقد قمت بتحديث ملفات SPIP.
823 823
 يجب الآن تحديث قاعدة بيانات
824 824
 الموقع.',
825
-	'texte_modifier_article' => 'تعديل المقال:',
826
-	'texte_multilinguisme' => 'اذا احتجت الى إدارة عناصر متعددة اللغات وبتصفح معقّد، يمكنك إضافة قائمة اختيار اللغة في هذه العناصر تتماشى مع تنظيم موقعك.',
827
-	'texte_multilinguisme_trad' => 'يمكنك ايضاً تفعيل نظام لإدارة الروابط بين الترجمات المختلفة لبعض العناصر.',
828
-	'texte_non_compresse' => 'غير مضغوط (خادمك لا يدعم هذه الوظيفة)',
829
-	'texte_nouvelle_version_spip_1' => 'لقد قمت بتثبيت إصدار جديد من SPIP.',
830
-	'texte_nouvelle_version_spip_2' => 'هذا الإصدار الجديد يتطلب تحديثاً أكثر عمقاً من المعتاد. إذا كنت مسؤولاً عن هذا الموقع، الرجاء حذف الملف @connect@ وإعادة تنفيذ عملية التثبيت من أجل تحديث بيانات الاتصال بالقاعدة. <p> ( ملاحظة: إذا نسيت بيانات الاتصال، أنظر في الملف @connect@ قبل حذفه...)</p>',
831
-	'texte_operation_echec' => 'عد الى الصفحة السابقة وحدد قاعدة بيانات أخرى أو قم بإنشاء قاعدة جديدة. تأكد من المعلومات التي حصلت عليها من مضيفك',
832
-	'texte_plus_trois_car' => 'أكثر من ثلاثة أحرف',
833
-	'texte_plusieurs_articles' => 'تم العثور على عدة مؤلفين لـ "@cherche_auteur@":',
834
-	'texte_port_annuaire' => '(القيمة الافتراضية مناسبة عموماً).',
835
-	'texte_presente_plugin' => 'تعرض هذه الصفحة لائحة بالملحقات المتوافرة في موقعك. يمكنك تفعيل الملحقات التي تريدها بالنقر على الخانات المناسبة لها.',
836
-	'texte_proposer_publication' => 'عندما تنتهي من مقالك،<br />يمكنك عرضه للنشر.',
837
-	'texte_proxy' => 'في بعض الحالات (انترانت، شبكات محمية...)، لا يمكن الوصول الى المواقع البعيدة (توثيق SPIP، المواقع المرخصة...) الا من خلال <b>جهاز وكيل</b>. اذا لزم الامر، حدد ادناه عنوان الجهاز على الشكل @proxy_en_cours@. بشكل عام اترك هذه الخانة فارغة.',
838
-	'texte_publication_articles_post_dates' => 'كيف يجب على SPIP  ان يتصرف بالنسبة للمقالات التي
825
+    'texte_modifier_article' => 'تعديل المقال:',
826
+    'texte_multilinguisme' => 'اذا احتجت الى إدارة عناصر متعددة اللغات وبتصفح معقّد، يمكنك إضافة قائمة اختيار اللغة في هذه العناصر تتماشى مع تنظيم موقعك.',
827
+    'texte_multilinguisme_trad' => 'يمكنك ايضاً تفعيل نظام لإدارة الروابط بين الترجمات المختلفة لبعض العناصر.',
828
+    'texte_non_compresse' => 'غير مضغوط (خادمك لا يدعم هذه الوظيفة)',
829
+    'texte_nouvelle_version_spip_1' => 'لقد قمت بتثبيت إصدار جديد من SPIP.',
830
+    'texte_nouvelle_version_spip_2' => 'هذا الإصدار الجديد يتطلب تحديثاً أكثر عمقاً من المعتاد. إذا كنت مسؤولاً عن هذا الموقع، الرجاء حذف الملف @connect@ وإعادة تنفيذ عملية التثبيت من أجل تحديث بيانات الاتصال بالقاعدة. <p> ( ملاحظة: إذا نسيت بيانات الاتصال، أنظر في الملف @connect@ قبل حذفه...)</p>',
831
+    'texte_operation_echec' => 'عد الى الصفحة السابقة وحدد قاعدة بيانات أخرى أو قم بإنشاء قاعدة جديدة. تأكد من المعلومات التي حصلت عليها من مضيفك',
832
+    'texte_plus_trois_car' => 'أكثر من ثلاثة أحرف',
833
+    'texte_plusieurs_articles' => 'تم العثور على عدة مؤلفين لـ "@cherche_auteur@":',
834
+    'texte_port_annuaire' => '(القيمة الافتراضية مناسبة عموماً).',
835
+    'texte_presente_plugin' => 'تعرض هذه الصفحة لائحة بالملحقات المتوافرة في موقعك. يمكنك تفعيل الملحقات التي تريدها بالنقر على الخانات المناسبة لها.',
836
+    'texte_proposer_publication' => 'عندما تنتهي من مقالك،<br />يمكنك عرضه للنشر.',
837
+    'texte_proxy' => 'في بعض الحالات (انترانت، شبكات محمية...)، لا يمكن الوصول الى المواقع البعيدة (توثيق SPIP، المواقع المرخصة...) الا من خلال <b>جهاز وكيل</b>. اذا لزم الامر، حدد ادناه عنوان الجهاز على الشكل @proxy_en_cours@. بشكل عام اترك هذه الخانة فارغة.',
838
+    'texte_publication_articles_post_dates' => 'كيف يجب على SPIP  ان يتصرف بالنسبة للمقالات التي
839 839
 تم تحديد تاريخها
840 840
 	في المستقبل؟',
841
-	'texte_rappel_selection_champs' => '[لا تنسى ان تحدد هذا الحقل بشكل صحيح]',
842
-	'texte_recalcul_page' => 'إذا كنت ترغب
841
+    'texte_rappel_selection_champs' => '[لا تنسى ان تحدد هذا الحقل بشكل صحيح]',
842
+    'texte_recalcul_page' => 'إذا كنت ترغب
843 843
 في تحديث صفحة واحدة، الأحرى بك تنفيذ هذه العملية من الموقع العمومي باستخدام زر «تحديث» الصفحة.
844 844
 ',
845
-	'texte_recuperer_base' => 'إصلاح قاعدة البيانات',
846
-	'texte_reference_mais_redirige' => 'مقال مبوّب في موقع SPIP لديك، لكنه موجه الى عنوان آخر.',
847
-	'texte_requetes_echouent' => '<b>عندما يفشل بعض إستفسارات SQL
845
+    'texte_recuperer_base' => 'إصلاح قاعدة البيانات',
846
+    'texte_reference_mais_redirige' => 'مقال مبوّب في موقع SPIP لديك، لكنه موجه الى عنوان آخر.',
847
+    'texte_requetes_echouent' => '<b>عندما يفشل بعض إستفسارات SQL
848 848
 بشكل منتظم ومتكرر دون أي سبب ظاهر، قد يكون
849 849
 العطل في قاعدة البيانات 
850 850
   نفسها.</b><p>
@@ -854,90 +854,90 @@  discard block
 block discarded – undo
854 854
 أدلة عن المشكلة...</p><p>
855 855
 إذا استمرت المشكلة إتصل
856 856
   بمضيف موقعك.</p>',
857
-	'texte_selection_langue_principale' => 'أدناه يمكنك تحديد «اللغة الأساسية » للموقع. لحسن الحظ لن يفرض عليك هذا الخيار تحرير مقالاتك باللغة المحددة، الا انه يحدد:
857
+    'texte_selection_langue_principale' => 'أدناه يمكنك تحديد «اللغة الأساسية » للموقع. لحسن الحظ لن يفرض عليك هذا الخيار تحرير مقالاتك باللغة المحددة، الا انه يحدد:
858 858
 <ul><li> تنسيق التواريخ الافتراضي في الموقع العام؛</li>
859 859
 <ul><li> طبيعة محرك الكتابة الذي يجب على SPIP استخدامه لتنسيق النصوص؛</li>
860 860
 <ul><li> اللغة المستخدمة في إستمارات الموقع العام؛</li>
861 861
 <ul><li> اللغة الافتراضية التي يعرضها المجال الخاص. </li></ul>',
862
-	'texte_sous_titre' => 'العنوان الفرعي',
863
-	'texte_statistiques_visites' => '(القضبان الداكنة: الأحد / المنحنيات الداكنة: التطور الوسطي)',
864
-	'texte_statut_attente_validation' => 'بانتظار التصديق',
865
-	'texte_statut_publies' => 'منشور',
866
-	'texte_statut_refuses' => 'مرفوض',
867
-	'texte_suppression_fichiers' => 'إستخدم هذا الأمر لحذف كل الملفات الموجودة
862
+    'texte_sous_titre' => 'العنوان الفرعي',
863
+    'texte_statistiques_visites' => '(القضبان الداكنة: الأحد / المنحنيات الداكنة: التطور الوسطي)',
864
+    'texte_statut_attente_validation' => 'بانتظار التصديق',
865
+    'texte_statut_publies' => 'منشور',
866
+    'texte_statut_refuses' => 'مرفوض',
867
+    'texte_suppression_fichiers' => 'إستخدم هذا الأمر لحذف كل الملفات الموجودة
868 868
 في الذاكرة المخبأة. ويتيح لك ذلك، من بين أمور أخرى، فرض تحديث كل الصفحات في حال
869 869
 قمت بإدخال تعديلات مهمة على الرسوم أو التصميم في الموقع. ',
870
-	'texte_sur_titre' => 'العنوان المدخل',
871
-	'texte_table_ok' => ': هذا الجدول صالح.',
872
-	'texte_tentative_recuperation' => 'محاولة إصلاح',
873
-	'texte_tenter_reparation' => 'محاولة إصلاح قاعدة البيانات',
874
-	'texte_test_proxy' => 'لتجربة الجهاز الوكيل، قم بإدخال عنوان موقع 
870
+    'texte_sur_titre' => 'العنوان المدخل',
871
+    'texte_table_ok' => ': هذا الجدول صالح.',
872
+    'texte_tentative_recuperation' => 'محاولة إصلاح',
873
+    'texte_tenter_reparation' => 'محاولة إصلاح قاعدة البيانات',
874
+    'texte_test_proxy' => 'لتجربة الجهاز الوكيل، قم بإدخال عنوان موقع 
875 875
 				ترغب في زيارته.',
876
-	'texte_titre_02' => 'الإسم:',
877
-	'texte_titre_obligatoire' => '<b>العنوان</b> [إجباري]',
878
-	'texte_travail_article' => '@nom_auteur_modif@ تعامل مع هذا المقال منذ @date_diff@ دقيقة',
879
-	'texte_travail_collaboratif' => 'كثيراً ما يحدث أن يتعاون
876
+    'texte_titre_02' => 'الإسم:',
877
+    'texte_titre_obligatoire' => '<b>العنوان</b> [إجباري]',
878
+    'texte_travail_article' => '@nom_auteur_modif@ تعامل مع هذا المقال منذ @date_diff@ دقيقة',
879
+    'texte_travail_collaboratif' => 'كثيراً ما يحدث أن يتعاون
880 880
 عدة محررين في تحرير المقال نفسه، فيمكن
881 881
 للنظام أن يعرض المقالات «المفتوحة» حديثاً
882 882
 بهدف تجنب إدخال تعديلات متزامنة عليها.
883 883
 هذا الخيار متوقف افتراضياً
884 884
 لتجنب عرض رسائل تحذير
885 885
 مفاجئة.',
886
-	'texte_vide' => 'فارغ',
887
-	'texte_vider_cache' => 'تفريغ الذاكرة المخبأة',
888
-	'titre_admin_tech' => 'صيانة تقنية',
889
-	'titre_admin_vider' => 'صيانة تقنية',
890
-	'titre_ajouter_un_auteur' => 'إضافة مؤلف',
891
-	'titre_ajouter_un_mot' => 'إضافة مفتاح',
892
-	'titre_cadre_afficher_article' => 'إظهار المقالات',
893
-	'titre_cadre_afficher_traductions' => 'عرض وضع الترجمات للغات التالية:',
894
-	'titre_cadre_ajouter_auteur' => 'إضافة مؤلف:',
895
-	'titre_cadre_interieur_rubrique' => 'في القسم',
896
-	'titre_cadre_numero_auteur' => 'مؤلف رقم',
897
-	'titre_cadre_numero_objet' => '@objet@ رقم:',
898
-	'titre_cadre_signature_obligatoire' => '<b>التوقيع<b> [إجباري]<br />',
899
-	'titre_config_contenu_notifications' => 'تبليغات',
900
-	'titre_config_contenu_prive' => 'في المجال الخاص',
901
-	'titre_config_contenu_public' => 'في الموقع العمومي',
902
-	'titre_config_fonctions' => 'إعداد الموقع',
903
-	'titre_config_langage' => 'إعداد اللغة',
904
-	'titre_configuration' => 'إعداد الموقع',
905
-	'titre_configurer_preferences' => 'إعداد التفضيلات',
906
-	'titre_configurer_preferences_menus' => 'إعداد تفضيلات القوائم',
907
-	'titre_conflit_edition' => 'تضارب لدى التحرير',
908
-	'titre_connexion_ldap' => 'خيارات: <b>إتصالLDAP </b>',
909
-	'titre_groupe_mots' => 'مجموعة مفاتيح:',
910
-	'titre_identite_site' => 'هوية الموقع',
911
-	'titre_langue_article' => 'لغة المقال',
912
-	'titre_langue_rubrique' => 'لغة القسم',
913
-	'titre_langue_trad_article' => 'لغة المقال وترجماته',
914
-	'titre_les_articles' => 'المقالات',
915
-	'titre_messagerie_agenda' => 'المراسلة والمفكرة',
916
-	'titre_naviguer_dans_le_site' => 'تصفح الموقع...',
917
-	'titre_nouvelle_rubrique' => 'قسم جديد',
918
-	'titre_numero_rubrique' => 'قسم رقم:',
919
-	'titre_page_articles_edit' => 'تعديل: @titre@',
920
-	'titre_page_articles_page' => 'المقالات',
921
-	'titre_page_articles_tous' => 'الموقع بالكامل',
922
-	'titre_page_calendrier' => 'روزنامة @nom_mois@ @annee@',
923
-	'titre_page_config_contenu' => 'إعداد الموقع',
924
-	'titre_page_delete_all' => 'حذف تام ونهائي',
925
-	'titre_page_recherche' => 'نتائج البحث @recherche@',
926
-	'titre_page_statistiques_referers' => 'الاحصاءات (الوصلات الآتية)',
927
-	'titre_page_upgrade' => 'ترقية SPIP',
928
-	'titre_preference_menus_favoris' => 'قائمة المفضلات',
929
-	'titre_publication_articles_post_dates' => 'نشر المقالات المؤجلة',
930
-	'titre_reparation' => 'إصلاح',
931
-	'titre_suivi_petition' => 'متابعة العرائض',
932
-	'tls_ldap' => 'أمان طبقة النقل:',
933
-	'trad_article_traduction' => 'كل اصدارات هذا المقال:',
934
-	'trad_delier' => 'ايقاف الربط هذا بهذه الترجمات',
935
-	'trad_lier' => 'هذا المقال هو ترجمة للمقال رقم:',
936
-	'trad_new' => 'كتابة ترجمة جديدة',
886
+    'texte_vide' => 'فارغ',
887
+    'texte_vider_cache' => 'تفريغ الذاكرة المخبأة',
888
+    'titre_admin_tech' => 'صيانة تقنية',
889
+    'titre_admin_vider' => 'صيانة تقنية',
890
+    'titre_ajouter_un_auteur' => 'إضافة مؤلف',
891
+    'titre_ajouter_un_mot' => 'إضافة مفتاح',
892
+    'titre_cadre_afficher_article' => 'إظهار المقالات',
893
+    'titre_cadre_afficher_traductions' => 'عرض وضع الترجمات للغات التالية:',
894
+    'titre_cadre_ajouter_auteur' => 'إضافة مؤلف:',
895
+    'titre_cadre_interieur_rubrique' => 'في القسم',
896
+    'titre_cadre_numero_auteur' => 'مؤلف رقم',
897
+    'titre_cadre_numero_objet' => '@objet@ رقم:',
898
+    'titre_cadre_signature_obligatoire' => '<b>التوقيع<b> [إجباري]<br />',
899
+    'titre_config_contenu_notifications' => 'تبليغات',
900
+    'titre_config_contenu_prive' => 'في المجال الخاص',
901
+    'titre_config_contenu_public' => 'في الموقع العمومي',
902
+    'titre_config_fonctions' => 'إعداد الموقع',
903
+    'titre_config_langage' => 'إعداد اللغة',
904
+    'titre_configuration' => 'إعداد الموقع',
905
+    'titre_configurer_preferences' => 'إعداد التفضيلات',
906
+    'titre_configurer_preferences_menus' => 'إعداد تفضيلات القوائم',
907
+    'titre_conflit_edition' => 'تضارب لدى التحرير',
908
+    'titre_connexion_ldap' => 'خيارات: <b>إتصالLDAP </b>',
909
+    'titre_groupe_mots' => 'مجموعة مفاتيح:',
910
+    'titre_identite_site' => 'هوية الموقع',
911
+    'titre_langue_article' => 'لغة المقال',
912
+    'titre_langue_rubrique' => 'لغة القسم',
913
+    'titre_langue_trad_article' => 'لغة المقال وترجماته',
914
+    'titre_les_articles' => 'المقالات',
915
+    'titre_messagerie_agenda' => 'المراسلة والمفكرة',
916
+    'titre_naviguer_dans_le_site' => 'تصفح الموقع...',
917
+    'titre_nouvelle_rubrique' => 'قسم جديد',
918
+    'titre_numero_rubrique' => 'قسم رقم:',
919
+    'titre_page_articles_edit' => 'تعديل: @titre@',
920
+    'titre_page_articles_page' => 'المقالات',
921
+    'titre_page_articles_tous' => 'الموقع بالكامل',
922
+    'titre_page_calendrier' => 'روزنامة @nom_mois@ @annee@',
923
+    'titre_page_config_contenu' => 'إعداد الموقع',
924
+    'titre_page_delete_all' => 'حذف تام ونهائي',
925
+    'titre_page_recherche' => 'نتائج البحث @recherche@',
926
+    'titre_page_statistiques_referers' => 'الاحصاءات (الوصلات الآتية)',
927
+    'titre_page_upgrade' => 'ترقية SPIP',
928
+    'titre_preference_menus_favoris' => 'قائمة المفضلات',
929
+    'titre_publication_articles_post_dates' => 'نشر المقالات المؤجلة',
930
+    'titre_reparation' => 'إصلاح',
931
+    'titre_suivi_petition' => 'متابعة العرائض',
932
+    'tls_ldap' => 'أمان طبقة النقل:',
933
+    'trad_article_traduction' => 'كل اصدارات هذا المقال:',
934
+    'trad_delier' => 'ايقاف الربط هذا بهذه الترجمات',
935
+    'trad_lier' => 'هذا المقال هو ترجمة للمقال رقم:',
936
+    'trad_new' => 'كتابة ترجمة جديدة',
937 937
 
938
-	// U
939
-	'utf8_convert_erreur_orig' => 'خطأ: طقم الحروف @charset@ غير مدعوم.',
938
+    // U
939
+    'utf8_convert_erreur_orig' => 'خطأ: طقم الحروف @charset@ غير مدعوم.',
940 940
 
941
-	// V
942
-	'version' => 'الإصدار:'
941
+    // V
942
+    'version' => 'الإصدار:'
943 943
 );
Please login to merge, or discard this patch.
ecrire/auth/sha256.inc.php 1 patch
Indentation   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -11,7 +11,7 @@  discard block
 block discarded – undo
11 11
  * @return string Le SHA de la chaîne
12 12
  */
13 13
 function spip_sha256($str) {
14
-	return hash('sha256', $str);
14
+    return hash('sha256', $str);
15 15
 }
16 16
 
17 17
 /**
@@ -22,5 +22,5 @@  discard block
 block discarded – undo
22 22
  * @see spip_sha256()
23 23
  */
24 24
 function _nano_sha256($str, $ig_func = true) {
25
-	return spip_sha256($str);
25
+    return spip_sha256($str);
26 26
 }
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/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.
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.
Indentation   +170 added lines, -170 removed lines patch added patch discarded remove patch
@@ -11,187 +11,187 @@
 block discarded – undo
11 11
 \***************************************************************************/
12 12
 
13 13
 if (!defined('_ECRIRE_INC_VERSION')) {
14
-	return;
14
+    return;
15 15
 }
16 16
 
17 17
 function trace_query_start() {
18
-	static $trace = '?';
19
-	if ($trace === '?' or defined('_DEBUG_TRACE_QUERIES')) {
20
-		if (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES) {
21
-			$trace = true;
22
-		}
23
-		else {
24
-			if (empty($GLOBALS['visiteur_session'])) {
25
-				// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
26
-				// car ici on ne sait pas si c'est un hit anonyme
27
-				// ou une requete SQL faite avant chargement de la session
28
-				$trace = (!empty($_GET['var_profile']) ? '?' : false);
29
-			}
30
-			else {
31
-				include_spip('inc/autoriser');
32
-				// gare au bouclage sur calcul de droits au premier appel
33
-				// A fortiori quand on demande une trace
34
-				$trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
35
-				$trace = (!empty($_GET['var_profile']) and autoriser('debug'));
36
-			}
37
-		}
38
-	}
39
-
40
-	return $trace ? microtime() : 0;
18
+    static $trace = '?';
19
+    if ($trace === '?' or defined('_DEBUG_TRACE_QUERIES')) {
20
+        if (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES) {
21
+            $trace = true;
22
+        }
23
+        else {
24
+            if (empty($GLOBALS['visiteur_session'])) {
25
+                // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
26
+                // car ici on ne sait pas si c'est un hit anonyme
27
+                // ou une requete SQL faite avant chargement de la session
28
+                $trace = (!empty($_GET['var_profile']) ? '?' : false);
29
+            }
30
+            else {
31
+                include_spip('inc/autoriser');
32
+                // gare au bouclage sur calcul de droits au premier appel
33
+                // A fortiori quand on demande une trace
34
+                $trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
35
+                $trace = (!empty($_GET['var_profile']) and autoriser('debug'));
36
+            }
37
+        }
38
+    }
39
+
40
+    return $trace ? microtime() : 0;
41 41
 }
42 42
 
43 43
 function trace_query_end($query, $start, $result, $erreur, $serveur = '') {
44
-	static $trace = '?';
45
-	if ($trace === '?') {
46
-		if (empty($GLOBALS['visiteur_session'])) {
47
-			// si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
48
-			// car ici on ne sait pas si c'est un hit anonyme
49
-			// ou une requete SQL faite avant chargement de la session
50
-			$trace = (!empty($_GET['var_profile']) ? '?' : false);
51
-		}
52
-		else {
53
-			include_spip('inc/autoriser');
54
-			// gare au bouclage sur calcul de droits au premier appel
55
-			// A fortiori quand on demande une trace
56
-			$trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
57
-			$trace = (!empty($_GET['var_profile']) and autoriser('debug'));
58
-		}
59
-	}
60
-	if ($start) {
61
-		$end = microtime();
62
-		[$usec, $sec] = explode(' ', $start);
63
-		[$usec2, $sec2] = explode(' ', $end);
64
-		$dt = $sec2 + $usec2 - $sec - $usec;
65
-		pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]);
66
-		if ($trace) {
67
-			trace_query_chrono($dt, $query, $result, $serveur);
68
-		}
69
-	}
70
-	// tracer les erreurs, sauf pour select, c'est fait dans abstract_sql
71
-	if ($trace and $erreur and !preg_match('/^select\b/i', $query)) {
72
-		erreur_squelette([sql_errno($serveur), $erreur, $query]);
73
-	}
74
-
75
-	return $result;
44
+    static $trace = '?';
45
+    if ($trace === '?') {
46
+        if (empty($GLOBALS['visiteur_session'])) {
47
+            // si un anonyme fait un var_profile on est oblige de remplir le tableau des temps en attendant de savoir
48
+            // car ici on ne sait pas si c'est un hit anonyme
49
+            // ou une requete SQL faite avant chargement de la session
50
+            $trace = (!empty($_GET['var_profile']) ? '?' : false);
51
+        }
52
+        else {
53
+            include_spip('inc/autoriser');
54
+            // gare au bouclage sur calcul de droits au premier appel
55
+            // A fortiori quand on demande une trace
56
+            $trace = false; // on ne trace pas la requete provoquee par autoriser('debug')
57
+            $trace = (!empty($_GET['var_profile']) and autoriser('debug'));
58
+        }
59
+    }
60
+    if ($start) {
61
+        $end = microtime();
62
+        [$usec, $sec] = explode(' ', $start);
63
+        [$usec2, $sec2] = explode(' ', $end);
64
+        $dt = $sec2 + $usec2 - $sec - $usec;
65
+        pipeline('trig_trace_query', ['query' => $query, 'start' => $start, 'end' => $end, 'time' => $dt, 'result' => $result, 'erreur' => $erreur, 'serveur' => $serveur]);
66
+        if ($trace) {
67
+            trace_query_chrono($dt, $query, $result, $serveur);
68
+        }
69
+    }
70
+    // tracer les erreurs, sauf pour select, c'est fait dans abstract_sql
71
+    if ($trace and $erreur and !preg_match('/^select\b/i', $query)) {
72
+        erreur_squelette([sql_errno($serveur), $erreur, $query]);
73
+    }
74
+
75
+    return $result;
76 76
 }
77 77
 
78 78
 function trace_query_chrono($dt, $query, $result, $serveur = '') {
79
-	include_spip('inc/filtres_mini');
80
-	static $tt = 0, $nb = 0;
81
-
82
-	$x = _request('var_mode_objet');
83
-	if (isset($GLOBALS['debug']['aucasou'])) {
84
-		[, $boucle, $serveur, $contexte] = $GLOBALS['debug']['aucasou'];
85
-		if ($x and !preg_match("/$boucle\$/", $x)) {
86
-			return;
87
-		}
88
-		if ($serveur) {
89
-			$boucle .= " ($serveur)";
90
-		}
91
-		$boucle = "<b>$boucle</b>";
92
-	} else {
93
-		if ($x) {
94
-			return;
95
-		}
96
-		$boucle = $contexte = '';
97
-	}
98
-
99
-	$tt += $dt;
100
-	$nb++;
101
-
102
-	$q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query));
103
-	$e = sql_explain($query, $serveur);
104
-	$r = str_replace('Resource id ', '', (is_object($result) ? get_class($result) : $result));
105
-	$GLOBALS['tableau_des_temps'][] = [$dt, $nb, $boucle, $q, $e, $r, $contexte];
79
+    include_spip('inc/filtres_mini');
80
+    static $tt = 0, $nb = 0;
81
+
82
+    $x = _request('var_mode_objet');
83
+    if (isset($GLOBALS['debug']['aucasou'])) {
84
+        [, $boucle, $serveur, $contexte] = $GLOBALS['debug']['aucasou'];
85
+        if ($x and !preg_match("/$boucle\$/", $x)) {
86
+            return;
87
+        }
88
+        if ($serveur) {
89
+            $boucle .= " ($serveur)";
90
+        }
91
+        $boucle = "<b>$boucle</b>";
92
+    } else {
93
+        if ($x) {
94
+            return;
95
+        }
96
+        $boucle = $contexte = '';
97
+    }
98
+
99
+    $tt += $dt;
100
+    $nb++;
101
+
102
+    $q = preg_replace('/([a-z)`])\s+([A-Z])/', "$1\n<br />$2", spip_htmlentities($query));
103
+    $e = sql_explain($query, $serveur);
104
+    $r = str_replace('Resource id ', '', (is_object($result) ? get_class($result) : $result));
105
+    $GLOBALS['tableau_des_temps'][] = [$dt, $nb, $boucle, $q, $e, $r, $contexte];
106 106
 }
107 107
 
108 108
 
109 109
 function chrono_requete($temps) {
110
-	$total = 0;
111
-	$hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
112
-	$t = $q = $n = $d = [];
113
-	// Totaliser les temps et completer le Explain
114
-	foreach ($temps as $key => $v) {
115
-		[$dt, $nb, $boucle, $query, $explain, $res, $contexte] = $v;
116
-		if (is_array($contexte)) {
117
-			$k = ($contexte[0] . " $boucle");
118
-			include_spip('public/compiler');
119
-			$env = reconstruire_contexte_compil($contexte);
120
-		} else {
121
-			$k = $env = $boucle;
122
-		}
123
-
124
-		$total += $dt;
125
-		$t[$key] = $dt;
126
-		$q[$key] = $nb;
127
-		if (!isset($d[$k])) {
128
-			$d[$k] = 0;
129
-			$n[$k] = 0;
130
-		}
131
-		$d[$k] += $dt;
132
-		++$n[$k];
133
-
134
-		if (!is_array($explain)) {
135
-			$explain = [];
136
-		}
137
-		foreach ($explain as $j => $v) {
138
-			$explain[$j] = "<tr><th>$j</th><td>"
139
-				. str_replace(';', '<br />', $v)
140
-				. '</td></tr>';
141
-		}
142
-		$e = "<table class='explain'>"
143
-			. '<caption>'
144
-			. $query
145
-			. '</caption>'
146
-			. "<tr><th>Time</th><td>$dt</td></tr>"
147
-			. "<tr><th>Order</th><td>$nb</td></tr>"
148
-			. "<tr><th>Res</th><td>$res</td></tr>"
149
-			. join('', $explain)
150
-			. '</table>';
151
-
152
-		$temps[$key] = [$e, $env, $k];
153
-	}
154
-	// Trier par temps d'execution decroissant
155
-	array_multisort($t, SORT_DESC, $q, $temps);
156
-	arsort($d);
157
-	$i = 1;
158
-	$t = [];
159
-	// Fabriquer les liens de navigations dans le tableau des temps
160
-	foreach ($temps as $k => $v) {
161
-		$titre = strip_tags($v[2]);
162
-		$href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
163
-		$href = str_replace("\\'", '&#39;', $href);
164
-
165
-		if (!isset($t[$v[2]])) {
166
-			$t[$v[2]] = [];
167
-		}
168
-		$t[$v[2]][] = "<span class='spip-debug-arg'> "
169
-			. "<a title='$titre' href='$href'>$i</a>"
170
-			. '</span>'
171
-			. ((count($t[$v[2]]) % 10 == 9) ? '<br />' : '');
172
-		$i++;
173
-	}
174
-
175
-	if ($d['']) {
176
-		$d[$hors] = $d[''];
177
-		$n[$hors] = $n[''];
178
-		$t[$hors] = $t[''];
179
-	}
180
-	unset($d['']);
181
-	// Fabriquer le tableau des liens de navigation dans le grand tableau
182
-	foreach ($d as $k => $v) {
183
-		$d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
184
-			. join('', $t[$k]);
185
-	}
186
-
187
-	$navigation = [
188
-		_T('zbug_statistiques'),
189
-		'<tr><td>'
190
-		. join("</td></tr>\n<tr><td>", $d)
191
-		. "</td></tr>\n"
192
-		. (# _request('var_mode_objet') ? '' :
193
-		('<tr><td>' . (is_countable($temps) ? count($temps) : 0) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
194
-	];
195
-
196
-	return [$temps, $navigation];
110
+    $total = 0;
111
+    $hors = '<i>' . _T('zbug_hors_compilation') . '</i>';
112
+    $t = $q = $n = $d = [];
113
+    // Totaliser les temps et completer le Explain
114
+    foreach ($temps as $key => $v) {
115
+        [$dt, $nb, $boucle, $query, $explain, $res, $contexte] = $v;
116
+        if (is_array($contexte)) {
117
+            $k = ($contexte[0] . " $boucle");
118
+            include_spip('public/compiler');
119
+            $env = reconstruire_contexte_compil($contexte);
120
+        } else {
121
+            $k = $env = $boucle;
122
+        }
123
+
124
+        $total += $dt;
125
+        $t[$key] = $dt;
126
+        $q[$key] = $nb;
127
+        if (!isset($d[$k])) {
128
+            $d[$k] = 0;
129
+            $n[$k] = 0;
130
+        }
131
+        $d[$k] += $dt;
132
+        ++$n[$k];
133
+
134
+        if (!is_array($explain)) {
135
+            $explain = [];
136
+        }
137
+        foreach ($explain as $j => $v) {
138
+            $explain[$j] = "<tr><th>$j</th><td>"
139
+                . str_replace(';', '<br />', $v)
140
+                . '</td></tr>';
141
+        }
142
+        $e = "<table class='explain'>"
143
+            . '<caption>'
144
+            . $query
145
+            . '</caption>'
146
+            . "<tr><th>Time</th><td>$dt</td></tr>"
147
+            . "<tr><th>Order</th><td>$nb</td></tr>"
148
+            . "<tr><th>Res</th><td>$res</td></tr>"
149
+            . join('', $explain)
150
+            . '</table>';
151
+
152
+        $temps[$key] = [$e, $env, $k];
153
+    }
154
+    // Trier par temps d'execution decroissant
155
+    array_multisort($t, SORT_DESC, $q, $temps);
156
+    arsort($d);
157
+    $i = 1;
158
+    $t = [];
159
+    // Fabriquer les liens de navigations dans le tableau des temps
160
+    foreach ($temps as $k => $v) {
161
+        $titre = strip_tags($v[2]);
162
+        $href = quote_amp($GLOBALS['REQUEST_URI']) . "#req$i";
163
+        $href = str_replace("\\'", '&#39;', $href);
164
+
165
+        if (!isset($t[$v[2]])) {
166
+            $t[$v[2]] = [];
167
+        }
168
+        $t[$v[2]][] = "<span class='spip-debug-arg'> "
169
+            . "<a title='$titre' href='$href'>$i</a>"
170
+            . '</span>'
171
+            . ((count($t[$v[2]]) % 10 == 9) ? '<br />' : '');
172
+        $i++;
173
+    }
174
+
175
+    if ($d['']) {
176
+        $d[$hors] = $d[''];
177
+        $n[$hors] = $n[''];
178
+        $t[$hors] = $t[''];
179
+    }
180
+    unset($d['']);
181
+    // Fabriquer le tableau des liens de navigation dans le grand tableau
182
+    foreach ($d as $k => $v) {
183
+        $d[$k] = $n[$k] . "</td><td>$k</td><td class='time'>$v</td><td class='liste-reqs'>"
184
+            . join('', $t[$k]);
185
+    }
186
+
187
+    $navigation = [
188
+        _T('zbug_statistiques'),
189
+        '<tr><td>'
190
+        . join("</td></tr>\n<tr><td>", $d)
191
+        . "</td></tr>\n"
192
+        . (# _request('var_mode_objet') ? '' :
193
+        ('<tr><td>' . (is_countable($temps) ? count($temps) : 0) . '</td><td>' . _T('info_total') . '</td><td class="time">' . $total . '</td><td></td></tr>'))
194
+    ];
195
+
196
+    return [$temps, $navigation];
197 197
 }
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.
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.
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
 /**
@@ -1708,19 +1708,19 @@  discard block
 block discarded – undo
1708 1708
  *     - string : requete sql, si $requeter = true
1709 1709
  **/
1710 1710
 function spip_sqlite_table_exists(string $table, $serveur = '', $requeter = true) {
1711
-	$r = spip_sqlite_query(
1712
-		'SELECT name FROM sqlite_master WHERE'
1713
-		. ' type=\'table\''
1714
-		. ' AND name=' . spip_sqlite_quote($table, 'string')
1715
-		. ' AND name NOT LIKE \'sqlite_%\'',
1716
-		$serveur,
1717
-		$requeter
1718
-	);
1719
-	if (!$requeter) {
1720
-		return $r;
1721
-	}
1722
-	$res = spip_sqlite_fetch($r);
1723
-	return (bool) $res;
1711
+    $r = spip_sqlite_query(
1712
+        'SELECT name FROM sqlite_master WHERE'
1713
+        . ' type=\'table\''
1714
+        . ' AND name=' . spip_sqlite_quote($table, 'string')
1715
+        . ' AND name NOT LIKE \'sqlite_%\'',
1716
+        $serveur,
1717
+        $requeter
1718
+    );
1719
+    if (!$requeter) {
1720
+        return $r;
1721
+    }
1722
+    $res = spip_sqlite_fetch($r);
1723
+    return (bool) $res;
1724 1724
 }
1725 1725
 
1726 1726
 define('_SQLITE_RE_SHOW_TABLE', '/^[^(),]*\(((?:[^()]*\((?:[^()]*\([^()]*\))?[^()]*\)[^()]*)*[^()]*)\)[^()]*$/');
@@ -1743,129 +1743,129 @@  discard block
 block discarded – undo
1743 1743
  *     - array description de la table sinon
1744 1744
  */
1745 1745
 function spip_sqlite_showtable($nom_table, $serveur = '', $requeter = true) {
1746
-	$query =
1747
-		'SELECT sql, type FROM'
1748
-		. ' (SELECT * FROM sqlite_master UNION ALL'
1749
-		. ' SELECT * FROM sqlite_temp_master)'
1750
-		. " WHERE tbl_name LIKE '$nom_table'"
1751
-		. " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'"
1752
-		. ' ORDER BY substr(type,2,1), name';
1753
-
1754
-	$a = spip_sqlite_query($query, $serveur, $requeter);
1755
-	if (!$a) {
1756
-		return '';
1757
-	}
1758
-	if (!$requeter) {
1759
-		return $a;
1760
-	}
1761
-	if (!($a = spip_sqlite_fetch($a, null, $serveur))) {
1762
-		return '';
1763
-	}
1764
-	$vue = ($a['type'] == 'view'); // table | vue
1765
-
1766
-	// c'est une table
1767
-	// il faut parser le create
1768
-	if (!$vue) {
1769
-		if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) {
1770
-			return '';
1771
-		} else {
1772
-			$desc = $r[1];
1773
-			// extraction d'une KEY éventuelle en prenant garde de ne pas
1774
-			// relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
1775
-			if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
1776
-				$namedkeys = $r[2];
1777
-				$desc = $r[1];
1778
-			} else {
1779
-				$namedkeys = '';
1780
-			}
1781
-
1782
-			$fields = [];
1783
-			$keys = [];
1784
-
1785
-			// enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber
1786
-			// par exemple s'il contiennent une virgule.
1787
-			// /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager !
1788
-			list($desc, $echaps) = query_echappe_textes($desc);
1789
-
1790
-			// separer toutes les descriptions de champs, separes par des virgules
1791
-			# /!\ explode peut exploser aussi DECIMAL(10,2) !
1792
-			$k_precedent = null;
1793
-			foreach (explode(',', $desc) as $v) {
1794
-				preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r);
1795
-				// Les cles de champs peuvent etre entourees
1796
-				// de guillements doubles " , simples ', graves ` ou de crochets [ ],  ou rien.
1797
-				// http://www.sqlite.org/lang_keywords.html
1798
-				$k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]...
1799
-				if ($char = strpbrk($k[0], '\'"[`')) {
1800
-					$k = trim($k, $char);
1801
-					if ($char == '[') {
1802
-						$k = rtrim($k, ']');
1803
-					}
1804
-				}
1805
-				$def = query_reinjecte_textes($r[2], $echaps); // valeur du champ
1806
-
1807
-				// rustine pour DECIMAL(10,2)
1808
-				// s'il y a une parenthèse fermante dans la clé
1809
-				// ou dans la définition sans qu'il n'y ait une ouverture avant
1810
-				if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1811
-					$fields[$k_precedent] .= ',' . $k . ' ' . $def;
1812
-					continue;
1813
-				}
1814
-
1815
-				// la primary key peut etre dans une des descriptions de champs
1816
-				// et non en fin de table, cas encore decouvert avec Sqlite Manager
1817
-				if (stripos($r[2], 'PRIMARY KEY') !== false) {
1818
-					$keys['PRIMARY KEY'] = $k;
1819
-				}
1820
-
1821
-				$fields[$k] = $def;
1822
-				$k_precedent = $k;
1823
-			}
1824
-			// key inclues dans la requete
1825
-			foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
1826
-				if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
1827
-					$k = str_replace('`', '', trim($r[1]));
1828
-					$t = trim(strtolower(str_replace('`', '', $r[2])), '"');
1829
-					if ($k && !isset($keys[$k])) {
1830
-						$keys[$k] = $t;
1831
-					} else {
1832
-						$keys[] = $t;
1833
-					}
1834
-				}
1835
-			}
1836
-			// sinon ajouter les key index
1837
-			$query =
1838
-				'SELECT name,sql FROM'
1839
-				. ' (SELECT * FROM sqlite_master UNION ALL'
1840
-				. ' SELECT * FROM sqlite_temp_master)'
1841
-				. " WHERE tbl_name LIKE '$nom_table'"
1842
-				. " AND type='index' AND name NOT LIKE 'sqlite_%'"
1843
-				. 'ORDER BY substr(type,2,1), name';
1844
-			$a = spip_sqlite_query($query, $serveur, $requeter);
1845
-			while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1846
-				$key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1847
-				$keytype = 'KEY';
1848
-				if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1849
-					$keytype = 'UNIQUE KEY';
1850
-				}
1851
-				$colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1852
-				$keys[$keytype . ' ' . $key] = $colonnes;
1853
-			}
1854
-		}
1855
-	} // c'est une vue, on liste les champs disponibles simplement
1856
-	else {
1857
-		if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1
1858
-			$fields = [];
1859
-			foreach ($res as $c => $v) {
1860
-				$fields[$c] = '';
1861
-			}
1862
-			$keys = [];
1863
-		} else {
1864
-			return '';
1865
-		}
1866
-	}
1867
-
1868
-	return ['field' => $fields, 'key' => $keys];
1746
+    $query =
1747
+        'SELECT sql, type FROM'
1748
+        . ' (SELECT * FROM sqlite_master UNION ALL'
1749
+        . ' SELECT * FROM sqlite_temp_master)'
1750
+        . " WHERE tbl_name LIKE '$nom_table'"
1751
+        . " AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'"
1752
+        . ' ORDER BY substr(type,2,1), name';
1753
+
1754
+    $a = spip_sqlite_query($query, $serveur, $requeter);
1755
+    if (!$a) {
1756
+        return '';
1757
+    }
1758
+    if (!$requeter) {
1759
+        return $a;
1760
+    }
1761
+    if (!($a = spip_sqlite_fetch($a, null, $serveur))) {
1762
+        return '';
1763
+    }
1764
+    $vue = ($a['type'] == 'view'); // table | vue
1765
+
1766
+    // c'est une table
1767
+    // il faut parser le create
1768
+    if (!$vue) {
1769
+        if (!preg_match(_SQLITE_RE_SHOW_TABLE, array_shift($a), $r)) {
1770
+            return '';
1771
+        } else {
1772
+            $desc = $r[1];
1773
+            // extraction d'une KEY éventuelle en prenant garde de ne pas
1774
+            // relever un champ dont le nom contient KEY (ex. ID_WHISKEY)
1775
+            if (preg_match('/^(.*?),([^,]*\sKEY[ (].*)$/s', $desc, $r)) {
1776
+                $namedkeys = $r[2];
1777
+                $desc = $r[1];
1778
+            } else {
1779
+                $namedkeys = '';
1780
+            }
1781
+
1782
+            $fields = [];
1783
+            $keys = [];
1784
+
1785
+            // enlever les contenus des valeurs DEFAULT 'xxx' qui pourraient perturber
1786
+            // par exemple s'il contiennent une virgule.
1787
+            // /!\ cela peut aussi echapper le nom des champs si la table a eu des operations avec SQLite Manager !
1788
+            list($desc, $echaps) = query_echappe_textes($desc);
1789
+
1790
+            // separer toutes les descriptions de champs, separes par des virgules
1791
+            # /!\ explode peut exploser aussi DECIMAL(10,2) !
1792
+            $k_precedent = null;
1793
+            foreach (explode(',', $desc) as $v) {
1794
+                preg_match('/^\s*([^\s]+)\s+(.*)/', $v, $r);
1795
+                // Les cles de champs peuvent etre entourees
1796
+                // de guillements doubles " , simples ', graves ` ou de crochets [ ],  ou rien.
1797
+                // http://www.sqlite.org/lang_keywords.html
1798
+                $k = strtolower(query_reinjecte_textes($r[1], $echaps)); // champ, "champ", [champ]...
1799
+                if ($char = strpbrk($k[0], '\'"[`')) {
1800
+                    $k = trim($k, $char);
1801
+                    if ($char == '[') {
1802
+                        $k = rtrim($k, ']');
1803
+                    }
1804
+                }
1805
+                $def = query_reinjecte_textes($r[2], $echaps); // valeur du champ
1806
+
1807
+                // rustine pour DECIMAL(10,2)
1808
+                // s'il y a une parenthèse fermante dans la clé
1809
+                // ou dans la définition sans qu'il n'y ait une ouverture avant
1810
+                if (false !== strpos($k, ')') or preg_match('/^[^\(]*\)/', $def)) {
1811
+                    $fields[$k_precedent] .= ',' . $k . ' ' . $def;
1812
+                    continue;
1813
+                }
1814
+
1815
+                // la primary key peut etre dans une des descriptions de champs
1816
+                // et non en fin de table, cas encore decouvert avec Sqlite Manager
1817
+                if (stripos($r[2], 'PRIMARY KEY') !== false) {
1818
+                    $keys['PRIMARY KEY'] = $k;
1819
+                }
1820
+
1821
+                $fields[$k] = $def;
1822
+                $k_precedent = $k;
1823
+            }
1824
+            // key inclues dans la requete
1825
+            foreach (preg_split('/\)\s*(,|$)/', $namedkeys) as $v) {
1826
+                if (preg_match('/^\s*([^(]*)\(([^(]*(\(\d+\))?)$/', $v, $r)) {
1827
+                    $k = str_replace('`', '', trim($r[1]));
1828
+                    $t = trim(strtolower(str_replace('`', '', $r[2])), '"');
1829
+                    if ($k && !isset($keys[$k])) {
1830
+                        $keys[$k] = $t;
1831
+                    } else {
1832
+                        $keys[] = $t;
1833
+                    }
1834
+                }
1835
+            }
1836
+            // sinon ajouter les key index
1837
+            $query =
1838
+                'SELECT name,sql FROM'
1839
+                . ' (SELECT * FROM sqlite_master UNION ALL'
1840
+                . ' SELECT * FROM sqlite_temp_master)'
1841
+                . " WHERE tbl_name LIKE '$nom_table'"
1842
+                . " AND type='index' AND name NOT LIKE 'sqlite_%'"
1843
+                . 'ORDER BY substr(type,2,1), name';
1844
+            $a = spip_sqlite_query($query, $serveur, $requeter);
1845
+            while ($r = spip_sqlite_fetch($a, null, $serveur)) {
1846
+                $key = str_replace($nom_table . '_', '', $r['name']); // enlever le nom de la table ajoute a l'index
1847
+                $keytype = 'KEY';
1848
+                if (strpos($r['sql'], 'UNIQUE INDEX') !== false) {
1849
+                    $keytype = 'UNIQUE KEY';
1850
+                }
1851
+                $colonnes = preg_replace(',.*\((.*)\).*,', '$1', $r['sql']);
1852
+                $keys[$keytype . ' ' . $key] = $colonnes;
1853
+            }
1854
+        }
1855
+    } // c'est une vue, on liste les champs disponibles simplement
1856
+    else {
1857
+        if ($res = sql_fetsel('*', $nom_table, '', '', '', '1', '', $serveur)) { // limit 1
1858
+            $fields = [];
1859
+            foreach ($res as $c => $v) {
1860
+                $fields[$c] = '';
1861
+            }
1862
+            $keys = [];
1863
+        } else {
1864
+            return '';
1865
+        }
1866
+    }
1867
+
1868
+    return ['field' => $fields, 'key' => $keys];
1869 1869
 }
1870 1870
 
1871 1871
 
@@ -1891,22 +1891,22 @@  discard block
 block discarded – undo
1891 1891
  *     - array Tableau décrivant la requête et son temps d'exécution si var_profile est actif
1892 1892
  */
1893 1893
 function spip_sqlite_update($table, $champs, $where = '', $desc = '', $serveur = '', $requeter = true) {
1894
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1895
-	$champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1894
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1895
+    $champs = _sqlite_ajouter_champs_timestamp($table, $champs, $desc, $serveur);
1896 1896
 
1897
-	$set = [];
1898
-	foreach ($champs as $champ => $val) {
1899
-		$set[] = $champ . "=$val";
1900
-	}
1901
-	if (!empty($set)) {
1902
-		return spip_sqlite_query(
1903
-			_sqlite_calculer_expression('UPDATE', $table, ',')
1904
-			. _sqlite_calculer_expression('SET', $set, ',')
1905
-			. _sqlite_calculer_expression('WHERE', $where),
1906
-			$serveur,
1907
-			$requeter
1908
-		);
1909
-	}
1897
+    $set = [];
1898
+    foreach ($champs as $champ => $val) {
1899
+        $set[] = $champ . "=$val";
1900
+    }
1901
+    if (!empty($set)) {
1902
+        return spip_sqlite_query(
1903
+            _sqlite_calculer_expression('UPDATE', $table, ',')
1904
+            . _sqlite_calculer_expression('SET', $set, ',')
1905
+            . _sqlite_calculer_expression('WHERE', $where),
1906
+            $serveur,
1907
+            $requeter
1908
+        );
1909
+    }
1910 1910
 }
1911 1911
 
1912 1912
 
@@ -1936,38 +1936,38 @@  discard block
 block discarded – undo
1936 1936
  */
1937 1937
 function spip_sqlite_updateq($table, $champs, $where = '', $desc = [], $serveur = '', $requeter = true) {
1938 1938
 
1939
-	if (!$champs) {
1940
-		return;
1941
-	}
1942
-	if (!$desc) {
1943
-		$desc = description_table($table, $serveur);
1944
-	}
1945
-	if (!$desc) {
1946
-		die("$table insertion sans description");
1947
-	}
1948
-	$fields = $desc['field'];
1949
-
1950
-	$set = [];
1951
-	foreach ($champs as $champ => $val) {
1952
-		$set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1953
-	}
1954
-
1955
-	// recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1956
-	// attention ils sont deja quotes
1957
-	$maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1958
-	foreach ($maj as $champ => $val) {
1959
-		if (!isset($set[$champ])) {
1960
-			$set[$champ] = $champ . '=' . $val;
1961
-		}
1962
-	}
1963
-
1964
-	return spip_sqlite_query(
1965
-		_sqlite_calculer_expression('UPDATE', $table, ',')
1966
-		. _sqlite_calculer_expression('SET', $set, ',')
1967
-		. _sqlite_calculer_expression('WHERE', $where),
1968
-		$serveur,
1969
-		$requeter
1970
-	);
1939
+    if (!$champs) {
1940
+        return;
1941
+    }
1942
+    if (!$desc) {
1943
+        $desc = description_table($table, $serveur);
1944
+    }
1945
+    if (!$desc) {
1946
+        die("$table insertion sans description");
1947
+    }
1948
+    $fields = $desc['field'];
1949
+
1950
+    $set = [];
1951
+    foreach ($champs as $champ => $val) {
1952
+        $set[$champ] = $champ . '=' . _sqlite_calculer_cite($val, isset($fields[$champ]) ? $fields[$champ] : '');
1953
+    }
1954
+
1955
+    // recherche de champs 'timestamp' pour mise a jour auto de ceux-ci
1956
+    // attention ils sont deja quotes
1957
+    $maj = _sqlite_ajouter_champs_timestamp($table, [], $desc, $serveur);
1958
+    foreach ($maj as $champ => $val) {
1959
+        if (!isset($set[$champ])) {
1960
+            $set[$champ] = $champ . '=' . $val;
1961
+        }
1962
+    }
1963
+
1964
+    return spip_sqlite_query(
1965
+        _sqlite_calculer_expression('UPDATE', $table, ',')
1966
+        . _sqlite_calculer_expression('SET', $set, ',')
1967
+        . _sqlite_calculer_expression('WHERE', $where),
1968
+        $serveur,
1969
+        $requeter
1970
+    );
1971 1971
 }
1972 1972
 
1973 1973
 
@@ -1985,17 +1985,17 @@  discard block
 block discarded – undo
1985 1985
  * @return void
1986 1986
  */
1987 1987
 function _sqlite_init() {
1988
-	if (!defined('_DIR_DB')) {
1989
-		define('_DIR_DB', _DIR_ETC . 'bases/');
1990
-	}
1991
-	if (!defined('_SQLITE_CHMOD')) {
1992
-		define('_SQLITE_CHMOD', _SPIP_CHMOD);
1993
-	}
1988
+    if (!defined('_DIR_DB')) {
1989
+        define('_DIR_DB', _DIR_ETC . 'bases/');
1990
+    }
1991
+    if (!defined('_SQLITE_CHMOD')) {
1992
+        define('_SQLITE_CHMOD', _SPIP_CHMOD);
1993
+    }
1994 1994
 
1995
-	if (!is_dir($d = _DIR_DB)) {
1996
-		include_spip('inc/flock');
1997
-		sous_repertoire($d);
1998
-	}
1995
+    if (!is_dir($d = _DIR_DB)) {
1996
+        include_spip('inc/flock');
1997
+        sous_repertoire($d);
1998
+    }
1999 1999
 }
2000 2000
 
2001 2001
 
@@ -2009,20 +2009,20 @@  discard block
 block discarded – undo
2009 2009
  * @return bool|int
2010 2010
  */
2011 2011
 function _sqlite_is_version($version = '', $link = '', $serveur = '', $requeter = true) {
2012
-	if ($link === '') {
2013
-		$link = _sqlite_link($serveur);
2014
-	}
2015
-	if (!$link) {
2016
-		return false;
2017
-	}
2012
+    if ($link === '') {
2013
+        $link = _sqlite_link($serveur);
2014
+    }
2015
+    if (!$link) {
2016
+        return false;
2017
+    }
2018 2018
 
2019
-	$v = 3;
2019
+    $v = 3;
2020 2020
 
2021
-	if (!$version) {
2022
-		return $v;
2023
-	}
2021
+    if (!$version) {
2022
+        return $v;
2023
+    }
2024 2024
 
2025
-	return ($version == $v);
2025
+    return ($version == $v);
2026 2026
 }
2027 2027
 
2028 2028
 
@@ -2033,9 +2033,9 @@  discard block
 block discarded – undo
2033 2033
  * @return PDO Information de connexion pour SQLite
2034 2034
  */
2035 2035
 function _sqlite_link($serveur = '') {
2036
-	$link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
2036
+    $link = &$GLOBALS['connexions'][$serveur ? $serveur : 0]['link'];
2037 2037
 
2038
-	return $link;
2038
+    return $link;
2039 2039
 }
2040 2040
 
2041 2041
 
@@ -2050,52 +2050,52 @@  discard block
 block discarded – undo
2050 2050
  * @return string|number     Texte ou nombre échappé
2051 2051
  */
2052 2052
 function _sqlite_calculer_cite($v, $type) {
2053
-	if ($type) {
2054
-		if (
2055
-			is_null($v)
2056
-			and stripos($type, 'NOT NULL') === false
2057
-		) {
2058
-			return 'NULL';
2059
-		} // null php se traduit en NULL SQL
2060
-
2061
-		if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
2062
-			return $v;
2063
-		}
2064
-		if (sql_test_int($type)) {
2065
-			if (is_numeric($v)) {
2066
-				return $v;
2067
-			} elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) == 0) {
2068
-				return hexdec(substr($v, 2));
2069
-			} else {
2070
-				return intval($v);
2071
-			}
2072
-		}
2073
-	} else {
2074
-		// si on ne connait pas le type on le deduit de $v autant que possible
2075
-		if (is_bool($v)) {
2076
-			return strval(intval($v));
2077
-		}
2078
-		elseif (is_numeric($v)) {
2079
-			return strval($v);
2080
-		}
2081
-	}
2082
-
2083
-	// trouver un link sqlite pour faire l'echappement
2084
-	foreach ($GLOBALS['connexions'] as $s) {
2085
-		if (
2086
-			$l = $s['link']
2087
-			and is_object($l)
2088
-			and $l instanceof \PDO
2089
-			and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite'
2090
-		) {
2091
-			return $l->quote($v);
2092
-		}
2093
-	}
2094
-
2095
-	// echapper les ' en ''
2096
-	spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2097
-
2098
-	return ("'" . str_replace("'", "''", $v) . "'");
2053
+    if ($type) {
2054
+        if (
2055
+            is_null($v)
2056
+            and stripos($type, 'NOT NULL') === false
2057
+        ) {
2058
+            return 'NULL';
2059
+        } // null php se traduit en NULL SQL
2060
+
2061
+        if (sql_test_date($type) and preg_match('/^\w+\(/', $v)) {
2062
+            return $v;
2063
+        }
2064
+        if (sql_test_int($type)) {
2065
+            if (is_numeric($v)) {
2066
+                return $v;
2067
+            } elseif (ctype_xdigit(substr($v, 2)) and strncmp($v, '0x', 2) == 0) {
2068
+                return hexdec(substr($v, 2));
2069
+            } else {
2070
+                return intval($v);
2071
+            }
2072
+        }
2073
+    } else {
2074
+        // si on ne connait pas le type on le deduit de $v autant que possible
2075
+        if (is_bool($v)) {
2076
+            return strval(intval($v));
2077
+        }
2078
+        elseif (is_numeric($v)) {
2079
+            return strval($v);
2080
+        }
2081
+    }
2082
+
2083
+    // trouver un link sqlite pour faire l'echappement
2084
+    foreach ($GLOBALS['connexions'] as $s) {
2085
+        if (
2086
+            $l = $s['link']
2087
+            and is_object($l)
2088
+            and $l instanceof \PDO
2089
+            and $l->getAttribute(\PDO::ATTR_DRIVER_NAME) === 'sqlite'
2090
+        ) {
2091
+            return $l->quote($v);
2092
+        }
2093
+    }
2094
+
2095
+    // echapper les ' en ''
2096
+    spip_log('Pas de methode ->quote pour echapper', 'sqlite.' . _LOG_INFO_IMPORTANTE);
2097
+
2098
+    return ("'" . str_replace("'", "''", $v) . "'");
2099 2099
 }
2100 2100
 
2101 2101
 
@@ -2111,21 +2111,21 @@  discard block
 block discarded – undo
2111 2111
  * @return string            Texte de l'expression, une partie donc, du texte la requête.
2112 2112
  */
2113 2113
 function _sqlite_calculer_expression($expression, $v, $join = 'AND') {
2114
-	if (empty($v)) {
2115
-		return '';
2116
-	}
2114
+    if (empty($v)) {
2115
+        return '';
2116
+    }
2117 2117
 
2118
-	$exp = "\n$expression ";
2118
+    $exp = "\n$expression ";
2119 2119
 
2120
-	if (!is_array($v)) {
2121
-		return $exp . $v;
2122
-	} else {
2123
-		if (strtoupper($join) === 'AND') {
2124
-			return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2125
-		} else {
2126
-			return $exp . join($join, $v);
2127
-		}
2128
-	}
2120
+    if (!is_array($v)) {
2121
+        return $exp . $v;
2122
+    } else {
2123
+        if (strtoupper($join) === 'AND') {
2124
+            return $exp . join("\n\t$join ", array_map('_sqlite_calculer_where', $v));
2125
+        } else {
2126
+            return $exp . join($join, $v);
2127
+        }
2128
+    }
2129 2129
 }
2130 2130
 
2131 2131
 
@@ -2141,7 +2141,7 @@  discard block
 block discarded – undo
2141 2141
  * @return string Texte du orderby préparé
2142 2142
  */
2143 2143
 function _sqlite_calculer_order($orderby) {
2144
-	return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
2144
+    return (is_array($orderby)) ? join(', ', $orderby) : $orderby;
2145 2145
 }
2146 2146
 
2147 2147
 
@@ -2152,26 +2152,26 @@  discard block
 block discarded – undo
2152 2152
  * @return string Sélection de colonnes pour une clause SELECT
2153 2153
  */
2154 2154
 function _sqlite_calculer_select_as($args) {
2155
-	$res = '';
2156
-	foreach ($args as $k => $v) {
2157
-		if (substr($k, -1) == '@') {
2158
-			// c'est une jointure qui se refere au from precedent
2159
-			// pas de virgule
2160
-			$res .= '  ' . $v;
2161
-		} else {
2162
-			if (!is_numeric($k)) {
2163
-				$p = strpos($v, ' ');
2164
-				if ($p) {
2165
-					$v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2166
-				} else {
2167
-					$v .= " AS '$k'";
2168
-				}
2169
-			}
2170
-			$res .= ', ' . $v;
2171
-		}
2172
-	}
2173
-
2174
-	return substr($res, 2);
2155
+    $res = '';
2156
+    foreach ($args as $k => $v) {
2157
+        if (substr($k, -1) == '@') {
2158
+            // c'est une jointure qui se refere au from precedent
2159
+            // pas de virgule
2160
+            $res .= '  ' . $v;
2161
+        } else {
2162
+            if (!is_numeric($k)) {
2163
+                $p = strpos($v, ' ');
2164
+                if ($p) {
2165
+                    $v = substr($v, 0, $p) . " AS '$k'" . substr($v, $p);
2166
+                } else {
2167
+                    $v .= " AS '$k'";
2168
+                }
2169
+            }
2170
+            $res .= ', ' . $v;
2171
+        }
2172
+    }
2173
+
2174
+    return substr($res, 2);
2175 2175
 }
2176 2176
 
2177 2177
 
@@ -2194,26 +2194,26 @@  discard block
 block discarded – undo
2194 2194
  *     Contrainte pour clause WHERE
2195 2195
  */
2196 2196
 function _sqlite_calculer_where($v) {
2197
-	if (!is_array($v)) {
2198
-		return $v;
2199
-	}
2200
-
2201
-	$op = array_shift($v);
2202
-	if (!($n = count($v))) {
2203
-		return $op;
2204
-	} else {
2205
-		$arg = _sqlite_calculer_where(array_shift($v));
2206
-		if ($n == 1) {
2207
-			return "$op($arg)";
2208
-		} else {
2209
-			$arg2 = _sqlite_calculer_where(array_shift($v));
2210
-			if ($n == 2) {
2211
-				return "($arg $op $arg2)";
2212
-			} else {
2213
-				return "($arg $op ($arg2) : $v[0])";
2214
-			}
2215
-		}
2216
-	}
2197
+    if (!is_array($v)) {
2198
+        return $v;
2199
+    }
2200
+
2201
+    $op = array_shift($v);
2202
+    if (!($n = count($v))) {
2203
+        return $op;
2204
+    } else {
2205
+        $arg = _sqlite_calculer_where(array_shift($v));
2206
+        if ($n == 1) {
2207
+            return "$op($arg)";
2208
+        } else {
2209
+            $arg2 = _sqlite_calculer_where(array_shift($v));
2210
+            if ($n == 2) {
2211
+                return "($arg $op $arg2)";
2212
+            } else {
2213
+                return "($arg $op ($arg2) : $v[0])";
2214
+            }
2215
+        }
2216
+    }
2217 2217
 }
2218 2218
 
2219 2219
 
@@ -2228,19 +2228,19 @@  discard block
 block discarded – undo
2228 2228
  * @return array|bool
2229 2229
  */
2230 2230
 function _sqlite_charger_version($version = '') {
2231
-	$versions = [];
2231
+    $versions = [];
2232 2232
 
2233
-	// version 3
2234
-	if (!$version || $version == 3) {
2235
-		if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) {
2236
-			$versions[] = 3;
2237
-		}
2238
-	}
2239
-	if ($version) {
2240
-		return in_array($version, $versions);
2241
-	}
2233
+    // version 3
2234
+    if (!$version || $version == 3) {
2235
+        if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) {
2236
+            $versions[] = 3;
2237
+        }
2238
+    }
2239
+    if ($version) {
2240
+        return in_array($version, $versions);
2241
+    }
2242 2242
 
2243
-	return $versions;
2243
+    return $versions;
2244 2244
 }
2245 2245
 
2246 2246
 
@@ -2278,147 +2278,147 @@  discard block
 block discarded – undo
2278 2278
  */
2279 2279
 function _sqlite_modifier_table($table, $colonne, $opt = [], $serveur = '') {
2280 2280
 
2281
-	if (is_array($table)) {
2282
-		$table_destination = reset($table);
2283
-		$table_origine = key($table);
2284
-	} else {
2285
-		$table_origine = $table_destination = $table;
2286
-	}
2287
-	// ne prend actuellement qu'un changement
2288
-	// mais pourra etre adapte pour changer plus qu'une colonne a la fois
2289
-	if (is_array($colonne)) {
2290
-		$colonne_destination = reset($colonne);
2291
-		$colonne_origine = key($colonne);
2292
-	} else {
2293
-		$colonne_origine = $colonne_destination = $colonne;
2294
-	}
2295
-	if (!isset($opt['field'])) {
2296
-		$opt['field'] = [];
2297
-	}
2298
-	if (!isset($opt['key'])) {
2299
-		$opt['key'] = [];
2300
-	}
2301
-
2302
-	// si les noms de tables sont differents, pas besoin de table temporaire
2303
-	// on prendra directement le nom de la future table
2304
-	$meme_table = ($table_origine == $table_destination);
2305
-
2306
-	$def_origine = sql_showtable($table_origine, false, $serveur);
2307
-	if (!$def_origine or !isset($def_origine['field'])) {
2308
-		spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2309
-
2310
-		return false;
2311
-	}
2312
-
2313
-
2314
-	$table_tmp = $table_origine . '_tmp';
2315
-
2316
-	// 1) creer une table temporaire avec les modifications
2317
-	// - DROP : suppression de la colonne
2318
-	// - CHANGE : modification de la colonne
2319
-	// (foreach pour conserver l'ordre des champs)
2320
-
2321
-	// field
2322
-	$fields = [];
2323
-	// pour le INSERT INTO plus loin
2324
-	// stocker la correspondance nouvelles->anciennes colonnes
2325
-	$fields_correspondances = [];
2326
-	foreach ($def_origine['field'] as $c => $d) {
2327
-		if ($colonne_origine && ($c == $colonne_origine)) {
2328
-			// si pas DROP
2329
-			if ($colonne_destination) {
2330
-				$fields[$colonne_destination] = $opt['field'][$colonne_destination];
2331
-				$fields_correspondances[$colonne_destination] = $c;
2332
-			}
2333
-		} else {
2334
-			$fields[$c] = $d;
2335
-			$fields_correspondances[$c] = $c;
2336
-		}
2337
-	}
2338
-	// cas de ADD sqlite2 (ajout du champ en fin de table):
2339
-	if (!$colonne_origine && $colonne_destination) {
2340
-		$fields[$colonne_destination] = $opt['field'][$colonne_destination];
2341
-	}
2342
-
2343
-	// key...
2344
-	$keys = [];
2345
-	foreach ($def_origine['key'] as $c => $d) {
2346
-		$c = str_replace($colonne_origine, $colonne_destination, $c);
2347
-		$d = str_replace($colonne_origine, $colonne_destination, $d);
2348
-		// seulement si on ne supprime pas la colonne !
2349
-		if ($d) {
2350
-			$keys[$c] = $d;
2351
-		}
2352
-	}
2353
-
2354
-	// autres keys, on merge
2355
-	$keys = array_merge($keys, $opt['key']);
2356
-	$queries = [];
2357
-
2358
-	// copier dans destination (si differente de origine), sinon tmp
2359
-	$table_copie = ($meme_table) ? $table_tmp : $table_destination;
2360
-	$autoinc = (isset($keys['PRIMARY KEY'])
2361
-		and $keys['PRIMARY KEY']
2362
-		and stripos($keys['PRIMARY KEY'], ',') === false
2363
-		and stripos($fields[$keys['PRIMARY KEY']], 'default') === false);
2364
-
2365
-	if (
2366
-		$q = _sqlite_requete_create(
2367
-			$table_copie,
2368
-			$fields,
2369
-			$keys,
2370
-			$autoinc,
2371
-			$temporary = false,
2372
-			$ifnotexists = true,
2373
-			$serveur
2374
-		)
2375
-	) {
2376
-		$queries[] = $q;
2377
-	}
2378
-
2379
-
2380
-	// 2) y copier les champs qui vont bien
2381
-	$champs_dest = join(', ', array_keys($fields_correspondances));
2382
-	$champs_ori = join(', ', $fields_correspondances);
2383
-	$queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine";
2384
-
2385
-	// 3) supprimer la table d'origine
2386
-	$queries[] = "DROP TABLE $table_origine";
2387
-
2388
-	// 4) renommer la table temporaire
2389
-	// avec le nom de la table destination
2390
-	// si necessaire
2391
-	if ($meme_table) {
2392
-		$queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination";
2393
-	}
2394
-
2395
-	// 5) remettre les index !
2396
-	foreach ($keys as $k => $v) {
2397
-		if ($k == 'PRIMARY KEY') {
2398
-		} else {
2399
-			// enlever KEY
2400
-			$k = substr($k, 4);
2401
-			$queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2402
-		}
2403
-	}
2404
-
2405
-
2406
-	if (count($queries)) {
2407
-		spip_sqlite::demarrer_transaction($serveur);
2408
-		// il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas
2409
-		foreach ($queries as $q) {
2410
-			if (!spip_sqlite::executer_requete($q, $serveur)) {
2411
-				spip_log('SQLite : ALTER TABLE table :'
2412
-					. " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2413
-				spip_sqlite::annuler_transaction($serveur);
2414
-
2415
-				return false;
2416
-			}
2417
-		}
2418
-		spip_sqlite::finir_transaction($serveur);
2419
-	}
2420
-
2421
-	return true;
2281
+    if (is_array($table)) {
2282
+        $table_destination = reset($table);
2283
+        $table_origine = key($table);
2284
+    } else {
2285
+        $table_origine = $table_destination = $table;
2286
+    }
2287
+    // ne prend actuellement qu'un changement
2288
+    // mais pourra etre adapte pour changer plus qu'une colonne a la fois
2289
+    if (is_array($colonne)) {
2290
+        $colonne_destination = reset($colonne);
2291
+        $colonne_origine = key($colonne);
2292
+    } else {
2293
+        $colonne_origine = $colonne_destination = $colonne;
2294
+    }
2295
+    if (!isset($opt['field'])) {
2296
+        $opt['field'] = [];
2297
+    }
2298
+    if (!isset($opt['key'])) {
2299
+        $opt['key'] = [];
2300
+    }
2301
+
2302
+    // si les noms de tables sont differents, pas besoin de table temporaire
2303
+    // on prendra directement le nom de la future table
2304
+    $meme_table = ($table_origine == $table_destination);
2305
+
2306
+    $def_origine = sql_showtable($table_origine, false, $serveur);
2307
+    if (!$def_origine or !isset($def_origine['field'])) {
2308
+        spip_log("Alter table impossible sur $table_origine : table non trouvee", 'sqlite' . _LOG_ERREUR);
2309
+
2310
+        return false;
2311
+    }
2312
+
2313
+
2314
+    $table_tmp = $table_origine . '_tmp';
2315
+
2316
+    // 1) creer une table temporaire avec les modifications
2317
+    // - DROP : suppression de la colonne
2318
+    // - CHANGE : modification de la colonne
2319
+    // (foreach pour conserver l'ordre des champs)
2320
+
2321
+    // field
2322
+    $fields = [];
2323
+    // pour le INSERT INTO plus loin
2324
+    // stocker la correspondance nouvelles->anciennes colonnes
2325
+    $fields_correspondances = [];
2326
+    foreach ($def_origine['field'] as $c => $d) {
2327
+        if ($colonne_origine && ($c == $colonne_origine)) {
2328
+            // si pas DROP
2329
+            if ($colonne_destination) {
2330
+                $fields[$colonne_destination] = $opt['field'][$colonne_destination];
2331
+                $fields_correspondances[$colonne_destination] = $c;
2332
+            }
2333
+        } else {
2334
+            $fields[$c] = $d;
2335
+            $fields_correspondances[$c] = $c;
2336
+        }
2337
+    }
2338
+    // cas de ADD sqlite2 (ajout du champ en fin de table):
2339
+    if (!$colonne_origine && $colonne_destination) {
2340
+        $fields[$colonne_destination] = $opt['field'][$colonne_destination];
2341
+    }
2342
+
2343
+    // key...
2344
+    $keys = [];
2345
+    foreach ($def_origine['key'] as $c => $d) {
2346
+        $c = str_replace($colonne_origine, $colonne_destination, $c);
2347
+        $d = str_replace($colonne_origine, $colonne_destination, $d);
2348
+        // seulement si on ne supprime pas la colonne !
2349
+        if ($d) {
2350
+            $keys[$c] = $d;
2351
+        }
2352
+    }
2353
+
2354
+    // autres keys, on merge
2355
+    $keys = array_merge($keys, $opt['key']);
2356
+    $queries = [];
2357
+
2358
+    // copier dans destination (si differente de origine), sinon tmp
2359
+    $table_copie = ($meme_table) ? $table_tmp : $table_destination;
2360
+    $autoinc = (isset($keys['PRIMARY KEY'])
2361
+        and $keys['PRIMARY KEY']
2362
+        and stripos($keys['PRIMARY KEY'], ',') === false
2363
+        and stripos($fields[$keys['PRIMARY KEY']], 'default') === false);
2364
+
2365
+    if (
2366
+        $q = _sqlite_requete_create(
2367
+            $table_copie,
2368
+            $fields,
2369
+            $keys,
2370
+            $autoinc,
2371
+            $temporary = false,
2372
+            $ifnotexists = true,
2373
+            $serveur
2374
+        )
2375
+    ) {
2376
+        $queries[] = $q;
2377
+    }
2378
+
2379
+
2380
+    // 2) y copier les champs qui vont bien
2381
+    $champs_dest = join(', ', array_keys($fields_correspondances));
2382
+    $champs_ori = join(', ', $fields_correspondances);
2383
+    $queries[] = "INSERT INTO $table_copie ($champs_dest) SELECT $champs_ori FROM $table_origine";
2384
+
2385
+    // 3) supprimer la table d'origine
2386
+    $queries[] = "DROP TABLE $table_origine";
2387
+
2388
+    // 4) renommer la table temporaire
2389
+    // avec le nom de la table destination
2390
+    // si necessaire
2391
+    if ($meme_table) {
2392
+        $queries[] = "ALTER TABLE $table_copie RENAME TO $table_destination";
2393
+    }
2394
+
2395
+    // 5) remettre les index !
2396
+    foreach ($keys as $k => $v) {
2397
+        if ($k == 'PRIMARY KEY') {
2398
+        } else {
2399
+            // enlever KEY
2400
+            $k = substr($k, 4);
2401
+            $queries[] = "CREATE INDEX $table_destination" . "_$k ON $table_destination ($v)";
2402
+        }
2403
+    }
2404
+
2405
+
2406
+    if (count($queries)) {
2407
+        spip_sqlite::demarrer_transaction($serveur);
2408
+        // il faut les faire une par une car $query = join('; ', $queries).";"; ne fonctionne pas
2409
+        foreach ($queries as $q) {
2410
+            if (!spip_sqlite::executer_requete($q, $serveur)) {
2411
+                spip_log('SQLite : ALTER TABLE table :'
2412
+                    . " Erreur a l'execution de la requete : $q", 'sqlite.' . _LOG_ERREUR);
2413
+                spip_sqlite::annuler_transaction($serveur);
2414
+
2415
+                return false;
2416
+            }
2417
+        }
2418
+        spip_sqlite::finir_transaction($serveur);
2419
+    }
2420
+
2421
+    return true;
2422 2422
 }
2423 2423
 
2424 2424
 
@@ -2428,61 +2428,61 @@  discard block
 block discarded – undo
2428 2428
  * @return array
2429 2429
  */
2430 2430
 function _sqlite_ref_fonctions() {
2431
-	$fonctions = [
2432
-		'alter' => 'spip_sqlite_alter',
2433
-		'count' => 'spip_sqlite_count',
2434
-		'countsel' => 'spip_sqlite_countsel',
2435
-		'create' => 'spip_sqlite_create',
2436
-		'create_base' => 'spip_sqlite_create_base',
2437
-		'create_view' => 'spip_sqlite_create_view',
2438
-		'date_proche' => 'spip_sqlite_date_proche',
2439
-		'delete' => 'spip_sqlite_delete',
2440
-		'drop_table' => 'spip_sqlite_drop_table',
2441
-		'drop_view' => 'spip_sqlite_drop_view',
2442
-		'errno' => 'spip_sqlite_errno',
2443
-		'error' => 'spip_sqlite_error',
2444
-		'explain' => 'spip_sqlite_explain',
2445
-		'fetch' => 'spip_sqlite_fetch',
2446
-		'seek' => 'spip_sqlite_seek',
2447
-		'free' => 'spip_sqlite_free',
2448
-		'hex' => 'spip_sqlite_hex',
2449
-		'in' => 'spip_sqlite_in',
2450
-		'insert' => 'spip_sqlite_insert',
2451
-		'insertq' => 'spip_sqlite_insertq',
2452
-		'insertq_multi' => 'spip_sqlite_insertq_multi',
2453
-		'listdbs' => 'spip_sqlite_listdbs',
2454
-		'multi' => 'spip_sqlite_multi',
2455
-		'optimize' => 'spip_sqlite_optimize',
2456
-		'query' => 'spip_sqlite_query',
2457
-		'quote' => 'spip_sqlite_quote',
2458
-		'repair' => 'spip_sqlite_repair',
2459
-		'replace' => 'spip_sqlite_replace',
2460
-		'replace_multi' => 'spip_sqlite_replace_multi',
2461
-		'select' => 'spip_sqlite_select',
2462
-		'selectdb' => 'spip_sqlite_selectdb',
2463
-		'set_charset' => 'spip_sqlite_set_charset',
2464
-		'get_charset' => 'spip_sqlite_get_charset',
2465
-		'showbase' => 'spip_sqlite_showbase',
2466
-		'showtable' => 'spip_sqlite_showtable',
2467
-		'table_exists' => 'spip_sqlite_table_exists',
2468
-		'update' => 'spip_sqlite_update',
2469
-		'updateq' => 'spip_sqlite_updateq',
2470
-		'preferer_transaction' => 'spip_sqlite_preferer_transaction',
2471
-		'demarrer_transaction' => 'spip_sqlite_demarrer_transaction',
2472
-		'terminer_transaction' => 'spip_sqlite_terminer_transaction',
2473
-	];
2474
-
2475
-	// association de chaque nom http d'un charset aux couples sqlite
2476
-	// SQLite supporte utf-8 et utf-16 uniquement.
2477
-	$charsets = [
2478
-		'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'],
2479
-		//'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la
2480
-		//'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE')
2481
-	];
2482
-
2483
-	$fonctions['charsets'] = $charsets;
2484
-
2485
-	return $fonctions;
2431
+    $fonctions = [
2432
+        'alter' => 'spip_sqlite_alter',
2433
+        'count' => 'spip_sqlite_count',
2434
+        'countsel' => 'spip_sqlite_countsel',
2435
+        'create' => 'spip_sqlite_create',
2436
+        'create_base' => 'spip_sqlite_create_base',
2437
+        'create_view' => 'spip_sqlite_create_view',
2438
+        'date_proche' => 'spip_sqlite_date_proche',
2439
+        'delete' => 'spip_sqlite_delete',
2440
+        'drop_table' => 'spip_sqlite_drop_table',
2441
+        'drop_view' => 'spip_sqlite_drop_view',
2442
+        'errno' => 'spip_sqlite_errno',
2443
+        'error' => 'spip_sqlite_error',
2444
+        'explain' => 'spip_sqlite_explain',
2445
+        'fetch' => 'spip_sqlite_fetch',
2446
+        'seek' => 'spip_sqlite_seek',
2447
+        'free' => 'spip_sqlite_free',
2448
+        'hex' => 'spip_sqlite_hex',
2449
+        'in' => 'spip_sqlite_in',
2450
+        'insert' => 'spip_sqlite_insert',
2451
+        'insertq' => 'spip_sqlite_insertq',
2452
+        'insertq_multi' => 'spip_sqlite_insertq_multi',
2453
+        'listdbs' => 'spip_sqlite_listdbs',
2454
+        'multi' => 'spip_sqlite_multi',
2455
+        'optimize' => 'spip_sqlite_optimize',
2456
+        'query' => 'spip_sqlite_query',
2457
+        'quote' => 'spip_sqlite_quote',
2458
+        'repair' => 'spip_sqlite_repair',
2459
+        'replace' => 'spip_sqlite_replace',
2460
+        'replace_multi' => 'spip_sqlite_replace_multi',
2461
+        'select' => 'spip_sqlite_select',
2462
+        'selectdb' => 'spip_sqlite_selectdb',
2463
+        'set_charset' => 'spip_sqlite_set_charset',
2464
+        'get_charset' => 'spip_sqlite_get_charset',
2465
+        'showbase' => 'spip_sqlite_showbase',
2466
+        'showtable' => 'spip_sqlite_showtable',
2467
+        'table_exists' => 'spip_sqlite_table_exists',
2468
+        'update' => 'spip_sqlite_update',
2469
+        'updateq' => 'spip_sqlite_updateq',
2470
+        'preferer_transaction' => 'spip_sqlite_preferer_transaction',
2471
+        'demarrer_transaction' => 'spip_sqlite_demarrer_transaction',
2472
+        'terminer_transaction' => 'spip_sqlite_terminer_transaction',
2473
+    ];
2474
+
2475
+    // association de chaque nom http d'un charset aux couples sqlite
2476
+    // SQLite supporte utf-8 et utf-16 uniquement.
2477
+    $charsets = [
2478
+        'utf-8' => ['charset' => 'utf8', 'collation' => 'utf8_general_ci'],
2479
+        //'utf-16be'=>array('charset'=>'utf16be','collation'=>'UTF-16BE'),// aucune idee de quoi il faut remplir dans es champs la
2480
+        //'utf-16le'=>array('charset'=>'utf16le','collation'=>'UTF-16LE')
2481
+    ];
2482
+
2483
+    $fonctions['charsets'] = $charsets;
2484
+
2485
+    return $fonctions;
2486 2486
 }
2487 2487
 
2488 2488
 
@@ -2494,56 +2494,56 @@  discard block
 block discarded – undo
2494 2494
  * @return mixed
2495 2495
  */
2496 2496
 function _sqlite_remplacements_definitions_table($query, $autoinc = false) {
2497
-	// quelques remplacements
2498
-	$num = '(\s*\([0-9]*\))?';
2499
-	$enum = '(\s*\([^\)]*\))?';
2500
-
2501
-	$remplace = [
2502
-		'/enum' . $enum . '/is' => 'VARCHAR(255)',
2503
-		'/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2504
-		'/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2505
-		'/auto_increment/is' => '',
2506
-		'/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2507
-		'/(timestamp .* )ON .*$/is' => '\\1',
2508
-		'/character set \w+/is' => '',
2509
-		'/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2510
-		'/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2511
-		'/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2512
-		'/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2513
-		'/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2514
-	];
2515
-
2516
-	// pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2517
-	$remplace_autocinc = [
2518
-		'/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2519
-	];
2520
-	// pour les int non autoincrement, il faut un DEFAULT
2521
-	$remplace_nonautocinc = [
2522
-		'/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2523
-	];
2524
-
2525
-	if (is_string($query)) {
2526
-		$query = preg_replace(array_keys($remplace), $remplace, $query);
2527
-		if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) {
2528
-			$query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query);
2529
-		} else {
2530
-			$query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query);
2531
-			$query = _sqlite_collate_ci($query);
2532
-		}
2533
-	} elseif (is_array($query)) {
2534
-		foreach ($query as $k => $q) {
2535
-			$ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q));
2536
-			$query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]);
2537
-			if ($ai) {
2538
-				$query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]);
2539
-			} else {
2540
-				$query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]);
2541
-				$query[$k] = _sqlite_collate_ci($query[$k]);
2542
-			}
2543
-		}
2544
-	}
2545
-
2546
-	return $query;
2497
+    // quelques remplacements
2498
+    $num = '(\s*\([0-9]*\))?';
2499
+    $enum = '(\s*\([^\)]*\))?';
2500
+
2501
+    $remplace = [
2502
+        '/enum' . $enum . '/is' => 'VARCHAR(255)',
2503
+        '/COLLATE \w+_bin/is' => 'COLLATE BINARY',
2504
+        '/COLLATE \w+_ci/is' => 'COLLATE NOCASE',
2505
+        '/auto_increment/is' => '',
2506
+        '/current_timestamp\(\)/is' => 'CURRENT_TIMESTAMP', // Fix export depuis mariaDB #4374
2507
+        '/(timestamp .* )ON .*$/is' => '\\1',
2508
+        '/character set \w+/is' => '',
2509
+        '/((big|small|medium|tiny)?int(eger)?)' . $num . '\s*unsigned/is' => '\\1 UNSIGNED',
2510
+        '/(text\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2511
+        '/((char|varchar)' . $num . '\s+not\s+null(\s+collate\s+\w+)?)\s*$/is' => "\\1 DEFAULT ''",
2512
+        '/(datetime\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00 00:00:00'",
2513
+        '/(date\s+not\s+null)\s*$/is' => "\\1 DEFAULT '0000-00-00'",
2514
+    ];
2515
+
2516
+    // pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
2517
+    $remplace_autocinc = [
2518
+        '/(big|small|medium|tiny)?int(eger)?' . $num . '/is' => 'INTEGER'
2519
+    ];
2520
+    // pour les int non autoincrement, il faut un DEFAULT
2521
+    $remplace_nonautocinc = [
2522
+        '/((big|small|medium|tiny)?int(eger)?' . $num . '\s+not\s+null)\s*$/is' => "\\1 DEFAULT 0",
2523
+    ];
2524
+
2525
+    if (is_string($query)) {
2526
+        $query = preg_replace(array_keys($remplace), $remplace, $query);
2527
+        if ($autoinc or preg_match(',AUTO_INCREMENT,is', $query)) {
2528
+            $query = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query);
2529
+        } else {
2530
+            $query = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query);
2531
+            $query = _sqlite_collate_ci($query);
2532
+        }
2533
+    } elseif (is_array($query)) {
2534
+        foreach ($query as $k => $q) {
2535
+            $ai = ($autoinc ? $k == $autoinc : preg_match(',AUTO_INCREMENT,is', $q));
2536
+            $query[$k] = preg_replace(array_keys($remplace), $remplace, $query[$k]);
2537
+            if ($ai) {
2538
+                $query[$k] = preg_replace(array_keys($remplace_autocinc), $remplace_autocinc, $query[$k]);
2539
+            } else {
2540
+                $query[$k] = preg_replace(array_keys($remplace_nonautocinc), $remplace_nonautocinc, $query[$k]);
2541
+                $query[$k] = _sqlite_collate_ci($query[$k]);
2542
+            }
2543
+        }
2544
+    }
2545
+
2546
+    return $query;
2547 2547
 }
2548 2548
 
2549 2549
 /**
@@ -2554,17 +2554,17 @@  discard block
 block discarded – undo
2554 2554
  * @return string
2555 2555
  */
2556 2556
 function _sqlite_collate_ci($champ) {
2557
-	if (stripos($champ, 'COLLATE') !== false) {
2558
-		return $champ;
2559
-	}
2560
-	if (stripos($champ, 'BINARY') !== false) {
2561
-		return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2562
-	}
2563
-	if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2564
-		return $champ . ' COLLATE NOCASE';
2565
-	}
2557
+    if (stripos($champ, 'COLLATE') !== false) {
2558
+        return $champ;
2559
+    }
2560
+    if (stripos($champ, 'BINARY') !== false) {
2561
+        return str_ireplace('BINARY', 'COLLATE BINARY', $champ);
2562
+    }
2563
+    if (preg_match(',^(char|varchar|(long|small|medium|tiny)?text),i', $champ)) {
2564
+        return $champ . ' COLLATE NOCASE';
2565
+    }
2566 2566
 
2567
-	return $champ;
2567
+    return $champ;
2568 2568
 }
2569 2569
 
2570 2570
 
@@ -2583,84 +2583,84 @@  discard block
 block discarded – undo
2583 2583
  * @return bool|string
2584 2584
  */
2585 2585
 function _sqlite_requete_create(
2586
-	$nom,
2587
-	$champs,
2588
-	$cles,
2589
-	$autoinc = false,
2590
-	$temporary = false,
2591
-	$_ifnotexists = true,
2592
-	$serveur = '',
2593
-	$requeter = true
2586
+    $nom,
2587
+    $champs,
2588
+    $cles,
2589
+    $autoinc = false,
2590
+    $temporary = false,
2591
+    $_ifnotexists = true,
2592
+    $serveur = '',
2593
+    $requeter = true
2594 2594
 ) {
2595
-	$query = $keys = $s = $p = '';
2596
-
2597
-	// certains plugins declarent les tables  (permet leur inclusion dans le dump)
2598
-	// sans les renseigner (laisse le compilo recuperer la description)
2599
-	if (!is_array($champs) || !is_array($cles)) {
2600
-		return;
2601
-	}
2602
-
2603
-	// sqlite ne gere pas KEY tout court dans une requete CREATE TABLE
2604
-	// il faut passer par des create index
2605
-	// Il gere par contre primary key !
2606
-	// Soit la PK est definie dans les cles, soit dans un champs
2607
-	// soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !)
2608
-	$pk = 'PRIMARY KEY';
2609
-	// le champ de cle primaire
2610
-	$champ_pk = !empty($cles[$pk]) ? $cles[$pk] : '';
2611
-
2612
-	foreach ($champs as $k => $v) {
2613
-		if (false !== stripos($v, $pk)) {
2614
-			$champ_pk = $k;
2615
-			// on n'en a plus besoin dans field, vu que defini dans key
2616
-			$champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
2617
-			break;
2618
-		}
2619
-	}
2620
-
2621
-	if ($champ_pk) {
2622
-		$keys = "\n\t\t$pk ($champ_pk)";
2623
-	}
2624
-	// Pas de DEFAULT 0 sur les cles primaires en auto-increment
2625
-	if (
2626
-		isset($champs[$champ_pk])
2627
-		and stripos($champs[$champ_pk], 'default 0') !== false
2628
-	) {
2629
-		$champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk]));
2630
-	}
2631
-
2632
-	$champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false);
2633
-	foreach ($champs as $k => $v) {
2634
-		$query .= "$s\n\t\t$k $v";
2635
-		$s = ',';
2636
-	}
2637
-
2638
-	$ifnotexists = '';
2639
-	if ($_ifnotexists) {
2640
-		$version = spip_sqlite_fetch(
2641
-			spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur),
2642
-			'',
2643
-			$serveur
2644
-		);
2645
-		if (!function_exists('spip_version_compare')) {
2646
-			include_spip('plugins/installer');
2647
-		}
2648
-
2649
-		if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
2650
-			$ifnotexists = ' IF NOT EXISTS';
2651
-		} else {
2652
-			/* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2653
-			$a = spip_sqlite_showtable($nom, $serveur);
2654
-			if (isset($a['key']['KEY ' . $nom])) {
2655
-				return true;
2656
-			}
2657
-		}
2658
-	}
2659
-
2660
-	$temporary = $temporary ? ' TEMPORARY' : '';
2661
-	$q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2662
-
2663
-	return $q;
2595
+    $query = $keys = $s = $p = '';
2596
+
2597
+    // certains plugins declarent les tables  (permet leur inclusion dans le dump)
2598
+    // sans les renseigner (laisse le compilo recuperer la description)
2599
+    if (!is_array($champs) || !is_array($cles)) {
2600
+        return;
2601
+    }
2602
+
2603
+    // sqlite ne gere pas KEY tout court dans une requete CREATE TABLE
2604
+    // il faut passer par des create index
2605
+    // Il gere par contre primary key !
2606
+    // Soit la PK est definie dans les cles, soit dans un champs
2607
+    // soit faussement dans les 2 (et dans ce cas, il faut l’enlever à un des 2 endroits !)
2608
+    $pk = 'PRIMARY KEY';
2609
+    // le champ de cle primaire
2610
+    $champ_pk = !empty($cles[$pk]) ? $cles[$pk] : '';
2611
+
2612
+    foreach ($champs as $k => $v) {
2613
+        if (false !== stripos($v, $pk)) {
2614
+            $champ_pk = $k;
2615
+            // on n'en a plus besoin dans field, vu que defini dans key
2616
+            $champs[$k] = preg_replace("/$pk/is", '', $champs[$k]);
2617
+            break;
2618
+        }
2619
+    }
2620
+
2621
+    if ($champ_pk) {
2622
+        $keys = "\n\t\t$pk ($champ_pk)";
2623
+    }
2624
+    // Pas de DEFAULT 0 sur les cles primaires en auto-increment
2625
+    if (
2626
+        isset($champs[$champ_pk])
2627
+        and stripos($champs[$champ_pk], 'default 0') !== false
2628
+    ) {
2629
+        $champs[$champ_pk] = trim(str_ireplace('default 0', '', $champs[$champ_pk]));
2630
+    }
2631
+
2632
+    $champs = _sqlite_remplacements_definitions_table($champs, $autoinc ? $champ_pk : false);
2633
+    foreach ($champs as $k => $v) {
2634
+        $query .= "$s\n\t\t$k $v";
2635
+        $s = ',';
2636
+    }
2637
+
2638
+    $ifnotexists = '';
2639
+    if ($_ifnotexists) {
2640
+        $version = spip_sqlite_fetch(
2641
+            spip_sqlite_query('select sqlite_version() AS sqlite_version', $serveur),
2642
+            '',
2643
+            $serveur
2644
+        );
2645
+        if (!function_exists('spip_version_compare')) {
2646
+            include_spip('plugins/installer');
2647
+        }
2648
+
2649
+        if ($version and spip_version_compare($version['sqlite_version'], '3.3.0', '>=')) {
2650
+            $ifnotexists = ' IF NOT EXISTS';
2651
+        } else {
2652
+            /* simuler le IF EXISTS - version 2 et sqlite < 3.3a */
2653
+            $a = spip_sqlite_showtable($nom, $serveur);
2654
+            if (isset($a['key']['KEY ' . $nom])) {
2655
+                return true;
2656
+            }
2657
+        }
2658
+    }
2659
+
2660
+    $temporary = $temporary ? ' TEMPORARY' : '';
2661
+    $q = "CREATE$temporary TABLE$ifnotexists $nom ($query" . ($keys ? ",$keys" : '') . ")\n";
2662
+
2663
+    return $q;
2664 2664
 }
2665 2665
 
2666 2666
 
@@ -2679,41 +2679,41 @@  discard block
 block discarded – undo
2679 2679
  * @return
2680 2680
  */
2681 2681
 function _sqlite_ajouter_champs_timestamp($table, $couples, $desc = '', $serveur = '') {
2682
-	static $tables = [];
2683
-
2684
-	if (!isset($tables[$table])) {
2685
-		if (!$desc) {
2686
-			$trouver_table = charger_fonction('trouver_table', 'base');
2687
-			$desc = $trouver_table($table, $serveur);
2688
-			// si pas de description, on ne fait rien, ou on die() ?
2689
-			if (!$desc) {
2690
-				return $couples;
2691
-			}
2692
-		}
2693
-
2694
-		// recherche des champs avec simplement 'TIMESTAMP'
2695
-		// cependant, il faudra peut etre etendre
2696
-		// avec la gestion de DEFAULT et ON UPDATE
2697
-		// mais ceux-ci ne sont pas utilises dans le core
2698
-		$tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []];
2699
-
2700
-		$now = _sqlite_func_now(true);
2701
-		foreach ($desc['field'] as $k => $v) {
2702
-			if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) {
2703
-				$tables[$table]['desc'][$k] = $v;
2704
-				$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2705
-			}
2706
-		}
2707
-	}
2708
-	else {
2709
-		$now = _sqlite_func_now(true);
2710
-		foreach (array_keys($tables[$table]['desc']) as $k) {
2711
-			$tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2712
-		}
2713
-	}
2714
-
2715
-	// ajout des champs type 'timestamp' absents
2716
-	return array_merge($tables[$table]['valeur'], $couples);
2682
+    static $tables = [];
2683
+
2684
+    if (!isset($tables[$table])) {
2685
+        if (!$desc) {
2686
+            $trouver_table = charger_fonction('trouver_table', 'base');
2687
+            $desc = $trouver_table($table, $serveur);
2688
+            // si pas de description, on ne fait rien, ou on die() ?
2689
+            if (!$desc) {
2690
+                return $couples;
2691
+            }
2692
+        }
2693
+
2694
+        // recherche des champs avec simplement 'TIMESTAMP'
2695
+        // cependant, il faudra peut etre etendre
2696
+        // avec la gestion de DEFAULT et ON UPDATE
2697
+        // mais ceux-ci ne sont pas utilises dans le core
2698
+        $tables[$table] = ['valeur' => [], 'cite' => [], 'desc' => []];
2699
+
2700
+        $now = _sqlite_func_now(true);
2701
+        foreach ($desc['field'] as $k => $v) {
2702
+            if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) {
2703
+                $tables[$table]['desc'][$k] = $v;
2704
+                $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2705
+            }
2706
+        }
2707
+    }
2708
+    else {
2709
+        $now = _sqlite_func_now(true);
2710
+        foreach (array_keys($tables[$table]['desc']) as $k) {
2711
+            $tables[$table]['valeur'][$k] = _sqlite_calculer_cite($now, $tables[$table]['desc'][$k]);
2712
+        }
2713
+    }
2714
+
2715
+    // ajout des champs type 'timestamp' absents
2716
+    return array_merge($tables[$table]['valeur'], $couples);
2717 2717
 }
2718 2718
 
2719 2719
 
@@ -2724,7 +2724,7 @@  discard block
 block discarded – undo
2724 2724
  * @return array|bool
2725 2725
  */
2726 2726
 function spip_versions_sqlite() {
2727
-	return _sqlite_charger_version();
2727
+    return _sqlite_charger_version();
2728 2728
 }
2729 2729
 
2730 2730
 /**
@@ -2732,114 +2732,114 @@  discard block
 block discarded – undo
2732 2732
  * encadrées de transactions.
2733 2733
  **/
2734 2734
 class spip_sqlite {
2735
-	/** @var sqlite_requeteur[] Liste des instances de requêteurs créés */
2736
-	public static $requeteurs = [];
2737
-	/** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */
2738
-	public static $transaction_en_cours = [];
2739
-
2740
-
2741
-	/**
2742
-	 * Retourne une unique instance du requêteur
2743
-	 *
2744
-	 * Retourne une instance unique du requêteur pour une connexion SQLite
2745
-	 * donnée
2746
-	 *
2747
-	 * @param string $serveur
2748
-	 *    Nom du connecteur
2749
-	 * @return sqlite_requeteur
2750
-	 *    Instance unique du requêteur
2751
-	 **/
2752
-	public static function requeteur($serveur) {
2753
-		if (!isset(spip_sqlite::$requeteurs[$serveur])) {
2754
-			spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur);
2755
-		}
2756
-
2757
-		return spip_sqlite::$requeteurs[$serveur];
2758
-	}
2759
-
2760
-	/**
2761
-	 * Prépare le texte d'une requête avant son exécution
2762
-	 *
2763
-	 * Adapte la requête au format plus ou moins MySQL par un format
2764
-	 * compris de SQLite.
2765
-	 *
2766
-	 * Change les préfixes de tables SPIP par ceux véritables
2767
-	 *
2768
-	 * @param string $query Requête à préparer
2769
-	 * @param string $serveur Nom de la connexion
2770
-	 * @return string           Requête préparée
2771
-	 */
2772
-	public static function traduire_requete($query, $serveur) {
2773
-		$requeteur = spip_sqlite::requeteur($serveur);
2774
-		$traducteur = new sqlite_traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version);
2775
-
2776
-		return $traducteur->traduire_requete();
2777
-	}
2778
-
2779
-	/**
2780
-	 * Démarre une transaction
2781
-	 *
2782
-	 * @param string $serveur Nom de la connexion
2783
-	 **/
2784
-	public static function demarrer_transaction($serveur) {
2785
-		spip_sqlite::executer_requete('BEGIN TRANSACTION', $serveur);
2786
-		spip_sqlite::$transaction_en_cours[$serveur] = true;
2787
-	}
2788
-
2789
-	/**
2790
-	 * Exécute la requête donnée
2791
-	 *
2792
-	 * @param string $query Requête
2793
-	 * @param string $serveur Nom de la connexion
2794
-	 * @param null|bool $tracer Demander des statistiques (temps) ?
2795
-	 **/
2796
-	public static function executer_requete($query, $serveur, $tracer = null) {
2797
-		$requeteur = spip_sqlite::requeteur($serveur);
2798
-
2799
-		return $requeteur->executer_requete($query, $tracer);
2800
-	}
2801
-
2802
-	/**
2803
-	 * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2804
-	 *
2805
-	 * @param string $serveur Nom de la connexion
2806
-	 * return int                Identifiant
2807
-	 **/
2808
-	public static function last_insert_id($serveur) {
2809
-		$requeteur = spip_sqlite::requeteur($serveur);
2810
-
2811
-		return $requeteur->last_insert_id($serveur);
2812
-	}
2813
-
2814
-	/**
2815
-	 * Annule une transaction
2816
-	 *
2817
-	 * @param string $serveur Nom de la connexion
2818
-	 **/
2819
-	public static function annuler_transaction($serveur) {
2820
-		spip_sqlite::executer_requete('ROLLBACK', $serveur);
2821
-		spip_sqlite::$transaction_en_cours[$serveur] = false;
2822
-	}
2823
-
2824
-	/**
2825
-	 * Termine une transaction
2826
-	 *
2827
-	 * @param string $serveur Nom de la connexion
2828
-	 **/
2829
-	public static function finir_transaction($serveur) {
2830
-		// si pas de transaction en cours, ne rien faire et le dire
2831
-		if (
2832
-			!isset(spip_sqlite::$transaction_en_cours[$serveur])
2833
-			or spip_sqlite::$transaction_en_cours[$serveur] == false
2834
-		) {
2835
-			return false;
2836
-		}
2837
-		// sinon fermer la transaction et retourner true
2838
-		spip_sqlite::executer_requete('COMMIT', $serveur);
2839
-		spip_sqlite::$transaction_en_cours[$serveur] = false;
2840
-
2841
-		return true;
2842
-	}
2735
+    /** @var sqlite_requeteur[] Liste des instances de requêteurs créés */
2736
+    public static $requeteurs = [];
2737
+    /** @var bool[] Pour chaque connexion, flag pour savoir si une transaction est en cours */
2738
+    public static $transaction_en_cours = [];
2739
+
2740
+
2741
+    /**
2742
+     * Retourne une unique instance du requêteur
2743
+     *
2744
+     * Retourne une instance unique du requêteur pour une connexion SQLite
2745
+     * donnée
2746
+     *
2747
+     * @param string $serveur
2748
+     *    Nom du connecteur
2749
+     * @return sqlite_requeteur
2750
+     *    Instance unique du requêteur
2751
+     **/
2752
+    public static function requeteur($serveur) {
2753
+        if (!isset(spip_sqlite::$requeteurs[$serveur])) {
2754
+            spip_sqlite::$requeteurs[$serveur] = new sqlite_requeteur($serveur);
2755
+        }
2756
+
2757
+        return spip_sqlite::$requeteurs[$serveur];
2758
+    }
2759
+
2760
+    /**
2761
+     * Prépare le texte d'une requête avant son exécution
2762
+     *
2763
+     * Adapte la requête au format plus ou moins MySQL par un format
2764
+     * compris de SQLite.
2765
+     *
2766
+     * Change les préfixes de tables SPIP par ceux véritables
2767
+     *
2768
+     * @param string $query Requête à préparer
2769
+     * @param string $serveur Nom de la connexion
2770
+     * @return string           Requête préparée
2771
+     */
2772
+    public static function traduire_requete($query, $serveur) {
2773
+        $requeteur = spip_sqlite::requeteur($serveur);
2774
+        $traducteur = new sqlite_traducteur($query, $requeteur->prefixe, $requeteur->sqlite_version);
2775
+
2776
+        return $traducteur->traduire_requete();
2777
+    }
2778
+
2779
+    /**
2780
+     * Démarre une transaction
2781
+     *
2782
+     * @param string $serveur Nom de la connexion
2783
+     **/
2784
+    public static function demarrer_transaction($serveur) {
2785
+        spip_sqlite::executer_requete('BEGIN TRANSACTION', $serveur);
2786
+        spip_sqlite::$transaction_en_cours[$serveur] = true;
2787
+    }
2788
+
2789
+    /**
2790
+     * Exécute la requête donnée
2791
+     *
2792
+     * @param string $query Requête
2793
+     * @param string $serveur Nom de la connexion
2794
+     * @param null|bool $tracer Demander des statistiques (temps) ?
2795
+     **/
2796
+    public static function executer_requete($query, $serveur, $tracer = null) {
2797
+        $requeteur = spip_sqlite::requeteur($serveur);
2798
+
2799
+        return $requeteur->executer_requete($query, $tracer);
2800
+    }
2801
+
2802
+    /**
2803
+     * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2804
+     *
2805
+     * @param string $serveur Nom de la connexion
2806
+     * return int                Identifiant
2807
+     **/
2808
+    public static function last_insert_id($serveur) {
2809
+        $requeteur = spip_sqlite::requeteur($serveur);
2810
+
2811
+        return $requeteur->last_insert_id($serveur);
2812
+    }
2813
+
2814
+    /**
2815
+     * Annule une transaction
2816
+     *
2817
+     * @param string $serveur Nom de la connexion
2818
+     **/
2819
+    public static function annuler_transaction($serveur) {
2820
+        spip_sqlite::executer_requete('ROLLBACK', $serveur);
2821
+        spip_sqlite::$transaction_en_cours[$serveur] = false;
2822
+    }
2823
+
2824
+    /**
2825
+     * Termine une transaction
2826
+     *
2827
+     * @param string $serveur Nom de la connexion
2828
+     **/
2829
+    public static function finir_transaction($serveur) {
2830
+        // si pas de transaction en cours, ne rien faire et le dire
2831
+        if (
2832
+            !isset(spip_sqlite::$transaction_en_cours[$serveur])
2833
+            or spip_sqlite::$transaction_en_cours[$serveur] == false
2834
+        ) {
2835
+            return false;
2836
+        }
2837
+        // sinon fermer la transaction et retourner true
2838
+        spip_sqlite::executer_requete('COMMIT', $serveur);
2839
+        spip_sqlite::$transaction_en_cours[$serveur] = false;
2840
+
2841
+        return true;
2842
+    }
2843 2843
 }
2844 2844
 
2845 2845
 /*
@@ -2852,127 +2852,127 @@  discard block
 block discarded – undo
2852 2852
  */
2853 2853
 
2854 2854
 class sqlite_requeteur {
2855
-	/** @var string Texte de la requête */
2856
-	public $query = ''; // la requete
2857
-	/** @var string Nom de la connexion */
2858
-	public $serveur = '';
2859
-	/** @var PDO Identifiant de la connexion SQLite */
2860
-	public $link = '';
2861
-	/** @var string Prefixe des tables SPIP */
2862
-	public $prefixe = '';
2863
-	/** @var string Nom de la base de donnée */
2864
-	public $db = '';
2865
-	/** @var bool Doit-on tracer les requetes (var_profile) ? */
2866
-	public $tracer = false; // doit-on tracer les requetes (var_profile)
2867
-
2868
-	/** @var string Version de SQLite (2 ou 3) */
2869
-	public $sqlite_version = '';
2870
-
2871
-	/**
2872
-	 * Constructeur
2873
-	 *
2874
-	 * @param string $serveur
2875
-	 * @return bool
2876
-	 */
2877
-	public function __construct($serveur = '') {
2878
-		_sqlite_init();
2879
-		$this->serveur = strtolower($serveur);
2880
-
2881
-		if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2882
-			spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2883
-
2884
-			return false;
2885
-		}
2886
-
2887
-		$this->sqlite_version = _sqlite_is_version('', $this->link);
2888
-
2889
-		$this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
2890
-		$this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
2891
-
2892
-		// tracage des requetes ?
2893
-		$this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
2894
-	}
2895
-
2896
-	/**
2897
-	 * Lancer la requête transmise et faire le tracage si demandé
2898
-	 *
2899
-	 * @param string $query
2900
-	 *     Requête à exécuter
2901
-	 * @param bool|null $tracer
2902
-	 *     true pour tracer la requête
2903
-	 * @return bool|PDOStatement|array
2904
-	 */
2905
-	public function executer_requete($query, $tracer = null) {
2906
-		if (is_null($tracer)) {
2907
-			$tracer = $this->tracer;
2908
-		}
2909
-		$err = '';
2910
-		$t = 0;
2911
-		if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
2912
-			include_spip('public/tracer');
2913
-			$t = trace_query_start();
2914
-		}
2915
-
2916
-		# spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
2917
-		if ($this->link) {
2918
-			// memoriser la derniere erreur PHP vue
2919
-			$last_error = (function_exists('error_get_last') ? error_get_last() : '');
2920
-			$e = null;
2921
-			// sauver la derniere requete
2922
-			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
2923
-			$GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++;
2924
-
2925
-			try {
2926
-				$r = $this->link->query($query);
2927
-			} catch (\PDOException $e) {
2928
-				spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2929
-				$r = false;
2930
-			}
2931
-			// sauvegarde de la requete (elle y est deja dans $r->queryString)
2932
-			# $r->spipQueryString = $query;
2933
-
2934
-			// comptage : oblige de compter le nombre d'entrees retournees
2935
-			// par une requete SELECT
2936
-			// aucune autre solution ne donne le nombre attendu :( !
2937
-			// particulierement s'il y a des LIMIT dans la requete.
2938
-			if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') {
2939
-				if ($r) {
2940
-					// noter le link et la query pour faire le comptage *si* on en a besoin
2941
-					$r->spipSqliteRowCount = [$this->link, $query];
2942
-				} elseif ($r instanceof PDOStatement) {
2943
-					$r->spipSqliteRowCount = 0;
2944
-				}
2945
-			}
2946
-
2947
-			// loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2948
-			if ($e and $e instanceof \PDOException) {
2949
-				$err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2950
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2951
-			} elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2952
-				$err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2953
-				spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2954
-			} else {
2955
-				$err = '';
2956
-			}
2957
-		} else {
2958
-			$r = false;
2959
-		}
2960
-
2961
-		if (spip_sqlite_errno($this->serveur)) {
2962
-			$err .= spip_sqlite_error($query, $this->serveur);
2963
-		}
2964
-
2965
-		return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
2966
-	}
2967
-
2968
-	/**
2969
-	 * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2970
-	 *
2971
-	 * @return string|false
2972
-	 **/
2973
-	public function last_insert_id() {
2974
-		return $this->link->lastInsertId();
2975
-	}
2855
+    /** @var string Texte de la requête */
2856
+    public $query = ''; // la requete
2857
+    /** @var string Nom de la connexion */
2858
+    public $serveur = '';
2859
+    /** @var PDO Identifiant de la connexion SQLite */
2860
+    public $link = '';
2861
+    /** @var string Prefixe des tables SPIP */
2862
+    public $prefixe = '';
2863
+    /** @var string Nom de la base de donnée */
2864
+    public $db = '';
2865
+    /** @var bool Doit-on tracer les requetes (var_profile) ? */
2866
+    public $tracer = false; // doit-on tracer les requetes (var_profile)
2867
+
2868
+    /** @var string Version de SQLite (2 ou 3) */
2869
+    public $sqlite_version = '';
2870
+
2871
+    /**
2872
+     * Constructeur
2873
+     *
2874
+     * @param string $serveur
2875
+     * @return bool
2876
+     */
2877
+    public function __construct($serveur = '') {
2878
+        _sqlite_init();
2879
+        $this->serveur = strtolower($serveur);
2880
+
2881
+        if (!($this->link = _sqlite_link($this->serveur)) && (!defined('_ECRIRE_INSTALL') || !_ECRIRE_INSTALL)) {
2882
+            spip_log('Aucune connexion sqlite (link)', 'sqlite.' . _LOG_ERREUR);
2883
+
2884
+            return false;
2885
+        }
2886
+
2887
+        $this->sqlite_version = _sqlite_is_version('', $this->link);
2888
+
2889
+        $this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
2890
+        $this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
2891
+
2892
+        // tracage des requetes ?
2893
+        $this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
2894
+    }
2895
+
2896
+    /**
2897
+     * Lancer la requête transmise et faire le tracage si demandé
2898
+     *
2899
+     * @param string $query
2900
+     *     Requête à exécuter
2901
+     * @param bool|null $tracer
2902
+     *     true pour tracer la requête
2903
+     * @return bool|PDOStatement|array
2904
+     */
2905
+    public function executer_requete($query, $tracer = null) {
2906
+        if (is_null($tracer)) {
2907
+            $tracer = $this->tracer;
2908
+        }
2909
+        $err = '';
2910
+        $t = 0;
2911
+        if ($tracer or (defined('_DEBUG_TRACE_QUERIES') and _DEBUG_TRACE_QUERIES)) {
2912
+            include_spip('public/tracer');
2913
+            $t = trace_query_start();
2914
+        }
2915
+
2916
+        # spip_log("requete: $this->serveur >> $query",'sqlite.'._LOG_DEBUG); // boum ? pourquoi ?
2917
+        if ($this->link) {
2918
+            // memoriser la derniere erreur PHP vue
2919
+            $last_error = (function_exists('error_get_last') ? error_get_last() : '');
2920
+            $e = null;
2921
+            // sauver la derniere requete
2922
+            $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['last'] = $query;
2923
+            $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['total_requetes']++;
2924
+
2925
+            try {
2926
+                $r = $this->link->query($query);
2927
+            } catch (\PDOException $e) {
2928
+                spip_log('PDOException: ' . $e->getMessage(), 'sqlite.' . _LOG_DEBUG);
2929
+                $r = false;
2930
+            }
2931
+            // sauvegarde de la requete (elle y est deja dans $r->queryString)
2932
+            # $r->spipQueryString = $query;
2933
+
2934
+            // comptage : oblige de compter le nombre d'entrees retournees
2935
+            // par une requete SELECT
2936
+            // aucune autre solution ne donne le nombre attendu :( !
2937
+            // particulierement s'il y a des LIMIT dans la requete.
2938
+            if (strtoupper(substr(ltrim($query), 0, 6)) == 'SELECT') {
2939
+                if ($r) {
2940
+                    // noter le link et la query pour faire le comptage *si* on en a besoin
2941
+                    $r->spipSqliteRowCount = [$this->link, $query];
2942
+                } elseif ($r instanceof PDOStatement) {
2943
+                    $r->spipSqliteRowCount = 0;
2944
+                }
2945
+            }
2946
+
2947
+            // loger les warnings/erreurs eventuels de sqlite remontant dans PHP
2948
+            if ($e and $e instanceof \PDOException) {
2949
+                $err = strip_tags($e->getMessage()) . ' in ' . $e->getFile() . ' line ' . $e->getLine();
2950
+                spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2951
+            } elseif ($err = (function_exists('error_get_last') ? error_get_last() : '') and $err != $last_error) {
2952
+                $err = strip_tags($err['message']) . ' in ' . $err['file'] . ' line ' . $err['line'];
2953
+                spip_log("$err - " . $query, 'sqlite.' . _LOG_ERREUR);
2954
+            } else {
2955
+                $err = '';
2956
+            }
2957
+        } else {
2958
+            $r = false;
2959
+        }
2960
+
2961
+        if (spip_sqlite_errno($this->serveur)) {
2962
+            $err .= spip_sqlite_error($query, $this->serveur);
2963
+        }
2964
+
2965
+        return $t ? trace_query_end($query, $t, $r, $err, $this->serveur) : $r;
2966
+    }
2967
+
2968
+    /**
2969
+     * Obtient l'identifiant de la dernière ligne insérée ou modifiée
2970
+     *
2971
+     * @return string|false
2972
+     **/
2973
+    public function last_insert_id() {
2974
+        return $this->link->lastInsertId();
2975
+    }
2976 2976
 }
2977 2977
 
2978 2978
 
@@ -2982,206 +2982,206 @@  discard block
 block discarded – undo
2982 2982
  * (fonction pour proteger les textes)
2983 2983
  */
2984 2984
 class sqlite_traducteur {
2985
-	/** @var string $query Texte de la requête */
2986
-	public $query = '';
2987
-	/** @var string $prefixe Préfixe des tables */
2988
-	public $prefixe = '';
2989
-	/** @var string $sqlite_version Version de sqlite (2 ou 3) */
2990
-	public $sqlite_version = '';
2991
-
2992
-	/** Pour les corrections à effectuer sur les requêtes : array(code=>'texte') trouvé
2993
-	 *
2994
-	 * @var array
2995
-	 */
2996
-	public $textes = [];
2997
-
2998
-	/**
2999
-	 * Constructeur
3000
-	 *
3001
-	 * @param string $query Requête à préparer
3002
-	 * @param string $prefixe Prefixe des tables à utiliser
3003
-	 * @param string $sqlite_version Version SQLite (2 ou 3)
3004
-	 */
3005
-	public function __construct($query, $prefixe, $sqlite_version) {
3006
-		$this->query = $query;
3007
-		$this->prefixe = $prefixe;
3008
-		$this->sqlite_version = $sqlite_version;
3009
-	}
3010
-
3011
-	/**
3012
-	 * Transformer la requete pour SQLite
3013
-	 *
3014
-	 * Enlève les textes, transforme la requête pour quelle soit
3015
-	 * bien interprétée par SQLite, puis remet les textes
3016
-	 * la fonction affecte `$this->query`
3017
-	 */
3018
-	public function traduire_requete() {
3019
-		//
3020
-		// 1) Protection des textes en les remplacant par des codes
3021
-		//
3022
-		// enlever les 'textes' et initialiser avec
3023
-		list($this->query, $textes) = query_echappe_textes($this->query);
3024
-
3025
-		//
3026
-		// 2) Corrections de la requete
3027
-		//
3028
-		// Correction Create Database
3029
-		// Create Database -> requete ignoree
3030
-		if (strpos($this->query, 'CREATE DATABASE') === 0) {
3031
-			spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3032
-			$this->query = 'SELECT 1';
3033
-		}
3034
-
3035
-		// Correction Insert Ignore
3036
-		// INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3037
-		if (strpos($this->query, 'INSERT IGNORE') === 0) {
3038
-			spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3039
-			$this->query = 'INSERT ' . substr($this->query, '13');
3040
-		}
3041
-
3042
-		// Correction des dates avec INTERVAL
3043
-		// utiliser sql_date_proche() de preference
3044
-		if (strpos($this->query, 'INTERVAL') !== false) {
3045
-			$this->query = preg_replace_callback(
3046
-				'/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U',
3047
-				[&$this, '_remplacerDateParTime'],
3048
-				$this->query
3049
-			);
3050
-		}
3051
-
3052
-		if (strpos($this->query, 'LEFT(') !== false) {
3053
-			$this->query = str_replace('LEFT(', '_LEFT(', $this->query);
3054
-		}
3055
-
3056
-		if (strpos($this->query, 'TIMESTAMPDIFF(') !== false) {
3057
-			$this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims', "TIMESTAMPDIFF('\\1',", $this->query);
3058
-		}
3059
-
3060
-
3061
-		// Correction Using
3062
-		// USING (non reconnu en sqlite2)
3063
-		// problematique car la jointure ne se fait pas du coup.
3064
-		if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3065
-			spip_log(
3066
-				"'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3067
-				'sqlite.' . _LOG_ERREUR
3068
-			);
3069
-			$this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3070
-		}
3071
-
3072
-		// Correction Field
3073
-		// remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
3074
-		if (strpos($this->query, 'FIELD') !== false) {
3075
-			$this->query = preg_replace_callback(
3076
-				'/FIELD\s*\(([^\)]*)\)/',
3077
-				[&$this, '_remplacerFieldParCase'],
3078
-				$this->query
3079
-			);
3080
-		}
3081
-
3082
-		// Correction des noms de tables FROM
3083
-		// mettre les bons noms de table dans from, update, insert, replace...
3084
-		if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)) {
3085
-			$suite = strstr($this->query, $regs[0]);
3086
-			$this->query = substr($this->query, 0, -strlen($suite));
3087
-		} else {
3088
-			$suite = '';
3089
-		}
3090
-		$pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3091
-		$this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3092
-
3093
-		// Correction zero AS x
3094
-		// pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
3095
-		// n'apprecie pas du tout SELECT 0 as x ... ORDER BY x
3096
-		// il dit que x ne doit pas être un integer dans le order by !
3097
-		// on remplace du coup x par vide() dans ce cas uniquement
3098
-		//
3099
-		// 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}}
3100
-		// mais est-ce encore un soucis pour sqlite en 2021 ? (ie commenter le preg_replace marche très bien en sqlite 3.28)
3101
-		if ((strpos($this->query, '0 AS') !== false)) {
3102
-			// on ne remplace que dans ORDER BY ou GROUP BY
3103
-			if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)) {
3104
-				$suite = strstr($this->query, $regs[0]);
3105
-				$this->query = substr($this->query, 0, -strlen($suite));
3106
-
3107
-				// on cherche les noms des x dans 0 AS x
3108
-				// on remplace dans $suite le nom par vide()
3109
-				preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER);
3110
-				foreach ($matches[1] as $m) {
3111
-					if (strpos($suite, $m) !== false) {
3112
-						$suite = preg_replace(",\b$m\b,", 'VIDE()', $suite);
3113
-					}
3114
-				}
3115
-				$this->query .= $suite;
3116
-			}
3117
-		}
3118
-
3119
-		// Correction possible des divisions entieres
3120
-		// Le standard SQL (lequel? ou?) semble indiquer que
3121
-		// a/b=c doit donner c entier si a et b sont entiers 4/3=1.
3122
-		// C'est ce que retournent effectivement SQL Server et SQLite
3123
-		// Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333...
3124
-		//
3125
-		// On peut forcer la conversion en multipliant par 1.0 avant la division
3126
-		// /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus !
3127
-		// cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228
3128
-		//     http://www.sqlite.org/cvstrac/tktview?tn=3202
3129
-		// (4*1.0/3) n'est pas rendu dans ce cas !
3130
-		# $this->query = str_replace('/','* 1.00 / ',$this->query);
3131
-
3132
-
3133
-		// Correction critere REGEXP, non reconnu en sqlite2
3134
-		if (($this->sqlite_version == 2) && (strpos($this->query, 'REGEXP') !== false)) {
3135
-			$this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query);
3136
-		}
3137
-
3138
-		//
3139
-		// 3) Remise en place des textes d'origine
3140
-		//
3141
-		// Correction Antiquotes et echappements
3142
-		// ` => rien
3143
-		if (strpos($this->query, '`') !== false) {
3144
-			$this->query = str_replace('`', '', $this->query);
3145
-		}
3146
-
3147
-		$this->query = query_reinjecte_textes($this->query, $textes);
3148
-
3149
-		return $this->query;
3150
-	}
3151
-
3152
-
3153
-	/**
3154
-	 * Callback pour remplacer `DATE_` / `INTERVAL`
3155
-	 * par `DATE ... strtotime`
3156
-	 *
3157
-	 * @param array $matches Captures
3158
-	 * @return string Texte de date compris par SQLite
3159
-	 */
3160
-	public function _remplacerDateParTime($matches) {
3161
-		$op = strtoupper($matches[1] == 'ADD') ? '+' : '-';
3162
-
3163
-		return "datetime$matches[2] '$op$matches[3] $matches[4]')";
3164
-	}
3165
-
3166
-	/**
3167
-	 * Callback pour remplacer `FIELD(table,i,j,k...)`
3168
-	 * par `CASE WHEN table=i THEN n ... ELSE 0 END`
3169
-	 *
3170
-	 * @param array $matches Captures
3171
-	 * @return string Texte de liste ordonnée compris par SQLite
3172
-	 */
3173
-	public function _remplacerFieldParCase($matches) {
3174
-		$fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X)
3175
-		$t = explode(',', $fields);
3176
-		$index = array_shift($t);
3177
-
3178
-		$res = '';
3179
-		$n = 0;
3180
-		foreach ($t as $v) {
3181
-			$n++;
3182
-			$res .= "\nWHEN $index=$v THEN $n";
3183
-		}
3184
-
3185
-		return "CASE $res ELSE 0 END ";
3186
-	}
2985
+    /** @var string $query Texte de la requête */
2986
+    public $query = '';
2987
+    /** @var string $prefixe Préfixe des tables */
2988
+    public $prefixe = '';
2989
+    /** @var string $sqlite_version Version de sqlite (2 ou 3) */
2990
+    public $sqlite_version = '';
2991
+
2992
+    /** Pour les corrections à effectuer sur les requêtes : array(code=>'texte') trouvé
2993
+     *
2994
+     * @var array
2995
+     */
2996
+    public $textes = [];
2997
+
2998
+    /**
2999
+     * Constructeur
3000
+     *
3001
+     * @param string $query Requête à préparer
3002
+     * @param string $prefixe Prefixe des tables à utiliser
3003
+     * @param string $sqlite_version Version SQLite (2 ou 3)
3004
+     */
3005
+    public function __construct($query, $prefixe, $sqlite_version) {
3006
+        $this->query = $query;
3007
+        $this->prefixe = $prefixe;
3008
+        $this->sqlite_version = $sqlite_version;
3009
+    }
3010
+
3011
+    /**
3012
+     * Transformer la requete pour SQLite
3013
+     *
3014
+     * Enlève les textes, transforme la requête pour quelle soit
3015
+     * bien interprétée par SQLite, puis remet les textes
3016
+     * la fonction affecte `$this->query`
3017
+     */
3018
+    public function traduire_requete() {
3019
+        //
3020
+        // 1) Protection des textes en les remplacant par des codes
3021
+        //
3022
+        // enlever les 'textes' et initialiser avec
3023
+        list($this->query, $textes) = query_echappe_textes($this->query);
3024
+
3025
+        //
3026
+        // 2) Corrections de la requete
3027
+        //
3028
+        // Correction Create Database
3029
+        // Create Database -> requete ignoree
3030
+        if (strpos($this->query, 'CREATE DATABASE') === 0) {
3031
+            spip_log("Sqlite : requete non executee -> $this->query", 'sqlite.' . _LOG_AVERTISSEMENT);
3032
+            $this->query = 'SELECT 1';
3033
+        }
3034
+
3035
+        // Correction Insert Ignore
3036
+        // INSERT IGNORE -> insert (tout court et pas 'insert or replace')
3037
+        if (strpos($this->query, 'INSERT IGNORE') === 0) {
3038
+            spip_log("Sqlite : requete transformee -> $this->query", 'sqlite.' . _LOG_DEBUG);
3039
+            $this->query = 'INSERT ' . substr($this->query, '13');
3040
+        }
3041
+
3042
+        // Correction des dates avec INTERVAL
3043
+        // utiliser sql_date_proche() de preference
3044
+        if (strpos($this->query, 'INTERVAL') !== false) {
3045
+            $this->query = preg_replace_callback(
3046
+                '/DATE_(ADD|SUB)(.*)INTERVAL\s+(\d+)\s+([a-zA-Z]+)\)/U',
3047
+                [&$this, '_remplacerDateParTime'],
3048
+                $this->query
3049
+            );
3050
+        }
3051
+
3052
+        if (strpos($this->query, 'LEFT(') !== false) {
3053
+            $this->query = str_replace('LEFT(', '_LEFT(', $this->query);
3054
+        }
3055
+
3056
+        if (strpos($this->query, 'TIMESTAMPDIFF(') !== false) {
3057
+            $this->query = preg_replace('/TIMESTAMPDIFF\(\s*([^,]*)\s*,/Uims', "TIMESTAMPDIFF('\\1',", $this->query);
3058
+        }
3059
+
3060
+
3061
+        // Correction Using
3062
+        // USING (non reconnu en sqlite2)
3063
+        // problematique car la jointure ne se fait pas du coup.
3064
+        if (($this->sqlite_version == 2) && (strpos($this->query, 'USING') !== false)) {
3065
+            spip_log(
3066
+                "'USING (champ)' n'est pas reconnu en SQLite 2. Utilisez 'ON table1.champ = table2.champ'",
3067
+                'sqlite.' . _LOG_ERREUR
3068
+            );
3069
+            $this->query = preg_replace('/USING\s*\([^\)]*\)/', '', $this->query);
3070
+        }
3071
+
3072
+        // Correction Field
3073
+        // remplace FIELD(table,i,j,k...) par CASE WHEN table=i THEN n ... ELSE 0 END
3074
+        if (strpos($this->query, 'FIELD') !== false) {
3075
+            $this->query = preg_replace_callback(
3076
+                '/FIELD\s*\(([^\)]*)\)/',
3077
+                [&$this, '_remplacerFieldParCase'],
3078
+                $this->query
3079
+            );
3080
+        }
3081
+
3082
+        // Correction des noms de tables FROM
3083
+        // mettre les bons noms de table dans from, update, insert, replace...
3084
+        if (preg_match('/\s(SET|VALUES|WHERE|DATABASE)\s/iS', $this->query, $regs)) {
3085
+            $suite = strstr($this->query, $regs[0]);
3086
+            $this->query = substr($this->query, 0, -strlen($suite));
3087
+        } else {
3088
+            $suite = '';
3089
+        }
3090
+        $pref = ($this->prefixe) ? $this->prefixe . '_' : '';
3091
+        $this->query = preg_replace('/([,\s])spip_/S', '\1' . $pref, $this->query) . $suite;
3092
+
3093
+        // Correction zero AS x
3094
+        // pg n'aime pas 0+x AS alias, sqlite, dans le meme style,
3095
+        // n'apprecie pas du tout SELECT 0 as x ... ORDER BY x
3096
+        // il dit que x ne doit pas être un integer dans le order by !
3097
+        // on remplace du coup x par vide() dans ce cas uniquement
3098
+        //
3099
+        // 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}}
3100
+        // mais est-ce encore un soucis pour sqlite en 2021 ? (ie commenter le preg_replace marche très bien en sqlite 3.28)
3101
+        if ((strpos($this->query, '0 AS') !== false)) {
3102
+            // on ne remplace que dans ORDER BY ou GROUP BY
3103
+            if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)) {
3104
+                $suite = strstr($this->query, $regs[0]);
3105
+                $this->query = substr($this->query, 0, -strlen($suite));
3106
+
3107
+                // on cherche les noms des x dans 0 AS x
3108
+                // on remplace dans $suite le nom par vide()
3109
+                preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER);
3110
+                foreach ($matches[1] as $m) {
3111
+                    if (strpos($suite, $m) !== false) {
3112
+                        $suite = preg_replace(",\b$m\b,", 'VIDE()', $suite);
3113
+                    }
3114
+                }
3115
+                $this->query .= $suite;
3116
+            }
3117
+        }
3118
+
3119
+        // Correction possible des divisions entieres
3120
+        // Le standard SQL (lequel? ou?) semble indiquer que
3121
+        // a/b=c doit donner c entier si a et b sont entiers 4/3=1.
3122
+        // C'est ce que retournent effectivement SQL Server et SQLite
3123
+        // Ce n'est pas ce qu'applique MySQL qui retourne un reel : 4/3=1.333...
3124
+        //
3125
+        // On peut forcer la conversion en multipliant par 1.0 avant la division
3126
+        // /!\ SQLite 3.5.9 Debian/Ubuntu est victime d'un bug en plus !
3127
+        // cf. https://bugs.launchpad.net/ubuntu/+source/sqlite3/+bug/254228
3128
+        //     http://www.sqlite.org/cvstrac/tktview?tn=3202
3129
+        // (4*1.0/3) n'est pas rendu dans ce cas !
3130
+        # $this->query = str_replace('/','* 1.00 / ',$this->query);
3131
+
3132
+
3133
+        // Correction critere REGEXP, non reconnu en sqlite2
3134
+        if (($this->sqlite_version == 2) && (strpos($this->query, 'REGEXP') !== false)) {
3135
+            $this->query = preg_replace('/([^\s\(]*)(\s*)REGEXP(\s*)([^\s\)]*)/', 'REGEXP($4, $1)', $this->query);
3136
+        }
3137
+
3138
+        //
3139
+        // 3) Remise en place des textes d'origine
3140
+        //
3141
+        // Correction Antiquotes et echappements
3142
+        // ` => rien
3143
+        if (strpos($this->query, '`') !== false) {
3144
+            $this->query = str_replace('`', '', $this->query);
3145
+        }
3146
+
3147
+        $this->query = query_reinjecte_textes($this->query, $textes);
3148
+
3149
+        return $this->query;
3150
+    }
3151
+
3152
+
3153
+    /**
3154
+     * Callback pour remplacer `DATE_` / `INTERVAL`
3155
+     * par `DATE ... strtotime`
3156
+     *
3157
+     * @param array $matches Captures
3158
+     * @return string Texte de date compris par SQLite
3159
+     */
3160
+    public function _remplacerDateParTime($matches) {
3161
+        $op = strtoupper($matches[1] == 'ADD') ? '+' : '-';
3162
+
3163
+        return "datetime$matches[2] '$op$matches[3] $matches[4]')";
3164
+    }
3165
+
3166
+    /**
3167
+     * Callback pour remplacer `FIELD(table,i,j,k...)`
3168
+     * par `CASE WHEN table=i THEN n ... ELSE 0 END`
3169
+     *
3170
+     * @param array $matches Captures
3171
+     * @return string Texte de liste ordonnée compris par SQLite
3172
+     */
3173
+    public function _remplacerFieldParCase($matches) {
3174
+        $fields = substr($matches[0], 6, -1); // ne recuperer que l'interieur X de field(X)
3175
+        $t = explode(',', $fields);
3176
+        $index = array_shift($t);
3177
+
3178
+        $res = '';
3179
+        $n = 0;
3180
+        foreach ($t as $v) {
3181
+            $n++;
3182
+            $res .= "\nWHEN $index=$v THEN $n";
3183
+        }
3184
+
3185
+        return "CASE $res ELSE 0 END ";
3186
+    }
3187 3187
 }
Please login to merge, or discard this patch.