@@ -17,7 +17,7 @@ discard block |
||
| 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 |
||
| 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 | } |
@@ -4,436 +4,436 @@ discard block |
||
| 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' => '<plugin> غير موجود في ملف التعريف', |
|
| 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' => '<plugin> غير موجود في ملف التعريف', |
|
| 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 |
||
| 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 ":" |
|
| 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 ":" |
|
| 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 |
||
| 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 |
||
| 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 | ); |
@@ -11,7 +11,7 @@ discard block |
||
| 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 |
||
| 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 | } |
@@ -2,123 +2,123 @@ |
||
| 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 | ); |
@@ -4,123 +4,123 @@ |
||
| 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 | ); |
@@ -4,123 +4,123 @@ |
||
| 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 | ); |
@@ -4,903 +4,903 @@ |
||
| 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' => '<lugant> 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' => '<lugant> 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 | ); |
@@ -20,15 +20,13 @@ discard block |
||
| 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 |
||
| 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 |
@@ -111,13 +111,13 @@ discard block |
||
| 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 |
||
| 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("\\'", ''', $href); |
| 167 | 167 | |
| 168 | 168 | if (!isset($t[$v[2]])) { |
@@ -183,7 +183,7 @@ discard block |
||
| 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 |
||
| 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]; |
@@ -11,187 +11,187 @@ |
||
| 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("\\'", ''', $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("\\'", ''', $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 | } |
@@ -2006,8 +2006,7 @@ discard block |
||
| 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 |
||
| 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]); |
@@ -64,27 +64,27 @@ discard block |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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, |
@@ -18,7 +18,7 @@ discard block |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 |
||
| 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 | } |