@@ -2,438 +2,438 @@ discard block |
||
| 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 | - 'activer_plugin' => 'Activer le plugin', |
|
| 12 | - 'affichage' => 'Affichage', |
|
| 13 | - 'aide_non_disponible' => 'Cette partie de l’aide en ligne n’est pas encore disponible dans cette langue.', |
|
| 14 | - 'annuler_recherche' => 'Annuler la recherche', |
|
| 15 | - 'auteur' => 'Auteur :', |
|
| 16 | - 'avis_acces_interdit' => 'Accès interdit.', |
|
| 17 | - 'avis_acces_interdit_prive' => 'Vous n’avez pas le droit d’accéder à la page <b>@exec@</b>.', |
|
| 18 | - 'avis_article_modifie' => 'Attention, @nom_auteur_modif@ a travaillé sur cet article il y a @date_diff@ minutes', |
|
| 19 | - 'avis_aucun_resultat' => 'Aucun résultat.', |
|
| 20 | - 'avis_base_inaccessible' => 'Impossible de se connecter à la base de données @base@.', |
|
| 21 | - 'avis_chemin_invalide_1' => 'Le chemin que vous avez choisi', |
|
| 22 | - 'avis_chemin_invalide_2' => 'ne semble pas valide. Veuillez retourner à la page précédente et vérifier les informations fournies.', |
|
| 23 | - 'avis_connexion_echec_1' => 'La connexion à la base de données a échoué.', |
|
| 24 | - 'avis_connexion_echec_2' => 'Revenez à la page précédente, et vérifiez les informations que vous avez fournies.', |
|
| 25 | - 'avis_connexion_echec_3' => '<b>N.B.</b> Sur de nombreux serveurs, vous devez <b>demander</b> l’activation de votre accès à la base de données avant de pouvoir l’utiliser. Si vous ne pouvez vous connecter, vérifiez que vous avez effectué cette démarche.', |
|
| 26 | - 'avis_connexion_erreur_creer_base' => 'La base de données n’a pas pu être créée.', |
|
| 27 | - 'avis_connexion_erreur_fichier_cle_manquant_1' => 'L’installation doit être faite par un webmestre avec un backup des clés et son mot de passe', |
|
| 28 | - 'avis_connexion_erreur_fichier_cle_manquant_2' => 'L’installation doit être faite par un webmestre avec un backup des clés', |
|
| 29 | - 'avis_connexion_erreur_nom_base' => 'Le nom de la base ne peut contenir que des lettres, des chiffres et des tirets', |
|
| 30 | - 'avis_connexion_ldap_echec_1' => 'La connexion au serveur LDAP a échoué.', |
|
| 31 | - 'avis_connexion_ldap_echec_2' => 'Revenez à la page précédente, et vérifiez les informations que vous avez fournies.', |
|
| 32 | - 'avis_connexion_ldap_echec_3' => 'Alternativement, n’utilisez pas le support LDAP pour importer des utilisateurs.', |
|
| 33 | - 'avis_deplacement_rubrique' => 'Attention ! Cette rubrique contient @contient_breves@ brève@scb@ : si vous la déplacez, veuillez cocher cette case de confirmation.', |
|
| 34 | - 'avis_erreur_connexion_mysql' => 'Erreur de connexion SQL', |
|
| 35 | - 'avis_erreur_creation_compte' => 'Echec lors de l’initialisation du compte', |
|
| 36 | - 'avis_espace_interdit' => '<b>Espace interdit</b> <div>SPIP est déjà installé.</div>', |
|
| 37 | - 'avis_lecture_noms_bases_1' => 'Le programme d’installation n’a pas pu lire les noms des bases de données installées.', |
|
| 38 | - 'avis_lecture_noms_bases_2' => 'Soit aucune base n’est disponible, soit la fonction permettant de lister les bases a été désactivée |
|
| 10 | + // A |
|
| 11 | + 'activer_plugin' => 'Activer le plugin', |
|
| 12 | + 'affichage' => 'Affichage', |
|
| 13 | + 'aide_non_disponible' => 'Cette partie de l’aide en ligne n’est pas encore disponible dans cette langue.', |
|
| 14 | + 'annuler_recherche' => 'Annuler la recherche', |
|
| 15 | + 'auteur' => 'Auteur :', |
|
| 16 | + 'avis_acces_interdit' => 'Accès interdit.', |
|
| 17 | + 'avis_acces_interdit_prive' => 'Vous n’avez pas le droit d’accéder à la page <b>@exec@</b>.', |
|
| 18 | + 'avis_article_modifie' => 'Attention, @nom_auteur_modif@ a travaillé sur cet article il y a @date_diff@ minutes', |
|
| 19 | + 'avis_aucun_resultat' => 'Aucun résultat.', |
|
| 20 | + 'avis_base_inaccessible' => 'Impossible de se connecter à la base de données @base@.', |
|
| 21 | + 'avis_chemin_invalide_1' => 'Le chemin que vous avez choisi', |
|
| 22 | + 'avis_chemin_invalide_2' => 'ne semble pas valide. Veuillez retourner à la page précédente et vérifier les informations fournies.', |
|
| 23 | + 'avis_connexion_echec_1' => 'La connexion à la base de données a échoué.', |
|
| 24 | + 'avis_connexion_echec_2' => 'Revenez à la page précédente, et vérifiez les informations que vous avez fournies.', |
|
| 25 | + 'avis_connexion_echec_3' => '<b>N.B.</b> Sur de nombreux serveurs, vous devez <b>demander</b> l’activation de votre accès à la base de données avant de pouvoir l’utiliser. Si vous ne pouvez vous connecter, vérifiez que vous avez effectué cette démarche.', |
|
| 26 | + 'avis_connexion_erreur_creer_base' => 'La base de données n’a pas pu être créée.', |
|
| 27 | + 'avis_connexion_erreur_fichier_cle_manquant_1' => 'L’installation doit être faite par un webmestre avec un backup des clés et son mot de passe', |
|
| 28 | + 'avis_connexion_erreur_fichier_cle_manquant_2' => 'L’installation doit être faite par un webmestre avec un backup des clés', |
|
| 29 | + 'avis_connexion_erreur_nom_base' => 'Le nom de la base ne peut contenir que des lettres, des chiffres et des tirets', |
|
| 30 | + 'avis_connexion_ldap_echec_1' => 'La connexion au serveur LDAP a échoué.', |
|
| 31 | + 'avis_connexion_ldap_echec_2' => 'Revenez à la page précédente, et vérifiez les informations que vous avez fournies.', |
|
| 32 | + 'avis_connexion_ldap_echec_3' => 'Alternativement, n’utilisez pas le support LDAP pour importer des utilisateurs.', |
|
| 33 | + 'avis_deplacement_rubrique' => 'Attention ! Cette rubrique contient @contient_breves@ brève@scb@ : si vous la déplacez, veuillez cocher cette case de confirmation.', |
|
| 34 | + 'avis_erreur_connexion_mysql' => 'Erreur de connexion SQL', |
|
| 35 | + 'avis_erreur_creation_compte' => 'Echec lors de l’initialisation du compte', |
|
| 36 | + 'avis_espace_interdit' => '<b>Espace interdit</b> <div>SPIP est déjà installé.</div>', |
|
| 37 | + 'avis_lecture_noms_bases_1' => 'Le programme d’installation n’a pas pu lire les noms des bases de données installées.', |
|
| 38 | + 'avis_lecture_noms_bases_2' => 'Soit aucune base n’est disponible, soit la fonction permettant de lister les bases a été désactivée |
|
| 39 | 39 | pour des raisons de sécurité (ce qui est le cas chez de nombreux hébergeurs).', |
| 40 | - 'avis_lecture_noms_bases_3' => 'Dans la seconde alternative, il est probable qu’une base portant votre nom de login soit utilisable :', |
|
| 41 | - 'avis_non_acces_page' => 'Vous n’avez pas accès à cette page.', |
|
| 42 | - 'avis_operation_echec' => 'L’opération a échoué.', |
|
| 43 | - 'avis_operation_impossible' => 'Opération impossible', |
|
| 44 | - 'avis_suppression_base' => 'ATTENTION, la suppression des données est irréversible', |
|
| 40 | + 'avis_lecture_noms_bases_3' => 'Dans la seconde alternative, il est probable qu’une base portant votre nom de login soit utilisable :', |
|
| 41 | + 'avis_non_acces_page' => 'Vous n’avez pas accès à cette page.', |
|
| 42 | + 'avis_operation_echec' => 'L’opération a échoué.', |
|
| 43 | + 'avis_operation_impossible' => 'Opération impossible', |
|
| 44 | + 'avis_suppression_base' => 'ATTENTION, la suppression des données est irréversible', |
|
| 45 | 45 | |
| 46 | - // B |
|
| 47 | - 'bouton_acces_ldap' => 'Ajouter l’accès à LDAP', |
|
| 48 | - 'bouton_ajouter' => 'Ajouter', |
|
| 49 | - 'bouton_annuler' => 'Annuler', |
|
| 50 | - 'bouton_cache_activer' => 'Réactiver le cache', |
|
| 51 | - 'bouton_cache_desactiver' => 'Désactiver temporairement le cache', |
|
| 52 | - 'bouton_demande_publication' => 'Demander la publication de cet article', |
|
| 53 | - 'bouton_desactive_tout' => 'Tout désactiver', |
|
| 54 | - 'bouton_desinstaller' => 'Désinstaller', |
|
| 55 | - 'bouton_effacer_tout' => 'Effacer TOUT', |
|
| 56 | - 'bouton_envoyer_message' => 'Message définitif : envoyer', |
|
| 57 | - 'bouton_fermer' => 'Fermer', |
|
| 58 | - 'bouton_mettre_a_jour_base' => 'Mettre à jour la base de données', |
|
| 59 | - 'bouton_modifier' => 'Modifier', |
|
| 60 | - 'bouton_radio_afficher' => 'Afficher', |
|
| 61 | - 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Apparaître dans la liste des rédacteurs connectés', |
|
| 62 | - 'bouton_radio_envoi_annonces_adresse' => 'Envoyer les annonces à l’adresse :', |
|
| 63 | - 'bouton_radio_envoi_liste_nouveautes' => 'Envoyer la liste des nouveautés', |
|
| 64 | - 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Ne pas apparaître dans la liste des rédacteurs', |
|
| 65 | - 'bouton_radio_non_envoi_annonces_editoriales' => 'Ne pas envoyer d’annonces éditoriales', |
|
| 66 | - 'bouton_redirection' => 'REDIRECTION', |
|
| 67 | - 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Réinitialiser aux valeurs par défaut', |
|
| 68 | - 'bouton_relancer_inscription' => 'Relancer l’inscription', |
|
| 69 | - 'bouton_relancer_inscriptions' => 'Relancer les inscriptions', |
|
| 70 | - 'bouton_relancer_installation' => 'Relancer l’installation', |
|
| 71 | - 'bouton_reset_password' => 'Générer un nouveau mot de passe et l’envoyer par email', |
|
| 72 | - 'bouton_suivant' => 'Suivant', |
|
| 73 | - 'bouton_tenter_recuperation' => 'Tenter une réparation', |
|
| 74 | - 'bouton_test_proxy' => 'Essayer le proxy', |
|
| 75 | - 'bouton_vider_cache' => 'Vider le cache', |
|
| 46 | + // B |
|
| 47 | + 'bouton_acces_ldap' => 'Ajouter l’accès à LDAP', |
|
| 48 | + 'bouton_ajouter' => 'Ajouter', |
|
| 49 | + 'bouton_annuler' => 'Annuler', |
|
| 50 | + 'bouton_cache_activer' => 'Réactiver le cache', |
|
| 51 | + 'bouton_cache_desactiver' => 'Désactiver temporairement le cache', |
|
| 52 | + 'bouton_demande_publication' => 'Demander la publication de cet article', |
|
| 53 | + 'bouton_desactive_tout' => 'Tout désactiver', |
|
| 54 | + 'bouton_desinstaller' => 'Désinstaller', |
|
| 55 | + 'bouton_effacer_tout' => 'Effacer TOUT', |
|
| 56 | + 'bouton_envoyer_message' => 'Message définitif : envoyer', |
|
| 57 | + 'bouton_fermer' => 'Fermer', |
|
| 58 | + 'bouton_mettre_a_jour_base' => 'Mettre à jour la base de données', |
|
| 59 | + 'bouton_modifier' => 'Modifier', |
|
| 60 | + 'bouton_radio_afficher' => 'Afficher', |
|
| 61 | + 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Apparaître dans la liste des rédacteurs connectés', |
|
| 62 | + 'bouton_radio_envoi_annonces_adresse' => 'Envoyer les annonces à l’adresse :', |
|
| 63 | + 'bouton_radio_envoi_liste_nouveautes' => 'Envoyer la liste des nouveautés', |
|
| 64 | + 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Ne pas apparaître dans la liste des rédacteurs', |
|
| 65 | + 'bouton_radio_non_envoi_annonces_editoriales' => 'Ne pas envoyer d’annonces éditoriales', |
|
| 66 | + 'bouton_redirection' => 'REDIRECTION', |
|
| 67 | + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Réinitialiser aux valeurs par défaut', |
|
| 68 | + 'bouton_relancer_inscription' => 'Relancer l’inscription', |
|
| 69 | + 'bouton_relancer_inscriptions' => 'Relancer les inscriptions', |
|
| 70 | + 'bouton_relancer_installation' => 'Relancer l’installation', |
|
| 71 | + 'bouton_reset_password' => 'Générer un nouveau mot de passe et l’envoyer par email', |
|
| 72 | + 'bouton_suivant' => 'Suivant', |
|
| 73 | + 'bouton_tenter_recuperation' => 'Tenter une réparation', |
|
| 74 | + 'bouton_test_proxy' => 'Essayer le proxy', |
|
| 75 | + 'bouton_vider_cache' => 'Vider le cache', |
|
| 76 | 76 | |
| 77 | - // C |
|
| 78 | - 'cache_modifiable_webmestre' => 'Ce paramètre est modifiable par le webmestre du site.', |
|
| 79 | - 'calendrier_synchro' => 'Si vous utilisez un logiciel d’agenda compatible <b>iCal</b>, vous pouvez le synchroniser avec les informations de ce site.', |
|
| 80 | - 'config_activer_champs' => 'Activer les champs suivants', |
|
| 81 | - 'config_choix_base_sup' => 'indiquer une base sur ce serveur', |
|
| 82 | - 'config_erreur_base_sup' => 'SPIP n’a pas accès à la liste des bases accessibles', |
|
| 83 | - 'config_info_base_sup' => 'Si vous avez d’autres bases de données à interroger à travers SPIP, avec son serveur SQL ou avec un autre, le formulaire ci-dessous, vous permet de les déclarer. Si vous laissez certains champs vides, les identifiants de connexion à la base principale seront utilisés.', |
|
| 84 | - 'config_info_base_sup_disponibles' => 'Bases supplémentaires déjà interrogeables :', |
|
| 85 | - 'config_info_enregistree' => 'La nouvelle configuration a été enregistrée', |
|
| 86 | - 'config_info_logos' => 'Chaque élément du site peut avoir un logo, ainsi qu’un « logo de survol »', |
|
| 87 | - 'config_info_logos_utiliser' => 'Utiliser les logos', |
|
| 88 | - 'config_info_logos_utiliser_non' => 'Ne pas utiliser les logos', |
|
| 89 | - 'config_info_logos_utiliser_survol' => 'Utiliser les logos de survol', |
|
| 90 | - 'config_info_logos_utiliser_survol_non' => 'Ne pas utiliser les logos de survol', |
|
| 91 | - 'config_info_redirection' => 'En activant cette option, vous pourrez créer des articles virtuels, simples références d’articles publiés sur d’autres sites ou hors de SPIP.', |
|
| 92 | - 'config_redirection' => 'Articles virtuels', |
|
| 93 | - 'config_titre_base_sup' => 'Déclaration d’une base supplémentaire', |
|
| 94 | - 'config_titre_base_sup_choix' => 'Choisissez une base supplémentaire', |
|
| 95 | - 'connexion_ldap' => 'Connexion :', |
|
| 96 | - 'creer_et_associer_un_auteur' => 'Créer et associer un auteur', |
|
| 77 | + // C |
|
| 78 | + 'cache_modifiable_webmestre' => 'Ce paramètre est modifiable par le webmestre du site.', |
|
| 79 | + 'calendrier_synchro' => 'Si vous utilisez un logiciel d’agenda compatible <b>iCal</b>, vous pouvez le synchroniser avec les informations de ce site.', |
|
| 80 | + 'config_activer_champs' => 'Activer les champs suivants', |
|
| 81 | + 'config_choix_base_sup' => 'indiquer une base sur ce serveur', |
|
| 82 | + 'config_erreur_base_sup' => 'SPIP n’a pas accès à la liste des bases accessibles', |
|
| 83 | + 'config_info_base_sup' => 'Si vous avez d’autres bases de données à interroger à travers SPIP, avec son serveur SQL ou avec un autre, le formulaire ci-dessous, vous permet de les déclarer. Si vous laissez certains champs vides, les identifiants de connexion à la base principale seront utilisés.', |
|
| 84 | + 'config_info_base_sup_disponibles' => 'Bases supplémentaires déjà interrogeables :', |
|
| 85 | + 'config_info_enregistree' => 'La nouvelle configuration a été enregistrée', |
|
| 86 | + 'config_info_logos' => 'Chaque élément du site peut avoir un logo, ainsi qu’un « logo de survol »', |
|
| 87 | + 'config_info_logos_utiliser' => 'Utiliser les logos', |
|
| 88 | + 'config_info_logos_utiliser_non' => 'Ne pas utiliser les logos', |
|
| 89 | + 'config_info_logos_utiliser_survol' => 'Utiliser les logos de survol', |
|
| 90 | + 'config_info_logos_utiliser_survol_non' => 'Ne pas utiliser les logos de survol', |
|
| 91 | + 'config_info_redirection' => 'En activant cette option, vous pourrez créer des articles virtuels, simples références d’articles publiés sur d’autres sites ou hors de SPIP.', |
|
| 92 | + 'config_redirection' => 'Articles virtuels', |
|
| 93 | + 'config_titre_base_sup' => 'Déclaration d’une base supplémentaire', |
|
| 94 | + 'config_titre_base_sup_choix' => 'Choisissez une base supplémentaire', |
|
| 95 | + 'connexion_ldap' => 'Connexion :', |
|
| 96 | + 'creer_et_associer_un_auteur' => 'Créer et associer un auteur', |
|
| 97 | 97 | |
| 98 | - // D |
|
| 99 | - 'date_mot_heures' => 'heures', |
|
| 98 | + // D |
|
| 99 | + 'date_mot_heures' => 'heures', |
|
| 100 | 100 | |
| 101 | - // E |
|
| 102 | - 'ecran_connexion_couleur_principale' => 'Couleur principale', |
|
| 103 | - 'ecran_connexion_image_fond' => 'Image de fond', |
|
| 104 | - 'ecran_connexion_image_fond_explication' => 'Utiliser une image (format JPEG, 1920x1080 pixels)', |
|
| 105 | - 'ecran_connexion_image_revenir_couleur_defaut' => 'Revenir à la couleur par défaut', |
|
| 106 | - 'ecran_connexion_titre' => 'Écran de connexion', |
|
| 107 | - 'ecran_securite' => ' + écran de sécurité @version@', |
|
| 108 | - 'email' => 'email', |
|
| 109 | - 'email_2' => 'email :', |
|
| 110 | - 'en_savoir_plus' => 'En savoir plus', |
|
| 111 | - 'entree_adresse_annuaire' => 'Adresse de l’annuaire', |
|
| 112 | - 'entree_adresse_email' => 'Votre adresse email', |
|
| 113 | - 'entree_adresse_email_2' => 'Adresse email', |
|
| 114 | - 'entree_base_donnee_1' => 'Adresse de la base de données', |
|
| 115 | - 'entree_base_donnee_2' => '(Souvent cette adresse correspond à celle de votre site, parfois elle correspond à la mention « localhost », parfois elle est laissée totalement vide.)', |
|
| 116 | - 'entree_biographie' => 'Courte biographie en quelques mots.', |
|
| 117 | - 'entree_chemin_acces' => '<b>Entrer</b> le chemin d’accès :', |
|
| 118 | - 'entree_cle_pgp' => 'Votre clé PGP', |
|
| 119 | - 'entree_cle_pgp_2' => 'Clé PGP', |
|
| 120 | - 'entree_contenu_rubrique' => '(Contenu de la rubrique en quelques mots.)', |
|
| 121 | - 'entree_identifiants_connexion' => 'Vos identifiants de connexion...', |
|
| 122 | - 'entree_identifiants_connexion_2' => 'Identifiants de connexion', |
|
| 123 | - 'entree_informations_connexion_ldap' => 'Veuillez entrer dans ce formulaire les informations de connexion à votre annuaire LDAP. |
|
| 101 | + // E |
|
| 102 | + 'ecran_connexion_couleur_principale' => 'Couleur principale', |
|
| 103 | + 'ecran_connexion_image_fond' => 'Image de fond', |
|
| 104 | + 'ecran_connexion_image_fond_explication' => 'Utiliser une image (format JPEG, 1920x1080 pixels)', |
|
| 105 | + 'ecran_connexion_image_revenir_couleur_defaut' => 'Revenir à la couleur par défaut', |
|
| 106 | + 'ecran_connexion_titre' => 'Écran de connexion', |
|
| 107 | + 'ecran_securite' => ' + écran de sécurité @version@', |
|
| 108 | + 'email' => 'email', |
|
| 109 | + 'email_2' => 'email :', |
|
| 110 | + 'en_savoir_plus' => 'En savoir plus', |
|
| 111 | + 'entree_adresse_annuaire' => 'Adresse de l’annuaire', |
|
| 112 | + 'entree_adresse_email' => 'Votre adresse email', |
|
| 113 | + 'entree_adresse_email_2' => 'Adresse email', |
|
| 114 | + 'entree_base_donnee_1' => 'Adresse de la base de données', |
|
| 115 | + 'entree_base_donnee_2' => '(Souvent cette adresse correspond à celle de votre site, parfois elle correspond à la mention « localhost », parfois elle est laissée totalement vide.)', |
|
| 116 | + 'entree_biographie' => 'Courte biographie en quelques mots.', |
|
| 117 | + 'entree_chemin_acces' => '<b>Entrer</b> le chemin d’accès :', |
|
| 118 | + 'entree_cle_pgp' => 'Votre clé PGP', |
|
| 119 | + 'entree_cle_pgp_2' => 'Clé PGP', |
|
| 120 | + 'entree_contenu_rubrique' => '(Contenu de la rubrique en quelques mots.)', |
|
| 121 | + 'entree_identifiants_connexion' => 'Vos identifiants de connexion...', |
|
| 122 | + 'entree_identifiants_connexion_2' => 'Identifiants de connexion', |
|
| 123 | + 'entree_informations_connexion_ldap' => 'Veuillez entrer dans ce formulaire les informations de connexion à votre annuaire LDAP. |
|
| 124 | 124 | Ces informations doivent pouvoir vous être fournies par l’administrateur du système, |
| 125 | 125 | ou du réseau.', |
| 126 | - 'entree_infos_perso' => 'Qui êtes-vous ?', |
|
| 127 | - 'entree_infos_perso_2' => 'Qui est l’auteur ?', |
|
| 128 | - 'entree_interieur_rubrique' => 'À l’intérieur de la rubrique :', |
|
| 129 | - 'entree_liens_sites' => '<b>Lien hypertexte</b> (référence, site à visiter...)', |
|
| 130 | - 'entree_login' => 'Votre login', |
|
| 131 | - 'entree_login_connexion_1' => 'Le login de connexion', |
|
| 132 | - 'entree_login_connexion_2' => '(Correspond parfois à votre login d’accès au FTP ; parfois laissé vide)', |
|
| 133 | - 'entree_mot_passe' => 'Votre mot de passe', |
|
| 134 | - 'entree_mot_passe_1' => 'Le mot de passe de connexion', |
|
| 135 | - 'entree_mot_passe_2' => '(Correspond parfois à votre mot de passe pour le FTP ; parfois laissé vide)', |
|
| 136 | - 'entree_nom_fichier' => 'Veuillez entrer le nom du fichier @texte_compresse@ :', |
|
| 137 | - 'entree_nom_pseudo' => 'Votre nom ou votre pseudo', |
|
| 138 | - 'entree_nom_pseudo_1' => '(Votre nom ou votre pseudo)', |
|
| 139 | - 'entree_nom_pseudo_2' => 'Nom ou pseudo', |
|
| 140 | - 'entree_nom_site' => 'Le nom de votre site', |
|
| 141 | - 'entree_nom_site_2' => 'Nom du site de l’auteur', |
|
| 142 | - 'entree_nouveau_passe' => 'Nouveau mot de passe', |
|
| 143 | - 'entree_passe_ldap' => 'Mot de passe', |
|
| 144 | - 'entree_port_annuaire' => 'Le numéro de port de l’annuaire', |
|
| 145 | - 'entree_signature' => 'Signature', |
|
| 146 | - 'entree_titre_obligatoire' => '<b>Titre</b> [Obligatoire]<br />', |
|
| 147 | - 'entree_url' => 'L’adresse (URL) de votre site', |
|
| 148 | - 'entree_url_2' => 'Adresse (URL) du site', |
|
| 149 | - 'erreur_connect_deja_existant' => 'Un serveur existe déjà avec ce nom', |
|
| 150 | - 'erreur_contenu_suspect' => 'Texte échappé', |
|
| 151 | - 'erreur_email_deja_existant' => 'Cette adresse email est déjà enregistrée.', |
|
| 152 | - 'erreur_nom_connect_incorrect' => 'Ce nom de serveur n’est pas autorisé', |
|
| 153 | - 'erreur_plugin_attribut_balise_manquant' => 'Attribut @attribut@ manquant dans la balise @balise@.', |
|
| 154 | - 'erreur_plugin_desinstalation_echouee' => 'La désinstallation du plugin a échoué. Vous pouvez néanmoins le désactiver.', |
|
| 155 | - 'erreur_plugin_fichier_absent' => 'Fichier absent', |
|
| 156 | - 'erreur_plugin_fichier_def_absent' => 'Fichier de définition absent', |
|
| 157 | - 'erreur_plugin_nom_fonction_interdit' => 'Nom de fonction interdit', |
|
| 158 | - 'erreur_plugin_nom_manquant' => 'Nom du plugin manquant', |
|
| 159 | - 'erreur_plugin_prefix_manquant' => 'Espace de nommage du plugin non défini', |
|
| 160 | - 'erreur_plugin_tag_plugin_absent' => '<plugin> manquant dans le fichier de définition', |
|
| 161 | - 'erreur_plugin_version_manquant' => 'Version du plugin manquante', |
|
| 162 | - 'erreur_type_fichier' => 'Type de fichier incorrect', |
|
| 126 | + 'entree_infos_perso' => 'Qui êtes-vous ?', |
|
| 127 | + 'entree_infos_perso_2' => 'Qui est l’auteur ?', |
|
| 128 | + 'entree_interieur_rubrique' => 'À l’intérieur de la rubrique :', |
|
| 129 | + 'entree_liens_sites' => '<b>Lien hypertexte</b> (référence, site à visiter...)', |
|
| 130 | + 'entree_login' => 'Votre login', |
|
| 131 | + 'entree_login_connexion_1' => 'Le login de connexion', |
|
| 132 | + 'entree_login_connexion_2' => '(Correspond parfois à votre login d’accès au FTP ; parfois laissé vide)', |
|
| 133 | + 'entree_mot_passe' => 'Votre mot de passe', |
|
| 134 | + 'entree_mot_passe_1' => 'Le mot de passe de connexion', |
|
| 135 | + 'entree_mot_passe_2' => '(Correspond parfois à votre mot de passe pour le FTP ; parfois laissé vide)', |
|
| 136 | + 'entree_nom_fichier' => 'Veuillez entrer le nom du fichier @texte_compresse@ :', |
|
| 137 | + 'entree_nom_pseudo' => 'Votre nom ou votre pseudo', |
|
| 138 | + 'entree_nom_pseudo_1' => '(Votre nom ou votre pseudo)', |
|
| 139 | + 'entree_nom_pseudo_2' => 'Nom ou pseudo', |
|
| 140 | + 'entree_nom_site' => 'Le nom de votre site', |
|
| 141 | + 'entree_nom_site_2' => 'Nom du site de l’auteur', |
|
| 142 | + 'entree_nouveau_passe' => 'Nouveau mot de passe', |
|
| 143 | + 'entree_passe_ldap' => 'Mot de passe', |
|
| 144 | + 'entree_port_annuaire' => 'Le numéro de port de l’annuaire', |
|
| 145 | + 'entree_signature' => 'Signature', |
|
| 146 | + 'entree_titre_obligatoire' => '<b>Titre</b> [Obligatoire]<br />', |
|
| 147 | + 'entree_url' => 'L’adresse (URL) de votre site', |
|
| 148 | + 'entree_url_2' => 'Adresse (URL) du site', |
|
| 149 | + 'erreur_connect_deja_existant' => 'Un serveur existe déjà avec ce nom', |
|
| 150 | + 'erreur_contenu_suspect' => 'Texte échappé', |
|
| 151 | + 'erreur_email_deja_existant' => 'Cette adresse email est déjà enregistrée.', |
|
| 152 | + 'erreur_nom_connect_incorrect' => 'Ce nom de serveur n’est pas autorisé', |
|
| 153 | + 'erreur_plugin_attribut_balise_manquant' => 'Attribut @attribut@ manquant dans la balise @balise@.', |
|
| 154 | + 'erreur_plugin_desinstalation_echouee' => 'La désinstallation du plugin a échoué. Vous pouvez néanmoins le désactiver.', |
|
| 155 | + 'erreur_plugin_fichier_absent' => 'Fichier absent', |
|
| 156 | + 'erreur_plugin_fichier_def_absent' => 'Fichier de définition absent', |
|
| 157 | + 'erreur_plugin_nom_fonction_interdit' => 'Nom de fonction interdit', |
|
| 158 | + 'erreur_plugin_nom_manquant' => 'Nom du plugin manquant', |
|
| 159 | + 'erreur_plugin_prefix_manquant' => 'Espace de nommage du plugin non défini', |
|
| 160 | + 'erreur_plugin_tag_plugin_absent' => '<plugin> manquant dans le fichier de définition', |
|
| 161 | + 'erreur_plugin_version_manquant' => 'Version du plugin manquante', |
|
| 162 | + 'erreur_type_fichier' => 'Type de fichier incorrect', |
|
| 163 | 163 | |
| 164 | - // H |
|
| 165 | - 'htaccess_a_simuler' => 'Avertissement : la configuration de votre serveur HTTP ne tient pas compte des fichiers @htaccess@. Pour pouvoir assurer une bonne sécurité, il faut que vous modifiiez cette configuration sur ce point, ou bien que les constantes @constantes@ (définissables dans le fichier mes_options.php) aient comme valeur des répertoires en dehors de @document_root@.', |
|
| 166 | - 'htaccess_inoperant' => 'htaccess inopérant', |
|
| 164 | + // H |
|
| 165 | + 'htaccess_a_simuler' => 'Avertissement : la configuration de votre serveur HTTP ne tient pas compte des fichiers @htaccess@. Pour pouvoir assurer une bonne sécurité, il faut que vous modifiiez cette configuration sur ce point, ou bien que les constantes @constantes@ (définissables dans le fichier mes_options.php) aient comme valeur des répertoires en dehors de @document_root@.', |
|
| 166 | + 'htaccess_inoperant' => 'htaccess inopérant', |
|
| 167 | 167 | |
| 168 | - // I |
|
| 169 | - 'ical_info1' => 'Cette page présente plusieurs méthodes pour rester en contact avec la vie de ce site.', |
|
| 170 | - 'ical_info2' => 'Pour plus de renseignements sur toutes ces techniques, n’hésitez pas à consulter <a href="@spipnet@">la documentation de SPIP</a>.', |
|
| 171 | - 'ical_info_calendrier' => 'Deux calendriers sont à votre disposition. Le premier est un plan du site annonçant tous les articles publiés. Le second contient les annonces éditoriales ainsi que vos derniers messages privés : il vous est réservé grâce à une clé personnelle, que vous pouvez modifier à tout moment en renouvelant votre mot de passe.', |
|
| 172 | - 'ical_methode_http' => 'Téléchargement', |
|
| 173 | - 'ical_methode_webcal' => 'Synchronisation (webcal://)', |
|
| 174 | - 'ical_texte_prive' => 'Ce calendrier, à usage strictement personnel, vous informe de l’activité éditoriale privée de ce site (tâches et rendez-vous personnels, articles et brèves proposés...).', |
|
| 175 | - 'ical_texte_public' => 'Ce calendrier vous permet de suivre l’activité publique de ce site (articles et brèves publiés).', |
|
| 176 | - 'ical_texte_rss' => 'Vous pouvez syndiquer les nouveautés de ce site dans n’importe quel lecteur de fichiers au format XML/RSS (Rich Site Summary). C’est aussi le format qui permet à SPIP de lire les nouveautés publiées sur d’autres sites utilisant un format d’échange compatible (sites syndiqués).', |
|
| 177 | - 'ical_titre_js' => 'Javascript', |
|
| 178 | - 'ical_titre_mailing' => 'Mailing-list', |
|
| 179 | - 'ical_titre_rss' => 'Fichiers de syndication', |
|
| 180 | - 'icone_accueil' => 'Accueil', |
|
| 181 | - 'icone_activer_cookie' => 'Activer le cookie de correspondance', |
|
| 182 | - 'icone_activite' => 'Activité', |
|
| 183 | - 'icone_admin_plugin' => 'Gestion des plugins', |
|
| 184 | - 'icone_administration' => 'Maintenance', |
|
| 185 | - 'icone_afficher_auteurs' => 'Afficher les auteurs', |
|
| 186 | - 'icone_afficher_visiteurs' => 'Afficher les visiteurs', |
|
| 187 | - 'icone_arret_discussion' => 'Ne plus participer à cette discussion', |
|
| 188 | - 'icone_calendrier' => 'Calendrier', |
|
| 189 | - 'icone_configuration' => 'Configuration', |
|
| 190 | - 'icone_creer_auteur' => 'Créer un nouvel auteur et l’associer à cet article', |
|
| 191 | - 'icone_creer_mot_cle' => 'Créer un nouveau mot-clé et le lier à cet article', |
|
| 192 | - 'icone_creer_rubrique_2' => 'Créer une nouvelle rubrique', |
|
| 193 | - 'icone_developpement' => 'Développement', |
|
| 194 | - 'icone_edition' => 'Édition', |
|
| 195 | - 'icone_ma_langue' => 'Ma langue', |
|
| 196 | - 'icone_mes_infos' => 'Mes informations', |
|
| 197 | - 'icone_mes_preferences' => 'Mes préférences', |
|
| 198 | - 'icone_modifier_article' => 'Modifier cet article', |
|
| 199 | - 'icone_modifier_rubrique' => 'Modifier cette rubrique', |
|
| 200 | - 'icone_publication' => 'Publication', |
|
| 201 | - 'icone_relancer_signataire' => 'Relancer le signataire', |
|
| 202 | - 'icone_retour' => 'Retour', |
|
| 203 | - 'icone_retour_article' => 'Retour à l’article', |
|
| 204 | - 'icone_squelette' => 'Squelettes', |
|
| 205 | - 'icone_suivi_publication' => 'Suivi de la publication', |
|
| 206 | - 'icone_supprimer_cookie' => 'Supprimer le cookie de correspondance', |
|
| 207 | - 'icone_supprimer_rubrique' => 'Supprimer cette rubrique', |
|
| 208 | - 'icone_supprimer_signature' => 'Supprimer cette signature', |
|
| 209 | - 'icone_valider_signature' => 'Valider cette signature', |
|
| 210 | - 'image_administrer_rubrique' => 'Vous pouvez administrer cette rubrique', |
|
| 211 | - 'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', |
|
| 212 | - 'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', |
|
| 213 | - 'info_1_article' => '1 article', |
|
| 214 | - 'info_1_auteur' => '1 auteur', |
|
| 215 | - 'info_1_message' => '1 message', |
|
| 216 | - 'info_1_mot_cle' => '1 mot-clé', |
|
| 217 | - 'info_1_rubrique' => '1 rubrique', |
|
| 218 | - 'info_1_visiteur' => '1 visiteur', |
|
| 219 | - 'info_activer_cookie' => 'Vous pouvez activer un <b>cookie de correspondance</b>, ce qui vous |
|
| 168 | + // I |
|
| 169 | + 'ical_info1' => 'Cette page présente plusieurs méthodes pour rester en contact avec la vie de ce site.', |
|
| 170 | + 'ical_info2' => 'Pour plus de renseignements sur toutes ces techniques, n’hésitez pas à consulter <a href="@spipnet@">la documentation de SPIP</a>.', |
|
| 171 | + 'ical_info_calendrier' => 'Deux calendriers sont à votre disposition. Le premier est un plan du site annonçant tous les articles publiés. Le second contient les annonces éditoriales ainsi que vos derniers messages privés : il vous est réservé grâce à une clé personnelle, que vous pouvez modifier à tout moment en renouvelant votre mot de passe.', |
|
| 172 | + 'ical_methode_http' => 'Téléchargement', |
|
| 173 | + 'ical_methode_webcal' => 'Synchronisation (webcal://)', |
|
| 174 | + 'ical_texte_prive' => 'Ce calendrier, à usage strictement personnel, vous informe de l’activité éditoriale privée de ce site (tâches et rendez-vous personnels, articles et brèves proposés...).', |
|
| 175 | + 'ical_texte_public' => 'Ce calendrier vous permet de suivre l’activité publique de ce site (articles et brèves publiés).', |
|
| 176 | + 'ical_texte_rss' => 'Vous pouvez syndiquer les nouveautés de ce site dans n’importe quel lecteur de fichiers au format XML/RSS (Rich Site Summary). C’est aussi le format qui permet à SPIP de lire les nouveautés publiées sur d’autres sites utilisant un format d’échange compatible (sites syndiqués).', |
|
| 177 | + 'ical_titre_js' => 'Javascript', |
|
| 178 | + 'ical_titre_mailing' => 'Mailing-list', |
|
| 179 | + 'ical_titre_rss' => 'Fichiers de syndication', |
|
| 180 | + 'icone_accueil' => 'Accueil', |
|
| 181 | + 'icone_activer_cookie' => 'Activer le cookie de correspondance', |
|
| 182 | + 'icone_activite' => 'Activité', |
|
| 183 | + 'icone_admin_plugin' => 'Gestion des plugins', |
|
| 184 | + 'icone_administration' => 'Maintenance', |
|
| 185 | + 'icone_afficher_auteurs' => 'Afficher les auteurs', |
|
| 186 | + 'icone_afficher_visiteurs' => 'Afficher les visiteurs', |
|
| 187 | + 'icone_arret_discussion' => 'Ne plus participer à cette discussion', |
|
| 188 | + 'icone_calendrier' => 'Calendrier', |
|
| 189 | + 'icone_configuration' => 'Configuration', |
|
| 190 | + 'icone_creer_auteur' => 'Créer un nouvel auteur et l’associer à cet article', |
|
| 191 | + 'icone_creer_mot_cle' => 'Créer un nouveau mot-clé et le lier à cet article', |
|
| 192 | + 'icone_creer_rubrique_2' => 'Créer une nouvelle rubrique', |
|
| 193 | + 'icone_developpement' => 'Développement', |
|
| 194 | + 'icone_edition' => 'Édition', |
|
| 195 | + 'icone_ma_langue' => 'Ma langue', |
|
| 196 | + 'icone_mes_infos' => 'Mes informations', |
|
| 197 | + 'icone_mes_preferences' => 'Mes préférences', |
|
| 198 | + 'icone_modifier_article' => 'Modifier cet article', |
|
| 199 | + 'icone_modifier_rubrique' => 'Modifier cette rubrique', |
|
| 200 | + 'icone_publication' => 'Publication', |
|
| 201 | + 'icone_relancer_signataire' => 'Relancer le signataire', |
|
| 202 | + 'icone_retour' => 'Retour', |
|
| 203 | + 'icone_retour_article' => 'Retour à l’article', |
|
| 204 | + 'icone_squelette' => 'Squelettes', |
|
| 205 | + 'icone_suivi_publication' => 'Suivi de la publication', |
|
| 206 | + 'icone_supprimer_cookie' => 'Supprimer le cookie de correspondance', |
|
| 207 | + 'icone_supprimer_rubrique' => 'Supprimer cette rubrique', |
|
| 208 | + 'icone_supprimer_signature' => 'Supprimer cette signature', |
|
| 209 | + 'icone_valider_signature' => 'Valider cette signature', |
|
| 210 | + 'image_administrer_rubrique' => 'Vous pouvez administrer cette rubrique', |
|
| 211 | + 'impossible_modifier_login_auteur' => 'Impossible de modifier le login.', |
|
| 212 | + 'impossible_modifier_pass_auteur' => 'Impossible de modifier le mot de passe.', |
|
| 213 | + 'info_1_article' => '1 article', |
|
| 214 | + 'info_1_auteur' => '1 auteur', |
|
| 215 | + 'info_1_message' => '1 message', |
|
| 216 | + 'info_1_mot_cle' => '1 mot-clé', |
|
| 217 | + 'info_1_rubrique' => '1 rubrique', |
|
| 218 | + 'info_1_visiteur' => '1 visiteur', |
|
| 219 | + 'info_activer_cookie' => 'Vous pouvez activer un <b>cookie de correspondance</b>, ce qui vous |
|
| 220 | 220 | permettra de passer facilement du site public au site privé.', |
| 221 | - 'info_activer_menu_developpement' => 'Afficher le menu Développement', |
|
| 222 | - 'info_admin_etre_webmestre' => 'Me donner les droits de webmestre', |
|
| 223 | - 'info_admin_je_suis_webmestre' => 'Je suis <b>webmestre</b>', |
|
| 224 | - 'info_admin_statuer_webmestre' => 'Donner à cet administrateur les droits de webmestre', |
|
| 225 | - 'info_admin_webmestre' => 'Cet administrateur est <b>webmestre</b>', |
|
| 226 | - 'info_administrateur' => 'Administrateur', |
|
| 227 | - 'info_administrateur_1' => 'Administrateur', |
|
| 228 | - 'info_administrateur_2' => 'du site (<i>utilisez avec précaution</i>)', |
|
| 229 | - 'info_administrateur_site_01' => 'Si vous êtes administrateur du site, veuillez', |
|
| 230 | - 'info_administrateur_site_02' => 'cliquer sur ce lien', |
|
| 231 | - 'info_administrateurs' => 'Administrateurs', |
|
| 232 | - 'info_administrer_rubrique' => 'Vous pouvez administrer cette rubrique', |
|
| 233 | - 'info_adresse' => 'à l’adresse :', |
|
| 234 | - 'info_adresse_desinscription' => 'Adresse de désinscription :', |
|
| 235 | - 'info_adresse_url' => 'Adresse (URL) du site public', |
|
| 236 | - 'info_afficher_par_nb' => 'Afficher par', |
|
| 237 | - 'info_aide_en_ligne' => 'Aide en ligne SPIP', |
|
| 238 | - 'info_ajout_image' => 'Lorsque vous ajoutez des images en tant que documents joints à un article, |
|
| 221 | + 'info_activer_menu_developpement' => 'Afficher le menu Développement', |
|
| 222 | + 'info_admin_etre_webmestre' => 'Me donner les droits de webmestre', |
|
| 223 | + 'info_admin_je_suis_webmestre' => 'Je suis <b>webmestre</b>', |
|
| 224 | + 'info_admin_statuer_webmestre' => 'Donner à cet administrateur les droits de webmestre', |
|
| 225 | + 'info_admin_webmestre' => 'Cet administrateur est <b>webmestre</b>', |
|
| 226 | + 'info_administrateur' => 'Administrateur', |
|
| 227 | + 'info_administrateur_1' => 'Administrateur', |
|
| 228 | + 'info_administrateur_2' => 'du site (<i>utilisez avec précaution</i>)', |
|
| 229 | + 'info_administrateur_site_01' => 'Si vous êtes administrateur du site, veuillez', |
|
| 230 | + 'info_administrateur_site_02' => 'cliquer sur ce lien', |
|
| 231 | + 'info_administrateurs' => 'Administrateurs', |
|
| 232 | + 'info_administrer_rubrique' => 'Vous pouvez administrer cette rubrique', |
|
| 233 | + 'info_adresse' => 'à l’adresse :', |
|
| 234 | + 'info_adresse_desinscription' => 'Adresse de désinscription :', |
|
| 235 | + 'info_adresse_url' => 'Adresse (URL) du site public', |
|
| 236 | + 'info_afficher_par_nb' => 'Afficher par', |
|
| 237 | + 'info_aide_en_ligne' => 'Aide en ligne SPIP', |
|
| 238 | + 'info_ajout_image' => 'Lorsque vous ajoutez des images en tant que documents joints à un article, |
|
| 239 | 239 | SPIP peut créer pour vous, automatiquement, des vignettes (miniatures) des |
| 240 | 240 | images insérées. Cela permet par exemple de créer |
| 241 | 241 | automatiquement une galerie ou un portfolio.', |
| 242 | - 'info_ajouter_rubrique' => 'Ajouter une autre rubrique à administrer :', |
|
| 243 | - 'info_annonce_nouveautes' => 'Annonce des nouveautés', |
|
| 244 | - 'info_article' => 'article', |
|
| 245 | - 'info_article_2' => 'articles', |
|
| 246 | - 'info_article_a_paraitre' => 'Les articles post-datés à paraître', |
|
| 247 | - 'info_articles_02' => 'articles', |
|
| 248 | - 'info_articles_2' => 'Articles', |
|
| 249 | - 'info_articles_auteur' => 'Les articles de cet auteur', |
|
| 250 | - 'info_articles_miens' => 'Mes articles', |
|
| 251 | - 'info_articles_tous' => 'Tous les articles', |
|
| 252 | - 'info_articles_trouves' => 'Articles trouvés', |
|
| 253 | - 'info_attente_validation' => 'Vos articles en attente de validation', |
|
| 254 | - 'info_aucun_article' => 'Aucun article', |
|
| 255 | - 'info_aucun_auteur' => 'Aucun auteur', |
|
| 256 | - 'info_aucun_message' => 'Aucun message', |
|
| 257 | - 'info_aucun_rubrique' => 'Aucune rubrique', |
|
| 258 | - 'info_aujourdhui' => 'aujourd’hui :', |
|
| 259 | - 'info_auteur_gere_rubriques' => 'Cet auteur gère les rubriques suivantes :', |
|
| 260 | - 'info_auteur_gere_toutes_rubriques' => 'Cet auteur gère <b>toutes les rubriques</b>', |
|
| 261 | - 'info_auteur_gere_toutes_rubriques_2' => 'Je gère <b>toutes les rubriques</b>', |
|
| 262 | - 'info_auteurs' => 'Les auteurs', |
|
| 263 | - 'info_auteurs_par_tri' => 'Auteurs@partri@', |
|
| 264 | - 'info_auteurs_trouves' => 'Auteurs trouvés', |
|
| 265 | - 'info_authentification_externe' => 'Authentification externe', |
|
| 266 | - 'info_avertissement' => 'Avertissement', |
|
| 267 | - 'info_barre_outils' => 'avec sa barre d’outils ?', |
|
| 268 | - 'info_base_installee' => 'La structure de votre base de données est installée.', |
|
| 269 | - 'info_bio' => 'Biographie', |
|
| 270 | - 'info_cache_desactive' => 'Le cache est temporairement désactivé.', |
|
| 271 | - 'info_chapeau' => 'Chapeau', |
|
| 272 | - 'info_chapeau_2' => 'Chapeau :', |
|
| 273 | - 'info_chemin_acces_1' => 'Options : <b>Chemin d’accès dans l’annuaire</b>', |
|
| 274 | - 'info_chemin_acces_2' => 'Vous devez désormais configurer le chemin d’accès aux informations dans l’annuaire. Cette information est indispensable pour lire les profils utilisateurs stockés dans l’annuaire.', |
|
| 275 | - 'info_chemin_acces_annuaire' => 'Options : <b>Chemin d’accès dans l’annuaire</b>', |
|
| 276 | - 'info_choix_base' => 'Troisième étape :', |
|
| 277 | - 'info_classement_1' => '<sup>er</sup> sur @liste@', |
|
| 278 | - 'info_classement_2' => '<sup>e</sup> sur @liste@', |
|
| 279 | - 'info_code_acces' => 'N’oubliez pas vos propres codes d’accès !', |
|
| 280 | - 'info_config_suivi' => 'Si cette adresse correspond à une mailing-list, vous pouvez indiquer ci-dessous l’adresse à laquelle les participants au site peuvent s’inscrire. Cette adresse peut être une URL (par exemple la page d’inscription à la liste par le Web), ou une adresse email dotée d’un sujet spécifique (par exemple : <tt>@adresse_suivi@?subject=subscribe</tt>) :', |
|
| 281 | - 'info_config_suivi_explication' => 'Vous pouvez vous abonner à la mailing-list de ce site. Vous recevrez alors par courrier électronique les annonces d’articles et de brèves proposés à la publication.', |
|
| 282 | - 'info_confirmer_passe' => 'Confirmer ce nouveau mot de passe :', |
|
| 283 | - 'info_conflit_edition_avis_non_sauvegarde' => 'Attention, les champs suivants ont été modifiés par ailleurs. Vos modifications sur ces champs n’ont donc pas été enregistrées.', |
|
| 284 | - 'info_conflit_edition_differences' => 'Différences :', |
|
| 285 | - 'info_conflit_edition_version_enregistree' => 'La version enregistrée :', |
|
| 286 | - 'info_conflit_edition_votre_version' => 'Votre version :', |
|
| 287 | - 'info_connexion_base' => 'Essai de connexion à la base', |
|
| 288 | - 'info_connexion_base_donnee' => 'Connexion à votre base de données', |
|
| 289 | - 'info_connexion_ldap_ok' => '<b>La connexion LDAP a réussi.</b><p> Vous pouvez passer à l’étape suivante.</p>', |
|
| 290 | - 'info_connexion_mysql' => 'Votre connexion SQL', |
|
| 291 | - 'info_connexion_ok' => 'La connexion a réussi.', |
|
| 292 | - 'info_contact' => 'Contact', |
|
| 293 | - 'info_contenu_articles' => 'Contenu des articles', |
|
| 294 | - 'info_contributions' => 'Contributions', |
|
| 295 | - 'info_creation_paragraphe' => 'Pour créer des paragraphes, laissez simplement des lignes vides.', |
|
| 296 | - 'info_creation_rubrique' => 'Avant de pouvoir écrire des articles,<br /> vous devez créer au moins une rubrique.<br />', |
|
| 297 | - 'info_creation_tables' => 'Création des tables de la base', |
|
| 298 | - 'info_creer_base' => '<b>Créer</b> une nouvelle base de données :', |
|
| 299 | - 'info_dans_rubrique' => 'Dans la rubrique :', |
|
| 300 | - 'info_date_publication_anterieure' => 'Date de rédaction antérieure :', |
|
| 301 | - 'info_date_referencement' => 'DATE DE RÉFÉRENCEMENT DE CE SITE :', |
|
| 302 | - 'info_derniere_etape' => 'C’est terminé !', |
|
| 303 | - 'info_descriptif' => 'Descriptif :', |
|
| 304 | - 'info_desinstaller_plugin' => 'supprime les données et désactive le plugin', |
|
| 305 | - 'info_discussion_cours' => 'Discussions en cours', |
|
| 306 | - 'info_ecrire_article' => 'Avant de pouvoir écrire des articles, vous devez créer au moins une rubrique.', |
|
| 307 | - 'info_email_envoi' => 'Adresse email d’envoi (optionnel)', |
|
| 308 | - 'info_email_envoi_txt' => 'Indiquez ici l’adresse à utiliser pour envoyer les emails (à défaut, l’adresse destinataire sera utilisée comme adresse d’envoi) :', |
|
| 309 | - 'info_email_webmestre' => 'Adresse email du webmestre', |
|
| 310 | - 'info_envoi_email_automatique' => 'Envoi de mails automatique', |
|
| 311 | - 'info_envoyer_maintenant' => 'Envoyer maintenant', |
|
| 312 | - 'info_etape_suivante' => 'Passer à l’étape suivante', |
|
| 313 | - 'info_etape_suivante_1' => 'Vous pouvez passer à l’étape suivante.', |
|
| 314 | - 'info_etape_suivante_2' => 'Vous pouvez passer à l’étape suivante.', |
|
| 315 | - 'info_exceptions_proxy' => 'Exceptions pour le proxy', |
|
| 316 | - 'info_exportation_base' => 'exportation de la base vers @archive@', |
|
| 317 | - 'info_facilite_suivi_activite' => 'Afin de faciliter le suivi de l’activité |
|
| 242 | + 'info_ajouter_rubrique' => 'Ajouter une autre rubrique à administrer :', |
|
| 243 | + 'info_annonce_nouveautes' => 'Annonce des nouveautés', |
|
| 244 | + 'info_article' => 'article', |
|
| 245 | + 'info_article_2' => 'articles', |
|
| 246 | + 'info_article_a_paraitre' => 'Les articles post-datés à paraître', |
|
| 247 | + 'info_articles_02' => 'articles', |
|
| 248 | + 'info_articles_2' => 'Articles', |
|
| 249 | + 'info_articles_auteur' => 'Les articles de cet auteur', |
|
| 250 | + 'info_articles_miens' => 'Mes articles', |
|
| 251 | + 'info_articles_tous' => 'Tous les articles', |
|
| 252 | + 'info_articles_trouves' => 'Articles trouvés', |
|
| 253 | + 'info_attente_validation' => 'Vos articles en attente de validation', |
|
| 254 | + 'info_aucun_article' => 'Aucun article', |
|
| 255 | + 'info_aucun_auteur' => 'Aucun auteur', |
|
| 256 | + 'info_aucun_message' => 'Aucun message', |
|
| 257 | + 'info_aucun_rubrique' => 'Aucune rubrique', |
|
| 258 | + 'info_aujourdhui' => 'aujourd’hui :', |
|
| 259 | + 'info_auteur_gere_rubriques' => 'Cet auteur gère les rubriques suivantes :', |
|
| 260 | + 'info_auteur_gere_toutes_rubriques' => 'Cet auteur gère <b>toutes les rubriques</b>', |
|
| 261 | + 'info_auteur_gere_toutes_rubriques_2' => 'Je gère <b>toutes les rubriques</b>', |
|
| 262 | + 'info_auteurs' => 'Les auteurs', |
|
| 263 | + 'info_auteurs_par_tri' => 'Auteurs@partri@', |
|
| 264 | + 'info_auteurs_trouves' => 'Auteurs trouvés', |
|
| 265 | + 'info_authentification_externe' => 'Authentification externe', |
|
| 266 | + 'info_avertissement' => 'Avertissement', |
|
| 267 | + 'info_barre_outils' => 'avec sa barre d’outils ?', |
|
| 268 | + 'info_base_installee' => 'La structure de votre base de données est installée.', |
|
| 269 | + 'info_bio' => 'Biographie', |
|
| 270 | + 'info_cache_desactive' => 'Le cache est temporairement désactivé.', |
|
| 271 | + 'info_chapeau' => 'Chapeau', |
|
| 272 | + 'info_chapeau_2' => 'Chapeau :', |
|
| 273 | + 'info_chemin_acces_1' => 'Options : <b>Chemin d’accès dans l’annuaire</b>', |
|
| 274 | + 'info_chemin_acces_2' => 'Vous devez désormais configurer le chemin d’accès aux informations dans l’annuaire. Cette information est indispensable pour lire les profils utilisateurs stockés dans l’annuaire.', |
|
| 275 | + 'info_chemin_acces_annuaire' => 'Options : <b>Chemin d’accès dans l’annuaire</b>', |
|
| 276 | + 'info_choix_base' => 'Troisième étape :', |
|
| 277 | + 'info_classement_1' => '<sup>er</sup> sur @liste@', |
|
| 278 | + 'info_classement_2' => '<sup>e</sup> sur @liste@', |
|
| 279 | + 'info_code_acces' => 'N’oubliez pas vos propres codes d’accès !', |
|
| 280 | + 'info_config_suivi' => 'Si cette adresse correspond à une mailing-list, vous pouvez indiquer ci-dessous l’adresse à laquelle les participants au site peuvent s’inscrire. Cette adresse peut être une URL (par exemple la page d’inscription à la liste par le Web), ou une adresse email dotée d’un sujet spécifique (par exemple : <tt>@adresse_suivi@?subject=subscribe</tt>) :', |
|
| 281 | + 'info_config_suivi_explication' => 'Vous pouvez vous abonner à la mailing-list de ce site. Vous recevrez alors par courrier électronique les annonces d’articles et de brèves proposés à la publication.', |
|
| 282 | + 'info_confirmer_passe' => 'Confirmer ce nouveau mot de passe :', |
|
| 283 | + 'info_conflit_edition_avis_non_sauvegarde' => 'Attention, les champs suivants ont été modifiés par ailleurs. Vos modifications sur ces champs n’ont donc pas été enregistrées.', |
|
| 284 | + 'info_conflit_edition_differences' => 'Différences :', |
|
| 285 | + 'info_conflit_edition_version_enregistree' => 'La version enregistrée :', |
|
| 286 | + 'info_conflit_edition_votre_version' => 'Votre version :', |
|
| 287 | + 'info_connexion_base' => 'Essai de connexion à la base', |
|
| 288 | + 'info_connexion_base_donnee' => 'Connexion à votre base de données', |
|
| 289 | + 'info_connexion_ldap_ok' => '<b>La connexion LDAP a réussi.</b><p> Vous pouvez passer à l’étape suivante.</p>', |
|
| 290 | + 'info_connexion_mysql' => 'Votre connexion SQL', |
|
| 291 | + 'info_connexion_ok' => 'La connexion a réussi.', |
|
| 292 | + 'info_contact' => 'Contact', |
|
| 293 | + 'info_contenu_articles' => 'Contenu des articles', |
|
| 294 | + 'info_contributions' => 'Contributions', |
|
| 295 | + 'info_creation_paragraphe' => 'Pour créer des paragraphes, laissez simplement des lignes vides.', |
|
| 296 | + 'info_creation_rubrique' => 'Avant de pouvoir écrire des articles,<br /> vous devez créer au moins une rubrique.<br />', |
|
| 297 | + 'info_creation_tables' => 'Création des tables de la base', |
|
| 298 | + 'info_creer_base' => '<b>Créer</b> une nouvelle base de données :', |
|
| 299 | + 'info_dans_rubrique' => 'Dans la rubrique :', |
|
| 300 | + 'info_date_publication_anterieure' => 'Date de rédaction antérieure :', |
|
| 301 | + 'info_date_referencement' => 'DATE DE RÉFÉRENCEMENT DE CE SITE :', |
|
| 302 | + 'info_derniere_etape' => 'C’est terminé !', |
|
| 303 | + 'info_descriptif' => 'Descriptif :', |
|
| 304 | + 'info_desinstaller_plugin' => 'supprime les données et désactive le plugin', |
|
| 305 | + 'info_discussion_cours' => 'Discussions en cours', |
|
| 306 | + 'info_ecrire_article' => 'Avant de pouvoir écrire des articles, vous devez créer au moins une rubrique.', |
|
| 307 | + 'info_email_envoi' => 'Adresse email d’envoi (optionnel)', |
|
| 308 | + 'info_email_envoi_txt' => 'Indiquez ici l’adresse à utiliser pour envoyer les emails (à défaut, l’adresse destinataire sera utilisée comme adresse d’envoi) :', |
|
| 309 | + 'info_email_webmestre' => 'Adresse email du webmestre', |
|
| 310 | + 'info_envoi_email_automatique' => 'Envoi de mails automatique', |
|
| 311 | + 'info_envoyer_maintenant' => 'Envoyer maintenant', |
|
| 312 | + 'info_etape_suivante' => 'Passer à l’étape suivante', |
|
| 313 | + 'info_etape_suivante_1' => 'Vous pouvez passer à l’étape suivante.', |
|
| 314 | + 'info_etape_suivante_2' => 'Vous pouvez passer à l’étape suivante.', |
|
| 315 | + 'info_exceptions_proxy' => 'Exceptions pour le proxy', |
|
| 316 | + 'info_exportation_base' => 'exportation de la base vers @archive@', |
|
| 317 | + 'info_facilite_suivi_activite' => 'Afin de faciliter le suivi de l’activité |
|
| 318 | 318 | éditoriale du site, SPIP peut faire parvenir par mail, par exemple |
| 319 | 319 | à une mailing-list des rédacteurs, l’annonce des demandes de |
| 320 | 320 | publication et des validations d’articles. Indiquer une ou plusieurs adresses, séparées par des virgules.', |
| 321 | - 'info_fichiers_authent' => 'Fichiers d’authentification « .htpasswd »', |
|
| 322 | - 'info_forums_abo_invites' => 'Votre site comporte des forums sur abonnement ; les visiteurs sont donc invités à s’enregistrer sur le site public.', |
|
| 323 | - 'info_gauche_admin_tech' => '<b>Cette page est uniquement accessible aux responsables du site.</b><p> Elle donne accès aux différentes |
|
| 321 | + 'info_fichiers_authent' => 'Fichiers d’authentification « .htpasswd »', |
|
| 322 | + 'info_forums_abo_invites' => 'Votre site comporte des forums sur abonnement ; les visiteurs sont donc invités à s’enregistrer sur le site public.', |
|
| 323 | + 'info_gauche_admin_tech' => '<b>Cette page est uniquement accessible aux responsables du site.</b><p> Elle donne accès aux différentes |
|
| 324 | 324 | fonctions de maintenance technique. Certaines d’entre elles donnent lieu à un processus d’authentification spécifique, qui |
| 325 | 325 | exige d’avoir un accès FTP au site Web.</p>', |
| 326 | - 'info_gauche_admin_vider' => '<b>Cette page est uniquement accessible aux responsables du site.</b><p> Elle donne accès aux différentes |
|
| 326 | + 'info_gauche_admin_vider' => '<b>Cette page est uniquement accessible aux responsables du site.</b><p> Elle donne accès aux différentes |
|
| 327 | 327 | fonctions de maintenance technique. Certaines d’entre elles donnent lieu à un processus d’authentification spécifique, qui |
| 328 | 328 | exige d’avoir un accès FTP au site Web.</p>', |
| 329 | - 'info_gauche_auteurs' => 'Vous trouverez ici tous les auteurs du site. |
|
| 329 | + 'info_gauche_auteurs' => 'Vous trouverez ici tous les auteurs du site. |
|
| 330 | 330 | Leur statut est indiqué par la couleur de leur icone (administrateur = vert ; rédacteur = jaune).', |
| 331 | - 'info_gauche_auteurs_exterieurs' => 'Les auteurs extérieurs, sans accès au site, sont indiqués par une icone bleue ; |
|
| 331 | + 'info_gauche_auteurs_exterieurs' => 'Les auteurs extérieurs, sans accès au site, sont indiqués par une icone bleue ; |
|
| 332 | 332 | les auteurs effacés par une icone grise.', |
| 333 | - 'info_gauche_messagerie' => 'La messagerie vous permet d’échanger des messages entre rédacteurs, de conserver des pense-bêtes (pour votre usage personnel) ou d’afficher des annonces sur la page d’accueil de l’espace privé (si vous êtes administrateur).', |
|
| 334 | - 'info_gauche_statistiques_referers' => 'Cette page présente la liste des <i>referers</i>, c’est-à-dire des sites contenant des liens menant vers votre propre site, uniquement pour hier et aujourd’hui ; cette liste est remise à zéro toutes les 24 heures.', |
|
| 335 | - 'info_gauche_visiteurs_enregistres' => 'Vous trouverez ici les visiteurs enregistrés |
|
| 333 | + 'info_gauche_messagerie' => 'La messagerie vous permet d’échanger des messages entre rédacteurs, de conserver des pense-bêtes (pour votre usage personnel) ou d’afficher des annonces sur la page d’accueil de l’espace privé (si vous êtes administrateur).', |
|
| 334 | + 'info_gauche_statistiques_referers' => 'Cette page présente la liste des <i>referers</i>, c’est-à-dire des sites contenant des liens menant vers votre propre site, uniquement pour hier et aujourd’hui ; cette liste est remise à zéro toutes les 24 heures.', |
|
| 335 | + 'info_gauche_visiteurs_enregistres' => 'Vous trouverez ici les visiteurs enregistrés |
|
| 336 | 336 | dans l’espace public du site (forums sur abonnement).', |
| 337 | - 'info_generation_miniatures_images' => 'Génération de miniatures des images', |
|
| 338 | - 'info_gerer_trad_objets' => '@objets@ : gérer les liens de traduction', |
|
| 339 | - 'info_hebergeur_desactiver_envoi_email' => 'Certains hébergeurs désactivent l’envoi automatique de |
|
| 337 | + 'info_generation_miniatures_images' => 'Génération de miniatures des images', |
|
| 338 | + 'info_gerer_trad_objets' => '@objets@ : gérer les liens de traduction', |
|
| 339 | + 'info_hebergeur_desactiver_envoi_email' => 'Certains hébergeurs désactivent l’envoi automatique de |
|
| 340 | 340 | mails depuis leurs serveurs. Dans ce cas, les fonctionnalités suivantes |
| 341 | 341 | de SPIP ne fonctionneront pas.', |
| 342 | - 'info_hier' => 'hier :', |
|
| 343 | - 'info_identification_publique' => 'Votre identité publique...', |
|
| 344 | - 'info_image_process' => 'Veuillez sélectionner la meilleure méthode de fabrication des vignettes en cliquant sur l’image correspondante.', |
|
| 345 | - 'info_image_process2' => 'Si aucune image n’apparaît, alors le serveur qui héberge votre site n’a pas été configuré pour utiliser de tels outils. Si vous souhaitez utiliser ces fonctions, contactez le responsable technique et demandez les extensions « GD » ou « Imagick ».', |
|
| 346 | - 'info_images_auto' => 'Images calculées automatiquement', |
|
| 347 | - 'info_informations_personnelles' => 'Informations personnelles', |
|
| 348 | - 'info_inscription' => 'Inscription le', |
|
| 349 | - 'info_inscription_automatique' => 'Inscription automatique de nouveaux rédacteurs', |
|
| 350 | - 'info_jeu_caractere' => 'Jeu de caractères du site', |
|
| 351 | - 'info_jours' => 'jours', |
|
| 352 | - 'info_laisser_champs_vides' => 'laisser ces champs vides)', |
|
| 353 | - 'info_langues' => 'Langues du site', |
|
| 354 | - 'info_ldap_ok' => 'L’authentification LDAP est installée.', |
|
| 355 | - 'info_lien_hypertexte' => 'Lien hypertexte :', |
|
| 356 | - 'info_liste_nouveautes_envoyee' => 'La liste des nouveautés a été envoyée', |
|
| 357 | - 'info_liste_redacteurs_connectes' => 'Liste des rédacteurs connectés', |
|
| 358 | - 'info_login_existant' => 'Ce login existe déjà.', |
|
| 359 | - 'info_login_trop_court' => 'Login trop court.', |
|
| 360 | - 'info_login_trop_court_car_pluriel' => 'Le login doit contenir au moins @nb@ caractères.', |
|
| 361 | - 'info_logos' => 'Les logos', |
|
| 362 | - 'info_maximum' => 'maximum :', |
|
| 363 | - 'info_meme_rubrique' => 'Dans la même rubrique', |
|
| 364 | - 'info_message_en_redaction' => 'Vos messages en cours de rédaction', |
|
| 365 | - 'info_message_technique' => 'Message technique :', |
|
| 366 | - 'info_messagerie_interne' => 'Messagerie interne', |
|
| 367 | - 'info_mise_a_niveau_base' => 'mise à niveau de votre base SQL', |
|
| 368 | - 'info_mise_a_niveau_base_2' => '{{Attention !}} Vous avez installé une version |
|
| 342 | + 'info_hier' => 'hier :', |
|
| 343 | + 'info_identification_publique' => 'Votre identité publique...', |
|
| 344 | + 'info_image_process' => 'Veuillez sélectionner la meilleure méthode de fabrication des vignettes en cliquant sur l’image correspondante.', |
|
| 345 | + 'info_image_process2' => 'Si aucune image n’apparaît, alors le serveur qui héberge votre site n’a pas été configuré pour utiliser de tels outils. Si vous souhaitez utiliser ces fonctions, contactez le responsable technique et demandez les extensions « GD » ou « Imagick ».', |
|
| 346 | + 'info_images_auto' => 'Images calculées automatiquement', |
|
| 347 | + 'info_informations_personnelles' => 'Informations personnelles', |
|
| 348 | + 'info_inscription' => 'Inscription le', |
|
| 349 | + 'info_inscription_automatique' => 'Inscription automatique de nouveaux rédacteurs', |
|
| 350 | + 'info_jeu_caractere' => 'Jeu de caractères du site', |
|
| 351 | + 'info_jours' => 'jours', |
|
| 352 | + 'info_laisser_champs_vides' => 'laisser ces champs vides)', |
|
| 353 | + 'info_langues' => 'Langues du site', |
|
| 354 | + 'info_ldap_ok' => 'L’authentification LDAP est installée.', |
|
| 355 | + 'info_lien_hypertexte' => 'Lien hypertexte :', |
|
| 356 | + 'info_liste_nouveautes_envoyee' => 'La liste des nouveautés a été envoyée', |
|
| 357 | + 'info_liste_redacteurs_connectes' => 'Liste des rédacteurs connectés', |
|
| 358 | + 'info_login_existant' => 'Ce login existe déjà.', |
|
| 359 | + 'info_login_trop_court' => 'Login trop court.', |
|
| 360 | + 'info_login_trop_court_car_pluriel' => 'Le login doit contenir au moins @nb@ caractères.', |
|
| 361 | + 'info_logos' => 'Les logos', |
|
| 362 | + 'info_maximum' => 'maximum :', |
|
| 363 | + 'info_meme_rubrique' => 'Dans la même rubrique', |
|
| 364 | + 'info_message_en_redaction' => 'Vos messages en cours de rédaction', |
|
| 365 | + 'info_message_technique' => 'Message technique :', |
|
| 366 | + 'info_messagerie_interne' => 'Messagerie interne', |
|
| 367 | + 'info_mise_a_niveau_base' => 'mise à niveau de votre base SQL', |
|
| 368 | + 'info_mise_a_niveau_base_2' => '{{Attention !}} Vous avez installé une version |
|
| 369 | 369 | des fichiers SPIP {antérieure} à celle qui se trouvait |
| 370 | 370 | auparavant sur ce site : votre base de données risque d’être |
| 371 | 371 | perdue et votre site ne fonctionnera plus.<br />{{Réinstallez les |
| 372 | 372 | fichiers de SPIP.}}', |
| 373 | - 'info_modification_enregistree' => 'Votre modification a été enregistrée', |
|
| 374 | - 'info_modifier_auteur' => 'Modifier l’auteur :', |
|
| 375 | - 'info_modifier_rubrique' => 'Modifier la rubrique :', |
|
| 376 | - 'info_modifier_titre' => 'Modifier : @titre@', |
|
| 377 | - 'info_mon_site_spip' => 'Mon site SPIP', |
|
| 378 | - 'info_moyenne' => 'moyenne :', |
|
| 379 | - 'info_multi_cet_article' => 'Langue de cet article :', |
|
| 380 | - 'info_multi_langues_choisies' => 'Veuillez sélectionner ci-après les langues à disposition des rédacteurs de votre site. |
|
| 373 | + 'info_modification_enregistree' => 'Votre modification a été enregistrée', |
|
| 374 | + 'info_modifier_auteur' => 'Modifier l’auteur :', |
|
| 375 | + 'info_modifier_rubrique' => 'Modifier la rubrique :', |
|
| 376 | + 'info_modifier_titre' => 'Modifier : @titre@', |
|
| 377 | + 'info_mon_site_spip' => 'Mon site SPIP', |
|
| 378 | + 'info_moyenne' => 'moyenne :', |
|
| 379 | + 'info_multi_cet_article' => 'Langue de cet article :', |
|
| 380 | + 'info_multi_langues_choisies' => 'Veuillez sélectionner ci-après les langues à disposition des rédacteurs de votre site. |
|
| 381 | 381 | Les langues déjà utilisées dans votre site (affichées en premier) ne peuvent pas être désactivées.', |
| 382 | - 'info_multi_objets' => '@objets@ : activer le menu de langue', |
|
| 383 | - 'info_multi_secteurs' => '... seulement pour les rubriques situées à la racine ?', |
|
| 384 | - 'info_nb_articles' => '@nb@ articles', |
|
| 385 | - 'info_nb_auteurs' => '@nb@ auteurs', |
|
| 386 | - 'info_nb_messages' => '@nb@ messages', |
|
| 387 | - 'info_nb_mots_cles' => '@nb@ mots-clés', |
|
| 388 | - 'info_nb_rubriques' => '@nb@ rubriques', |
|
| 389 | - 'info_nb_visiteurs' => '@nb@ visiteurs', |
|
| 390 | - 'info_nom' => 'Nom', |
|
| 391 | - 'info_nom_destinataire' => 'Nom du destinataire', |
|
| 392 | - 'info_nom_pas_conforme' => 'les tags html ne sont pas autorisés', |
|
| 393 | - 'info_nom_site' => 'Nom de votre site', |
|
| 394 | - 'info_nombre_articles' => '@nb_articles@ articles,', |
|
| 395 | - 'info_nombre_rubriques' => '@nb_rubriques@ rubriques,', |
|
| 396 | - 'info_nombre_sites' => '@nb_sites@ sites,', |
|
| 397 | - 'info_non_deplacer' => 'Ne pas déplacer...', |
|
| 398 | - 'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP peut envoyer, régulièrement, l’annonce des dernières nouveautés du site |
|
| 382 | + 'info_multi_objets' => '@objets@ : activer le menu de langue', |
|
| 383 | + 'info_multi_secteurs' => '... seulement pour les rubriques situées à la racine ?', |
|
| 384 | + 'info_nb_articles' => '@nb@ articles', |
|
| 385 | + 'info_nb_auteurs' => '@nb@ auteurs', |
|
| 386 | + 'info_nb_messages' => '@nb@ messages', |
|
| 387 | + 'info_nb_mots_cles' => '@nb@ mots-clés', |
|
| 388 | + 'info_nb_rubriques' => '@nb@ rubriques', |
|
| 389 | + 'info_nb_visiteurs' => '@nb@ visiteurs', |
|
| 390 | + 'info_nom' => 'Nom', |
|
| 391 | + 'info_nom_destinataire' => 'Nom du destinataire', |
|
| 392 | + 'info_nom_pas_conforme' => 'les tags html ne sont pas autorisés', |
|
| 393 | + 'info_nom_site' => 'Nom de votre site', |
|
| 394 | + 'info_nombre_articles' => '@nb_articles@ articles,', |
|
| 395 | + 'info_nombre_rubriques' => '@nb_rubriques@ rubriques,', |
|
| 396 | + 'info_nombre_sites' => '@nb_sites@ sites,', |
|
| 397 | + 'info_non_deplacer' => 'Ne pas déplacer...', |
|
| 398 | + 'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP peut envoyer, régulièrement, l’annonce des dernières nouveautés du site |
|
| 399 | 399 | (articles et brèves récemment publiés).', |
| 400 | - 'info_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés', |
|
| 401 | - 'info_non_modifiable' => 'ne peut pas être modifié', |
|
| 402 | - 'info_non_suppression_mot_cle' => 'je ne veux pas supprimer ce mot-clé.', |
|
| 403 | - 'info_notes' => 'Notes', |
|
| 404 | - 'info_nouvel_article' => 'Nouvel article', |
|
| 405 | - 'info_nouvelle_traduction' => 'Nouvelle traduction :', |
|
| 406 | - 'info_numero_article' => 'ARTICLE NUMÉRO :', |
|
| 407 | - 'info_obligatoire_02' => '(obligatoire)', |
|
| 408 | - 'info_option_accepter_visiteurs' => 'Accepter l’inscription de visiteurs du site public', |
|
| 409 | - 'info_option_ne_pas_accepter_visiteurs' => 'Refuser l’inscription des visiteurs', |
|
| 410 | - 'info_options_avancees' => 'OPTIONS AVANCÉES', |
|
| 411 | - 'info_ou' => 'ou...', |
|
| 412 | - 'info_page_interdite' => 'Page interdite', |
|
| 413 | - 'info_par_nom' => 'par nom', |
|
| 414 | - 'info_par_nombre_article' => 'par nombre d’articles', |
|
| 415 | - 'info_par_statut' => 'par statut', |
|
| 416 | - 'info_par_tri' => '’(par @tri@)’', |
|
| 417 | - 'info_passe_trop_court' => 'Mot de passe trop court.', |
|
| 418 | - 'info_passe_trop_court_car_pluriel' => 'Le mot de passe doit contenir au moins @nb@ caractères.', |
|
| 419 | - 'info_passes_identiques' => 'Les deux mots de passe ne sont pas identiques.', |
|
| 420 | - 'info_plus_cinq_car' => 'plus de 5 caractères', |
|
| 421 | - 'info_plus_cinq_car_2' => '(Plus de 5 caractères)', |
|
| 422 | - 'info_plus_trois_car' => '(Plus de 3 caractères)', |
|
| 423 | - 'info_popularite' => 'popularité : @popularite@ ; visites : @visites@', |
|
| 424 | - 'info_post_scriptum' => 'Post-Scriptum', |
|
| 425 | - 'info_post_scriptum_2' => 'Post-scriptum :', |
|
| 426 | - 'info_pour' => 'pour', |
|
| 427 | - 'info_preview_texte' => 'Il est possible de prévisualiser les différents éléments éditoriaux du site ayant au moins le statut « proposé », ainsi que les éléments en cours de rédaction dont on est l’auteur. Cette fonctionnalité doit-elle être disponible pour les administrateurs, les rédacteurs, ou personne ?', |
|
| 428 | - 'info_procedez_par_etape' => 'procédez étape par étape', |
|
| 429 | - 'info_procedure_maj_version' => 'la procédure de mise à jour doit être lancée afin d’adapter |
|
| 400 | + 'info_non_envoi_liste_nouveautes' => 'Ne pas envoyer la liste des nouveautés', |
|
| 401 | + 'info_non_modifiable' => 'ne peut pas être modifié', |
|
| 402 | + 'info_non_suppression_mot_cle' => 'je ne veux pas supprimer ce mot-clé.', |
|
| 403 | + 'info_notes' => 'Notes', |
|
| 404 | + 'info_nouvel_article' => 'Nouvel article', |
|
| 405 | + 'info_nouvelle_traduction' => 'Nouvelle traduction :', |
|
| 406 | + 'info_numero_article' => 'ARTICLE NUMÉRO :', |
|
| 407 | + 'info_obligatoire_02' => '(obligatoire)', |
|
| 408 | + 'info_option_accepter_visiteurs' => 'Accepter l’inscription de visiteurs du site public', |
|
| 409 | + 'info_option_ne_pas_accepter_visiteurs' => 'Refuser l’inscription des visiteurs', |
|
| 410 | + 'info_options_avancees' => 'OPTIONS AVANCÉES', |
|
| 411 | + 'info_ou' => 'ou...', |
|
| 412 | + 'info_page_interdite' => 'Page interdite', |
|
| 413 | + 'info_par_nom' => 'par nom', |
|
| 414 | + 'info_par_nombre_article' => 'par nombre d’articles', |
|
| 415 | + 'info_par_statut' => 'par statut', |
|
| 416 | + 'info_par_tri' => '’(par @tri@)’', |
|
| 417 | + 'info_passe_trop_court' => 'Mot de passe trop court.', |
|
| 418 | + 'info_passe_trop_court_car_pluriel' => 'Le mot de passe doit contenir au moins @nb@ caractères.', |
|
| 419 | + 'info_passes_identiques' => 'Les deux mots de passe ne sont pas identiques.', |
|
| 420 | + 'info_plus_cinq_car' => 'plus de 5 caractères', |
|
| 421 | + 'info_plus_cinq_car_2' => '(Plus de 5 caractères)', |
|
| 422 | + 'info_plus_trois_car' => '(Plus de 3 caractères)', |
|
| 423 | + 'info_popularite' => 'popularité : @popularite@ ; visites : @visites@', |
|
| 424 | + 'info_post_scriptum' => 'Post-Scriptum', |
|
| 425 | + 'info_post_scriptum_2' => 'Post-scriptum :', |
|
| 426 | + 'info_pour' => 'pour', |
|
| 427 | + 'info_preview_texte' => 'Il est possible de prévisualiser les différents éléments éditoriaux du site ayant au moins le statut « proposé », ainsi que les éléments en cours de rédaction dont on est l’auteur. Cette fonctionnalité doit-elle être disponible pour les administrateurs, les rédacteurs, ou personne ?', |
|
| 428 | + 'info_procedez_par_etape' => 'procédez étape par étape', |
|
| 429 | + 'info_procedure_maj_version' => 'la procédure de mise à jour doit être lancée afin d’adapter |
|
| 430 | 430 | la base de données à la nouvelle version de SPIP.', |
| 431 | - 'info_proxy_ok' => 'Test du proxy réussi.', |
|
| 432 | - 'info_ps' => 'P.-S.', |
|
| 433 | - 'info_publier' => 'publier', |
|
| 434 | - 'info_publies' => 'Vos articles publiés en ligne', |
|
| 435 | - 'info_question_accepter_visiteurs' => 'Si les squelettes de votre site prévoient l’enregistrement de visiteurs sans accès à l’espace privé, veuillez activer l’option ci-dessous :', |
|
| 436 | - 'info_question_inscription_nouveaux_redacteurs' => 'Acceptez-vous les inscriptions de nouveaux rédacteurs à |
|
| 431 | + 'info_proxy_ok' => 'Test du proxy réussi.', |
|
| 432 | + 'info_ps' => 'P.-S.', |
|
| 433 | + 'info_publier' => 'publier', |
|
| 434 | + 'info_publies' => 'Vos articles publiés en ligne', |
|
| 435 | + 'info_question_accepter_visiteurs' => 'Si les squelettes de votre site prévoient l’enregistrement de visiteurs sans accès à l’espace privé, veuillez activer l’option ci-dessous :', |
|
| 436 | + 'info_question_inscription_nouveaux_redacteurs' => 'Acceptez-vous les inscriptions de nouveaux rédacteurs à |
|
| 437 | 437 | partir du site public ? Si vous acceptez, les visiteurs pourront s’inscrire |
| 438 | 438 | depuis un formulaire automatisé et accéderont alors à l’espace privé pour |
| 439 | 439 | proposer leurs propres articles. <div class="notice">Lors de la phase d’inscription, |
@@ -442,405 +442,405 @@ discard block |
||
| 442 | 442 | hébergeurs désactivent l’envoi de mails depuis leurs |
| 443 | 443 | serveurs : dans ce cas, l’inscription automatique est |
| 444 | 444 | impossible.</div>', |
| 445 | - 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', |
|
| 446 | - 'info_racine_site' => 'Racine du site', |
|
| 447 | - 'info_recharger_page' => 'Veuillez recharger cette page dans quelques instants.', |
|
| 448 | - 'info_recherche_auteur_zero' => 'Aucun résultat pour « @cherche_auteur@ ».', |
|
| 449 | - 'info_recommencer' => 'Veuillez recommencer.', |
|
| 450 | - 'info_redacteur_1' => 'Rédacteur', |
|
| 451 | - 'info_redacteur_2' => 'ayant accès à l’espace privé (<i>recommandé</i>)', |
|
| 452 | - 'info_redacteurs' => 'Rédacteurs', |
|
| 453 | - 'info_redaction_en_cours' => 'EN COURS DE RÉDACTION', |
|
| 454 | - 'info_redirection' => 'Redirection', |
|
| 455 | - 'info_redirection_activee' => 'La redirection est activée.', |
|
| 456 | - 'info_redirection_boucle' => 'Vous essayez de rediriger l’article sur lui-même.', |
|
| 457 | - 'info_redirection_desactivee' => 'La redirection a été supprimée.', |
|
| 458 | - 'info_refuses' => 'Vos articles refusés', |
|
| 459 | - 'info_reglage_ldap' => 'Options : <b>Réglage de l’importation LDAP</b>', |
|
| 460 | - 'info_renvoi_article' => '<b>Redirection.</b> Cet article renvoie à la page :', |
|
| 461 | - 'info_reserve_admin' => 'Seuls les administrateurs peuvent modifier cette adresse.', |
|
| 462 | - 'info_restreindre_rubrique' => 'Restreindre la gestion à la rubrique :', |
|
| 463 | - 'info_resultat_recherche' => 'Résultats de la recherche :', |
|
| 464 | - 'info_rubriques' => 'Rubriques', |
|
| 465 | - 'info_rubriques_02' => 'rubriques', |
|
| 466 | - 'info_rubriques_trouvees' => 'Rubriques trouvées', |
|
| 467 | - 'info_sans_titre' => 'Sans titre', |
|
| 468 | - 'info_selection_chemin_acces' => '<b>Sélectionnez</b> ci-après le chemin d’accès dans l’annuaire :', |
|
| 469 | - 'info_signatures' => 'signatures', |
|
| 470 | - 'info_site' => 'Site', |
|
| 471 | - 'info_site_2' => 'site :', |
|
| 472 | - 'info_site_min' => 'site', |
|
| 473 | - 'info_site_reference_2' => 'Site référencé', |
|
| 474 | - 'info_site_web' => 'Site Web :', |
|
| 475 | - 'info_sites' => 'sites', |
|
| 476 | - 'info_sites_lies_mot' => 'Les sites référencés liés à ce mot-clé', |
|
| 477 | - 'info_sites_proxy' => 'Utiliser un proxy', |
|
| 478 | - 'info_sites_trouves' => 'Sites trouvés', |
|
| 479 | - 'info_sous_titre' => 'Soustitre :', |
|
| 480 | - 'info_statut_administrateur' => 'Administrateur', |
|
| 481 | - 'info_statut_auteur' => 'Statut de cet auteur :', |
|
| 482 | - 'info_statut_auteur_2' => 'Je suis', |
|
| 483 | - 'info_statut_auteur_a_confirmer' => 'Inscription à confirmer', |
|
| 484 | - 'info_statut_auteur_autre' => 'Autre statut :', |
|
| 485 | - 'info_statut_redacteur' => 'Rédacteur', |
|
| 486 | - 'info_statut_utilisateurs_1' => 'Statut par défaut des utilisateurs importés', |
|
| 487 | - 'info_statut_utilisateurs_2' => 'Choisissez le statut qui est attribué aux personnes présentes dans l’annuaire LDAP lorsqu’elles se connectent pour la première fois. Vous pourrez par la suite modifier cette valeur pour chaque auteur au cas par cas.', |
|
| 488 | - 'info_suivi_activite' => 'Suivi de l’activité éditoriale', |
|
| 489 | - 'info_surtitre' => 'Surtitre :', |
|
| 490 | - 'info_syndication_integrale_1' => 'Votre site propose des fichiers de syndication (voir « <a href="@url@">@titre@</a> »).', |
|
| 491 | - 'info_syndication_integrale_2' => 'Souhaitez-vous transmettre les articles dans leur intégralité, ou ne diffuser qu’un résumé de quelques centaines de caractères ?', |
|
| 492 | - 'info_table_prefix' => 'Vous pouvez modifier le préfixe du nom des tables de données (ceci est indispensable lorsque l’on souhaite installer plusieurs sites dans la même base de données). Ce préfixe s’écrit en lettres minuscules, non accentuées, et sans espace.', |
|
| 493 | - 'info_taille_maximale_images' => 'SPIP va tester la taille maximale des images qu’il peut traiter (en millions de pixels).<br /> Les images plus grandes ne seront pas réduites.', |
|
| 494 | - 'info_taille_maximale_vignette' => 'Taille maximale des vignettes générées par le système :', |
|
| 495 | - 'info_terminer_installation' => 'Vous pouvez maintenant terminer la procédure d’installation standard.', |
|
| 496 | - 'info_texte' => 'Texte', |
|
| 497 | - 'info_texte_explicatif' => 'Texte explicatif', |
|
| 498 | - 'info_texte_long' => '(le texte est long : il apparaît donc en plusieurs parties qui seront recollées après validation.)', |
|
| 499 | - 'info_texte_message' => 'Texte de votre message', |
|
| 500 | - 'info_texte_message_02' => 'Texte du message', |
|
| 501 | - 'info_titre' => 'Titre :', |
|
| 502 | - 'info_total' => 'total :', |
|
| 503 | - 'info_tous_articles_en_redaction' => 'Tous les articles en cours de rédaction', |
|
| 504 | - 'info_tous_articles_presents' => 'Tous les articles publiés dans cette rubrique', |
|
| 505 | - 'info_tous_articles_refuses' => 'Tous les articles refusés', |
|
| 506 | - 'info_tous_les' => 'tous les :', |
|
| 507 | - 'info_tout_site' => 'Tout le site', |
|
| 508 | - 'info_tout_site2' => 'L’article n’a pas été traduit dans cette langue.', |
|
| 509 | - 'info_tout_site3' => 'L’article a été traduit dans cette langue, mais des modifications ont été apportées par la suite à l’article de référence. La traduction doit être mise à jour.', |
|
| 510 | - 'info_tout_site4' => 'L’article a été traduit dans cette langue, et la traduction est à jour.', |
|
| 511 | - 'info_tout_site5' => 'Article original.', |
|
| 512 | - 'info_tout_site6' => '<b>Attention :</b> seuls les articles originaux sont affichés. |
|
| 445 | + 'info_qui_edite' => '@nom_auteur_modif@ a travaillé sur ce contenu il y a @date_diff@ minutes', |
|
| 446 | + 'info_racine_site' => 'Racine du site', |
|
| 447 | + 'info_recharger_page' => 'Veuillez recharger cette page dans quelques instants.', |
|
| 448 | + 'info_recherche_auteur_zero' => 'Aucun résultat pour « @cherche_auteur@ ».', |
|
| 449 | + 'info_recommencer' => 'Veuillez recommencer.', |
|
| 450 | + 'info_redacteur_1' => 'Rédacteur', |
|
| 451 | + 'info_redacteur_2' => 'ayant accès à l’espace privé (<i>recommandé</i>)', |
|
| 452 | + 'info_redacteurs' => 'Rédacteurs', |
|
| 453 | + 'info_redaction_en_cours' => 'EN COURS DE RÉDACTION', |
|
| 454 | + 'info_redirection' => 'Redirection', |
|
| 455 | + 'info_redirection_activee' => 'La redirection est activée.', |
|
| 456 | + 'info_redirection_boucle' => 'Vous essayez de rediriger l’article sur lui-même.', |
|
| 457 | + 'info_redirection_desactivee' => 'La redirection a été supprimée.', |
|
| 458 | + 'info_refuses' => 'Vos articles refusés', |
|
| 459 | + 'info_reglage_ldap' => 'Options : <b>Réglage de l’importation LDAP</b>', |
|
| 460 | + 'info_renvoi_article' => '<b>Redirection.</b> Cet article renvoie à la page :', |
|
| 461 | + 'info_reserve_admin' => 'Seuls les administrateurs peuvent modifier cette adresse.', |
|
| 462 | + 'info_restreindre_rubrique' => 'Restreindre la gestion à la rubrique :', |
|
| 463 | + 'info_resultat_recherche' => 'Résultats de la recherche :', |
|
| 464 | + 'info_rubriques' => 'Rubriques', |
|
| 465 | + 'info_rubriques_02' => 'rubriques', |
|
| 466 | + 'info_rubriques_trouvees' => 'Rubriques trouvées', |
|
| 467 | + 'info_sans_titre' => 'Sans titre', |
|
| 468 | + 'info_selection_chemin_acces' => '<b>Sélectionnez</b> ci-après le chemin d’accès dans l’annuaire :', |
|
| 469 | + 'info_signatures' => 'signatures', |
|
| 470 | + 'info_site' => 'Site', |
|
| 471 | + 'info_site_2' => 'site :', |
|
| 472 | + 'info_site_min' => 'site', |
|
| 473 | + 'info_site_reference_2' => 'Site référencé', |
|
| 474 | + 'info_site_web' => 'Site Web :', |
|
| 475 | + 'info_sites' => 'sites', |
|
| 476 | + 'info_sites_lies_mot' => 'Les sites référencés liés à ce mot-clé', |
|
| 477 | + 'info_sites_proxy' => 'Utiliser un proxy', |
|
| 478 | + 'info_sites_trouves' => 'Sites trouvés', |
|
| 479 | + 'info_sous_titre' => 'Soustitre :', |
|
| 480 | + 'info_statut_administrateur' => 'Administrateur', |
|
| 481 | + 'info_statut_auteur' => 'Statut de cet auteur :', |
|
| 482 | + 'info_statut_auteur_2' => 'Je suis', |
|
| 483 | + 'info_statut_auteur_a_confirmer' => 'Inscription à confirmer', |
|
| 484 | + 'info_statut_auteur_autre' => 'Autre statut :', |
|
| 485 | + 'info_statut_redacteur' => 'Rédacteur', |
|
| 486 | + 'info_statut_utilisateurs_1' => 'Statut par défaut des utilisateurs importés', |
|
| 487 | + 'info_statut_utilisateurs_2' => 'Choisissez le statut qui est attribué aux personnes présentes dans l’annuaire LDAP lorsqu’elles se connectent pour la première fois. Vous pourrez par la suite modifier cette valeur pour chaque auteur au cas par cas.', |
|
| 488 | + 'info_suivi_activite' => 'Suivi de l’activité éditoriale', |
|
| 489 | + 'info_surtitre' => 'Surtitre :', |
|
| 490 | + 'info_syndication_integrale_1' => 'Votre site propose des fichiers de syndication (voir « <a href="@url@">@titre@</a> »).', |
|
| 491 | + 'info_syndication_integrale_2' => 'Souhaitez-vous transmettre les articles dans leur intégralité, ou ne diffuser qu’un résumé de quelques centaines de caractères ?', |
|
| 492 | + 'info_table_prefix' => 'Vous pouvez modifier le préfixe du nom des tables de données (ceci est indispensable lorsque l’on souhaite installer plusieurs sites dans la même base de données). Ce préfixe s’écrit en lettres minuscules, non accentuées, et sans espace.', |
|
| 493 | + 'info_taille_maximale_images' => 'SPIP va tester la taille maximale des images qu’il peut traiter (en millions de pixels).<br /> Les images plus grandes ne seront pas réduites.', |
|
| 494 | + 'info_taille_maximale_vignette' => 'Taille maximale des vignettes générées par le système :', |
|
| 495 | + 'info_terminer_installation' => 'Vous pouvez maintenant terminer la procédure d’installation standard.', |
|
| 496 | + 'info_texte' => 'Texte', |
|
| 497 | + 'info_texte_explicatif' => 'Texte explicatif', |
|
| 498 | + 'info_texte_long' => '(le texte est long : il apparaît donc en plusieurs parties qui seront recollées après validation.)', |
|
| 499 | + 'info_texte_message' => 'Texte de votre message', |
|
| 500 | + 'info_texte_message_02' => 'Texte du message', |
|
| 501 | + 'info_titre' => 'Titre :', |
|
| 502 | + 'info_total' => 'total :', |
|
| 503 | + 'info_tous_articles_en_redaction' => 'Tous les articles en cours de rédaction', |
|
| 504 | + 'info_tous_articles_presents' => 'Tous les articles publiés dans cette rubrique', |
|
| 505 | + 'info_tous_articles_refuses' => 'Tous les articles refusés', |
|
| 506 | + 'info_tous_les' => 'tous les :', |
|
| 507 | + 'info_tout_site' => 'Tout le site', |
|
| 508 | + 'info_tout_site2' => 'L’article n’a pas été traduit dans cette langue.', |
|
| 509 | + 'info_tout_site3' => 'L’article a été traduit dans cette langue, mais des modifications ont été apportées par la suite à l’article de référence. La traduction doit être mise à jour.', |
|
| 510 | + 'info_tout_site4' => 'L’article a été traduit dans cette langue, et la traduction est à jour.', |
|
| 511 | + 'info_tout_site5' => 'Article original.', |
|
| 512 | + 'info_tout_site6' => '<b>Attention :</b> seuls les articles originaux sont affichés. |
|
| 513 | 513 | Les traductions sont associées à l’original, |
| 514 | 514 | dans une couleur qui indique leur état :', |
| 515 | - 'info_traductions' => 'Traductions', |
|
| 516 | - 'info_travail_colaboratif' => 'Travail collaboratif sur les articles', |
|
| 517 | - 'info_un_article' => 'un article,', |
|
| 518 | - 'info_un_site' => 'un site,', |
|
| 519 | - 'info_une_rubrique' => 'une rubrique,', |
|
| 520 | - 'info_une_rubrique_02' => '1 rubrique', |
|
| 521 | - 'info_url' => 'URL :', |
|
| 522 | - 'info_url_proxy' => 'URL du proxy', |
|
| 523 | - 'info_url_proxy_pas_conforme' => 'l’URL du proxy n’est pas valide.', |
|
| 524 | - 'info_url_site_pas_conforme' => 'l’URL du site n’est pas valide.', |
|
| 525 | - 'info_url_test_proxy' => 'URL de test', |
|
| 526 | - 'info_urlref' => 'Lien hypertexte :', |
|
| 527 | - 'info_utilisation_spip' => 'Vous pouvez maintenant commencer à utiliser le système de publication assistée...', |
|
| 528 | - 'info_visites_par_mois' => 'Affichage par mois :', |
|
| 529 | - 'info_visiteur_1' => 'Visiteur', |
|
| 530 | - 'info_visiteur_2' => 'du site public', |
|
| 531 | - 'info_visiteurs' => 'Visiteurs', |
|
| 532 | - 'info_visiteurs_02' => 'Visiteurs du site public', |
|
| 533 | - 'info_webmestre_forces' => 'Les webmestres sont actuellement définis dans <tt>@file_options@</tt>.', |
|
| 534 | - 'install_adresse_base_hebergeur' => 'Adresse de la base de données attribuée par l’hébergeur', |
|
| 535 | - 'install_connect_ok' => 'La nouvelle base a bien été déclarée sous le nom de serveur @connect@.', |
|
| 536 | - 'install_echec_annonce' => 'L’installation va probablement échouer, ou aboutir à un site non fonctionnel...', |
|
| 537 | - 'install_extension_mbstring' => 'SPIP ne fonctionne pas avec :', |
|
| 538 | - 'install_extension_php_obligatoire' => 'SPIP exige l’extension php :', |
|
| 539 | - 'install_login_base_hebergeur' => 'Login de connexion attribué par l’hébergeur', |
|
| 540 | - 'install_nom_base_hebergeur' => 'Nom de la base attribué par l’hébergeur :', |
|
| 541 | - 'install_pas_table' => 'Base actuellement sans tables', |
|
| 542 | - 'install_pass_base_hebergeur' => 'Mot de passe de connexion attribué par l’hébergeur', |
|
| 543 | - 'install_php_extension' => 'Les extensions suivantes sont manquantes : @extensions@', |
|
| 544 | - 'install_php_version' => 'PHP version @version@ insuffisant (minimum = @minimum@)', |
|
| 545 | - 'install_php_version_max' => 'PHP version @version@ trop récent (maximum = @maximum@)', |
|
| 546 | - 'install_select_langue' => 'Sélectionnez une langue puis cliquez sur le bouton « suivant » pour lancer la procédure d’installation.', |
|
| 547 | - 'install_select_type_db' => 'Indiquer le type de base de données :', |
|
| 548 | - 'install_select_type_mysql' => 'MySQL', |
|
| 549 | - 'install_select_type_pg' => 'PostgreSQL', |
|
| 550 | - 'install_select_type_sqlite2' => 'SQLite 2', |
|
| 551 | - 'install_select_type_sqlite3' => 'SQLite 3', |
|
| 552 | - 'install_serveur_hebergeur' => 'Serveur de base de données attribué par l’hébergeur', |
|
| 553 | - 'install_table_prefix_hebergeur' => 'Préfixe de table attribué par l’hébergeur :', |
|
| 554 | - 'install_tables_base' => 'Tables de la base', |
|
| 555 | - 'install_types_db_connus' => 'SPIP sait utiliser <b>MySQL</b> (le plus répandu) et <b>SQLite</b>.', |
|
| 556 | - 'install_types_db_connus_avertissement' => 'Le support de <b>PostgreSQL</b> est également proposé à titre experimental', |
|
| 557 | - 'instituer_erreur_statut_a_change' => 'Le statut a déjà été modifié', |
|
| 558 | - 'instituer_erreur_statut_non_autorise' => 'Vous ne pouvez pas choisir ce statut', |
|
| 559 | - 'intem_redacteur' => 'rédacteur', |
|
| 560 | - 'intitule_licence' => 'Licence', |
|
| 561 | - 'item_accepter_inscriptions' => 'Accepter les inscriptions', |
|
| 562 | - 'item_activer_messages_avertissement' => 'Activer les messages d’avertissement', |
|
| 563 | - 'item_administrateur_2' => 'administrateur', |
|
| 564 | - 'item_afficher_calendrier' => 'Afficher dans le calendrier', |
|
| 565 | - 'item_autoriser_syndication_integrale' => 'Diffuser l’intégralité des articles dans les fichiers de syndication', |
|
| 566 | - 'item_choix_administrateurs' => 'les administrateurs', |
|
| 567 | - 'item_choix_generation_miniature' => 'Générer automatiquement les miniatures des images.', |
|
| 568 | - 'item_choix_non_generation_miniature' => 'Ne pas générer de miniatures des images.', |
|
| 569 | - 'item_choix_redacteurs' => 'les rédacteurs', |
|
| 570 | - 'item_choix_visiteurs' => 'les visiteurs du site public', |
|
| 571 | - 'item_creer_fichiers_authent' => 'Créer les fichiers .htpasswd', |
|
| 572 | - 'item_login' => 'Login', |
|
| 573 | - 'item_messagerie_agenda' => 'Activer la messagerie et l’agenda', |
|
| 574 | - 'item_mots_cles_association_articles' => 'aux articles', |
|
| 575 | - 'item_mots_cles_association_rubriques' => 'aux rubriques', |
|
| 576 | - 'item_mots_cles_association_sites' => 'aux sites référencés ou syndiqués.', |
|
| 577 | - 'item_non' => 'Non', |
|
| 578 | - 'item_non_accepter_inscriptions' => 'Ne pas accepter les inscriptions', |
|
| 579 | - 'item_non_activer_messages_avertissement' => 'Pas de messages d’avertissement', |
|
| 580 | - 'item_non_afficher_calendrier' => 'Ne pas afficher dans le calendrier', |
|
| 581 | - 'item_non_autoriser_syndication_integrale' => 'Ne diffuser qu’un résumé', |
|
| 582 | - 'item_non_creer_fichiers_authent' => 'Ne pas créer ces fichiers', |
|
| 583 | - 'item_non_messagerie_agenda' => 'Désactiver la messagerie et l’agenda', |
|
| 584 | - 'item_non_publier_articles' => 'Ne pas publier les articles avant la date de publication fixée.', |
|
| 585 | - 'item_nouvel_auteur' => 'Nouvel auteur', |
|
| 586 | - 'item_nouvelle_rubrique' => 'Nouvelle rubrique', |
|
| 587 | - 'item_oui' => 'Oui', |
|
| 588 | - 'item_publier_articles' => 'Publier les articles, quelle que soit leur date de publication.', |
|
| 589 | - 'item_reponse_article' => 'Réponse à l’article', |
|
| 590 | - 'item_visiteur' => 'visiteur', |
|
| 515 | + 'info_traductions' => 'Traductions', |
|
| 516 | + 'info_travail_colaboratif' => 'Travail collaboratif sur les articles', |
|
| 517 | + 'info_un_article' => 'un article,', |
|
| 518 | + 'info_un_site' => 'un site,', |
|
| 519 | + 'info_une_rubrique' => 'une rubrique,', |
|
| 520 | + 'info_une_rubrique_02' => '1 rubrique', |
|
| 521 | + 'info_url' => 'URL :', |
|
| 522 | + 'info_url_proxy' => 'URL du proxy', |
|
| 523 | + 'info_url_proxy_pas_conforme' => 'l’URL du proxy n’est pas valide.', |
|
| 524 | + 'info_url_site_pas_conforme' => 'l’URL du site n’est pas valide.', |
|
| 525 | + 'info_url_test_proxy' => 'URL de test', |
|
| 526 | + 'info_urlref' => 'Lien hypertexte :', |
|
| 527 | + 'info_utilisation_spip' => 'Vous pouvez maintenant commencer à utiliser le système de publication assistée...', |
|
| 528 | + 'info_visites_par_mois' => 'Affichage par mois :', |
|
| 529 | + 'info_visiteur_1' => 'Visiteur', |
|
| 530 | + 'info_visiteur_2' => 'du site public', |
|
| 531 | + 'info_visiteurs' => 'Visiteurs', |
|
| 532 | + 'info_visiteurs_02' => 'Visiteurs du site public', |
|
| 533 | + 'info_webmestre_forces' => 'Les webmestres sont actuellement définis dans <tt>@file_options@</tt>.', |
|
| 534 | + 'install_adresse_base_hebergeur' => 'Adresse de la base de données attribuée par l’hébergeur', |
|
| 535 | + 'install_connect_ok' => 'La nouvelle base a bien été déclarée sous le nom de serveur @connect@.', |
|
| 536 | + 'install_echec_annonce' => 'L’installation va probablement échouer, ou aboutir à un site non fonctionnel...', |
|
| 537 | + 'install_extension_mbstring' => 'SPIP ne fonctionne pas avec :', |
|
| 538 | + 'install_extension_php_obligatoire' => 'SPIP exige l’extension php :', |
|
| 539 | + 'install_login_base_hebergeur' => 'Login de connexion attribué par l’hébergeur', |
|
| 540 | + 'install_nom_base_hebergeur' => 'Nom de la base attribué par l’hébergeur :', |
|
| 541 | + 'install_pas_table' => 'Base actuellement sans tables', |
|
| 542 | + 'install_pass_base_hebergeur' => 'Mot de passe de connexion attribué par l’hébergeur', |
|
| 543 | + 'install_php_extension' => 'Les extensions suivantes sont manquantes : @extensions@', |
|
| 544 | + 'install_php_version' => 'PHP version @version@ insuffisant (minimum = @minimum@)', |
|
| 545 | + 'install_php_version_max' => 'PHP version @version@ trop récent (maximum = @maximum@)', |
|
| 546 | + 'install_select_langue' => 'Sélectionnez une langue puis cliquez sur le bouton « suivant » pour lancer la procédure d’installation.', |
|
| 547 | + 'install_select_type_db' => 'Indiquer le type de base de données :', |
|
| 548 | + 'install_select_type_mysql' => 'MySQL', |
|
| 549 | + 'install_select_type_pg' => 'PostgreSQL', |
|
| 550 | + 'install_select_type_sqlite2' => 'SQLite 2', |
|
| 551 | + 'install_select_type_sqlite3' => 'SQLite 3', |
|
| 552 | + 'install_serveur_hebergeur' => 'Serveur de base de données attribué par l’hébergeur', |
|
| 553 | + 'install_table_prefix_hebergeur' => 'Préfixe de table attribué par l’hébergeur :', |
|
| 554 | + 'install_tables_base' => 'Tables de la base', |
|
| 555 | + 'install_types_db_connus' => 'SPIP sait utiliser <b>MySQL</b> (le plus répandu) et <b>SQLite</b>.', |
|
| 556 | + 'install_types_db_connus_avertissement' => 'Le support de <b>PostgreSQL</b> est également proposé à titre experimental', |
|
| 557 | + 'instituer_erreur_statut_a_change' => 'Le statut a déjà été modifié', |
|
| 558 | + 'instituer_erreur_statut_non_autorise' => 'Vous ne pouvez pas choisir ce statut', |
|
| 559 | + 'intem_redacteur' => 'rédacteur', |
|
| 560 | + 'intitule_licence' => 'Licence', |
|
| 561 | + 'item_accepter_inscriptions' => 'Accepter les inscriptions', |
|
| 562 | + 'item_activer_messages_avertissement' => 'Activer les messages d’avertissement', |
|
| 563 | + 'item_administrateur_2' => 'administrateur', |
|
| 564 | + 'item_afficher_calendrier' => 'Afficher dans le calendrier', |
|
| 565 | + 'item_autoriser_syndication_integrale' => 'Diffuser l’intégralité des articles dans les fichiers de syndication', |
|
| 566 | + 'item_choix_administrateurs' => 'les administrateurs', |
|
| 567 | + 'item_choix_generation_miniature' => 'Générer automatiquement les miniatures des images.', |
|
| 568 | + 'item_choix_non_generation_miniature' => 'Ne pas générer de miniatures des images.', |
|
| 569 | + 'item_choix_redacteurs' => 'les rédacteurs', |
|
| 570 | + 'item_choix_visiteurs' => 'les visiteurs du site public', |
|
| 571 | + 'item_creer_fichiers_authent' => 'Créer les fichiers .htpasswd', |
|
| 572 | + 'item_login' => 'Login', |
|
| 573 | + 'item_messagerie_agenda' => 'Activer la messagerie et l’agenda', |
|
| 574 | + 'item_mots_cles_association_articles' => 'aux articles', |
|
| 575 | + 'item_mots_cles_association_rubriques' => 'aux rubriques', |
|
| 576 | + 'item_mots_cles_association_sites' => 'aux sites référencés ou syndiqués.', |
|
| 577 | + 'item_non' => 'Non', |
|
| 578 | + 'item_non_accepter_inscriptions' => 'Ne pas accepter les inscriptions', |
|
| 579 | + 'item_non_activer_messages_avertissement' => 'Pas de messages d’avertissement', |
|
| 580 | + 'item_non_afficher_calendrier' => 'Ne pas afficher dans le calendrier', |
|
| 581 | + 'item_non_autoriser_syndication_integrale' => 'Ne diffuser qu’un résumé', |
|
| 582 | + 'item_non_creer_fichiers_authent' => 'Ne pas créer ces fichiers', |
|
| 583 | + 'item_non_messagerie_agenda' => 'Désactiver la messagerie et l’agenda', |
|
| 584 | + 'item_non_publier_articles' => 'Ne pas publier les articles avant la date de publication fixée.', |
|
| 585 | + 'item_nouvel_auteur' => 'Nouvel auteur', |
|
| 586 | + 'item_nouvelle_rubrique' => 'Nouvelle rubrique', |
|
| 587 | + 'item_oui' => 'Oui', |
|
| 588 | + 'item_publier_articles' => 'Publier les articles, quelle que soit leur date de publication.', |
|
| 589 | + 'item_reponse_article' => 'Réponse à l’article', |
|
| 590 | + 'item_visiteur' => 'visiteur', |
|
| 591 | 591 | |
| 592 | - // J |
|
| 593 | - 'jour_non_connu_nc' => 'n.c.', |
|
| 592 | + // J |
|
| 593 | + 'jour_non_connu_nc' => 'n.c.', |
|
| 594 | 594 | |
| 595 | - // L |
|
| 596 | - 'label_bando_outils' => 'Barre d’outils', |
|
| 597 | - 'label_bando_outils_afficher' => 'Afficher les outils', |
|
| 598 | - 'label_bando_outils_masquer' => 'Masquer les outils', |
|
| 599 | - 'label_choix_langue' => 'Sélectionnez votre langue', |
|
| 600 | - 'label_langue' => 'Langue', |
|
| 601 | - 'label_nom_fichier_connect' => 'Indiquez le nom utilisé pour ce serveur', |
|
| 602 | - 'label_slogan_site' => 'Slogan du site', |
|
| 603 | - 'label_taille_ecran' => 'Largeur de l’écran', |
|
| 604 | - 'label_texte_et_icones_navigation' => 'Menu de navigation', |
|
| 605 | - 'label_texte_et_icones_page' => 'Affichage dans la page', |
|
| 606 | - 'ldap_correspondance' => 'héritage du champ @champ@', |
|
| 607 | - 'ldap_correspondance_1' => 'Héritage des champs LDAP', |
|
| 608 | - 'ldap_correspondance_2' => 'Pour chacun des champs SPIP suivants, indiquer le nom du champ LDAP correspondant. Laisser vide pour ne pas le remplir, séparer par des espaces ou des virgules pour essayer plusieurs champs LDAP.', |
|
| 609 | - 'lien_ajouter_auteur' => 'Ajouter cet auteur', |
|
| 610 | - 'lien_ajouter_une_rubrique' => 'Ajouter cette rubrique', |
|
| 611 | - 'lien_email' => 'email', |
|
| 612 | - 'lien_nom_site' => 'NOM DU SITE :', |
|
| 613 | - 'lien_rapide_contenu' => 'Aller au contenu', |
|
| 614 | - 'lien_rapide_navigation' => 'Aller à la navigation', |
|
| 615 | - 'lien_rapide_recherche' => 'Aller à la recherche', |
|
| 616 | - 'lien_retirer_auteur' => 'Retirer l’auteur', |
|
| 617 | - 'lien_retirer_rubrique' => 'Retirer la rubrique', |
|
| 618 | - 'lien_retirer_tous_auteurs' => 'Retirer tous les auteurs', |
|
| 619 | - 'lien_retirer_toutes_rubriques' => 'Retirer toutes les rubriques', |
|
| 620 | - 'lien_site' => 'site', |
|
| 621 | - 'lien_tout_decocher' => 'Tout décocher', |
|
| 622 | - 'lien_tout_deplier' => 'Tout déplier', |
|
| 623 | - 'lien_tout_replier' => 'Tout replier', |
|
| 624 | - 'lien_tout_supprimer' => 'Tout supprimer', |
|
| 625 | - 'lien_trier_nom' => 'Trier par nom', |
|
| 626 | - 'lien_trier_nombre_articles' => 'Trier par nombre d’articles', |
|
| 627 | - 'lien_trier_statut' => 'Trier par statut', |
|
| 628 | - 'lien_voir_en_ligne' => 'VOIR EN LIGNE :', |
|
| 629 | - 'logo_article' => 'Logo de l’article', |
|
| 630 | - 'logo_auteur' => 'Logo de l’auteur', |
|
| 631 | - 'logo_rubrique' => 'Logo de la rubrique', |
|
| 632 | - 'logo_site' => 'Logo de ce site', |
|
| 633 | - 'logo_standard_rubrique' => 'Logo standard des rubriques', |
|
| 634 | - 'logo_survol' => 'Logo pour survol', |
|
| 595 | + // L |
|
| 596 | + 'label_bando_outils' => 'Barre d’outils', |
|
| 597 | + 'label_bando_outils_afficher' => 'Afficher les outils', |
|
| 598 | + 'label_bando_outils_masquer' => 'Masquer les outils', |
|
| 599 | + 'label_choix_langue' => 'Sélectionnez votre langue', |
|
| 600 | + 'label_langue' => 'Langue', |
|
| 601 | + 'label_nom_fichier_connect' => 'Indiquez le nom utilisé pour ce serveur', |
|
| 602 | + 'label_slogan_site' => 'Slogan du site', |
|
| 603 | + 'label_taille_ecran' => 'Largeur de l’écran', |
|
| 604 | + 'label_texte_et_icones_navigation' => 'Menu de navigation', |
|
| 605 | + 'label_texte_et_icones_page' => 'Affichage dans la page', |
|
| 606 | + 'ldap_correspondance' => 'héritage du champ @champ@', |
|
| 607 | + 'ldap_correspondance_1' => 'Héritage des champs LDAP', |
|
| 608 | + 'ldap_correspondance_2' => 'Pour chacun des champs SPIP suivants, indiquer le nom du champ LDAP correspondant. Laisser vide pour ne pas le remplir, séparer par des espaces ou des virgules pour essayer plusieurs champs LDAP.', |
|
| 609 | + 'lien_ajouter_auteur' => 'Ajouter cet auteur', |
|
| 610 | + 'lien_ajouter_une_rubrique' => 'Ajouter cette rubrique', |
|
| 611 | + 'lien_email' => 'email', |
|
| 612 | + 'lien_nom_site' => 'NOM DU SITE :', |
|
| 613 | + 'lien_rapide_contenu' => 'Aller au contenu', |
|
| 614 | + 'lien_rapide_navigation' => 'Aller à la navigation', |
|
| 615 | + 'lien_rapide_recherche' => 'Aller à la recherche', |
|
| 616 | + 'lien_retirer_auteur' => 'Retirer l’auteur', |
|
| 617 | + 'lien_retirer_rubrique' => 'Retirer la rubrique', |
|
| 618 | + 'lien_retirer_tous_auteurs' => 'Retirer tous les auteurs', |
|
| 619 | + 'lien_retirer_toutes_rubriques' => 'Retirer toutes les rubriques', |
|
| 620 | + 'lien_site' => 'site', |
|
| 621 | + 'lien_tout_decocher' => 'Tout décocher', |
|
| 622 | + 'lien_tout_deplier' => 'Tout déplier', |
|
| 623 | + 'lien_tout_replier' => 'Tout replier', |
|
| 624 | + 'lien_tout_supprimer' => 'Tout supprimer', |
|
| 625 | + 'lien_trier_nom' => 'Trier par nom', |
|
| 626 | + 'lien_trier_nombre_articles' => 'Trier par nombre d’articles', |
|
| 627 | + 'lien_trier_statut' => 'Trier par statut', |
|
| 628 | + 'lien_voir_en_ligne' => 'VOIR EN LIGNE :', |
|
| 629 | + 'logo_article' => 'Logo de l’article', |
|
| 630 | + 'logo_auteur' => 'Logo de l’auteur', |
|
| 631 | + 'logo_rubrique' => 'Logo de la rubrique', |
|
| 632 | + 'logo_site' => 'Logo de ce site', |
|
| 633 | + 'logo_standard_rubrique' => 'Logo standard des rubriques', |
|
| 634 | + 'logo_survol' => 'Logo pour survol', |
|
| 635 | 635 | |
| 636 | - // M |
|
| 637 | - 'menu_aide_installation_choix_base' => 'Choix de votre base', |
|
| 638 | - 'module_fichier_langue' => 'Fichier de langue', |
|
| 639 | - 'module_raccourci' => 'Raccourci', |
|
| 640 | - 'module_texte_affiche' => 'Texte affiché', |
|
| 641 | - 'module_texte_explicatif' => 'Vous pouvez insérer les raccourcis suivants dans les squelettes de votre site public. Ils seront automatiquement traduits dans les différentes langues pour lesquelles il existe un fichier de langue.', |
|
| 642 | - 'module_texte_traduction' => 'Le fichier de langue « @module@ » est disponible en :', |
|
| 643 | - 'mois_non_connu' => 'non connu', |
|
| 636 | + // M |
|
| 637 | + 'menu_aide_installation_choix_base' => 'Choix de votre base', |
|
| 638 | + 'module_fichier_langue' => 'Fichier de langue', |
|
| 639 | + 'module_raccourci' => 'Raccourci', |
|
| 640 | + 'module_texte_affiche' => 'Texte affiché', |
|
| 641 | + 'module_texte_explicatif' => 'Vous pouvez insérer les raccourcis suivants dans les squelettes de votre site public. Ils seront automatiquement traduits dans les différentes langues pour lesquelles il existe un fichier de langue.', |
|
| 642 | + 'module_texte_traduction' => 'Le fichier de langue « @module@ » est disponible en :', |
|
| 643 | + 'mois_non_connu' => 'non connu', |
|
| 644 | 644 | |
| 645 | - // N |
|
| 646 | - 'nouvelle_version_spip' => 'La mise à jour @version@ de SPIP est disponible', |
|
| 647 | - 'nouvelle_version_spip_majeure' => 'Une nouvelle version SPIP @version@ est disponible', |
|
| 645 | + // N |
|
| 646 | + 'nouvelle_version_spip' => 'La mise à jour @version@ de SPIP est disponible', |
|
| 647 | + 'nouvelle_version_spip_majeure' => 'Une nouvelle version SPIP @version@ est disponible', |
|
| 648 | 648 | |
| 649 | - // O |
|
| 650 | - 'onglet_contenu' => 'Contenu', |
|
| 651 | - 'onglet_declarer_une_autre_base' => 'Déclarer une autre base', |
|
| 652 | - 'onglet_discuter' => 'Discuter', |
|
| 653 | - 'onglet_interactivite' => 'Interactivité', |
|
| 654 | - 'onglet_proprietes' => 'Propriétés', |
|
| 655 | - 'onglet_repartition_actuelle' => 'actuellement', |
|
| 656 | - 'onglet_sous_rubriques' => 'Sous-rubriques', |
|
| 649 | + // O |
|
| 650 | + 'onglet_contenu' => 'Contenu', |
|
| 651 | + 'onglet_declarer_une_autre_base' => 'Déclarer une autre base', |
|
| 652 | + 'onglet_discuter' => 'Discuter', |
|
| 653 | + 'onglet_interactivite' => 'Interactivité', |
|
| 654 | + 'onglet_proprietes' => 'Propriétés', |
|
| 655 | + 'onglet_repartition_actuelle' => 'actuellement', |
|
| 656 | + 'onglet_sous_rubriques' => 'Sous-rubriques', |
|
| 657 | 657 | |
| 658 | - // P |
|
| 659 | - 'page_pas_proxy' => 'Cette page ne doit pas passer par le proxy', |
|
| 660 | - 'pas_de_proxy_pour' => 'Au besoin, indiquez les machines ou domaines pour lesquels ce proxy ne doit pas s’appliquer (par exemple : @exemple@)', |
|
| 661 | - 'phpinfo' => 'Configuration PHP', |
|
| 662 | - 'plugin_charge_paquet' => 'Chargement du paquet @name@', |
|
| 663 | - 'plugin_charger' => 'Télécharger', |
|
| 664 | - 'plugin_erreur_charger' => 'erreur : impossible de charger @zip@', |
|
| 665 | - 'plugin_erreur_droit1' => 'Le répertoire <code>@dest@</code> n’est pas accessible en écriture.', |
|
| 666 | - 'plugin_erreur_droit2' => 'Veuillez vérifier les droits sur ce répertoire (et le créer le cas échéant), ou installer les fichiers par FTP.', |
|
| 667 | - 'plugin_erreur_zip' => 'échec pclzip : erreur @status@', |
|
| 668 | - 'plugin_etat_developpement' => 'en développement', |
|
| 669 | - 'plugin_etat_experimental' => 'expérimental', |
|
| 670 | - 'plugin_etat_stable' => 'stable', |
|
| 671 | - 'plugin_etat_test' => 'en test', |
|
| 672 | - 'plugin_impossible_activer' => 'Impossible d’activer le plugin @plugin@', |
|
| 673 | - 'plugin_info_automatique1' => 'Si vous souhaitez autoriser l’installation automatique des plugins, veuillez :', |
|
| 674 | - 'plugin_info_automatique1_lib' => 'Si vous souhaitez autoriser l’installation automatique de cette librairie, veuillez :', |
|
| 675 | - 'plugin_info_automatique2' => 'créer un répertoire <code>@rep@</code> ;', |
|
| 676 | - 'plugin_info_automatique3' => 'vérifier que le serveur est autorisé à écrire dans ce répertoire.', |
|
| 677 | - 'plugin_info_automatique_creer' => 'à créer à la racine du site.', |
|
| 678 | - 'plugin_info_automatique_exemples' => 'exemples :', |
|
| 679 | - 'plugin_info_automatique_ftp' => 'Vous pouvez installer des plugins, par FTP, dans le répertoire <tt>@rep@</tt>', |
|
| 680 | - 'plugin_info_automatique_lib' => 'Certains plugins demandent aussi à pouvoir télécharger des fichiers dans le répertoire <code>lib/</code>, à créer le cas échéant à la racine du site.', |
|
| 681 | - 'plugin_info_automatique_liste' => 'Vos listes de plugins :', |
|
| 682 | - 'plugin_info_automatique_liste_officielle' => 'les plugins officiels', |
|
| 683 | - 'plugin_info_automatique_liste_update' => 'Mettre à jour les listes', |
|
| 684 | - 'plugin_info_automatique_ou' => 'ou...', |
|
| 685 | - 'plugin_info_automatique_select' => 'Sélectionnez ci-dessous un plugin : SPIP le téléchargera et l’installera dans le répertoire <code>@rep@</code> ; si ce plugin existe déjà, il sera mis à jour.', |
|
| 686 | - 'plugin_info_credit' => 'Crédits', |
|
| 687 | - 'plugin_info_erreur_xml' => 'La déclaration de ce plugin est incorrecte', |
|
| 688 | - 'plugin_info_install_ok' => 'Installation réussie', |
|
| 689 | - 'plugin_info_necessite' => 'Nécessite :', |
|
| 690 | - 'plugin_info_non_compatible_spip' => 'Ce plugin n’est pas compatible avec cette version de SPIP', |
|
| 691 | - 'plugin_info_plugins_dist_1' => 'Les plugins ci-dessous sont chargés et activés dans le répertoire @plugins_dist@.', |
|
| 692 | - 'plugin_info_plugins_dist_2' => 'Ils ne sont pas désactivables.', |
|
| 693 | - 'plugin_info_telecharger' => 'à télécharger depuis @url@ et à installer dans @rep@', |
|
| 694 | - 'plugin_info_upgrade_ok' => 'Mise à jour réussie', |
|
| 695 | - 'plugin_librairies_installees' => 'Librairies installées', |
|
| 696 | - 'plugin_necessite_extension_php' => 'Nécessite l’extension PHP @plugin@ en version @version@.', |
|
| 697 | - 'plugin_necessite_extension_php_sans_version' => 'Nécessite l’extension PHP @plugin@', |
|
| 698 | - 'plugin_necessite_lib' => 'Ce plugin nécessite la librairie @lib@', |
|
| 699 | - 'plugin_necessite_php' => 'Nécessite @plugin@ en version @version@.', |
|
| 700 | - 'plugin_necessite_plugin' => 'Nécessite le plugin @plugin@ en version @version@.', |
|
| 701 | - 'plugin_necessite_plugin_sans_version' => 'Nécessite le plugin @plugin@', |
|
| 702 | - 'plugin_necessite_spip' => 'Nécessite SPIP en version @version@ minimum.', |
|
| 703 | - 'plugin_source' => 'source : ', |
|
| 704 | - 'plugin_titre_automatique' => 'Installation automatique', |
|
| 705 | - 'plugin_titre_automatique_ajouter' => 'Ajouter des plugins', |
|
| 706 | - 'plugin_titre_installation' => 'Installation du plugin @plugin@', |
|
| 707 | - 'plugin_titre_modifier' => 'Mes plugins', |
|
| 708 | - 'plugin_utilise_extension_php' => 'L’extension PHP @plugin@ doit être en version @version@.', |
|
| 709 | - 'plugin_utilise_php' => '@plugin@ doit être en version @version@.', |
|
| 710 | - 'plugin_utilise_plugin' => 'Le plugin @plugin@ doit être en version @version@.', |
|
| 711 | - 'plugin_zip_active' => 'Continuez pour l’activer', |
|
| 712 | - 'plugin_zip_adresse' => 'indiquez ci-dessous l’adresse d’un fichier zip de plugin à télécharger, ou encore l’adresse d’une liste de plugins.', |
|
| 713 | - 'plugin_zip_adresse_champ' => 'Adresse du plugin ou de la liste ', |
|
| 714 | - 'plugin_zip_content' => 'Il contient les fichiers suivants (@taille@),<br />prêts à installer dans le répertoire <code>@rep@</code>', |
|
| 715 | - 'plugin_zip_installe_finie' => 'Le fichier @zip@ a été décompacté et installé.', |
|
| 716 | - 'plugin_zip_installe_rep_finie' => 'Le fichier @zip@ a été décompacté et installé dans le répertoire @rep@', |
|
| 717 | - 'plugin_zip_installer' => 'Vous pouvez maintenant l’installer.', |
|
| 718 | - 'plugin_zip_telecharge' => 'Le fichier @zip@ a été téléchargé', |
|
| 719 | - 'plugins_actif_aucun' => 'Aucun plugin activé.', |
|
| 720 | - 'plugins_actif_un' => 'Un plugin activé.', |
|
| 721 | - 'plugins_actifs' => '@count@ plugins activés.', |
|
| 722 | - 'plugins_actifs_liste' => 'Actifs', |
|
| 723 | - 'plugins_compte' => '@count@ plugins', |
|
| 724 | - 'plugins_disponible_un' => 'Un plugin disponible.', |
|
| 725 | - 'plugins_disponibles' => '@count@ plugins disponibles.', |
|
| 726 | - 'plugins_erreur' => 'Erreur dans les plugins : @plugins@', |
|
| 727 | - 'plugins_liste' => 'Liste des plugins', |
|
| 728 | - 'plugins_liste_dist' => 'Plugins verrouillés', |
|
| 729 | - 'plugins_recents' => 'Plugins récents.', |
|
| 730 | - 'plugins_tous_liste' => 'Tous', |
|
| 731 | - 'plugins_vue_hierarchie' => 'Hiérarchie', |
|
| 732 | - 'plugins_vue_liste' => 'Liste', |
|
| 733 | - 'protocole_ldap' => 'Version du protocole :', |
|
| 658 | + // P |
|
| 659 | + 'page_pas_proxy' => 'Cette page ne doit pas passer par le proxy', |
|
| 660 | + 'pas_de_proxy_pour' => 'Au besoin, indiquez les machines ou domaines pour lesquels ce proxy ne doit pas s’appliquer (par exemple : @exemple@)', |
|
| 661 | + 'phpinfo' => 'Configuration PHP', |
|
| 662 | + 'plugin_charge_paquet' => 'Chargement du paquet @name@', |
|
| 663 | + 'plugin_charger' => 'Télécharger', |
|
| 664 | + 'plugin_erreur_charger' => 'erreur : impossible de charger @zip@', |
|
| 665 | + 'plugin_erreur_droit1' => 'Le répertoire <code>@dest@</code> n’est pas accessible en écriture.', |
|
| 666 | + 'plugin_erreur_droit2' => 'Veuillez vérifier les droits sur ce répertoire (et le créer le cas échéant), ou installer les fichiers par FTP.', |
|
| 667 | + 'plugin_erreur_zip' => 'échec pclzip : erreur @status@', |
|
| 668 | + 'plugin_etat_developpement' => 'en développement', |
|
| 669 | + 'plugin_etat_experimental' => 'expérimental', |
|
| 670 | + 'plugin_etat_stable' => 'stable', |
|
| 671 | + 'plugin_etat_test' => 'en test', |
|
| 672 | + 'plugin_impossible_activer' => 'Impossible d’activer le plugin @plugin@', |
|
| 673 | + 'plugin_info_automatique1' => 'Si vous souhaitez autoriser l’installation automatique des plugins, veuillez :', |
|
| 674 | + 'plugin_info_automatique1_lib' => 'Si vous souhaitez autoriser l’installation automatique de cette librairie, veuillez :', |
|
| 675 | + 'plugin_info_automatique2' => 'créer un répertoire <code>@rep@</code> ;', |
|
| 676 | + 'plugin_info_automatique3' => 'vérifier que le serveur est autorisé à écrire dans ce répertoire.', |
|
| 677 | + 'plugin_info_automatique_creer' => 'à créer à la racine du site.', |
|
| 678 | + 'plugin_info_automatique_exemples' => 'exemples :', |
|
| 679 | + 'plugin_info_automatique_ftp' => 'Vous pouvez installer des plugins, par FTP, dans le répertoire <tt>@rep@</tt>', |
|
| 680 | + 'plugin_info_automatique_lib' => 'Certains plugins demandent aussi à pouvoir télécharger des fichiers dans le répertoire <code>lib/</code>, à créer le cas échéant à la racine du site.', |
|
| 681 | + 'plugin_info_automatique_liste' => 'Vos listes de plugins :', |
|
| 682 | + 'plugin_info_automatique_liste_officielle' => 'les plugins officiels', |
|
| 683 | + 'plugin_info_automatique_liste_update' => 'Mettre à jour les listes', |
|
| 684 | + 'plugin_info_automatique_ou' => 'ou...', |
|
| 685 | + 'plugin_info_automatique_select' => 'Sélectionnez ci-dessous un plugin : SPIP le téléchargera et l’installera dans le répertoire <code>@rep@</code> ; si ce plugin existe déjà, il sera mis à jour.', |
|
| 686 | + 'plugin_info_credit' => 'Crédits', |
|
| 687 | + 'plugin_info_erreur_xml' => 'La déclaration de ce plugin est incorrecte', |
|
| 688 | + 'plugin_info_install_ok' => 'Installation réussie', |
|
| 689 | + 'plugin_info_necessite' => 'Nécessite :', |
|
| 690 | + 'plugin_info_non_compatible_spip' => 'Ce plugin n’est pas compatible avec cette version de SPIP', |
|
| 691 | + 'plugin_info_plugins_dist_1' => 'Les plugins ci-dessous sont chargés et activés dans le répertoire @plugins_dist@.', |
|
| 692 | + 'plugin_info_plugins_dist_2' => 'Ils ne sont pas désactivables.', |
|
| 693 | + 'plugin_info_telecharger' => 'à télécharger depuis @url@ et à installer dans @rep@', |
|
| 694 | + 'plugin_info_upgrade_ok' => 'Mise à jour réussie', |
|
| 695 | + 'plugin_librairies_installees' => 'Librairies installées', |
|
| 696 | + 'plugin_necessite_extension_php' => 'Nécessite l’extension PHP @plugin@ en version @version@.', |
|
| 697 | + 'plugin_necessite_extension_php_sans_version' => 'Nécessite l’extension PHP @plugin@', |
|
| 698 | + 'plugin_necessite_lib' => 'Ce plugin nécessite la librairie @lib@', |
|
| 699 | + 'plugin_necessite_php' => 'Nécessite @plugin@ en version @version@.', |
|
| 700 | + 'plugin_necessite_plugin' => 'Nécessite le plugin @plugin@ en version @version@.', |
|
| 701 | + 'plugin_necessite_plugin_sans_version' => 'Nécessite le plugin @plugin@', |
|
| 702 | + 'plugin_necessite_spip' => 'Nécessite SPIP en version @version@ minimum.', |
|
| 703 | + 'plugin_source' => 'source : ', |
|
| 704 | + 'plugin_titre_automatique' => 'Installation automatique', |
|
| 705 | + 'plugin_titre_automatique_ajouter' => 'Ajouter des plugins', |
|
| 706 | + 'plugin_titre_installation' => 'Installation du plugin @plugin@', |
|
| 707 | + 'plugin_titre_modifier' => 'Mes plugins', |
|
| 708 | + 'plugin_utilise_extension_php' => 'L’extension PHP @plugin@ doit être en version @version@.', |
|
| 709 | + 'plugin_utilise_php' => '@plugin@ doit être en version @version@.', |
|
| 710 | + 'plugin_utilise_plugin' => 'Le plugin @plugin@ doit être en version @version@.', |
|
| 711 | + 'plugin_zip_active' => 'Continuez pour l’activer', |
|
| 712 | + 'plugin_zip_adresse' => 'indiquez ci-dessous l’adresse d’un fichier zip de plugin à télécharger, ou encore l’adresse d’une liste de plugins.', |
|
| 713 | + 'plugin_zip_adresse_champ' => 'Adresse du plugin ou de la liste ', |
|
| 714 | + 'plugin_zip_content' => 'Il contient les fichiers suivants (@taille@),<br />prêts à installer dans le répertoire <code>@rep@</code>', |
|
| 715 | + 'plugin_zip_installe_finie' => 'Le fichier @zip@ a été décompacté et installé.', |
|
| 716 | + 'plugin_zip_installe_rep_finie' => 'Le fichier @zip@ a été décompacté et installé dans le répertoire @rep@', |
|
| 717 | + 'plugin_zip_installer' => 'Vous pouvez maintenant l’installer.', |
|
| 718 | + 'plugin_zip_telecharge' => 'Le fichier @zip@ a été téléchargé', |
|
| 719 | + 'plugins_actif_aucun' => 'Aucun plugin activé.', |
|
| 720 | + 'plugins_actif_un' => 'Un plugin activé.', |
|
| 721 | + 'plugins_actifs' => '@count@ plugins activés.', |
|
| 722 | + 'plugins_actifs_liste' => 'Actifs', |
|
| 723 | + 'plugins_compte' => '@count@ plugins', |
|
| 724 | + 'plugins_disponible_un' => 'Un plugin disponible.', |
|
| 725 | + 'plugins_disponibles' => '@count@ plugins disponibles.', |
|
| 726 | + 'plugins_erreur' => 'Erreur dans les plugins : @plugins@', |
|
| 727 | + 'plugins_liste' => 'Liste des plugins', |
|
| 728 | + 'plugins_liste_dist' => 'Plugins verrouillés', |
|
| 729 | + 'plugins_recents' => 'Plugins récents.', |
|
| 730 | + 'plugins_tous_liste' => 'Tous', |
|
| 731 | + 'plugins_vue_hierarchie' => 'Hiérarchie', |
|
| 732 | + 'plugins_vue_liste' => 'Liste', |
|
| 733 | + 'protocole_ldap' => 'Version du protocole :', |
|
| 734 | 734 | |
| 735 | - // Q |
|
| 736 | - 'queue_executer_maintenant' => 'Exécuter maintenant', |
|
| 737 | - 'queue_info_purger' => 'Vous pouvez supprimer toutes les tâches de fond en attente et réinitialiser la liste avec les tâches périodiques', |
|
| 738 | - 'queue_nb_jobs_in_queue' => '@nb@ tâches en attente', |
|
| 739 | - 'queue_next_job_in_nb_sec' => 'Prochaine tâche dans @nb@ s', |
|
| 740 | - 'queue_no_job_in_queue' => 'Aucune tâche en attente', |
|
| 741 | - 'queue_one_job_in_queue' => '1 tâche en attente', |
|
| 742 | - 'queue_priorite_tache' => 'priorité', |
|
| 743 | - 'queue_purger_queue' => 'Réinitialiser la liste des tâches', |
|
| 744 | - 'queue_titre' => 'Tâches de fond', |
|
| 735 | + // Q |
|
| 736 | + 'queue_executer_maintenant' => 'Exécuter maintenant', |
|
| 737 | + 'queue_info_purger' => 'Vous pouvez supprimer toutes les tâches de fond en attente et réinitialiser la liste avec les tâches périodiques', |
|
| 738 | + 'queue_nb_jobs_in_queue' => '@nb@ tâches en attente', |
|
| 739 | + 'queue_next_job_in_nb_sec' => 'Prochaine tâche dans @nb@ s', |
|
| 740 | + 'queue_no_job_in_queue' => 'Aucune tâche en attente', |
|
| 741 | + 'queue_one_job_in_queue' => '1 tâche en attente', |
|
| 742 | + 'queue_priorite_tache' => 'priorité', |
|
| 743 | + 'queue_purger_queue' => 'Réinitialiser la liste des tâches', |
|
| 744 | + 'queue_titre' => 'Tâches de fond', |
|
| 745 | 745 | |
| 746 | - // R |
|
| 747 | - 'repertoire_plugins' => 'Répertoire :', |
|
| 748 | - 'required' => '(obligatoire)', |
|
| 746 | + // R |
|
| 747 | + 'repertoire_plugins' => 'Répertoire :', |
|
| 748 | + 'required' => '(obligatoire)', |
|
| 749 | 749 | |
| 750 | - // S |
|
| 751 | - 'sans_heure' => 'sans heure', |
|
| 752 | - 'statut_admin_restreint' => 'admin restreint', |
|
| 753 | - 'statut_webmestre' => 'webmestre', |
|
| 750 | + // S |
|
| 751 | + 'sans_heure' => 'sans heure', |
|
| 752 | + 'statut_admin_restreint' => 'admin restreint', |
|
| 753 | + 'statut_webmestre' => 'webmestre', |
|
| 754 | 754 | |
| 755 | - // T |
|
| 756 | - 'tache_cron_asap' => 'Tâche CRON @function@ (ASAP)', |
|
| 757 | - 'tache_cron_secondes' => 'Tâche CRON @function@ (toutes les @nb@ s)', |
|
| 758 | - 'taille_cache_image' => 'Les images calculées automatiquement par SPIP (vignettes des documents, titres présentés sous forme graphique, fonctions mathématiques au format TeX...) occupent dans le répertoire @dir@ un total de @taille@.', |
|
| 759 | - 'taille_cache_moins_de' => 'La taille du cache est de moins de @octets@.', |
|
| 760 | - 'taille_cache_octets' => 'La taille du cache est actuellement de @octets@ environ.', |
|
| 761 | - 'taille_cache_vide' => 'Le cache est vide.', |
|
| 762 | - 'taille_repertoire_cache' => 'Taille du répertoire cache', |
|
| 763 | - 'text_article_propose_publication' => 'Article proposé pour la publication.', |
|
| 764 | - 'texte_acces_ldap_anonyme_1' => 'Certains serveurs LDAP n’acceptent aucun accès anonyme. Dans ce cas il faut spécifier un identifiant d’accès initial afin de pouvoir ensuite rechercher des informations dans l’annuaire. Dans la plupart des cas néanmoins, les champs suivants pourront être laissés vides.', |
|
| 765 | - 'texte_admin_effacer_01' => 'Cette commande efface <i>tout</i> le contenu de la base de données, |
|
| 755 | + // T |
|
| 756 | + 'tache_cron_asap' => 'Tâche CRON @function@ (ASAP)', |
|
| 757 | + 'tache_cron_secondes' => 'Tâche CRON @function@ (toutes les @nb@ s)', |
|
| 758 | + 'taille_cache_image' => 'Les images calculées automatiquement par SPIP (vignettes des documents, titres présentés sous forme graphique, fonctions mathématiques au format TeX...) occupent dans le répertoire @dir@ un total de @taille@.', |
|
| 759 | + 'taille_cache_moins_de' => 'La taille du cache est de moins de @octets@.', |
|
| 760 | + 'taille_cache_octets' => 'La taille du cache est actuellement de @octets@ environ.', |
|
| 761 | + 'taille_cache_vide' => 'Le cache est vide.', |
|
| 762 | + 'taille_repertoire_cache' => 'Taille du répertoire cache', |
|
| 763 | + 'text_article_propose_publication' => 'Article proposé pour la publication.', |
|
| 764 | + 'texte_acces_ldap_anonyme_1' => 'Certains serveurs LDAP n’acceptent aucun accès anonyme. Dans ce cas il faut spécifier un identifiant d’accès initial afin de pouvoir ensuite rechercher des informations dans l’annuaire. Dans la plupart des cas néanmoins, les champs suivants pourront être laissés vides.', |
|
| 765 | + 'texte_admin_effacer_01' => 'Cette commande efface <i>tout</i> le contenu de la base de données, |
|
| 766 | 766 | y compris <i>tous</i> les accès rédacteurs et administrateurs. Après l’avoir exécutée, vous devrez lancer la |
| 767 | 767 | réinstallation de SPIP pour recréer une nouvelle base ainsi qu’un premier accès administrateur.', |
| 768 | - 'texte_adresse_annuaire_1' => '(Si votre annuaire est installé sur la même machine que ce site Web, il s’agit probablement de « localhost ».)', |
|
| 769 | - 'texte_ajout_auteur' => 'L’auteur suivant a été ajouté à l’article :', |
|
| 770 | - 'texte_annuaire_ldap_1' => 'Si vous avez accès à un annuaire (LDAP), vous pouvez l’utiliser pour importer automatiquement des utilisateurs sous SPIP.', |
|
| 771 | - 'texte_article_statut' => 'Cet article est :', |
|
| 772 | - 'texte_article_virtuel' => 'Article virtuel', |
|
| 773 | - 'texte_article_virtuel_reference' => '<b>Article virtuel :</b> article référencé dans votre site SPIP, mais redirigé vers une autre URL. Pour supprimer la redirection, effacez l’URL ci-dessus.', |
|
| 774 | - 'texte_aucun_resultat_auteur' => 'Aucun résultat pour "@cherche_auteur@"', |
|
| 775 | - 'texte_auteur_messagerie' => 'Ce site peut vous indiquer en permanence la liste des rédacteurs connectés, ce qui vous permet d’échanger des messages en direct. Vous pouvez décider de ne pas apparaître dans cette liste (vous êtes « invisible » pour les autres utilisateurs).', |
|
| 776 | - 'texte_auteurs' => 'LES AUTEURS', |
|
| 777 | - 'texte_choix_base_1' => 'Choisissez votre base :', |
|
| 778 | - 'texte_choix_base_2' => 'Le serveur SQL contient plusieurs bases de données.', |
|
| 779 | - 'texte_choix_base_3' => '<b>Sélectionnez</b> ci-après celle qui vous a été attribuée par votre hébergeur :', |
|
| 780 | - 'texte_choix_table_prefix' => 'Préfixe des tables :', |
|
| 781 | - 'texte_compte_element' => '@count@ élément', |
|
| 782 | - 'texte_compte_elements' => '@count@ éléments', |
|
| 783 | - 'texte_conflit_edition_correction' => 'Veuillez contrôler ci-dessous les différences entre les deux versions du texte ; vous pouvez aussi copier vos modifications, puis recommencer.', |
|
| 784 | - 'texte_connexion_mysql' => 'Consultez les informations fournies par votre hébergeur : vous devez y trouver le serveur de base de données qu’il propose et vos identifiants personnels pour vous y connecter.', |
|
| 785 | - 'texte_contenu_article' => '(Contenu de l’article en quelques mots.)', |
|
| 786 | - 'texte_contenu_articles' => 'Selon la maquette adoptée pour votre site, vous pouvez décider |
|
| 768 | + 'texte_adresse_annuaire_1' => '(Si votre annuaire est installé sur la même machine que ce site Web, il s’agit probablement de « localhost ».)', |
|
| 769 | + 'texte_ajout_auteur' => 'L’auteur suivant a été ajouté à l’article :', |
|
| 770 | + 'texte_annuaire_ldap_1' => 'Si vous avez accès à un annuaire (LDAP), vous pouvez l’utiliser pour importer automatiquement des utilisateurs sous SPIP.', |
|
| 771 | + 'texte_article_statut' => 'Cet article est :', |
|
| 772 | + 'texte_article_virtuel' => 'Article virtuel', |
|
| 773 | + 'texte_article_virtuel_reference' => '<b>Article virtuel :</b> article référencé dans votre site SPIP, mais redirigé vers une autre URL. Pour supprimer la redirection, effacez l’URL ci-dessus.', |
|
| 774 | + 'texte_aucun_resultat_auteur' => 'Aucun résultat pour "@cherche_auteur@"', |
|
| 775 | + 'texte_auteur_messagerie' => 'Ce site peut vous indiquer en permanence la liste des rédacteurs connectés, ce qui vous permet d’échanger des messages en direct. Vous pouvez décider de ne pas apparaître dans cette liste (vous êtes « invisible » pour les autres utilisateurs).', |
|
| 776 | + 'texte_auteurs' => 'LES AUTEURS', |
|
| 777 | + 'texte_choix_base_1' => 'Choisissez votre base :', |
|
| 778 | + 'texte_choix_base_2' => 'Le serveur SQL contient plusieurs bases de données.', |
|
| 779 | + 'texte_choix_base_3' => '<b>Sélectionnez</b> ci-après celle qui vous a été attribuée par votre hébergeur :', |
|
| 780 | + 'texte_choix_table_prefix' => 'Préfixe des tables :', |
|
| 781 | + 'texte_compte_element' => '@count@ élément', |
|
| 782 | + 'texte_compte_elements' => '@count@ éléments', |
|
| 783 | + 'texte_conflit_edition_correction' => 'Veuillez contrôler ci-dessous les différences entre les deux versions du texte ; vous pouvez aussi copier vos modifications, puis recommencer.', |
|
| 784 | + 'texte_connexion_mysql' => 'Consultez les informations fournies par votre hébergeur : vous devez y trouver le serveur de base de données qu’il propose et vos identifiants personnels pour vous y connecter.', |
|
| 785 | + 'texte_contenu_article' => '(Contenu de l’article en quelques mots.)', |
|
| 786 | + 'texte_contenu_articles' => 'Selon la maquette adoptée pour votre site, vous pouvez décider |
|
| 787 | 787 | que certains éléments des articles ne sont pas utilisés. |
| 788 | 788 | Utilisez la liste ci-dessous pour indiquer quels éléments sont disponibles.', |
| 789 | - 'texte_crash_base' => 'Si votre base de données a |
|
| 789 | + 'texte_crash_base' => 'Si votre base de données a |
|
| 790 | 790 | crashé, vous pouvez tenter une réparation |
| 791 | 791 | automatique.', |
| 792 | - 'texte_creer_rubrique' => 'Avant de pouvoir écrire des articles,<br /> vous devez créer une rubrique.', |
|
| 793 | - 'texte_date_creation_article' => 'DATE DE CRÉATION DE L’ARTICLE :', # on ajoute le ":" |
|
| 794 | - 'texte_date_creation_objet' => 'Date de création :', # on ajoute le ":" |
|
| 795 | - 'texte_date_publication_anterieure' => 'Date de rédaction antérieure :', |
|
| 796 | - 'texte_date_publication_anterieure_nonaffichee' => 'Ne pas afficher de date de rédaction antérieure.', |
|
| 797 | - 'texte_date_publication_article' => 'DATE DE PUBLICATION EN LIGNE :', |
|
| 798 | - 'texte_date_publication_objet' => 'Date de publication en ligne :', |
|
| 799 | - 'texte_definir_comme_traduction_rubrique' => 'Cette rubrique est une traduction de la rubrique numéro :', |
|
| 800 | - 'texte_descriptif_rapide' => 'Descriptif rapide', |
|
| 801 | - 'texte_effacer_base' => 'Effacer la base de données SPIP', |
|
| 802 | - 'texte_effacer_statistiques' => 'Effacer les statistiques', |
|
| 803 | - 'texte_en_cours_validation' => 'Les contenus ci-dessous sont en attente de validation.', |
|
| 804 | - 'texte_enrichir_mise_a_jour' => 'Vous pouvez enrichir la mise en page de votre texte en utilisant des « raccourcis typographiques ».', |
|
| 805 | - 'texte_fichier_authent' => '<b>SPIP doit-il créer les fichiers spéciaux |
|
| 792 | + 'texte_creer_rubrique' => 'Avant de pouvoir écrire des articles,<br /> vous devez créer une rubrique.', |
|
| 793 | + 'texte_date_creation_article' => 'DATE DE CRÉATION DE L’ARTICLE :', # on ajoute le ":" |
|
| 794 | + 'texte_date_creation_objet' => 'Date de création :', # on ajoute le ":" |
|
| 795 | + 'texte_date_publication_anterieure' => 'Date de rédaction antérieure :', |
|
| 796 | + 'texte_date_publication_anterieure_nonaffichee' => 'Ne pas afficher de date de rédaction antérieure.', |
|
| 797 | + 'texte_date_publication_article' => 'DATE DE PUBLICATION EN LIGNE :', |
|
| 798 | + 'texte_date_publication_objet' => 'Date de publication en ligne :', |
|
| 799 | + 'texte_definir_comme_traduction_rubrique' => 'Cette rubrique est une traduction de la rubrique numéro :', |
|
| 800 | + 'texte_descriptif_rapide' => 'Descriptif rapide', |
|
| 801 | + 'texte_effacer_base' => 'Effacer la base de données SPIP', |
|
| 802 | + 'texte_effacer_statistiques' => 'Effacer les statistiques', |
|
| 803 | + 'texte_en_cours_validation' => 'Les contenus ci-dessous sont en attente de validation.', |
|
| 804 | + 'texte_enrichir_mise_a_jour' => 'Vous pouvez enrichir la mise en page de votre texte en utilisant des « raccourcis typographiques ».', |
|
| 805 | + 'texte_fichier_authent' => '<b>SPIP doit-il créer les fichiers spéciaux |
|
| 806 | 806 | <tt>.htpasswd</tt> et <tt>.htpasswd-admin</tt> dans le répertoire @dossier@ ?</b> |
| 807 | 807 | <p>Ces fichiers peuvent vous servir à restreindre l’accès aux auteurs et administrateurs en d’autres endroits de votre site (programme externe de statistiques, par exemple).</p> |
| 808 | 808 | <p>Si vous n’en avez pas l’utilité, vous pouvez laisser cette option à sa valeur par défaut (pas de création des fichiers).</p>', |
| 809 | - 'texte_informations_personnelles_1' => 'Le système va maintenant vous créer un accès personnalisé au site.', |
|
| 810 | - 'texte_informations_personnelles_2' => '(Note : il s’agit d’une réinstallation, si votre accès marche toujours vous pouvez', |
|
| 811 | - 'texte_introductif_article' => '(Texte introductif de l’article.)', |
|
| 812 | - 'texte_jeu_caractere' => 'Il est conseillé d’employer, sur votre site, l’alphabet universel (<tt>utf-8</tt>) : celui-ci permet l’affichage de textes dans toutes les langues, et ne pose plus de problèmes de compatibilité avec les navigateurs modernes.', |
|
| 813 | - 'texte_jeu_caractere_3' => 'Votre site est actuellement installé dans le jeu de caractères :', |
|
| 814 | - 'texte_jeu_caractere_4' => 'Si cela ne correspond pas à la réalité de vos données (suite, par exemple, à une restauration de base de données), ou si <em>vous démarrez ce site</em> et souhaitez partir sur un autre jeu de caractères, veuillez indiquer ce dernier ici :', |
|
| 815 | - 'texte_login_ldap_1' => '(Laisser vide pour un accès anonyme, ou entrer le chemin complet, par exemple « <tt>uid=dupont, ou=users, dc=mon-domaine, dc=com</tt> ».)', |
|
| 816 | - 'texte_login_precaution' => 'Attention ! Ceci est le login sous lequel vous êtes connecté actuellement. |
|
| 809 | + 'texte_informations_personnelles_1' => 'Le système va maintenant vous créer un accès personnalisé au site.', |
|
| 810 | + 'texte_informations_personnelles_2' => '(Note : il s’agit d’une réinstallation, si votre accès marche toujours vous pouvez', |
|
| 811 | + 'texte_introductif_article' => '(Texte introductif de l’article.)', |
|
| 812 | + 'texte_jeu_caractere' => 'Il est conseillé d’employer, sur votre site, l’alphabet universel (<tt>utf-8</tt>) : celui-ci permet l’affichage de textes dans toutes les langues, et ne pose plus de problèmes de compatibilité avec les navigateurs modernes.', |
|
| 813 | + 'texte_jeu_caractere_3' => 'Votre site est actuellement installé dans le jeu de caractères :', |
|
| 814 | + 'texte_jeu_caractere_4' => 'Si cela ne correspond pas à la réalité de vos données (suite, par exemple, à une restauration de base de données), ou si <em>vous démarrez ce site</em> et souhaitez partir sur un autre jeu de caractères, veuillez indiquer ce dernier ici :', |
|
| 815 | + 'texte_login_ldap_1' => '(Laisser vide pour un accès anonyme, ou entrer le chemin complet, par exemple « <tt>uid=dupont, ou=users, dc=mon-domaine, dc=com</tt> ».)', |
|
| 816 | + 'texte_login_precaution' => 'Attention ! Ceci est le login sous lequel vous êtes connecté actuellement. |
|
| 817 | 817 | Utilisez ce formulaire avec précaution...', |
| 818 | - 'texte_messagerie_agenda' => 'Une messagerie permet aux rédacteurs du site de communiquer entre eux directement dans l’espace privé du site. Elle est associée à un agenda.', |
|
| 819 | - 'texte_mise_a_niveau_base_1' => 'Vous venez de mettre à jour les fichiers SPIP. |
|
| 818 | + 'texte_messagerie_agenda' => 'Une messagerie permet aux rédacteurs du site de communiquer entre eux directement dans l’espace privé du site. Elle est associée à un agenda.', |
|
| 819 | + 'texte_mise_a_niveau_base_1' => 'Vous venez de mettre à jour les fichiers SPIP. |
|
| 820 | 820 | Il faut maintenant mettre à niveau la base de données |
| 821 | 821 | du site.', |
| 822 | - 'texte_modifier_article' => 'Modifier l’article :', |
|
| 823 | - 'texte_multilinguisme' => 'Si vous souhaitez gérer des objets en plusieurs langues, avec une navigation complexe, vous pouvez ajouter un menu de sélection de langue sur ces objets, en fonction de l’organisation de votre site.', |
|
| 824 | - 'texte_multilinguisme_trad' => 'Vous pouvez également activer un système de gestion de liens entre les différentes traductions sur certains objets.', |
|
| 825 | - 'texte_non_compresse' => '<i>non compressé</i> (votre serveur ne supportant pas cette fonctionnalité)', |
|
| 826 | - 'texte_nouvelle_version_spip_1' => 'Vous avez installé une nouvelle version de SPIP.', |
|
| 827 | - 'texte_nouvelle_version_spip_2' => 'Cette nouvelle version nécessite une mise à jour plus complète qu’à l’accoutumée. Si vous êtes webmestre du site, veuillez effacer le fichier @connect@ et reprendre l’installation afin de mettre à jour vos paramètres de connexion à la base de données.<p> (NB. : si vous avez oublié vos paramètres de connexion, jetez un œil au fichier @connect@ avant de le supprimer...)</p>', |
|
| 828 | - 'texte_operation_echec' => 'Retournez à la page précédente, sélectionnez une autre base ou créez-en une nouvelle. Vérifiez les informations fournies par votre hébergeur.', |
|
| 829 | - 'texte_plus_trois_car' => 'plus de 3 caractères', |
|
| 830 | - 'texte_plusieurs_articles' => 'Plusieurs auteurs trouvés pour "@cherche_auteur@" :', |
|
| 831 | - 'texte_port_annuaire' => '(La valeur indiquée par défaut convient généralement.)', |
|
| 832 | - 'texte_presente_plugin' => 'Cette page liste les plugins disponibles sur le site. Vous pouvez activer les plugins nécessaires en cochant la case correspondante.', |
|
| 833 | - 'texte_proposer_publication' => 'Lorsque votre article est terminé,<br /> vous pouvez proposer sa publication.', |
|
| 834 | - 'texte_proxy' => 'Dans certains cas (intranet, réseaux protégés), les sites distants (documentation de SPIP, sites syndiqués, etc.) ne sont accessibles qu’à travers un <i>proxy HTTP</i>. Le cas échéant, indiquez ci-dessous son adresse, sous la forme @proxy_en_cours@. En général, vous laisserez cette case vide.', |
|
| 835 | - 'texte_publication_articles_post_dates' => 'Quel comportement SPIP doit-il adopter face aux articles dont la |
|
| 822 | + 'texte_modifier_article' => 'Modifier l’article :', |
|
| 823 | + 'texte_multilinguisme' => 'Si vous souhaitez gérer des objets en plusieurs langues, avec une navigation complexe, vous pouvez ajouter un menu de sélection de langue sur ces objets, en fonction de l’organisation de votre site.', |
|
| 824 | + 'texte_multilinguisme_trad' => 'Vous pouvez également activer un système de gestion de liens entre les différentes traductions sur certains objets.', |
|
| 825 | + 'texte_non_compresse' => '<i>non compressé</i> (votre serveur ne supportant pas cette fonctionnalité)', |
|
| 826 | + 'texte_nouvelle_version_spip_1' => 'Vous avez installé une nouvelle version de SPIP.', |
|
| 827 | + 'texte_nouvelle_version_spip_2' => 'Cette nouvelle version nécessite une mise à jour plus complète qu’à l’accoutumée. Si vous êtes webmestre du site, veuillez effacer le fichier @connect@ et reprendre l’installation afin de mettre à jour vos paramètres de connexion à la base de données.<p> (NB. : si vous avez oublié vos paramètres de connexion, jetez un œil au fichier @connect@ avant de le supprimer...)</p>', |
|
| 828 | + 'texte_operation_echec' => 'Retournez à la page précédente, sélectionnez une autre base ou créez-en une nouvelle. Vérifiez les informations fournies par votre hébergeur.', |
|
| 829 | + 'texte_plus_trois_car' => 'plus de 3 caractères', |
|
| 830 | + 'texte_plusieurs_articles' => 'Plusieurs auteurs trouvés pour "@cherche_auteur@" :', |
|
| 831 | + 'texte_port_annuaire' => '(La valeur indiquée par défaut convient généralement.)', |
|
| 832 | + 'texte_presente_plugin' => 'Cette page liste les plugins disponibles sur le site. Vous pouvez activer les plugins nécessaires en cochant la case correspondante.', |
|
| 833 | + 'texte_proposer_publication' => 'Lorsque votre article est terminé,<br /> vous pouvez proposer sa publication.', |
|
| 834 | + 'texte_proxy' => 'Dans certains cas (intranet, réseaux protégés), les sites distants (documentation de SPIP, sites syndiqués, etc.) ne sont accessibles qu’à travers un <i>proxy HTTP</i>. Le cas échéant, indiquez ci-dessous son adresse, sous la forme @proxy_en_cours@. En général, vous laisserez cette case vide.', |
|
| 835 | + 'texte_publication_articles_post_dates' => 'Quel comportement SPIP doit-il adopter face aux articles dont la |
|
| 836 | 836 | date de publication a été fixée à une |
| 837 | 837 | échéance future ?', |
| 838 | - 'texte_rappel_selection_champs' => '[N’oubliez pas de sélectionner correctement ce champ.]', |
|
| 839 | - 'texte_recalcul_page' => 'Si vous voulez |
|
| 838 | + 'texte_rappel_selection_champs' => '[N’oubliez pas de sélectionner correctement ce champ.]', |
|
| 839 | + 'texte_recalcul_page' => 'Si vous voulez |
|
| 840 | 840 | recalculer une seule page, passez plutôt par l’espace public et utilisez-y le bouton « recalculer ».', |
| 841 | - 'texte_recuperer_base' => 'Réparer la base de données', |
|
| 842 | - 'texte_reference_mais_redirige' => 'article référencé dans votre site SPIP, mais redirigé vers une autre URL.', |
|
| 843 | - 'texte_requetes_echouent' => '<b>Lorsque certaines requêtes SQL échouent |
|
| 841 | + 'texte_recuperer_base' => 'Réparer la base de données', |
|
| 842 | + 'texte_reference_mais_redirige' => 'article référencé dans votre site SPIP, mais redirigé vers une autre URL.', |
|
| 843 | + 'texte_requetes_echouent' => '<b>Lorsque certaines requêtes SQL échouent |
|
| 844 | 844 | systématiquement et sans raison apparente, il est possible |
| 845 | 845 | que ce soit à cause de la base de données |
| 846 | 846 | elle-même.</b><p> |
@@ -851,90 +851,90 @@ discard block |
||
| 851 | 851 | peut-être des indices de ce qui ne va pas...</p><p> |
| 852 | 852 | Si le problème persiste, prenez contact avec votre |
| 853 | 853 | hébergeur.</p>', |
| 854 | - 'texte_selection_langue_principale' => 'Vous pouvez sélectionner ci-dessous la « langue principale » du site. Ce choix ne vous oblige - heureusement ! - pas à écrire vos articles dans la langue sélectionnée, mais permet de déterminer : |
|
| 854 | + 'texte_selection_langue_principale' => 'Vous pouvez sélectionner ci-dessous la « langue principale » du site. Ce choix ne vous oblige - heureusement ! - pas à écrire vos articles dans la langue sélectionnée, mais permet de déterminer : |
|
| 855 | 855 | <ul><li> le format par défaut des dates sur le site public ;</li> |
| 856 | 856 | <li> la nature du moteur typographique que SPIP doit utiliser pour le rendu des textes ;</li> |
| 857 | 857 | <li> la langue utilisée dans les formulaires du site public ;</li> |
| 858 | 858 | <li> la langue présentée par défaut dans l’espace privé.</li></ul>', |
| 859 | - 'texte_sous_titre' => 'Sous-titre', |
|
| 860 | - 'texte_statistiques_visites' => '(barres foncées : dimanche / courbe foncée : évolution de la moyenne)', |
|
| 861 | - 'texte_statut_attente_validation' => 'en attente de validation', |
|
| 862 | - 'texte_statut_publies' => 'publiés en ligne', |
|
| 863 | - 'texte_statut_refuses' => 'refusés', |
|
| 864 | - 'texte_suppression_fichiers' => 'Utilisez cette commande afin de supprimer tous les fichiers présents |
|
| 859 | + 'texte_sous_titre' => 'Sous-titre', |
|
| 860 | + 'texte_statistiques_visites' => '(barres foncées : dimanche / courbe foncée : évolution de la moyenne)', |
|
| 861 | + 'texte_statut_attente_validation' => 'en attente de validation', |
|
| 862 | + 'texte_statut_publies' => 'publiés en ligne', |
|
| 863 | + 'texte_statut_refuses' => 'refusés', |
|
| 864 | + 'texte_suppression_fichiers' => 'Utilisez cette commande afin de supprimer tous les fichiers présents |
|
| 865 | 865 | dans le cache SPIP. Cela permet par exemple de forcer un recalcul de toutes les pages si vous |
| 866 | 866 | avez fait des modifications importantes de graphisme ou de structure du site.', |
| 867 | - 'texte_sur_titre' => 'Sur-titre', |
|
| 868 | - 'texte_table_ok' => ' : cette table est OK.', |
|
| 869 | - 'texte_tentative_recuperation' => 'Tentative de réparation', |
|
| 870 | - 'texte_tenter_reparation' => 'Tenter une réparation de la base de données', |
|
| 871 | - 'texte_test_proxy' => 'Pour faire un essai de ce proxy, indiquez ici l’adresse d’un site Web |
|
| 867 | + 'texte_sur_titre' => 'Sur-titre', |
|
| 868 | + 'texte_table_ok' => ' : cette table est OK.', |
|
| 869 | + 'texte_tentative_recuperation' => 'Tentative de réparation', |
|
| 870 | + 'texte_tenter_reparation' => 'Tenter une réparation de la base de données', |
|
| 871 | + 'texte_test_proxy' => 'Pour faire un essai de ce proxy, indiquez ici l’adresse d’un site Web |
|
| 872 | 872 | que vous souhaitez tester.', |
| 873 | - 'texte_titre_02' => 'Titre :', |
|
| 874 | - 'texte_titre_obligatoire' => '<b>Titre</b> [Obligatoire]', |
|
| 875 | - 'texte_travail_article' => '@nom_auteur_modif@ a travaillé sur cet article il y a @date_diff@ minutes', |
|
| 876 | - 'texte_travail_collaboratif' => 'S’il est fréquent que plusieurs rédacteurs |
|
| 873 | + 'texte_titre_02' => 'Titre :', |
|
| 874 | + 'texte_titre_obligatoire' => '<b>Titre</b> [Obligatoire]', |
|
| 875 | + 'texte_travail_article' => '@nom_auteur_modif@ a travaillé sur cet article il y a @date_diff@ minutes', |
|
| 876 | + 'texte_travail_collaboratif' => 'S’il est fréquent que plusieurs rédacteurs |
|
| 877 | 877 | travaillent sur le même article, le système |
| 878 | 878 | peut afficher les articles récemment « ouverts » |
| 879 | 879 | afin d’éviter les modifications simultanées. |
| 880 | 880 | Cette option est désactivée par défaut |
| 881 | 881 | afin d’éviter d’afficher des messages d’avertissement |
| 882 | 882 | intempestifs.', |
| 883 | - 'texte_vide' => 'vide', |
|
| 884 | - 'texte_vider_cache' => 'Vider le cache', |
|
| 885 | - 'titre_admin_tech' => 'Maintenance technique', |
|
| 886 | - 'titre_admin_vider' => 'Maintenance technique', |
|
| 887 | - 'titre_ajouter_un_auteur' => 'Ajouter un auteur', |
|
| 888 | - 'titre_ajouter_un_mot' => 'Ajouter un mot-clé', |
|
| 889 | - 'titre_cadre_afficher_article' => 'Afficher les articles', |
|
| 890 | - 'titre_cadre_afficher_traductions' => 'Afficher l’état des traductions pour les langues suivantes :', |
|
| 891 | - 'titre_cadre_ajouter_auteur' => 'AJOUTER UN AUTEUR :', |
|
| 892 | - 'titre_cadre_interieur_rubrique' => 'À l’intérieur de la rubrique', |
|
| 893 | - 'titre_cadre_numero_auteur' => 'AUTEUR NUMÉRO', |
|
| 894 | - 'titre_cadre_numero_objet' => '@objet@ NUMÉRO :', |
|
| 895 | - 'titre_cadre_signature_obligatoire' => '<b>Signature</b> [Obligatoire]<br />', |
|
| 896 | - 'titre_config_contenu_notifications' => 'Notifications', |
|
| 897 | - 'titre_config_contenu_prive' => 'Dans l’espace privé', |
|
| 898 | - 'titre_config_contenu_public' => 'Sur le site public', |
|
| 899 | - 'titre_config_fonctions' => 'Configuration du site', |
|
| 900 | - 'titre_config_langage' => 'Configurer la langue', |
|
| 901 | - 'titre_configuration' => 'Configuration du site', |
|
| 902 | - 'titre_configurer_preferences' => 'Configurer vos préférences', |
|
| 903 | - 'titre_configurer_preferences_menus' => 'Configurer vos préférences de menus', |
|
| 904 | - 'titre_conflit_edition' => 'Conflit lors de l’édition', |
|
| 905 | - 'titre_connexion_ldap' => 'Options : <b>Votre connexion LDAP</b>', |
|
| 906 | - 'titre_groupe_mots' => 'GROUPE DE MOTS :', |
|
| 907 | - 'titre_identite_site' => 'Identité du site', |
|
| 908 | - 'titre_langue_article' => 'Langue de l’article', |
|
| 909 | - 'titre_langue_rubrique' => 'Langue de la rubrique', |
|
| 910 | - 'titre_langue_trad_article' => 'LANGUE ET TRADUCTIONS DE L’ARTICLE', |
|
| 911 | - 'titre_les_articles' => 'LES ARTICLES', |
|
| 912 | - 'titre_messagerie_agenda' => 'Messagerie et agenda', |
|
| 913 | - 'titre_naviguer_dans_le_site' => 'Naviguer dans le site...', |
|
| 914 | - 'titre_nouvelle_rubrique' => 'Nouvelle rubrique', |
|
| 915 | - 'titre_numero_rubrique' => 'RUBRIQUE NUMÉRO :', |
|
| 916 | - 'titre_page_articles_edit' => 'Modifier : @titre@', |
|
| 917 | - 'titre_page_articles_page' => 'Les articles', |
|
| 918 | - 'titre_page_articles_tous' => 'Tout le site', |
|
| 919 | - 'titre_page_calendrier' => 'Calendrier @nom_mois@ @annee@', |
|
| 920 | - 'titre_page_config_contenu' => 'Configuration du site', |
|
| 921 | - 'titre_page_delete_all' => 'suppression totale et irréversible', |
|
| 922 | - 'titre_page_recherche' => 'Résultats de la recherche @recherche@', |
|
| 923 | - 'titre_page_statistiques_referers' => 'Statistiques (liens entrants)', |
|
| 924 | - 'titre_page_upgrade' => 'Mise à niveau de SPIP', |
|
| 925 | - 'titre_preference_menus_favoris' => 'Menus favoris', |
|
| 926 | - 'titre_publication_articles_post_dates' => 'Publication des articles post-datés', |
|
| 927 | - 'titre_reparation' => 'Réparation', |
|
| 928 | - 'titre_suivi_petition' => 'Suivi des pétitions', |
|
| 929 | - 'tls_ldap' => 'Transport Layer Security :', |
|
| 930 | - 'trad_article_traduction' => 'Toutes les versions de cet article :', |
|
| 931 | - 'trad_delier' => 'Ne plus lier à ces traductions', |
|
| 932 | - 'trad_lier' => 'Cet article est une traduction de l’article numéro :', |
|
| 933 | - 'trad_new' => 'Écrire une nouvelle traduction', |
|
| 883 | + 'texte_vide' => 'vide', |
|
| 884 | + 'texte_vider_cache' => 'Vider le cache', |
|
| 885 | + 'titre_admin_tech' => 'Maintenance technique', |
|
| 886 | + 'titre_admin_vider' => 'Maintenance technique', |
|
| 887 | + 'titre_ajouter_un_auteur' => 'Ajouter un auteur', |
|
| 888 | + 'titre_ajouter_un_mot' => 'Ajouter un mot-clé', |
|
| 889 | + 'titre_cadre_afficher_article' => 'Afficher les articles', |
|
| 890 | + 'titre_cadre_afficher_traductions' => 'Afficher l’état des traductions pour les langues suivantes :', |
|
| 891 | + 'titre_cadre_ajouter_auteur' => 'AJOUTER UN AUTEUR :', |
|
| 892 | + 'titre_cadre_interieur_rubrique' => 'À l’intérieur de la rubrique', |
|
| 893 | + 'titre_cadre_numero_auteur' => 'AUTEUR NUMÉRO', |
|
| 894 | + 'titre_cadre_numero_objet' => '@objet@ NUMÉRO :', |
|
| 895 | + 'titre_cadre_signature_obligatoire' => '<b>Signature</b> [Obligatoire]<br />', |
|
| 896 | + 'titre_config_contenu_notifications' => 'Notifications', |
|
| 897 | + 'titre_config_contenu_prive' => 'Dans l’espace privé', |
|
| 898 | + 'titre_config_contenu_public' => 'Sur le site public', |
|
| 899 | + 'titre_config_fonctions' => 'Configuration du site', |
|
| 900 | + 'titre_config_langage' => 'Configurer la langue', |
|
| 901 | + 'titre_configuration' => 'Configuration du site', |
|
| 902 | + 'titre_configurer_preferences' => 'Configurer vos préférences', |
|
| 903 | + 'titre_configurer_preferences_menus' => 'Configurer vos préférences de menus', |
|
| 904 | + 'titre_conflit_edition' => 'Conflit lors de l’édition', |
|
| 905 | + 'titre_connexion_ldap' => 'Options : <b>Votre connexion LDAP</b>', |
|
| 906 | + 'titre_groupe_mots' => 'GROUPE DE MOTS :', |
|
| 907 | + 'titre_identite_site' => 'Identité du site', |
|
| 908 | + 'titre_langue_article' => 'Langue de l’article', |
|
| 909 | + 'titre_langue_rubrique' => 'Langue de la rubrique', |
|
| 910 | + 'titre_langue_trad_article' => 'LANGUE ET TRADUCTIONS DE L’ARTICLE', |
|
| 911 | + 'titre_les_articles' => 'LES ARTICLES', |
|
| 912 | + 'titre_messagerie_agenda' => 'Messagerie et agenda', |
|
| 913 | + 'titre_naviguer_dans_le_site' => 'Naviguer dans le site...', |
|
| 914 | + 'titre_nouvelle_rubrique' => 'Nouvelle rubrique', |
|
| 915 | + 'titre_numero_rubrique' => 'RUBRIQUE NUMÉRO :', |
|
| 916 | + 'titre_page_articles_edit' => 'Modifier : @titre@', |
|
| 917 | + 'titre_page_articles_page' => 'Les articles', |
|
| 918 | + 'titre_page_articles_tous' => 'Tout le site', |
|
| 919 | + 'titre_page_calendrier' => 'Calendrier @nom_mois@ @annee@', |
|
| 920 | + 'titre_page_config_contenu' => 'Configuration du site', |
|
| 921 | + 'titre_page_delete_all' => 'suppression totale et irréversible', |
|
| 922 | + 'titre_page_recherche' => 'Résultats de la recherche @recherche@', |
|
| 923 | + 'titre_page_statistiques_referers' => 'Statistiques (liens entrants)', |
|
| 924 | + 'titre_page_upgrade' => 'Mise à niveau de SPIP', |
|
| 925 | + 'titre_preference_menus_favoris' => 'Menus favoris', |
|
| 926 | + 'titre_publication_articles_post_dates' => 'Publication des articles post-datés', |
|
| 927 | + 'titre_reparation' => 'Réparation', |
|
| 928 | + 'titre_suivi_petition' => 'Suivi des pétitions', |
|
| 929 | + 'tls_ldap' => 'Transport Layer Security :', |
|
| 930 | + 'trad_article_traduction' => 'Toutes les versions de cet article :', |
|
| 931 | + 'trad_delier' => 'Ne plus lier à ces traductions', |
|
| 932 | + 'trad_lier' => 'Cet article est une traduction de l’article numéro :', |
|
| 933 | + 'trad_new' => 'Écrire une nouvelle traduction', |
|
| 934 | 934 | |
| 935 | - // U |
|
| 936 | - 'utf8_convert_erreur_orig' => 'Erreur : le jeu de caractères @charset@ n’est pas supporté.', |
|
| 935 | + // U |
|
| 936 | + 'utf8_convert_erreur_orig' => 'Erreur : le jeu de caractères @charset@ n’est pas supporté.', |
|
| 937 | 937 | |
| 938 | - // V |
|
| 939 | - 'version' => 'Version :' |
|
| 938 | + // V |
|
| 939 | + 'version' => 'Version :' |
|
| 940 | 940 | ); |
@@ -813,9 +813,9 @@ |
||
| 813 | 813 | if (!defined('_TRAITEMENT_TYPO_SANS_NUMERO')) { |
| 814 | 814 | define('_TRAITEMENT_TYPO_SANS_NUMERO', 'supprimer_numero(typo(%s, "TYPO", $connect, $Pile[0]))'); |
| 815 | 815 | } |
| 816 | - $GLOBALS['table_des_traitements']['BIO'][] = 'safehtml(' . _TRAITEMENT_RACCOURCIS . ')'; |
|
| 816 | + $GLOBALS['table_des_traitements']['BIO'][] = 'safehtml('._TRAITEMENT_RACCOURCIS.')'; |
|
| 817 | 817 | $GLOBALS['table_des_traitements']['NOM_SITE']['auteurs'] = 'entites_html(%s)'; |
| 818 | - $GLOBALS['table_des_traitements']['NOM']['auteurs'] = 'safehtml(' . _TRAITEMENT_TYPO_SANS_NUMERO . ')'; |
|
| 818 | + $GLOBALS['table_des_traitements']['NOM']['auteurs'] = 'safehtml('._TRAITEMENT_TYPO_SANS_NUMERO.')'; |
|
| 819 | 819 | $GLOBALS['table_des_traitements']['CHAPO'][] = _TRAITEMENT_RACCOURCIS; |
| 820 | 820 | $GLOBALS['table_des_traitements']['DATE'][] = 'normaliser_date(%s)'; |
| 821 | 821 | $GLOBALS['table_des_traitements']['DATE_REDAC'][] = 'normaliser_date(%s)'; |
@@ -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 | |
@@ -48,90 +48,90 @@ discard block |
||
| 48 | 48 | */ |
| 49 | 49 | function declarer_interfaces() { |
| 50 | 50 | |
| 51 | - $GLOBALS['table_des_tables']['articles'] = 'articles'; |
|
| 52 | - $GLOBALS['table_des_tables']['auteurs'] = 'auteurs'; |
|
| 53 | - $GLOBALS['table_des_tables']['rubriques'] = 'rubriques'; |
|
| 54 | - $GLOBALS['table_des_tables']['hierarchie'] = 'rubriques'; |
|
| 55 | - |
|
| 56 | - // definition des statuts de publication |
|
| 57 | - $GLOBALS['table_statut'] = []; |
|
| 58 | - |
|
| 59 | - // |
|
| 60 | - // tableau des tables de jointures |
|
| 61 | - // Ex: gestion du critere {id_mot} dans la boucle(ARTICLES) |
|
| 62 | - $GLOBALS['tables_jointures'] = []; |
|
| 63 | - $GLOBALS['tables_jointures']['spip_jobs'][] = 'jobs_liens'; |
|
| 64 | - |
|
| 65 | - // $GLOBALS['exceptions_des_jointures']['titre_mot'] = array('spip_mots', 'titre'); // pour exemple |
|
| 66 | - $GLOBALS['exceptions_des_jointures']['profondeur'] = ['spip_rubriques', 'profondeur']; |
|
| 67 | - |
|
| 68 | - |
|
| 69 | - if (!defined('_TRAITEMENT_TYPO')) { |
|
| 70 | - define('_TRAITEMENT_TYPO', 'typo(%s, "TYPO", $connect, $Pile[0])'); |
|
| 71 | - } |
|
| 72 | - if (!defined('_TRAITEMENT_RACCOURCIS')) { |
|
| 73 | - define('_TRAITEMENT_RACCOURCIS', 'propre(%s, $connect, $Pile[0])'); |
|
| 74 | - } |
|
| 75 | - if (!defined('_TRAITEMENT_TYPO_SANS_NUMERO')) { |
|
| 76 | - define('_TRAITEMENT_TYPO_SANS_NUMERO', 'supprimer_numero(typo(%s, "TYPO", $connect, $Pile[0]))'); |
|
| 77 | - } |
|
| 78 | - $GLOBALS['table_des_traitements']['BIO'][] = 'safehtml(' . _TRAITEMENT_RACCOURCIS . ')'; |
|
| 79 | - $GLOBALS['table_des_traitements']['NOM_SITE']['auteurs'] = 'entites_html(%s)'; |
|
| 80 | - $GLOBALS['table_des_traitements']['NOM']['auteurs'] = 'safehtml(' . _TRAITEMENT_TYPO_SANS_NUMERO . ')'; |
|
| 81 | - $GLOBALS['table_des_traitements']['CHAPO'][] = _TRAITEMENT_RACCOURCIS; |
|
| 82 | - $GLOBALS['table_des_traitements']['DATE'][] = 'normaliser_date(%s)'; |
|
| 83 | - $GLOBALS['table_des_traitements']['DATE_REDAC'][] = 'normaliser_date(%s)'; |
|
| 84 | - $GLOBALS['table_des_traitements']['DATE_MODIF'][] = 'normaliser_date(%s)'; |
|
| 85 | - $GLOBALS['table_des_traitements']['DATE_NOUVEAUTES'][] = 'normaliser_date(%s)'; |
|
| 86 | - $GLOBALS['table_des_traitements']['DESCRIPTIF'][] = _TRAITEMENT_RACCOURCIS; |
|
| 87 | - $GLOBALS['table_des_traitements']['INTRODUCTION'][] = _TRAITEMENT_RACCOURCIS; |
|
| 88 | - $GLOBALS['table_des_traitements']['NOM_SITE_SPIP'][] = _TRAITEMENT_TYPO; |
|
| 89 | - $GLOBALS['table_des_traitements']['NOM'][] = _TRAITEMENT_TYPO_SANS_NUMERO; |
|
| 90 | - $GLOBALS['table_des_traitements']['AUTEUR'][] = _TRAITEMENT_TYPO; |
|
| 91 | - $GLOBALS['table_des_traitements']['PS'][] = _TRAITEMENT_RACCOURCIS; |
|
| 92 | - $GLOBALS['table_des_traitements']['SOURCE'][] = _TRAITEMENT_TYPO; |
|
| 93 | - $GLOBALS['table_des_traitements']['SOUSTITRE'][] = _TRAITEMENT_TYPO; |
|
| 94 | - $GLOBALS['table_des_traitements']['SURTITRE'][] = _TRAITEMENT_TYPO; |
|
| 95 | - $GLOBALS['table_des_traitements']['TAGS'][] = '%s'; |
|
| 96 | - $GLOBALS['table_des_traitements']['TEXTE'][] = _TRAITEMENT_RACCOURCIS; |
|
| 97 | - $GLOBALS['table_des_traitements']['TITRE'][] = _TRAITEMENT_TYPO_SANS_NUMERO; |
|
| 98 | - $GLOBALS['table_des_traitements']['TYPE'][] = _TRAITEMENT_TYPO; |
|
| 99 | - $GLOBALS['table_des_traitements']['DESCRIPTIF_SITE_SPIP'][] = _TRAITEMENT_RACCOURCIS; |
|
| 100 | - $GLOBALS['table_des_traitements']['SLOGAN_SITE_SPIP'][] = _TRAITEMENT_TYPO; |
|
| 101 | - $GLOBALS['table_des_traitements']['ENV'][] = 'entites_html(%s,true)'; |
|
| 102 | - |
|
| 103 | - // valeur par defaut pour les balises non listees ci-dessus |
|
| 104 | - $GLOBALS['table_des_traitements']['*'][] = false; // pas de traitement, mais permet au compilo de trouver la declaration suivante |
|
| 105 | - // toujours securiser les DATA |
|
| 106 | - $GLOBALS['table_des_traitements']['*']['DATA'] = 'safehtml(%s)'; |
|
| 107 | - // expliciter pour VALEUR qui est un champ calcule et ne sera pas protege par le catch-all * |
|
| 108 | - $GLOBALS['table_des_traitements']['VALEUR']['DATA'] = 'safehtml(%s)'; |
|
| 109 | - |
|
| 110 | - |
|
| 111 | - // gerer l'affectation en 2 temps car si le pipe n'est pas encore declare, on ecrase les globales |
|
| 112 | - $interfaces = pipeline( |
|
| 113 | - 'declarer_tables_interfaces', |
|
| 114 | - [ |
|
| 115 | - 'table_des_tables' => $GLOBALS['table_des_tables'], |
|
| 116 | - 'exceptions_des_tables' => $GLOBALS['exceptions_des_tables'], |
|
| 117 | - 'table_date' => $GLOBALS['table_date'], |
|
| 118 | - 'table_titre' => $GLOBALS['table_titre'], |
|
| 119 | - 'tables_jointures' => $GLOBALS['tables_jointures'], |
|
| 120 | - 'exceptions_des_jointures' => $GLOBALS['exceptions_des_jointures'], |
|
| 121 | - 'table_des_traitements' => $GLOBALS['table_des_traitements'], |
|
| 122 | - 'table_statut' => $GLOBALS['table_statut'], |
|
| 123 | - ] |
|
| 124 | - ); |
|
| 125 | - if ($interfaces) { |
|
| 126 | - $GLOBALS['table_des_tables'] = $interfaces['table_des_tables']; |
|
| 127 | - $GLOBALS['exceptions_des_tables'] = $interfaces['exceptions_des_tables']; |
|
| 128 | - $GLOBALS['table_date'] = $interfaces['table_date']; |
|
| 129 | - $GLOBALS['table_titre'] = $interfaces['table_titre']; |
|
| 130 | - $GLOBALS['tables_jointures'] = $interfaces['tables_jointures']; |
|
| 131 | - $GLOBALS['exceptions_des_jointures'] = $interfaces['exceptions_des_jointures']; |
|
| 132 | - $GLOBALS['table_des_traitements'] = $interfaces['table_des_traitements']; |
|
| 133 | - $GLOBALS['table_statut'] = $interfaces['table_statut']; |
|
| 134 | - } |
|
| 51 | + $GLOBALS['table_des_tables']['articles'] = 'articles'; |
|
| 52 | + $GLOBALS['table_des_tables']['auteurs'] = 'auteurs'; |
|
| 53 | + $GLOBALS['table_des_tables']['rubriques'] = 'rubriques'; |
|
| 54 | + $GLOBALS['table_des_tables']['hierarchie'] = 'rubriques'; |
|
| 55 | + |
|
| 56 | + // definition des statuts de publication |
|
| 57 | + $GLOBALS['table_statut'] = []; |
|
| 58 | + |
|
| 59 | + // |
|
| 60 | + // tableau des tables de jointures |
|
| 61 | + // Ex: gestion du critere {id_mot} dans la boucle(ARTICLES) |
|
| 62 | + $GLOBALS['tables_jointures'] = []; |
|
| 63 | + $GLOBALS['tables_jointures']['spip_jobs'][] = 'jobs_liens'; |
|
| 64 | + |
|
| 65 | + // $GLOBALS['exceptions_des_jointures']['titre_mot'] = array('spip_mots', 'titre'); // pour exemple |
|
| 66 | + $GLOBALS['exceptions_des_jointures']['profondeur'] = ['spip_rubriques', 'profondeur']; |
|
| 67 | + |
|
| 68 | + |
|
| 69 | + if (!defined('_TRAITEMENT_TYPO')) { |
|
| 70 | + define('_TRAITEMENT_TYPO', 'typo(%s, "TYPO", $connect, $Pile[0])'); |
|
| 71 | + } |
|
| 72 | + if (!defined('_TRAITEMENT_RACCOURCIS')) { |
|
| 73 | + define('_TRAITEMENT_RACCOURCIS', 'propre(%s, $connect, $Pile[0])'); |
|
| 74 | + } |
|
| 75 | + if (!defined('_TRAITEMENT_TYPO_SANS_NUMERO')) { |
|
| 76 | + define('_TRAITEMENT_TYPO_SANS_NUMERO', 'supprimer_numero(typo(%s, "TYPO", $connect, $Pile[0]))'); |
|
| 77 | + } |
|
| 78 | + $GLOBALS['table_des_traitements']['BIO'][] = 'safehtml(' . _TRAITEMENT_RACCOURCIS . ')'; |
|
| 79 | + $GLOBALS['table_des_traitements']['NOM_SITE']['auteurs'] = 'entites_html(%s)'; |
|
| 80 | + $GLOBALS['table_des_traitements']['NOM']['auteurs'] = 'safehtml(' . _TRAITEMENT_TYPO_SANS_NUMERO . ')'; |
|
| 81 | + $GLOBALS['table_des_traitements']['CHAPO'][] = _TRAITEMENT_RACCOURCIS; |
|
| 82 | + $GLOBALS['table_des_traitements']['DATE'][] = 'normaliser_date(%s)'; |
|
| 83 | + $GLOBALS['table_des_traitements']['DATE_REDAC'][] = 'normaliser_date(%s)'; |
|
| 84 | + $GLOBALS['table_des_traitements']['DATE_MODIF'][] = 'normaliser_date(%s)'; |
|
| 85 | + $GLOBALS['table_des_traitements']['DATE_NOUVEAUTES'][] = 'normaliser_date(%s)'; |
|
| 86 | + $GLOBALS['table_des_traitements']['DESCRIPTIF'][] = _TRAITEMENT_RACCOURCIS; |
|
| 87 | + $GLOBALS['table_des_traitements']['INTRODUCTION'][] = _TRAITEMENT_RACCOURCIS; |
|
| 88 | + $GLOBALS['table_des_traitements']['NOM_SITE_SPIP'][] = _TRAITEMENT_TYPO; |
|
| 89 | + $GLOBALS['table_des_traitements']['NOM'][] = _TRAITEMENT_TYPO_SANS_NUMERO; |
|
| 90 | + $GLOBALS['table_des_traitements']['AUTEUR'][] = _TRAITEMENT_TYPO; |
|
| 91 | + $GLOBALS['table_des_traitements']['PS'][] = _TRAITEMENT_RACCOURCIS; |
|
| 92 | + $GLOBALS['table_des_traitements']['SOURCE'][] = _TRAITEMENT_TYPO; |
|
| 93 | + $GLOBALS['table_des_traitements']['SOUSTITRE'][] = _TRAITEMENT_TYPO; |
|
| 94 | + $GLOBALS['table_des_traitements']['SURTITRE'][] = _TRAITEMENT_TYPO; |
|
| 95 | + $GLOBALS['table_des_traitements']['TAGS'][] = '%s'; |
|
| 96 | + $GLOBALS['table_des_traitements']['TEXTE'][] = _TRAITEMENT_RACCOURCIS; |
|
| 97 | + $GLOBALS['table_des_traitements']['TITRE'][] = _TRAITEMENT_TYPO_SANS_NUMERO; |
|
| 98 | + $GLOBALS['table_des_traitements']['TYPE'][] = _TRAITEMENT_TYPO; |
|
| 99 | + $GLOBALS['table_des_traitements']['DESCRIPTIF_SITE_SPIP'][] = _TRAITEMENT_RACCOURCIS; |
|
| 100 | + $GLOBALS['table_des_traitements']['SLOGAN_SITE_SPIP'][] = _TRAITEMENT_TYPO; |
|
| 101 | + $GLOBALS['table_des_traitements']['ENV'][] = 'entites_html(%s,true)'; |
|
| 102 | + |
|
| 103 | + // valeur par defaut pour les balises non listees ci-dessus |
|
| 104 | + $GLOBALS['table_des_traitements']['*'][] = false; // pas de traitement, mais permet au compilo de trouver la declaration suivante |
|
| 105 | + // toujours securiser les DATA |
|
| 106 | + $GLOBALS['table_des_traitements']['*']['DATA'] = 'safehtml(%s)'; |
|
| 107 | + // expliciter pour VALEUR qui est un champ calcule et ne sera pas protege par le catch-all * |
|
| 108 | + $GLOBALS['table_des_traitements']['VALEUR']['DATA'] = 'safehtml(%s)'; |
|
| 109 | + |
|
| 110 | + |
|
| 111 | + // gerer l'affectation en 2 temps car si le pipe n'est pas encore declare, on ecrase les globales |
|
| 112 | + $interfaces = pipeline( |
|
| 113 | + 'declarer_tables_interfaces', |
|
| 114 | + [ |
|
| 115 | + 'table_des_tables' => $GLOBALS['table_des_tables'], |
|
| 116 | + 'exceptions_des_tables' => $GLOBALS['exceptions_des_tables'], |
|
| 117 | + 'table_date' => $GLOBALS['table_date'], |
|
| 118 | + 'table_titre' => $GLOBALS['table_titre'], |
|
| 119 | + 'tables_jointures' => $GLOBALS['tables_jointures'], |
|
| 120 | + 'exceptions_des_jointures' => $GLOBALS['exceptions_des_jointures'], |
|
| 121 | + 'table_des_traitements' => $GLOBALS['table_des_traitements'], |
|
| 122 | + 'table_statut' => $GLOBALS['table_statut'], |
|
| 123 | + ] |
|
| 124 | + ); |
|
| 125 | + if ($interfaces) { |
|
| 126 | + $GLOBALS['table_des_tables'] = $interfaces['table_des_tables']; |
|
| 127 | + $GLOBALS['exceptions_des_tables'] = $interfaces['exceptions_des_tables']; |
|
| 128 | + $GLOBALS['table_date'] = $interfaces['table_date']; |
|
| 129 | + $GLOBALS['table_titre'] = $interfaces['table_titre']; |
|
| 130 | + $GLOBALS['tables_jointures'] = $interfaces['tables_jointures']; |
|
| 131 | + $GLOBALS['exceptions_des_jointures'] = $interfaces['exceptions_des_jointures']; |
|
| 132 | + $GLOBALS['table_des_traitements'] = $interfaces['table_des_traitements']; |
|
| 133 | + $GLOBALS['table_statut'] = $interfaces['table_statut']; |
|
| 134 | + } |
|
| 135 | 135 | } |
| 136 | 136 | |
| 137 | 137 | declarer_interfaces(); |
@@ -4,431 +4,431 @@ 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' => 'Enable plugin', |
|
| 14 | - 'affichage' => 'Display', |
|
| 15 | - 'aide_non_disponible' => 'This part of the online help is not yet available in this language.', |
|
| 16 | - 'annuler_recherche' => 'Cancel the search', |
|
| 17 | - 'auteur' => 'Author:', |
|
| 18 | - 'avis_acces_interdit' => 'Access forbidden.', |
|
| 19 | - 'avis_acces_interdit_prive' => 'You are not allowed to access the page <b>@exec@</b>.', |
|
| 20 | - 'avis_article_modifie' => 'Warning: @nom_auteur_modif@ modified this article @date_diff@ minutes ago', |
|
| 21 | - 'avis_aucun_resultat' => 'No results found.', |
|
| 22 | - 'avis_base_inaccessible' => 'Impossible to connect to the database @base@.', |
|
| 23 | - 'avis_chemin_invalide_1' => 'The path you selected', |
|
| 24 | - 'avis_chemin_invalide_2' => 'does not seem to be valid. Please go back to previous page and check the information you provided.', |
|
| 25 | - 'avis_connexion_echec_1' => 'Connection to the SQL server failed.', |
|
| 26 | - 'avis_connexion_echec_2' => 'Go back to the previous page, and check the information you provided.', |
|
| 27 | - 'avis_connexion_echec_3' => '<b>N.B.</b> On many servers, you must <b>request</b> activation of your access to the SQL database before you can use it. If you cannot connect to your database, check that activation has been done.', |
|
| 28 | - 'avis_connexion_erreur_creer_base' => 'The database could not be created.', |
|
| 29 | - 'avis_connexion_erreur_fichier_cle_manquant_1' => 'Installation must be performed by a webmaster with a backup of the keys and their password', |
|
| 30 | - 'avis_connexion_erreur_fichier_cle_manquant_2' => 'Installation must be performed by a webmaster with a backup of the keys', |
|
| 31 | - 'avis_connexion_erreur_nom_base' => 'The database’s name should only contain letters, digits and hyphens.', |
|
| 32 | - 'avis_connexion_ldap_echec_1' => 'Connection to the LDAP server failed.', |
|
| 33 | - 'avis_connexion_ldap_echec_2' => 'Go back to the previous page, and check the information you provided.', |
|
| 34 | - 'avis_connexion_ldap_echec_3' => 'Alternatively, do not use LDAP support to import users.', |
|
| 35 | - 'avis_deplacement_rubrique' => 'Warning! This section contains @contient_breves@ news item@scb@: if you move it, please check this box to confirm.', |
|
| 36 | - 'avis_erreur_connexion_mysql' => 'SQL connection error', |
|
| 37 | - 'avis_erreur_creation_compte' => 'Failure during account initialisation', |
|
| 38 | - 'avis_espace_interdit' => '<b>Forbidden area</b> <div>SPIP is already installed.</div>', |
|
| 39 | - 'avis_lecture_noms_bases_1' => 'The installer could not read the names of any databases already installed.', |
|
| 40 | - 'avis_lecture_noms_bases_2' => 'Either no database is available, or the option listing databases was disabled for security reasons (which is the case with various hosting services).', |
|
| 41 | - 'avis_lecture_noms_bases_3' => 'In the second case, a database named after your login might already be available:', |
|
| 42 | - 'avis_non_acces_page' => 'You do not have access to this page.', |
|
| 43 | - 'avis_operation_echec' => 'The operation failed.', |
|
| 44 | - 'avis_operation_impossible' => 'Operation impossible', |
|
| 45 | - 'avis_suppression_base' => 'WARNING: data deletion is irreversible', |
|
| 12 | + // A |
|
| 13 | + 'activer_plugin' => 'Enable plugin', |
|
| 14 | + 'affichage' => 'Display', |
|
| 15 | + 'aide_non_disponible' => 'This part of the online help is not yet available in this language.', |
|
| 16 | + 'annuler_recherche' => 'Cancel the search', |
|
| 17 | + 'auteur' => 'Author:', |
|
| 18 | + 'avis_acces_interdit' => 'Access forbidden.', |
|
| 19 | + 'avis_acces_interdit_prive' => 'You are not allowed to access the page <b>@exec@</b>.', |
|
| 20 | + 'avis_article_modifie' => 'Warning: @nom_auteur_modif@ modified this article @date_diff@ minutes ago', |
|
| 21 | + 'avis_aucun_resultat' => 'No results found.', |
|
| 22 | + 'avis_base_inaccessible' => 'Impossible to connect to the database @base@.', |
|
| 23 | + 'avis_chemin_invalide_1' => 'The path you selected', |
|
| 24 | + 'avis_chemin_invalide_2' => 'does not seem to be valid. Please go back to previous page and check the information you provided.', |
|
| 25 | + 'avis_connexion_echec_1' => 'Connection to the SQL server failed.', |
|
| 26 | + 'avis_connexion_echec_2' => 'Go back to the previous page, and check the information you provided.', |
|
| 27 | + 'avis_connexion_echec_3' => '<b>N.B.</b> On many servers, you must <b>request</b> activation of your access to the SQL database before you can use it. If you cannot connect to your database, check that activation has been done.', |
|
| 28 | + 'avis_connexion_erreur_creer_base' => 'The database could not be created.', |
|
| 29 | + 'avis_connexion_erreur_fichier_cle_manquant_1' => 'Installation must be performed by a webmaster with a backup of the keys and their password', |
|
| 30 | + 'avis_connexion_erreur_fichier_cle_manquant_2' => 'Installation must be performed by a webmaster with a backup of the keys', |
|
| 31 | + 'avis_connexion_erreur_nom_base' => 'The database’s name should only contain letters, digits and hyphens.', |
|
| 32 | + 'avis_connexion_ldap_echec_1' => 'Connection to the LDAP server failed.', |
|
| 33 | + 'avis_connexion_ldap_echec_2' => 'Go back to the previous page, and check the information you provided.', |
|
| 34 | + 'avis_connexion_ldap_echec_3' => 'Alternatively, do not use LDAP support to import users.', |
|
| 35 | + 'avis_deplacement_rubrique' => 'Warning! This section contains @contient_breves@ news item@scb@: if you move it, please check this box to confirm.', |
|
| 36 | + 'avis_erreur_connexion_mysql' => 'SQL connection error', |
|
| 37 | + 'avis_erreur_creation_compte' => 'Failure during account initialisation', |
|
| 38 | + 'avis_espace_interdit' => '<b>Forbidden area</b> <div>SPIP is already installed.</div>', |
|
| 39 | + 'avis_lecture_noms_bases_1' => 'The installer could not read the names of any databases already installed.', |
|
| 40 | + 'avis_lecture_noms_bases_2' => 'Either no database is available, or the option listing databases was disabled for security reasons (which is the case with various hosting services).', |
|
| 41 | + 'avis_lecture_noms_bases_3' => 'In the second case, a database named after your login might already be available:', |
|
| 42 | + 'avis_non_acces_page' => 'You do not have access to this page.', |
|
| 43 | + 'avis_operation_echec' => 'The operation failed.', |
|
| 44 | + 'avis_operation_impossible' => 'Operation impossible', |
|
| 45 | + 'avis_suppression_base' => 'WARNING: data deletion is irreversible', |
|
| 46 | 46 | |
| 47 | - // B |
|
| 48 | - 'bouton_acces_ldap' => 'Add LDAP access', |
|
| 49 | - 'bouton_ajouter' => 'Add', |
|
| 50 | - 'bouton_annuler' => 'Cancel', |
|
| 51 | - 'bouton_cache_activer' => 'Re-activate the cache', |
|
| 52 | - 'bouton_cache_desactiver' => 'Disable the cache momentarily', |
|
| 53 | - 'bouton_demande_publication' => 'Request publication of this article', |
|
| 54 | - 'bouton_desactive_tout' => 'Disable all', |
|
| 55 | - 'bouton_desinstaller' => 'Uninstall', |
|
| 56 | - 'bouton_effacer_tout' => 'Delete ALL', |
|
| 57 | - 'bouton_envoyer_message' => 'Message complete: send', |
|
| 58 | - 'bouton_fermer' => 'Close', |
|
| 59 | - 'bouton_mettre_a_jour_base' => 'Update the database', |
|
| 60 | - 'bouton_modifier' => 'Modify', |
|
| 61 | - 'bouton_radio_afficher' => 'Show', |
|
| 62 | - 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Appear in the list of editors online', |
|
| 63 | - 'bouton_radio_envoi_annonces_adresse' => 'Send announcements to:', |
|
| 64 | - 'bouton_radio_envoi_liste_nouveautes' => 'Send news update list', |
|
| 65 | - 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Do not appear in the list of editors online', |
|
| 66 | - 'bouton_radio_non_envoi_annonces_editoriales' => 'Do not send any editorial announcements', |
|
| 67 | - 'bouton_redirection' => 'REDIRECT', |
|
| 68 | - 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Reset to default values', |
|
| 69 | - 'bouton_relancer_inscription' => 'Re-launch registration', |
|
| 70 | - 'bouton_relancer_inscriptions' => 'Re-launch registrations', |
|
| 71 | - 'bouton_relancer_installation' => 'Recommence installation', |
|
| 72 | - 'bouton_reset_password' => 'Create a new password and send by e-mail', |
|
| 73 | - 'bouton_suivant' => 'Next', |
|
| 74 | - 'bouton_tenter_recuperation' => 'Attempt to repair', |
|
| 75 | - 'bouton_test_proxy' => 'Test the proxy', |
|
| 76 | - 'bouton_vider_cache' => 'Empty the cache', |
|
| 47 | + // B |
|
| 48 | + 'bouton_acces_ldap' => 'Add LDAP access', |
|
| 49 | + 'bouton_ajouter' => 'Add', |
|
| 50 | + 'bouton_annuler' => 'Cancel', |
|
| 51 | + 'bouton_cache_activer' => 'Re-activate the cache', |
|
| 52 | + 'bouton_cache_desactiver' => 'Disable the cache momentarily', |
|
| 53 | + 'bouton_demande_publication' => 'Request publication of this article', |
|
| 54 | + 'bouton_desactive_tout' => 'Disable all', |
|
| 55 | + 'bouton_desinstaller' => 'Uninstall', |
|
| 56 | + 'bouton_effacer_tout' => 'Delete ALL', |
|
| 57 | + 'bouton_envoyer_message' => 'Message complete: send', |
|
| 58 | + 'bouton_fermer' => 'Close', |
|
| 59 | + 'bouton_mettre_a_jour_base' => 'Update the database', |
|
| 60 | + 'bouton_modifier' => 'Modify', |
|
| 61 | + 'bouton_radio_afficher' => 'Show', |
|
| 62 | + 'bouton_radio_apparaitre_liste_redacteurs_connectes' => 'Appear in the list of editors online', |
|
| 63 | + 'bouton_radio_envoi_annonces_adresse' => 'Send announcements to:', |
|
| 64 | + 'bouton_radio_envoi_liste_nouveautes' => 'Send news update list', |
|
| 65 | + 'bouton_radio_non_apparaitre_liste_redacteurs_connectes' => 'Do not appear in the list of editors online', |
|
| 66 | + 'bouton_radio_non_envoi_annonces_editoriales' => 'Do not send any editorial announcements', |
|
| 67 | + 'bouton_redirection' => 'REDIRECT', |
|
| 68 | + 'bouton_reinitialiser_aux_valeurs_par_defaut' => 'Reset to default values', |
|
| 69 | + 'bouton_relancer_inscription' => 'Re-launch registration', |
|
| 70 | + 'bouton_relancer_inscriptions' => 'Re-launch registrations', |
|
| 71 | + 'bouton_relancer_installation' => 'Recommence installation', |
|
| 72 | + 'bouton_reset_password' => 'Create a new password and send by e-mail', |
|
| 73 | + 'bouton_suivant' => 'Next', |
|
| 74 | + 'bouton_tenter_recuperation' => 'Attempt to repair', |
|
| 75 | + 'bouton_test_proxy' => 'Test the proxy', |
|
| 76 | + 'bouton_vider_cache' => 'Empty the cache', |
|
| 77 | 77 | |
| 78 | - // C |
|
| 79 | - 'cache_modifiable_webmestre' => 'This parameter can be modified by the webmaster.', |
|
| 80 | - 'calendrier_synchro' => 'If you use a calendar application compatible with <b>iCal</b>, you can synchronise it with information from this site.', |
|
| 81 | - 'config_activer_champs' => 'Activate the following fields', |
|
| 82 | - 'config_choix_base_sup' => 'Choose a database on this server', |
|
| 83 | - 'config_erreur_base_sup' => 'SPIP does not have access to the list of databases available', |
|
| 84 | - 'config_info_base_sup' => 'If you need to query other databases using SPIP, whether on this SQL server or elsewhere, use this form to declare them. If you leave any fields empty, connection details to the main database will be used.', |
|
| 85 | - 'config_info_base_sup_disponibles' => 'Additional databases to which queries may be sent:', |
|
| 86 | - 'config_info_enregistree' => 'The new configuration has been saved', |
|
| 87 | - 'config_info_logos' => 'Each element of the site can have its own logo as well as a "mouseover" logo', |
|
| 88 | - 'config_info_logos_utiliser' => 'Use logos', |
|
| 89 | - 'config_info_logos_utiliser_non' => 'Do not use logos', |
|
| 90 | - 'config_info_logos_utiliser_survol' => 'Use "mouseover" logos', |
|
| 91 | - 'config_info_logos_utiliser_survol_non' => 'Do not use "mouseover" logos', |
|
| 92 | - 'config_info_redirection' => 'By activating this option you can create virtual articles, which are simply links to articles published on other sites, not necessarily using SPIP.', |
|
| 93 | - 'config_redirection' => 'Virtual articles', |
|
| 94 | - 'config_titre_base_sup' => 'Declaration of an additional database', |
|
| 95 | - 'config_titre_base_sup_choix' => 'Choose an additional database', |
|
| 96 | - 'connexion_ldap' => 'Connection:', |
|
| 97 | - 'creer_et_associer_un_auteur' => 'Create and associate an author', |
|
| 78 | + // C |
|
| 79 | + 'cache_modifiable_webmestre' => 'This parameter can be modified by the webmaster.', |
|
| 80 | + 'calendrier_synchro' => 'If you use a calendar application compatible with <b>iCal</b>, you can synchronise it with information from this site.', |
|
| 81 | + 'config_activer_champs' => 'Activate the following fields', |
|
| 82 | + 'config_choix_base_sup' => 'Choose a database on this server', |
|
| 83 | + 'config_erreur_base_sup' => 'SPIP does not have access to the list of databases available', |
|
| 84 | + 'config_info_base_sup' => 'If you need to query other databases using SPIP, whether on this SQL server or elsewhere, use this form to declare them. If you leave any fields empty, connection details to the main database will be used.', |
|
| 85 | + 'config_info_base_sup_disponibles' => 'Additional databases to which queries may be sent:', |
|
| 86 | + 'config_info_enregistree' => 'The new configuration has been saved', |
|
| 87 | + 'config_info_logos' => 'Each element of the site can have its own logo as well as a "mouseover" logo', |
|
| 88 | + 'config_info_logos_utiliser' => 'Use logos', |
|
| 89 | + 'config_info_logos_utiliser_non' => 'Do not use logos', |
|
| 90 | + 'config_info_logos_utiliser_survol' => 'Use "mouseover" logos', |
|
| 91 | + 'config_info_logos_utiliser_survol_non' => 'Do not use "mouseover" logos', |
|
| 92 | + 'config_info_redirection' => 'By activating this option you can create virtual articles, which are simply links to articles published on other sites, not necessarily using SPIP.', |
|
| 93 | + 'config_redirection' => 'Virtual articles', |
|
| 94 | + 'config_titre_base_sup' => 'Declaration of an additional database', |
|
| 95 | + 'config_titre_base_sup_choix' => 'Choose an additional database', |
|
| 96 | + 'connexion_ldap' => 'Connection:', |
|
| 97 | + 'creer_et_associer_un_auteur' => 'Create and associate an author', |
|
| 98 | 98 | |
| 99 | - // D |
|
| 100 | - 'date_mot_heures' => 'H', |
|
| 99 | + // D |
|
| 100 | + 'date_mot_heures' => 'H', |
|
| 101 | 101 | |
| 102 | - // E |
|
| 103 | - 'ecran_connexion_couleur_principale' => 'Main colour', |
|
| 104 | - 'ecran_connexion_image_fond' => 'Background image', |
|
| 105 | - 'ecran_connexion_image_fond_explication' => 'Use an image (JPEG format, 1920x1080 pixels)', |
|
| 106 | - 'ecran_connexion_image_revenir_couleur_defaut' => 'Back to the default colour', |
|
| 107 | - 'ecran_connexion_titre' => 'Connection screen', |
|
| 108 | - 'ecran_securite' => '+ safety screen @version@', |
|
| 109 | - 'email' => 'email', |
|
| 110 | - 'email_2' => 'email:', |
|
| 111 | - 'en_savoir_plus' => 'Learn more', |
|
| 112 | - 'entree_adresse_annuaire' => 'Directory address', |
|
| 113 | - 'entree_adresse_email' => 'Your email address', |
|
| 114 | - 'entree_adresse_email_2' => 'E-mail address', |
|
| 115 | - 'entree_base_donnee_1' => 'Database address', |
|
| 116 | - 'entree_base_donnee_2' => '(This address is often your site’s URL, although sometimes it will be "localhost", and sometimes it should be left blank.)', |
|
| 117 | - 'entree_biographie' => 'Brief biography', |
|
| 118 | - 'entree_chemin_acces' => '<b>Enter</b> the path:', |
|
| 119 | - 'entree_cle_pgp' => 'Your PGP key', |
|
| 120 | - 'entree_cle_pgp_2' => 'PGP key', |
|
| 121 | - 'entree_contenu_rubrique' => '(Brief description of the content of this section.)', |
|
| 122 | - 'entree_identifiants_connexion' => 'Your connection identifiers...', |
|
| 123 | - 'entree_identifiants_connexion_2' => 'Connection identifiers', |
|
| 124 | - 'entree_informations_connexion_ldap' => 'Please fill this form with the LDAP connection information provided by your system or network administrator.', |
|
| 125 | - 'entree_infos_perso' => 'Who are you?', |
|
| 126 | - 'entree_infos_perso_2' => 'Who is the author?', |
|
| 127 | - 'entree_interieur_rubrique' => 'In the section:', |
|
| 128 | - 'entree_liens_sites' => '<b>Hyperlink</b> (reference, site to visit etc.)', |
|
| 129 | - 'entree_login' => 'Your login', |
|
| 130 | - 'entree_login_connexion_1' => 'Connection login', |
|
| 131 | - 'entree_login_connexion_2' => '(Sometimes matches your FTP account login and sometimes left empty)', |
|
| 132 | - 'entree_mot_passe' => 'Your password', |
|
| 133 | - 'entree_mot_passe_1' => 'Password', |
|
| 134 | - 'entree_mot_passe_2' => '(Sometimes matches your FTP access password and sometimes left empty)', |
|
| 135 | - 'entree_nom_fichier' => 'Please enter the filename @texte_compresse@:', |
|
| 136 | - 'entree_nom_pseudo' => 'Your name or alias', |
|
| 137 | - 'entree_nom_pseudo_1' => '(Your name or alias)', |
|
| 138 | - 'entree_nom_pseudo_2' => 'Name or alias', |
|
| 139 | - 'entree_nom_site' => 'Website’s name', |
|
| 140 | - 'entree_nom_site_2' => 'Author’s website’s name', |
|
| 141 | - 'entree_nouveau_passe' => 'New password', |
|
| 142 | - 'entree_passe_ldap' => 'Password', |
|
| 143 | - 'entree_port_annuaire' => 'Port number of the directory', |
|
| 144 | - 'entree_signature' => 'Signature', |
|
| 145 | - 'entree_titre_obligatoire' => '<b>Title</b> [Required]<br />', |
|
| 146 | - 'entree_url' => 'Website’s URL', |
|
| 147 | - 'entree_url_2' => 'Website’s URL', |
|
| 148 | - 'erreur_connect_deja_existant' => 'A server by that name already exists', |
|
| 149 | - 'erreur_contenu_suspect' => 'Text escaped', |
|
| 150 | - 'erreur_email_deja_existant' => 'This email address has already been registered.', |
|
| 151 | - 'erreur_nom_connect_incorrect' => 'Server name not allowed', |
|
| 152 | - 'erreur_plugin_attribut_balise_manquant' => 'Missing attribute @attribut@ in tag @balise@', |
|
| 153 | - 'erreur_plugin_desinstalation_echouee' => 'Uninstallation of the plugin failed. However, you may deactivate it.', |
|
| 154 | - 'erreur_plugin_fichier_absent' => 'File missing', |
|
| 155 | - 'erreur_plugin_fichier_def_absent' => 'Definition file missing', |
|
| 156 | - 'erreur_plugin_nom_fonction_interdit' => 'Prohibited function name', |
|
| 157 | - 'erreur_plugin_nom_manquant' => 'Missing plugin name', |
|
| 158 | - 'erreur_plugin_prefix_manquant' => 'Namespace undefined for this plugin', |
|
| 159 | - 'erreur_plugin_tag_plugin_absent' => '<plugin> missing in the definition file', |
|
| 160 | - 'erreur_plugin_version_manquant' => 'Plugin version missing', |
|
| 161 | - 'erreur_type_fichier' => 'Wrong file type', |
|
| 102 | + // E |
|
| 103 | + 'ecran_connexion_couleur_principale' => 'Main colour', |
|
| 104 | + 'ecran_connexion_image_fond' => 'Background image', |
|
| 105 | + 'ecran_connexion_image_fond_explication' => 'Use an image (JPEG format, 1920x1080 pixels)', |
|
| 106 | + 'ecran_connexion_image_revenir_couleur_defaut' => 'Back to the default colour', |
|
| 107 | + 'ecran_connexion_titre' => 'Connection screen', |
|
| 108 | + 'ecran_securite' => '+ safety screen @version@', |
|
| 109 | + 'email' => 'email', |
|
| 110 | + 'email_2' => 'email:', |
|
| 111 | + 'en_savoir_plus' => 'Learn more', |
|
| 112 | + 'entree_adresse_annuaire' => 'Directory address', |
|
| 113 | + 'entree_adresse_email' => 'Your email address', |
|
| 114 | + 'entree_adresse_email_2' => 'E-mail address', |
|
| 115 | + 'entree_base_donnee_1' => 'Database address', |
|
| 116 | + 'entree_base_donnee_2' => '(This address is often your site’s URL, although sometimes it will be "localhost", and sometimes it should be left blank.)', |
|
| 117 | + 'entree_biographie' => 'Brief biography', |
|
| 118 | + 'entree_chemin_acces' => '<b>Enter</b> the path:', |
|
| 119 | + 'entree_cle_pgp' => 'Your PGP key', |
|
| 120 | + 'entree_cle_pgp_2' => 'PGP key', |
|
| 121 | + 'entree_contenu_rubrique' => '(Brief description of the content of this section.)', |
|
| 122 | + 'entree_identifiants_connexion' => 'Your connection identifiers...', |
|
| 123 | + 'entree_identifiants_connexion_2' => 'Connection identifiers', |
|
| 124 | + 'entree_informations_connexion_ldap' => 'Please fill this form with the LDAP connection information provided by your system or network administrator.', |
|
| 125 | + 'entree_infos_perso' => 'Who are you?', |
|
| 126 | + 'entree_infos_perso_2' => 'Who is the author?', |
|
| 127 | + 'entree_interieur_rubrique' => 'In the section:', |
|
| 128 | + 'entree_liens_sites' => '<b>Hyperlink</b> (reference, site to visit etc.)', |
|
| 129 | + 'entree_login' => 'Your login', |
|
| 130 | + 'entree_login_connexion_1' => 'Connection login', |
|
| 131 | + 'entree_login_connexion_2' => '(Sometimes matches your FTP account login and sometimes left empty)', |
|
| 132 | + 'entree_mot_passe' => 'Your password', |
|
| 133 | + 'entree_mot_passe_1' => 'Password', |
|
| 134 | + 'entree_mot_passe_2' => '(Sometimes matches your FTP access password and sometimes left empty)', |
|
| 135 | + 'entree_nom_fichier' => 'Please enter the filename @texte_compresse@:', |
|
| 136 | + 'entree_nom_pseudo' => 'Your name or alias', |
|
| 137 | + 'entree_nom_pseudo_1' => '(Your name or alias)', |
|
| 138 | + 'entree_nom_pseudo_2' => 'Name or alias', |
|
| 139 | + 'entree_nom_site' => 'Website’s name', |
|
| 140 | + 'entree_nom_site_2' => 'Author’s website’s name', |
|
| 141 | + 'entree_nouveau_passe' => 'New password', |
|
| 142 | + 'entree_passe_ldap' => 'Password', |
|
| 143 | + 'entree_port_annuaire' => 'Port number of the directory', |
|
| 144 | + 'entree_signature' => 'Signature', |
|
| 145 | + 'entree_titre_obligatoire' => '<b>Title</b> [Required]<br />', |
|
| 146 | + 'entree_url' => 'Website’s URL', |
|
| 147 | + 'entree_url_2' => 'Website’s URL', |
|
| 148 | + 'erreur_connect_deja_existant' => 'A server by that name already exists', |
|
| 149 | + 'erreur_contenu_suspect' => 'Text escaped', |
|
| 150 | + 'erreur_email_deja_existant' => 'This email address has already been registered.', |
|
| 151 | + 'erreur_nom_connect_incorrect' => 'Server name not allowed', |
|
| 152 | + 'erreur_plugin_attribut_balise_manquant' => 'Missing attribute @attribut@ in tag @balise@', |
|
| 153 | + 'erreur_plugin_desinstalation_echouee' => 'Uninstallation of the plugin failed. However, you may deactivate it.', |
|
| 154 | + 'erreur_plugin_fichier_absent' => 'File missing', |
|
| 155 | + 'erreur_plugin_fichier_def_absent' => 'Definition file missing', |
|
| 156 | + 'erreur_plugin_nom_fonction_interdit' => 'Prohibited function name', |
|
| 157 | + 'erreur_plugin_nom_manquant' => 'Missing plugin name', |
|
| 158 | + 'erreur_plugin_prefix_manquant' => 'Namespace undefined for this plugin', |
|
| 159 | + 'erreur_plugin_tag_plugin_absent' => '<plugin> missing in the definition file', |
|
| 160 | + 'erreur_plugin_version_manquant' => 'Plugin version missing', |
|
| 161 | + 'erreur_type_fichier' => 'Wrong file type', |
|
| 162 | 162 | |
| 163 | - // H |
|
| 164 | - 'htaccess_a_simuler' => 'Warning: your HTTP server configuration ignores @htaccess@ files. To ensure good security, you should change the configuration for this. Alternatively, you should make sure that the constants @constantes@ (definable in the file mes_options.php) have as values directories outside @document_root@.', |
|
| 165 | - 'htaccess_inoperant' => 'inoperative htaccess', |
|
| 163 | + // H |
|
| 164 | + 'htaccess_a_simuler' => 'Warning: your HTTP server configuration ignores @htaccess@ files. To ensure good security, you should change the configuration for this. Alternatively, you should make sure that the constants @constantes@ (definable in the file mes_options.php) have as values directories outside @document_root@.', |
|
| 165 | + 'htaccess_inoperant' => 'inoperative htaccess', |
|
| 166 | 166 | |
| 167 | - // I |
|
| 168 | - 'ical_info1' => 'This page offers several tools to be kept up-to-date with website’s activity.', |
|
| 169 | - 'ical_info2' => 'For more information, do not hesitate to visit <a href="@spipnet@">SPIP’s documentation</a>.', |
|
| 170 | - 'ical_info_calendrier' => 'Two calendars are available. The first is a general, public calendar showing articles as they are published. The second is personal and contains editorial announcements as well as your latest private messages: it is reserved for you via a personal key that you can modify at any time by renewing your password.', |
|
| 171 | - 'ical_methode_http' => 'Downloading', |
|
| 172 | - 'ical_methode_webcal' => 'Synchronisation (webcal://)', |
|
| 173 | - 'ical_texte_prive' => 'This calendar, which is strictly personal, informs you of the private editorial activity of this site (tasks, personal appointments, articles and news items submitted etc.).', |
|
| 174 | - 'ical_texte_public' => 'This calendar allows you to follow the public activity of this site (newly-published articles and news items).', |
|
| 175 | - 'ical_texte_rss' => 'You can syndicate the latest news from this site in any XML/RSS (Rich Site Summary) reader. This is also the format that allows SPIP to read the latest news published by other sites using a compatible exchange format (syndicated sites).', |
|
| 176 | - 'ical_titre_js' => 'Javascript', |
|
| 177 | - 'ical_titre_mailing' => 'Mailing-list', |
|
| 178 | - 'ical_titre_rss' => 'Syndication files', |
|
| 179 | - 'icone_accueil' => 'Home', |
|
| 180 | - 'icone_activer_cookie' => 'Place a cookie', |
|
| 181 | - 'icone_activite' => 'Feedback', |
|
| 182 | - 'icone_admin_plugin' => 'Manage plugins', |
|
| 183 | - 'icone_administration' => 'Maintenance', |
|
| 184 | - 'icone_afficher_auteurs' => 'Show authors', |
|
| 185 | - 'icone_afficher_visiteurs' => 'Show visitors', |
|
| 186 | - 'icone_arret_discussion' => 'Stop participating in this discussion', |
|
| 187 | - 'icone_calendrier' => 'Calendar', |
|
| 188 | - 'icone_configuration' => 'Configuration', |
|
| 189 | - 'icone_creer_auteur' => 'Create a new author and link him/her to this article', |
|
| 190 | - 'icone_creer_mot_cle' => 'Create a new keyword and link it to this article', |
|
| 191 | - 'icone_creer_rubrique_2' => 'Create a new section', |
|
| 192 | - 'icone_developpement' => 'Development', |
|
| 193 | - 'icone_edition' => 'Edit', |
|
| 194 | - 'icone_ma_langue' => 'My language', |
|
| 195 | - 'icone_mes_infos' => 'My details', |
|
| 196 | - 'icone_mes_preferences' => 'Preferences', |
|
| 197 | - 'icone_modifier_article' => 'Edit this article', |
|
| 198 | - 'icone_modifier_rubrique' => 'Edit this section', |
|
| 199 | - 'icone_publication' => 'Publish', |
|
| 200 | - 'icone_relancer_signataire' => 'Contact the signatory again', |
|
| 201 | - 'icone_retour' => 'Back', |
|
| 202 | - 'icone_retour_article' => 'Back to the article', |
|
| 203 | - 'icone_squelette' => 'Templates', |
|
| 204 | - 'icone_suivi_publication' => 'Publication follow up ', |
|
| 205 | - 'icone_supprimer_cookie' => 'Delete cookie', |
|
| 206 | - 'icone_supprimer_rubrique' => 'Delete this section', |
|
| 207 | - 'icone_supprimer_signature' => 'Delete this signature', |
|
| 208 | - 'icone_valider_signature' => 'Validate this signature', |
|
| 209 | - 'image_administrer_rubrique' => 'You can manage this section', |
|
| 210 | - 'impossible_modifier_login_auteur' => 'Login cannot be changed.', |
|
| 211 | - 'impossible_modifier_pass_auteur' => 'Password cannot be changed.', |
|
| 212 | - 'info_1_article' => '1 article', |
|
| 213 | - 'info_1_auteur' => '1 author', |
|
| 214 | - 'info_1_message' => '1 message', |
|
| 215 | - 'info_1_mot_cle' => '1 keyword', |
|
| 216 | - 'info_1_rubrique' => '1 section', |
|
| 217 | - 'info_1_visiteur' => '1 visitor', |
|
| 218 | - 'info_activer_cookie' => 'You can activate an <b>administration cookie</b>, which lets you switch easily between the public website and the admin area.', |
|
| 219 | - 'info_activer_menu_developpement' => 'Show the Development menu', |
|
| 220 | - 'info_admin_etre_webmestre' => 'Give me web administrator rights', |
|
| 221 | - 'info_admin_je_suis_webmestre' => 'I am a <b>webmaster</b>', |
|
| 222 | - 'info_admin_statuer_webmestre' => 'Give webmaster rights to this administrator ', |
|
| 223 | - 'info_admin_webmestre' => 'This administrator is <b>webmaster</b>', |
|
| 224 | - 'info_administrateur' => 'Administrator', |
|
| 225 | - 'info_administrateur_1' => 'Administrator', |
|
| 226 | - 'info_administrateur_2' => 'of the site (<i>use with caution</i>)', |
|
| 227 | - 'info_administrateur_site_01' => 'If you are a site administrator, please', |
|
| 228 | - 'info_administrateur_site_02' => 'click on this link', |
|
| 229 | - 'info_administrateurs' => 'Administrators', |
|
| 230 | - 'info_administrer_rubrique' => 'You can manage this section', |
|
| 231 | - 'info_adresse' => 'to this address:', |
|
| 232 | - 'info_adresse_desinscription' => 'Unsubscription address:', |
|
| 233 | - 'info_adresse_url' => 'URL of the public site', |
|
| 234 | - 'info_afficher_par_nb' => 'Show ', |
|
| 235 | - 'info_aide_en_ligne' => 'SPIP Online Help', |
|
| 236 | - 'info_ajout_image' => 'When you add images as attached documents to an article, |
|
| 167 | + // I |
|
| 168 | + 'ical_info1' => 'This page offers several tools to be kept up-to-date with website’s activity.', |
|
| 169 | + 'ical_info2' => 'For more information, do not hesitate to visit <a href="@spipnet@">SPIP’s documentation</a>.', |
|
| 170 | + 'ical_info_calendrier' => 'Two calendars are available. The first is a general, public calendar showing articles as they are published. The second is personal and contains editorial announcements as well as your latest private messages: it is reserved for you via a personal key that you can modify at any time by renewing your password.', |
|
| 171 | + 'ical_methode_http' => 'Downloading', |
|
| 172 | + 'ical_methode_webcal' => 'Synchronisation (webcal://)', |
|
| 173 | + 'ical_texte_prive' => 'This calendar, which is strictly personal, informs you of the private editorial activity of this site (tasks, personal appointments, articles and news items submitted etc.).', |
|
| 174 | + 'ical_texte_public' => 'This calendar allows you to follow the public activity of this site (newly-published articles and news items).', |
|
| 175 | + 'ical_texte_rss' => 'You can syndicate the latest news from this site in any XML/RSS (Rich Site Summary) reader. This is also the format that allows SPIP to read the latest news published by other sites using a compatible exchange format (syndicated sites).', |
|
| 176 | + 'ical_titre_js' => 'Javascript', |
|
| 177 | + 'ical_titre_mailing' => 'Mailing-list', |
|
| 178 | + 'ical_titre_rss' => 'Syndication files', |
|
| 179 | + 'icone_accueil' => 'Home', |
|
| 180 | + 'icone_activer_cookie' => 'Place a cookie', |
|
| 181 | + 'icone_activite' => 'Feedback', |
|
| 182 | + 'icone_admin_plugin' => 'Manage plugins', |
|
| 183 | + 'icone_administration' => 'Maintenance', |
|
| 184 | + 'icone_afficher_auteurs' => 'Show authors', |
|
| 185 | + 'icone_afficher_visiteurs' => 'Show visitors', |
|
| 186 | + 'icone_arret_discussion' => 'Stop participating in this discussion', |
|
| 187 | + 'icone_calendrier' => 'Calendar', |
|
| 188 | + 'icone_configuration' => 'Configuration', |
|
| 189 | + 'icone_creer_auteur' => 'Create a new author and link him/her to this article', |
|
| 190 | + 'icone_creer_mot_cle' => 'Create a new keyword and link it to this article', |
|
| 191 | + 'icone_creer_rubrique_2' => 'Create a new section', |
|
| 192 | + 'icone_developpement' => 'Development', |
|
| 193 | + 'icone_edition' => 'Edit', |
|
| 194 | + 'icone_ma_langue' => 'My language', |
|
| 195 | + 'icone_mes_infos' => 'My details', |
|
| 196 | + 'icone_mes_preferences' => 'Preferences', |
|
| 197 | + 'icone_modifier_article' => 'Edit this article', |
|
| 198 | + 'icone_modifier_rubrique' => 'Edit this section', |
|
| 199 | + 'icone_publication' => 'Publish', |
|
| 200 | + 'icone_relancer_signataire' => 'Contact the signatory again', |
|
| 201 | + 'icone_retour' => 'Back', |
|
| 202 | + 'icone_retour_article' => 'Back to the article', |
|
| 203 | + 'icone_squelette' => 'Templates', |
|
| 204 | + 'icone_suivi_publication' => 'Publication follow up ', |
|
| 205 | + 'icone_supprimer_cookie' => 'Delete cookie', |
|
| 206 | + 'icone_supprimer_rubrique' => 'Delete this section', |
|
| 207 | + 'icone_supprimer_signature' => 'Delete this signature', |
|
| 208 | + 'icone_valider_signature' => 'Validate this signature', |
|
| 209 | + 'image_administrer_rubrique' => 'You can manage this section', |
|
| 210 | + 'impossible_modifier_login_auteur' => 'Login cannot be changed.', |
|
| 211 | + 'impossible_modifier_pass_auteur' => 'Password cannot be changed.', |
|
| 212 | + 'info_1_article' => '1 article', |
|
| 213 | + 'info_1_auteur' => '1 author', |
|
| 214 | + 'info_1_message' => '1 message', |
|
| 215 | + 'info_1_mot_cle' => '1 keyword', |
|
| 216 | + 'info_1_rubrique' => '1 section', |
|
| 217 | + 'info_1_visiteur' => '1 visitor', |
|
| 218 | + 'info_activer_cookie' => 'You can activate an <b>administration cookie</b>, which lets you switch easily between the public website and the admin area.', |
|
| 219 | + 'info_activer_menu_developpement' => 'Show the Development menu', |
|
| 220 | + 'info_admin_etre_webmestre' => 'Give me web administrator rights', |
|
| 221 | + 'info_admin_je_suis_webmestre' => 'I am a <b>webmaster</b>', |
|
| 222 | + 'info_admin_statuer_webmestre' => 'Give webmaster rights to this administrator ', |
|
| 223 | + 'info_admin_webmestre' => 'This administrator is <b>webmaster</b>', |
|
| 224 | + 'info_administrateur' => 'Administrator', |
|
| 225 | + 'info_administrateur_1' => 'Administrator', |
|
| 226 | + 'info_administrateur_2' => 'of the site (<i>use with caution</i>)', |
|
| 227 | + 'info_administrateur_site_01' => 'If you are a site administrator, please', |
|
| 228 | + 'info_administrateur_site_02' => 'click on this link', |
|
| 229 | + 'info_administrateurs' => 'Administrators', |
|
| 230 | + 'info_administrer_rubrique' => 'You can manage this section', |
|
| 231 | + 'info_adresse' => 'to this address:', |
|
| 232 | + 'info_adresse_desinscription' => 'Unsubscription address:', |
|
| 233 | + 'info_adresse_url' => 'URL of the public site', |
|
| 234 | + 'info_afficher_par_nb' => 'Show ', |
|
| 235 | + 'info_aide_en_ligne' => 'SPIP Online Help', |
|
| 236 | + 'info_ajout_image' => 'When you add images as attached documents to an article, |
|
| 237 | 237 | SPIP can automatically create thumbnails from |
| 238 | 238 | inserted images. This will allow, for instance, the automated |
| 239 | 239 | creation of a gallery or portfolio.', |
| 240 | - 'info_ajouter_rubrique' => 'Add another section to manage:', |
|
| 241 | - 'info_annonce_nouveautes' => 'Latest news announcements', |
|
| 242 | - 'info_article' => 'article', |
|
| 243 | - 'info_article_2' => 'articles', |
|
| 244 | - 'info_article_a_paraitre' => 'Post-dated articles set for publication', |
|
| 245 | - 'info_articles_02' => 'articles', |
|
| 246 | - 'info_articles_2' => 'Articles', |
|
| 247 | - 'info_articles_auteur' => 'Articles by this author', |
|
| 248 | - 'info_articles_miens' => 'My articles', |
|
| 249 | - 'info_articles_tous' => 'All the articles', |
|
| 250 | - 'info_articles_trouves' => 'Articles found', |
|
| 251 | - 'info_attente_validation' => 'Your articles awaiting validation', |
|
| 252 | - 'info_aucun_article' => 'No articles', |
|
| 253 | - 'info_aucun_auteur' => 'No authors', |
|
| 254 | - 'info_aucun_message' => 'No messages', |
|
| 255 | - 'info_aucun_rubrique' => 'No sections', |
|
| 256 | - 'info_aujourdhui' => 'today:', |
|
| 257 | - 'info_auteur_gere_rubriques' => 'This author manages the following sections:', |
|
| 258 | - 'info_auteur_gere_toutes_rubriques' => 'This author manage <b>all the sections</b>', |
|
| 259 | - 'info_auteur_gere_toutes_rubriques_2' => 'I manage <b>all the sections</b>', |
|
| 260 | - 'info_auteurs' => 'Authors', |
|
| 261 | - 'info_auteurs_par_tri' => 'Authors@partri@', |
|
| 262 | - 'info_auteurs_trouves' => 'Authors found', |
|
| 263 | - 'info_authentification_externe' => 'External authentication', |
|
| 264 | - 'info_avertissement' => 'Warning', |
|
| 265 | - 'info_barre_outils' => 'with its toolbar?', |
|
| 266 | - 'info_base_installee' => 'Your database structure has been installed.', |
|
| 267 | - 'info_bio' => 'Biography', |
|
| 268 | - 'info_cache_desactive' => 'The cache is temporarily disabled', |
|
| 269 | - 'info_chapeau' => 'Introduction', |
|
| 270 | - 'info_chapeau_2' => 'Introduction:', |
|
| 271 | - 'info_chemin_acces_1' => 'Options: <b>Access path in directory</b>', |
|
| 272 | - 'info_chemin_acces_2' => 'You must now configure the access path to the directory information. This information is essential to read the user profiles stored in the directory.', |
|
| 273 | - 'info_chemin_acces_annuaire' => 'Options: <b>Access path in directory</b>', |
|
| 274 | - 'info_choix_base' => 'Third step:', |
|
| 275 | - 'info_classement_1' => ' out of @liste@', |
|
| 276 | - 'info_classement_2' => ' out of @liste@', |
|
| 277 | - 'info_code_acces' => 'Do not forget your own access codes!', |
|
| 278 | - 'info_config_suivi' => 'If this address corresponds to a mailing list, you can indicate the subscription address for this list. This may be a URL (e.g. a webpage enabling subscription online), or an email address with a specific subject (for instance: <tt>@adresse_suivi@?subject=subscribe</tt>):', |
|
| 279 | - 'info_config_suivi_explication' => 'You can subscribe to the mailing-list for this site. You will then receive email announcements concerning articles and news items submitted for publication.', |
|
| 280 | - 'info_confirmer_passe' => 'Confirm new password:', |
|
| 281 | - 'info_conflit_edition_avis_non_sauvegarde' => 'Caution: the following fields have been modified elsewhere. Your changes to these fields have therefore not been saved.', |
|
| 282 | - 'info_conflit_edition_differences' => 'Differences:', |
|
| 283 | - 'info_conflit_edition_version_enregistree' => 'Saved version:', |
|
| 284 | - 'info_conflit_edition_votre_version' => 'Your version:', |
|
| 285 | - 'info_connexion_base' => 'Trying to connect to database', |
|
| 286 | - 'info_connexion_base_donnee' => 'Connection to your database', |
|
| 287 | - 'info_connexion_ldap_ok' => '<b>LDAP connection succeeded.</b><p> You can go to the next step.</p>', |
|
| 288 | - 'info_connexion_mysql' => 'Your SQL connection', |
|
| 289 | - 'info_connexion_ok' => 'Connection succeeded.', |
|
| 290 | - 'info_contact' => 'Contact', |
|
| 291 | - 'info_contenu_articles' => 'Article content', |
|
| 292 | - 'info_contributions' => 'Contributions', |
|
| 293 | - 'info_creation_paragraphe' => 'To create paragraphs, just leave blank lines.', |
|
| 294 | - 'info_creation_rubrique' => 'Before writing any articles,<br /> you must create at least one section.<br />', |
|
| 295 | - 'info_creation_tables' => 'Creating the database tables', |
|
| 296 | - 'info_creer_base' => '<b>Create</b> a new database:', |
|
| 297 | - 'info_dans_rubrique' => 'In section:', |
|
| 298 | - 'info_date_publication_anterieure' => 'Previously published on:', |
|
| 299 | - 'info_date_referencement' => 'THIS SITE REFERENCED ON:', |
|
| 300 | - 'info_derniere_etape' => 'Done!', |
|
| 301 | - 'info_descriptif' => 'Description:', |
|
| 302 | - 'info_desinstaller_plugin' => ' deactivates the plugin and deletes the data', |
|
| 303 | - 'info_discussion_cours' => 'Current discussions', |
|
| 304 | - 'info_ecrire_article' => 'Before writing any articles, you must create at least one section.', |
|
| 305 | - 'info_email_envoi' => 'Sender’s email address (optional)', |
|
| 306 | - 'info_email_envoi_txt' => 'Enter the sender’s email address used for sending emails (by default, the recipient’s address is used as the sender’s address) :', |
|
| 307 | - 'info_email_webmestre' => 'Webmaster’s email address', |
|
| 308 | - 'info_envoi_email_automatique' => 'Automated mailing', |
|
| 309 | - 'info_envoyer_maintenant' => 'Send now', |
|
| 310 | - 'info_etape_suivante' => 'Go to the next step', |
|
| 311 | - 'info_etape_suivante_1' => 'You can move on to the next step.', |
|
| 312 | - 'info_etape_suivante_2' => 'You can move on to the next step.', |
|
| 313 | - 'info_exceptions_proxy' => 'Exceptions for the proxy', |
|
| 314 | - 'info_exportation_base' => 'export database to @archive@', |
|
| 315 | - 'info_facilite_suivi_activite' => 'To simplify monitoring of the site’s editorial; |
|
| 240 | + 'info_ajouter_rubrique' => 'Add another section to manage:', |
|
| 241 | + 'info_annonce_nouveautes' => 'Latest news announcements', |
|
| 242 | + 'info_article' => 'article', |
|
| 243 | + 'info_article_2' => 'articles', |
|
| 244 | + 'info_article_a_paraitre' => 'Post-dated articles set for publication', |
|
| 245 | + 'info_articles_02' => 'articles', |
|
| 246 | + 'info_articles_2' => 'Articles', |
|
| 247 | + 'info_articles_auteur' => 'Articles by this author', |
|
| 248 | + 'info_articles_miens' => 'My articles', |
|
| 249 | + 'info_articles_tous' => 'All the articles', |
|
| 250 | + 'info_articles_trouves' => 'Articles found', |
|
| 251 | + 'info_attente_validation' => 'Your articles awaiting validation', |
|
| 252 | + 'info_aucun_article' => 'No articles', |
|
| 253 | + 'info_aucun_auteur' => 'No authors', |
|
| 254 | + 'info_aucun_message' => 'No messages', |
|
| 255 | + 'info_aucun_rubrique' => 'No sections', |
|
| 256 | + 'info_aujourdhui' => 'today:', |
|
| 257 | + 'info_auteur_gere_rubriques' => 'This author manages the following sections:', |
|
| 258 | + 'info_auteur_gere_toutes_rubriques' => 'This author manage <b>all the sections</b>', |
|
| 259 | + 'info_auteur_gere_toutes_rubriques_2' => 'I manage <b>all the sections</b>', |
|
| 260 | + 'info_auteurs' => 'Authors', |
|
| 261 | + 'info_auteurs_par_tri' => 'Authors@partri@', |
|
| 262 | + 'info_auteurs_trouves' => 'Authors found', |
|
| 263 | + 'info_authentification_externe' => 'External authentication', |
|
| 264 | + 'info_avertissement' => 'Warning', |
|
| 265 | + 'info_barre_outils' => 'with its toolbar?', |
|
| 266 | + 'info_base_installee' => 'Your database structure has been installed.', |
|
| 267 | + 'info_bio' => 'Biography', |
|
| 268 | + 'info_cache_desactive' => 'The cache is temporarily disabled', |
|
| 269 | + 'info_chapeau' => 'Introduction', |
|
| 270 | + 'info_chapeau_2' => 'Introduction:', |
|
| 271 | + 'info_chemin_acces_1' => 'Options: <b>Access path in directory</b>', |
|
| 272 | + 'info_chemin_acces_2' => 'You must now configure the access path to the directory information. This information is essential to read the user profiles stored in the directory.', |
|
| 273 | + 'info_chemin_acces_annuaire' => 'Options: <b>Access path in directory</b>', |
|
| 274 | + 'info_choix_base' => 'Third step:', |
|
| 275 | + 'info_classement_1' => ' out of @liste@', |
|
| 276 | + 'info_classement_2' => ' out of @liste@', |
|
| 277 | + 'info_code_acces' => 'Do not forget your own access codes!', |
|
| 278 | + 'info_config_suivi' => 'If this address corresponds to a mailing list, you can indicate the subscription address for this list. This may be a URL (e.g. a webpage enabling subscription online), or an email address with a specific subject (for instance: <tt>@adresse_suivi@?subject=subscribe</tt>):', |
|
| 279 | + 'info_config_suivi_explication' => 'You can subscribe to the mailing-list for this site. You will then receive email announcements concerning articles and news items submitted for publication.', |
|
| 280 | + 'info_confirmer_passe' => 'Confirm new password:', |
|
| 281 | + 'info_conflit_edition_avis_non_sauvegarde' => 'Caution: the following fields have been modified elsewhere. Your changes to these fields have therefore not been saved.', |
|
| 282 | + 'info_conflit_edition_differences' => 'Differences:', |
|
| 283 | + 'info_conflit_edition_version_enregistree' => 'Saved version:', |
|
| 284 | + 'info_conflit_edition_votre_version' => 'Your version:', |
|
| 285 | + 'info_connexion_base' => 'Trying to connect to database', |
|
| 286 | + 'info_connexion_base_donnee' => 'Connection to your database', |
|
| 287 | + 'info_connexion_ldap_ok' => '<b>LDAP connection succeeded.</b><p> You can go to the next step.</p>', |
|
| 288 | + 'info_connexion_mysql' => 'Your SQL connection', |
|
| 289 | + 'info_connexion_ok' => 'Connection succeeded.', |
|
| 290 | + 'info_contact' => 'Contact', |
|
| 291 | + 'info_contenu_articles' => 'Article content', |
|
| 292 | + 'info_contributions' => 'Contributions', |
|
| 293 | + 'info_creation_paragraphe' => 'To create paragraphs, just leave blank lines.', |
|
| 294 | + 'info_creation_rubrique' => 'Before writing any articles,<br /> you must create at least one section.<br />', |
|
| 295 | + 'info_creation_tables' => 'Creating the database tables', |
|
| 296 | + 'info_creer_base' => '<b>Create</b> a new database:', |
|
| 297 | + 'info_dans_rubrique' => 'In section:', |
|
| 298 | + 'info_date_publication_anterieure' => 'Previously published on:', |
|
| 299 | + 'info_date_referencement' => 'THIS SITE REFERENCED ON:', |
|
| 300 | + 'info_derniere_etape' => 'Done!', |
|
| 301 | + 'info_descriptif' => 'Description:', |
|
| 302 | + 'info_desinstaller_plugin' => ' deactivates the plugin and deletes the data', |
|
| 303 | + 'info_discussion_cours' => 'Current discussions', |
|
| 304 | + 'info_ecrire_article' => 'Before writing any articles, you must create at least one section.', |
|
| 305 | + 'info_email_envoi' => 'Sender’s email address (optional)', |
|
| 306 | + 'info_email_envoi_txt' => 'Enter the sender’s email address used for sending emails (by default, the recipient’s address is used as the sender’s address) :', |
|
| 307 | + 'info_email_webmestre' => 'Webmaster’s email address', |
|
| 308 | + 'info_envoi_email_automatique' => 'Automated mailing', |
|
| 309 | + 'info_envoyer_maintenant' => 'Send now', |
|
| 310 | + 'info_etape_suivante' => 'Go to the next step', |
|
| 311 | + 'info_etape_suivante_1' => 'You can move on to the next step.', |
|
| 312 | + 'info_etape_suivante_2' => 'You can move on to the next step.', |
|
| 313 | + 'info_exceptions_proxy' => 'Exceptions for the proxy', |
|
| 314 | + 'info_exportation_base' => 'export database to @archive@', |
|
| 315 | + 'info_facilite_suivi_activite' => 'To simplify monitoring of the site’s editorial; |
|
| 316 | 316 | activities, SPIP can send rmail notifications, e.g. to an editors’ mailing list, |
| 317 | 317 | of publication requests and article validations. Enter one or more adresses separated by commas.', |
| 318 | - 'info_fichiers_authent' => 'Authentication file ".htpasswd"', |
|
| 319 | - 'info_forums_abo_invites' => 'Your site contains forums by subscription; visitors may register for them on the public site.', |
|
| 320 | - 'info_gauche_admin_tech' => '<b>Only webmasters have access to this page.</b><p> It provides access to various |
|
| 318 | + 'info_fichiers_authent' => 'Authentication file ".htpasswd"', |
|
| 319 | + 'info_forums_abo_invites' => 'Your site contains forums by subscription; visitors may register for them on the public site.', |
|
| 320 | + 'info_gauche_admin_tech' => '<b>Only webmasters have access to this page.</b><p> It provides access to various |
|
| 321 | 321 | maintenance tasks. Some of them require a specific authentication process |
| 322 | 322 | via FTP.</p>', |
| 323 | - 'info_gauche_admin_vider' => '<b>Only webmasters have access to this page.</b><p> It provides access to various |
|
| 323 | + 'info_gauche_admin_vider' => '<b>Only webmasters have access to this page.</b><p> It provides access to various |
|
| 324 | 324 | maintenance tasks. Some of them require a specific authentication process |
| 325 | 325 | via FTP.</p>', |
| 326 | - 'info_gauche_auteurs' => 'All the site authors are listed here. |
|
| 326 | + 'info_gauche_auteurs' => 'All the site authors are listed here. |
|
| 327 | 327 | The status of each is indicated by the colour of their icon (administrator = green; editor = yellow).', |
| 328 | - 'info_gauche_auteurs_exterieurs' => 'Visiting authors, without any access to the site, are indicated by a blue icon; deleted authors by a grey icon.', |
|
| 329 | - 'info_gauche_messagerie' => 'Internal messaging lets you exchange messages between editors, keep memos (for personal use) or, display announcements on the admin area’s homepage (if you are an administrator).', |
|
| 330 | - 'info_gauche_statistiques_referers' => 'This page displays the list of <i>referrers</i>, i.e. websites containing links to your own site, for yesterday and today. The list is reset every 24 hours.', |
|
| 331 | - 'info_gauche_visiteurs_enregistres' => 'You will find here the visitors registered |
|
| 328 | + 'info_gauche_auteurs_exterieurs' => 'Visiting authors, without any access to the site, are indicated by a blue icon; deleted authors by a grey icon.', |
|
| 329 | + 'info_gauche_messagerie' => 'Internal messaging lets you exchange messages between editors, keep memos (for personal use) or, display announcements on the admin area’s homepage (if you are an administrator).', |
|
| 330 | + 'info_gauche_statistiques_referers' => 'This page displays the list of <i>referrers</i>, i.e. websites containing links to your own site, for yesterday and today. The list is reset every 24 hours.', |
|
| 331 | + 'info_gauche_visiteurs_enregistres' => 'You will find here the visitors registered |
|
| 332 | 332 | for the public area of the site (subscription-only forums).', |
| 333 | - 'info_generation_miniatures_images' => 'Generation of thumbnail images', |
|
| 334 | - 'info_gerer_trad_objets' => '@objets@: manage translation links', |
|
| 335 | - 'info_hebergeur_desactiver_envoi_email' => 'Some hosts disable automated mail sending |
|
| 333 | + 'info_generation_miniatures_images' => 'Generation of thumbnail images', |
|
| 334 | + 'info_gerer_trad_objets' => '@objets@: manage translation links', |
|
| 335 | + 'info_hebergeur_desactiver_envoi_email' => 'Some hosts disable automated mail sending |
|
| 336 | 336 | on their servers. In this case the following features |
| 337 | 337 | of SPIP cannot be implemented.', |
| 338 | - 'info_hier' => 'yesterday:', |
|
| 339 | - 'info_identification_publique' => 'Your public identity...', |
|
| 340 | - 'info_image_process' => 'Select the best method to create thumbnails by clicking on the corresponding picture.', |
|
| 341 | - 'info_image_process2' => 'If you can’t see any images, then your server is not configured to use such tools. If you want to use these features, contact your provider’s technical support and ask for the «GD» or «Imagick» extensions to be installed.', |
|
| 342 | - 'info_images_auto' => 'Images calculated automatically', |
|
| 343 | - 'info_informations_personnelles' => 'Personal information', |
|
| 344 | - 'info_inscription' => 'Registered on', |
|
| 345 | - 'info_inscription_automatique' => 'Automatic registration for new editors', |
|
| 346 | - 'info_jeu_caractere' => 'Character set for the site', |
|
| 347 | - 'info_jours' => 'days', |
|
| 348 | - 'info_laisser_champs_vides' => 'leave these fields empty)', |
|
| 349 | - 'info_langues' => 'Site languages', |
|
| 350 | - 'info_ldap_ok' => 'LDAP authentication is installed.', |
|
| 351 | - 'info_lien_hypertexte' => 'Hyperlink:', |
|
| 352 | - 'info_liste_nouveautes_envoyee' => 'The news update list has been sent', |
|
| 353 | - 'info_liste_redacteurs_connectes' => 'List of editors online', |
|
| 354 | - 'info_login_existant' => 'This login already exists.', |
|
| 355 | - 'info_login_trop_court' => 'Login too short.', |
|
| 356 | - 'info_login_trop_court_car_pluriel' => 'Your login must contain at least @nb@ characters.', |
|
| 357 | - 'info_logos' => 'Logos', |
|
| 358 | - 'info_maximum' => 'maximum:', |
|
| 359 | - 'info_meme_rubrique' => 'In this section', |
|
| 360 | - 'info_message_en_redaction' => 'Your draft messages', |
|
| 361 | - 'info_message_technique' => 'Technical message:', |
|
| 362 | - 'info_messagerie_interne' => 'Internal messaging', |
|
| 363 | - 'info_mise_a_niveau_base' => 'SQL database upgrade', |
|
| 364 | - 'info_mise_a_niveau_base_2' => '{{Warning!}} You have installed an {older} SPIP version, prior to the one |
|
| 338 | + 'info_hier' => 'yesterday:', |
|
| 339 | + 'info_identification_publique' => 'Your public identity...', |
|
| 340 | + 'info_image_process' => 'Select the best method to create thumbnails by clicking on the corresponding picture.', |
|
| 341 | + 'info_image_process2' => 'If you can’t see any images, then your server is not configured to use such tools. If you want to use these features, contact your provider’s technical support and ask for the «GD» or «Imagick» extensions to be installed.', |
|
| 342 | + 'info_images_auto' => 'Images calculated automatically', |
|
| 343 | + 'info_informations_personnelles' => 'Personal information', |
|
| 344 | + 'info_inscription' => 'Registered on', |
|
| 345 | + 'info_inscription_automatique' => 'Automatic registration for new editors', |
|
| 346 | + 'info_jeu_caractere' => 'Character set for the site', |
|
| 347 | + 'info_jours' => 'days', |
|
| 348 | + 'info_laisser_champs_vides' => 'leave these fields empty)', |
|
| 349 | + 'info_langues' => 'Site languages', |
|
| 350 | + 'info_ldap_ok' => 'LDAP authentication is installed.', |
|
| 351 | + 'info_lien_hypertexte' => 'Hyperlink:', |
|
| 352 | + 'info_liste_nouveautes_envoyee' => 'The news update list has been sent', |
|
| 353 | + 'info_liste_redacteurs_connectes' => 'List of editors online', |
|
| 354 | + 'info_login_existant' => 'This login already exists.', |
|
| 355 | + 'info_login_trop_court' => 'Login too short.', |
|
| 356 | + 'info_login_trop_court_car_pluriel' => 'Your login must contain at least @nb@ characters.', |
|
| 357 | + 'info_logos' => 'Logos', |
|
| 358 | + 'info_maximum' => 'maximum:', |
|
| 359 | + 'info_meme_rubrique' => 'In this section', |
|
| 360 | + 'info_message_en_redaction' => 'Your draft messages', |
|
| 361 | + 'info_message_technique' => 'Technical message:', |
|
| 362 | + 'info_messagerie_interne' => 'Internal messaging', |
|
| 363 | + 'info_mise_a_niveau_base' => 'SQL database upgrade', |
|
| 364 | + 'info_mise_a_niveau_base_2' => '{{Warning!}} You have installed an {older} SPIP version, prior to the one |
|
| 365 | 365 | originally installed on this website: your database is at risk of being corrupted |
| 366 | 366 | and your site might not work properly anymore.<br />{{Please, re-install |
| 367 | 367 | SPIP files.}}', |
| 368 | - 'info_modification_enregistree' => 'Your changes have been saved', |
|
| 369 | - 'info_modifier_auteur' => 'Edit author details:', |
|
| 370 | - 'info_modifier_rubrique' => 'Edit the section:', |
|
| 371 | - 'info_modifier_titre' => 'Edit: @titre@', |
|
| 372 | - 'info_mon_site_spip' => 'My SPIP site', |
|
| 373 | - 'info_moyenne' => 'average:', |
|
| 374 | - 'info_multi_cet_article' => 'Language for this article:', |
|
| 375 | - 'info_multi_langues_choisies' => 'Please select the languages to be made available to the editors of your site. |
|
| 368 | + 'info_modification_enregistree' => 'Your changes have been saved', |
|
| 369 | + 'info_modifier_auteur' => 'Edit author details:', |
|
| 370 | + 'info_modifier_rubrique' => 'Edit the section:', |
|
| 371 | + 'info_modifier_titre' => 'Edit: @titre@', |
|
| 372 | + 'info_mon_site_spip' => 'My SPIP site', |
|
| 373 | + 'info_moyenne' => 'average:', |
|
| 374 | + 'info_multi_cet_article' => 'Language for this article:', |
|
| 375 | + 'info_multi_langues_choisies' => 'Please select the languages to be made available to the editors of your site. |
|
| 376 | 376 | Languages already used on your site (at the top of the list) cannot be disabled.', |
| 377 | - 'info_multi_objets' => '@objets@: activate the language menu', |
|
| 378 | - 'info_multi_secteurs' => '... only for root-level sections?', |
|
| 379 | - 'info_nb_articles' => '@nb@ articles', |
|
| 380 | - 'info_nb_auteurs' => '@nb@ authors', |
|
| 381 | - 'info_nb_messages' => '@nb@ messages', |
|
| 382 | - 'info_nb_mots_cles' => '@nb@ keywords', |
|
| 383 | - 'info_nb_rubriques' => '@nb@ sections', |
|
| 384 | - 'info_nb_visiteurs' => '@nb@ visitors', |
|
| 385 | - 'info_nom' => 'Name', |
|
| 386 | - 'info_nom_destinataire' => 'Name of recipient', |
|
| 387 | - 'info_nom_pas_conforme' => 'html tags are not allowed', |
|
| 388 | - 'info_nom_site' => 'Name of your site', |
|
| 389 | - 'info_nombre_articles' => '@nb_articles@ articles,', |
|
| 390 | - 'info_nombre_rubriques' => '@nb_rubriques@ sections,', |
|
| 391 | - 'info_nombre_sites' => '@nb_sites@ sites,', |
|
| 392 | - 'info_non_deplacer' => 'Do not move...', |
|
| 393 | - 'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP can send a site newsletter (list of newly-published articles and news items). |
|
| 377 | + 'info_multi_objets' => '@objets@: activate the language menu', |
|
| 378 | + 'info_multi_secteurs' => '... only for root-level sections?', |
|
| 379 | + 'info_nb_articles' => '@nb@ articles', |
|
| 380 | + 'info_nb_auteurs' => '@nb@ authors', |
|
| 381 | + 'info_nb_messages' => '@nb@ messages', |
|
| 382 | + 'info_nb_mots_cles' => '@nb@ keywords', |
|
| 383 | + 'info_nb_rubriques' => '@nb@ sections', |
|
| 384 | + 'info_nb_visiteurs' => '@nb@ visitors', |
|
| 385 | + 'info_nom' => 'Name', |
|
| 386 | + 'info_nom_destinataire' => 'Name of recipient', |
|
| 387 | + 'info_nom_pas_conforme' => 'html tags are not allowed', |
|
| 388 | + 'info_nom_site' => 'Name of your site', |
|
| 389 | + 'info_nombre_articles' => '@nb_articles@ articles,', |
|
| 390 | + 'info_nombre_rubriques' => '@nb_rubriques@ sections,', |
|
| 391 | + 'info_nombre_sites' => '@nb_sites@ sites,', |
|
| 392 | + 'info_non_deplacer' => 'Do not move...', |
|
| 393 | + 'info_non_envoi_annonce_dernieres_nouveautes' => 'SPIP can send a site newsletter (list of newly-published articles and news items). |
|
| 394 | 394 | .', |
| 395 | - 'info_non_envoi_liste_nouveautes' => 'Do not send newsletter', |
|
| 396 | - 'info_non_modifiable' => 'cannot be modified', |
|
| 397 | - 'info_non_suppression_mot_cle' => 'I do not want to delete this keyword.', |
|
| 398 | - 'info_notes' => 'Footnotes', |
|
| 399 | - 'info_nouvel_article' => 'New article', |
|
| 400 | - 'info_nouvelle_traduction' => 'New translation:', |
|
| 401 | - 'info_numero_article' => 'ARTICLE NUMBER:', |
|
| 402 | - 'info_obligatoire_02' => '(Required)', |
|
| 403 | - 'info_option_accepter_visiteurs' => 'Allow visitor registration via the public site', |
|
| 404 | - 'info_option_ne_pas_accepter_visiteurs' => 'Disable visitor registration', |
|
| 405 | - 'info_options_avancees' => 'ADVANCED OPTIONS', |
|
| 406 | - 'info_ou' => 'or...', |
|
| 407 | - 'info_page_interdite' => 'Forbidden page', |
|
| 408 | - 'info_par_nom' => 'by name', |
|
| 409 | - 'info_par_nombre_article' => 'by number of articles', |
|
| 410 | - 'info_par_statut' => 'by status', |
|
| 411 | - 'info_par_tri' => '’(by @tri@)’', |
|
| 412 | - 'info_passe_trop_court' => 'Password too short.', |
|
| 413 | - 'info_passe_trop_court_car_pluriel' => 'Your password must contain at least @nb@ characters.', |
|
| 414 | - 'info_passes_identiques' => 'The two passwords are not identical.', |
|
| 415 | - 'info_plus_cinq_car' => 'more than 5 characters', |
|
| 416 | - 'info_plus_cinq_car_2' => '(More than 5 characters)', |
|
| 417 | - 'info_plus_trois_car' => '(More than 3 characters)', |
|
| 418 | - 'info_popularite' => 'popularity: @popularite@; visits: @visites@', |
|
| 419 | - 'info_post_scriptum' => 'Postscript', |
|
| 420 | - 'info_post_scriptum_2' => 'Postscript:', |
|
| 421 | - 'info_pour' => 'for', |
|
| 422 | - 'info_preview_texte' => 'It is possible to preview the site’s various editorial elements with at least the "submitted" status, as well as the"editing in progress" elements of which you are the author. Should this preview mode be restricted to administrators, open to all authors, or disabled completely?', |
|
| 423 | - 'info_procedez_par_etape' => 'please proceed step by step', |
|
| 424 | - 'info_procedure_maj_version' => 'the upgrade procedure must be run to adapt |
|
| 395 | + 'info_non_envoi_liste_nouveautes' => 'Do not send newsletter', |
|
| 396 | + 'info_non_modifiable' => 'cannot be modified', |
|
| 397 | + 'info_non_suppression_mot_cle' => 'I do not want to delete this keyword.', |
|
| 398 | + 'info_notes' => 'Footnotes', |
|
| 399 | + 'info_nouvel_article' => 'New article', |
|
| 400 | + 'info_nouvelle_traduction' => 'New translation:', |
|
| 401 | + 'info_numero_article' => 'ARTICLE NUMBER:', |
|
| 402 | + 'info_obligatoire_02' => '(Required)', |
|
| 403 | + 'info_option_accepter_visiteurs' => 'Allow visitor registration via the public site', |
|
| 404 | + 'info_option_ne_pas_accepter_visiteurs' => 'Disable visitor registration', |
|
| 405 | + 'info_options_avancees' => 'ADVANCED OPTIONS', |
|
| 406 | + 'info_ou' => 'or...', |
|
| 407 | + 'info_page_interdite' => 'Forbidden page', |
|
| 408 | + 'info_par_nom' => 'by name', |
|
| 409 | + 'info_par_nombre_article' => 'by number of articles', |
|
| 410 | + 'info_par_statut' => 'by status', |
|
| 411 | + 'info_par_tri' => '’(by @tri@)’', |
|
| 412 | + 'info_passe_trop_court' => 'Password too short.', |
|
| 413 | + 'info_passe_trop_court_car_pluriel' => 'Your password must contain at least @nb@ characters.', |
|
| 414 | + 'info_passes_identiques' => 'The two passwords are not identical.', |
|
| 415 | + 'info_plus_cinq_car' => 'more than 5 characters', |
|
| 416 | + 'info_plus_cinq_car_2' => '(More than 5 characters)', |
|
| 417 | + 'info_plus_trois_car' => '(More than 3 characters)', |
|
| 418 | + 'info_popularite' => 'popularity: @popularite@; visits: @visites@', |
|
| 419 | + 'info_post_scriptum' => 'Postscript', |
|
| 420 | + 'info_post_scriptum_2' => 'Postscript:', |
|
| 421 | + 'info_pour' => 'for', |
|
| 422 | + 'info_preview_texte' => 'It is possible to preview the site’s various editorial elements with at least the "submitted" status, as well as the"editing in progress" elements of which you are the author. Should this preview mode be restricted to administrators, open to all authors, or disabled completely?', |
|
| 423 | + 'info_procedez_par_etape' => 'please proceed step by step', |
|
| 424 | + 'info_procedure_maj_version' => 'the upgrade procedure must be run to adapt |
|
| 425 | 425 | the database to this new version of SPIP.', |
| 426 | - 'info_proxy_ok' => 'Proxy test successful.', |
|
| 427 | - 'info_ps' => 'P.S.', |
|
| 428 | - 'info_publier' => 'publish', |
|
| 429 | - 'info_publies' => 'Your articles published online', |
|
| 430 | - 'info_question_accepter_visiteurs' => 'If your website’s templates allows visitors to register with no access to the admin area, please activate the following option:', |
|
| 431 | - 'info_question_inscription_nouveaux_redacteurs' => 'Do you wish to allow new editors to register |
|
| 426 | + 'info_proxy_ok' => 'Proxy test successful.', |
|
| 427 | + 'info_ps' => 'P.S.', |
|
| 428 | + 'info_publier' => 'publish', |
|
| 429 | + 'info_publies' => 'Your articles published online', |
|
| 430 | + 'info_question_accepter_visiteurs' => 'If your website’s templates allows visitors to register with no access to the admin area, please activate the following option:', |
|
| 431 | + 'info_question_inscription_nouveaux_redacteurs' => 'Do you wish to allow new editors to register |
|
| 432 | 432 | from the public website? If you agree with this, visitors will be able to register |
| 433 | 433 | using an automatic form, and then access the admin area to |
| 434 | 434 | write their own articles. <div class="notice">During the registration process, users usually receive an automatic email |
@@ -436,404 +436,404 @@ discard block |
||
| 436 | 436 | service providers disallow sending emails from their |
| 437 | 437 | servers: in that case, automated registration is not |
| 438 | 438 | possible.</div>', |
| 439 | - 'info_qui_edite' => '@nom_auteur_modif@ worked on the contents @date_diff@ minutes ago', |
|
| 440 | - 'info_racine_site' => 'Site root', |
|
| 441 | - 'info_recharger_page' => 'Please wait a few moments, then reload this page.', |
|
| 442 | - 'info_recherche_auteur_zero' => 'No results for "@cherche_auteur@".', |
|
| 443 | - 'info_recommencer' => 'Please try again.', |
|
| 444 | - 'info_redacteur_1' => 'Editor', |
|
| 445 | - 'info_redacteur_2' => 'with access to the admin area (<i>recommended</i>)', |
|
| 446 | - 'info_redacteurs' => 'Editors', |
|
| 447 | - 'info_redaction_en_cours' => 'EDITING IN PROGRESS', |
|
| 448 | - 'info_redirection' => 'Redirection', |
|
| 449 | - 'info_redirection_activee' => 'Redirection is enabled.', |
|
| 450 | - 'info_redirection_boucle' => 'You are trying to redirect the article toward itself. ', |
|
| 451 | - 'info_redirection_desactivee' => 'Redirection is deleted.', |
|
| 452 | - 'info_refuses' => 'Your rejected articles ', |
|
| 453 | - 'info_reglage_ldap' => 'Options: <b>Adjusting LDAP import</b>', |
|
| 454 | - 'info_renvoi_article' => '<b>Redirection.</b> This article redirects to:', |
|
| 455 | - 'info_reserve_admin' => 'Only administrators can modify this address.', |
|
| 456 | - 'info_restreindre_rubrique' => 'Restrict management to section:', |
|
| 457 | - 'info_resultat_recherche' => 'Search results:', |
|
| 458 | - 'info_rubriques' => 'Sections', |
|
| 459 | - 'info_rubriques_02' => 'sections', |
|
| 460 | - 'info_rubriques_trouvees' => 'Sections found', |
|
| 461 | - 'info_sans_titre' => 'Untitled', |
|
| 462 | - 'info_selection_chemin_acces' => '<b>Select</b> the access path in the directory:', |
|
| 463 | - 'info_signatures' => 'signatures', |
|
| 464 | - 'info_site' => 'Site', |
|
| 465 | - 'info_site_2' => 'site:', |
|
| 466 | - 'info_site_min' => 'site', |
|
| 467 | - 'info_site_reference_2' => 'Referenced site', |
|
| 468 | - 'info_site_web' => 'Web site:', |
|
| 469 | - 'info_sites' => 'sites', |
|
| 470 | - 'info_sites_lies_mot' => 'Referenced sites with this keyword', |
|
| 471 | - 'info_sites_proxy' => 'Using a proxy', |
|
| 472 | - 'info_sites_trouves' => 'Sites found', |
|
| 473 | - 'info_sous_titre' => 'Subtitle:', |
|
| 474 | - 'info_statut_administrateur' => 'Administrator', |
|
| 475 | - 'info_statut_auteur' => 'This author’s status:', |
|
| 476 | - 'info_statut_auteur_2' => 'I am', |
|
| 477 | - 'info_statut_auteur_a_confirmer' => 'Registration to be confirmed', |
|
| 478 | - 'info_statut_auteur_autre' => 'Other status:', |
|
| 479 | - 'info_statut_redacteur' => 'Editor', |
|
| 480 | - 'info_statut_utilisateurs_1' => 'Default status for imported users', |
|
| 481 | - 'info_statut_utilisateurs_2' => 'Choose the status to be attributed to persons present in the LDAP directory when they connect for the first time. You can modify this value for each individual author later on.', |
|
| 482 | - 'info_suivi_activite' => 'Follow editorial activity', |
|
| 483 | - 'info_surtitre' => 'Top title:', |
|
| 484 | - 'info_syndication_integrale_1' => 'Your site provides syndication files (see "<a href="@url@">@titre@</a>").', |
|
| 485 | - 'info_syndication_integrale_2' => 'Do you wish to send whole articles or only a summary of a few hundred characters?', |
|
| 486 | - 'info_table_prefix' => 'It is possible to change the prefix of the names of the database tables. (you need to do this if you are installing several sites in the same database). The prefix must be written in unaccented, lower-case letters without any spaces.', |
|
| 487 | - 'info_taille_maximale_images' => 'SPIP will test for the maximum image size (in millions of pixels) which it can process.<br /> Images bigger than this will not be reduced.', |
|
| 488 | - 'info_taille_maximale_vignette' => 'Maximum size for vignettes generated by the system:', |
|
| 489 | - 'info_terminer_installation' => 'You can now finish the standard installation process.', |
|
| 490 | - 'info_texte' => 'Text', |
|
| 491 | - 'info_texte_explicatif' => 'Explanation', |
|
| 492 | - 'info_texte_long' => '(The text is long: it will appear in several parts which will be reassembled after validation.)', |
|
| 493 | - 'info_texte_message' => 'Text of your message:', |
|
| 494 | - 'info_texte_message_02' => 'Message text', |
|
| 495 | - 'info_titre' => 'Title:', |
|
| 496 | - 'info_total' => 'total:', |
|
| 497 | - 'info_tous_articles_en_redaction' => 'All articles in progress', |
|
| 498 | - 'info_tous_articles_presents' => 'All articles published in this section', |
|
| 499 | - 'info_tous_articles_refuses' => 'All refused articles', |
|
| 500 | - 'info_tous_les' => 'every:', |
|
| 501 | - 'info_tout_site' => 'The entire site', |
|
| 502 | - 'info_tout_site2' => 'The article has not been translated into this language.', |
|
| 503 | - 'info_tout_site3' => 'The article has been translated into this language, but changes have since been made to the reference article. The translation needs updating.', |
|
| 504 | - 'info_tout_site4' => 'The article has been translated into this language, and the translation is up-to-date.', |
|
| 505 | - 'info_tout_site5' => 'Original article.', |
|
| 506 | - 'info_tout_site6' => '<b>Warning:</b> only original articles are displayed. |
|
| 439 | + 'info_qui_edite' => '@nom_auteur_modif@ worked on the contents @date_diff@ minutes ago', |
|
| 440 | + 'info_racine_site' => 'Site root', |
|
| 441 | + 'info_recharger_page' => 'Please wait a few moments, then reload this page.', |
|
| 442 | + 'info_recherche_auteur_zero' => 'No results for "@cherche_auteur@".', |
|
| 443 | + 'info_recommencer' => 'Please try again.', |
|
| 444 | + 'info_redacteur_1' => 'Editor', |
|
| 445 | + 'info_redacteur_2' => 'with access to the admin area (<i>recommended</i>)', |
|
| 446 | + 'info_redacteurs' => 'Editors', |
|
| 447 | + 'info_redaction_en_cours' => 'EDITING IN PROGRESS', |
|
| 448 | + 'info_redirection' => 'Redirection', |
|
| 449 | + 'info_redirection_activee' => 'Redirection is enabled.', |
|
| 450 | + 'info_redirection_boucle' => 'You are trying to redirect the article toward itself. ', |
|
| 451 | + 'info_redirection_desactivee' => 'Redirection is deleted.', |
|
| 452 | + 'info_refuses' => 'Your rejected articles ', |
|
| 453 | + 'info_reglage_ldap' => 'Options: <b>Adjusting LDAP import</b>', |
|
| 454 | + 'info_renvoi_article' => '<b>Redirection.</b> This article redirects to:', |
|
| 455 | + 'info_reserve_admin' => 'Only administrators can modify this address.', |
|
| 456 | + 'info_restreindre_rubrique' => 'Restrict management to section:', |
|
| 457 | + 'info_resultat_recherche' => 'Search results:', |
|
| 458 | + 'info_rubriques' => 'Sections', |
|
| 459 | + 'info_rubriques_02' => 'sections', |
|
| 460 | + 'info_rubriques_trouvees' => 'Sections found', |
|
| 461 | + 'info_sans_titre' => 'Untitled', |
|
| 462 | + 'info_selection_chemin_acces' => '<b>Select</b> the access path in the directory:', |
|
| 463 | + 'info_signatures' => 'signatures', |
|
| 464 | + 'info_site' => 'Site', |
|
| 465 | + 'info_site_2' => 'site:', |
|
| 466 | + 'info_site_min' => 'site', |
|
| 467 | + 'info_site_reference_2' => 'Referenced site', |
|
| 468 | + 'info_site_web' => 'Web site:', |
|
| 469 | + 'info_sites' => 'sites', |
|
| 470 | + 'info_sites_lies_mot' => 'Referenced sites with this keyword', |
|
| 471 | + 'info_sites_proxy' => 'Using a proxy', |
|
| 472 | + 'info_sites_trouves' => 'Sites found', |
|
| 473 | + 'info_sous_titre' => 'Subtitle:', |
|
| 474 | + 'info_statut_administrateur' => 'Administrator', |
|
| 475 | + 'info_statut_auteur' => 'This author’s status:', |
|
| 476 | + 'info_statut_auteur_2' => 'I am', |
|
| 477 | + 'info_statut_auteur_a_confirmer' => 'Registration to be confirmed', |
|
| 478 | + 'info_statut_auteur_autre' => 'Other status:', |
|
| 479 | + 'info_statut_redacteur' => 'Editor', |
|
| 480 | + 'info_statut_utilisateurs_1' => 'Default status for imported users', |
|
| 481 | + 'info_statut_utilisateurs_2' => 'Choose the status to be attributed to persons present in the LDAP directory when they connect for the first time. You can modify this value for each individual author later on.', |
|
| 482 | + 'info_suivi_activite' => 'Follow editorial activity', |
|
| 483 | + 'info_surtitre' => 'Top title:', |
|
| 484 | + 'info_syndication_integrale_1' => 'Your site provides syndication files (see "<a href="@url@">@titre@</a>").', |
|
| 485 | + 'info_syndication_integrale_2' => 'Do you wish to send whole articles or only a summary of a few hundred characters?', |
|
| 486 | + 'info_table_prefix' => 'It is possible to change the prefix of the names of the database tables. (you need to do this if you are installing several sites in the same database). The prefix must be written in unaccented, lower-case letters without any spaces.', |
|
| 487 | + 'info_taille_maximale_images' => 'SPIP will test for the maximum image size (in millions of pixels) which it can process.<br /> Images bigger than this will not be reduced.', |
|
| 488 | + 'info_taille_maximale_vignette' => 'Maximum size for vignettes generated by the system:', |
|
| 489 | + 'info_terminer_installation' => 'You can now finish the standard installation process.', |
|
| 490 | + 'info_texte' => 'Text', |
|
| 491 | + 'info_texte_explicatif' => 'Explanation', |
|
| 492 | + 'info_texte_long' => '(The text is long: it will appear in several parts which will be reassembled after validation.)', |
|
| 493 | + 'info_texte_message' => 'Text of your message:', |
|
| 494 | + 'info_texte_message_02' => 'Message text', |
|
| 495 | + 'info_titre' => 'Title:', |
|
| 496 | + 'info_total' => 'total:', |
|
| 497 | + 'info_tous_articles_en_redaction' => 'All articles in progress', |
|
| 498 | + 'info_tous_articles_presents' => 'All articles published in this section', |
|
| 499 | + 'info_tous_articles_refuses' => 'All refused articles', |
|
| 500 | + 'info_tous_les' => 'every:', |
|
| 501 | + 'info_tout_site' => 'The entire site', |
|
| 502 | + 'info_tout_site2' => 'The article has not been translated into this language.', |
|
| 503 | + 'info_tout_site3' => 'The article has been translated into this language, but changes have since been made to the reference article. The translation needs updating.', |
|
| 504 | + 'info_tout_site4' => 'The article has been translated into this language, and the translation is up-to-date.', |
|
| 505 | + 'info_tout_site5' => 'Original article.', |
|
| 506 | + 'info_tout_site6' => '<b>Warning:</b> only original articles are displayed. |
|
| 507 | 507 | Translations are linked to the original, |
| 508 | 508 | and their status is colour-coded:', |
| 509 | - 'info_traductions' => 'Translations', |
|
| 510 | - 'info_travail_colaboratif' => 'Collaborative work on articles', |
|
| 511 | - 'info_un_article' => 'an article,', |
|
| 512 | - 'info_un_site' => 'a site,', |
|
| 513 | - 'info_une_rubrique' => 'a section,', |
|
| 514 | - 'info_une_rubrique_02' => '1 section', |
|
| 515 | - 'info_url' => 'URL:', |
|
| 516 | - 'info_url_proxy' => 'Proxy URL', |
|
| 517 | - 'info_url_proxy_pas_conforme' => 'Proxy’s URL not valid.', |
|
| 518 | - 'info_url_site_pas_conforme' => 'the website URL is invalid.', |
|
| 519 | - 'info_url_test_proxy' => 'Test URL', |
|
| 520 | - 'info_urlref' => 'Hyperlink:', |
|
| 521 | - 'info_utilisation_spip' => 'SPIP is now ready for use', |
|
| 522 | - 'info_visites_par_mois' => 'Monthly display:', |
|
| 523 | - 'info_visiteur_1' => 'Visitor', |
|
| 524 | - 'info_visiteur_2' => 'to the public site', |
|
| 525 | - 'info_visiteurs' => 'Visitors', |
|
| 526 | - 'info_visiteurs_02' => 'Public site visitors', |
|
| 527 | - 'info_webmestre_forces' => 'The web administrators are currently defined in <tt>@file_options@</tt>.', |
|
| 528 | - 'install_adresse_base_hebergeur' => 'Database address attributed by the hosting provider', |
|
| 529 | - 'install_connect_ok' => 'The new database has been declared using the server name @connect@.', |
|
| 530 | - 'install_echec_annonce' => 'This installation will probably fail, or damage your site.', |
|
| 531 | - 'install_extension_mbstring' => 'SPIP does not work with:', |
|
| 532 | - 'install_extension_php_obligatoire' => 'SPIP requires the php extension:', |
|
| 533 | - 'install_login_base_hebergeur' => 'Login attributed by the service provider', |
|
| 534 | - 'install_nom_base_hebergeur' => 'Database name attributed by the service provider:', |
|
| 535 | - 'install_pas_table' => 'The database has no tables', |
|
| 536 | - 'install_pass_base_hebergeur' => 'Password attributed by your hosting service ', |
|
| 537 | - 'install_php_extension' => 'The following extensions are missing : @extensions@', |
|
| 538 | - 'install_php_version' => 'This version of PHP @version@ is too old (minimum = @minimum@)', |
|
| 539 | - 'install_php_version_max' => 'PHP version @version@ too recent (maximum = @maximum@)', |
|
| 540 | - 'install_select_langue' => 'Select a language, then click on "next" to start installation.', |
|
| 541 | - 'install_select_type_db' => 'Indicate the type of database:', |
|
| 542 | - 'install_select_type_mysql' => 'MySQL', |
|
| 543 | - 'install_select_type_pg' => 'PostgreSQL', |
|
| 544 | - 'install_select_type_sqlite2' => 'SQLite 2', |
|
| 545 | - 'install_select_type_sqlite3' => 'SQLite 3', |
|
| 546 | - 'install_serveur_hebergeur' => 'Database server attributed by the hosting provider', |
|
| 547 | - 'install_table_prefix_hebergeur' => 'Table prefix attributed by your hosting provider:', |
|
| 548 | - 'install_tables_base' => 'Tables in the database', |
|
| 549 | - 'install_types_db_connus' => 'SPIP can use <b>MySQL</b> (the most common) and <b>SQLite</b>.', |
|
| 550 | - 'install_types_db_connus_avertissement' => 'The support of <b>PostgreSQL</b is actually proposed as experimental', |
|
| 551 | - 'instituer_erreur_statut_a_change' => 'The status has already been modified', |
|
| 552 | - 'instituer_erreur_statut_non_autorise' => 'You cannot select this status', |
|
| 553 | - 'intem_redacteur' => 'editor', |
|
| 554 | - 'intitule_licence' => 'Licence', |
|
| 555 | - 'item_accepter_inscriptions' => 'Allow registration', |
|
| 556 | - 'item_activer_messages_avertissement' => 'Activate warning messages', |
|
| 557 | - 'item_administrateur_2' => 'administrator', |
|
| 558 | - 'item_afficher_calendrier' => 'Display in calendar', |
|
| 559 | - 'item_autoriser_syndication_integrale' => 'Include entire articles in syndication feeds', |
|
| 560 | - 'item_choix_administrateurs' => 'administrators', |
|
| 561 | - 'item_choix_generation_miniature' => 'Generate thumbnails automatically.', |
|
| 562 | - 'item_choix_non_generation_miniature' => 'Do not generate thumbnails.', |
|
| 563 | - 'item_choix_redacteurs' => 'editors', |
|
| 564 | - 'item_choix_visiteurs' => 'visitors to the public site', |
|
| 565 | - 'item_creer_fichiers_authent' => 'Create .htpasswd files', |
|
| 566 | - 'item_login' => 'Login', |
|
| 567 | - 'item_messagerie_agenda' => 'Activate messaging system and calendars', |
|
| 568 | - 'item_mots_cles_association_articles' => 'articles', |
|
| 569 | - 'item_mots_cles_association_rubriques' => 'sections', |
|
| 570 | - 'item_mots_cles_association_sites' => 'referenced or syndicated sites.', |
|
| 571 | - 'item_non' => 'No', |
|
| 572 | - 'item_non_accepter_inscriptions' => 'Disable registration', |
|
| 573 | - 'item_non_activer_messages_avertissement' => 'No warning messages', |
|
| 574 | - 'item_non_afficher_calendrier' => 'Do not show in calendar', |
|
| 575 | - 'item_non_autoriser_syndication_integrale' => 'Only send a summary', |
|
| 576 | - 'item_non_creer_fichiers_authent' => 'Do not create these files', |
|
| 577 | - 'item_non_messagerie_agenda' => 'Disable the messaging system and calendars', |
|
| 578 | - 'item_non_publier_articles' => 'Do not publish articles before their specified publication date.', |
|
| 579 | - 'item_nouvel_auteur' => 'New author', |
|
| 580 | - 'item_nouvelle_rubrique' => 'New section', |
|
| 581 | - 'item_oui' => 'Yes', |
|
| 582 | - 'item_publier_articles' => 'Publish articles, irrespective of publication date.', |
|
| 583 | - 'item_reponse_article' => 'Reply to the article', |
|
| 584 | - 'item_visiteur' => 'visitor', |
|
| 509 | + 'info_traductions' => 'Translations', |
|
| 510 | + 'info_travail_colaboratif' => 'Collaborative work on articles', |
|
| 511 | + 'info_un_article' => 'an article,', |
|
| 512 | + 'info_un_site' => 'a site,', |
|
| 513 | + 'info_une_rubrique' => 'a section,', |
|
| 514 | + 'info_une_rubrique_02' => '1 section', |
|
| 515 | + 'info_url' => 'URL:', |
|
| 516 | + 'info_url_proxy' => 'Proxy URL', |
|
| 517 | + 'info_url_proxy_pas_conforme' => 'Proxy’s URL not valid.', |
|
| 518 | + 'info_url_site_pas_conforme' => 'the website URL is invalid.', |
|
| 519 | + 'info_url_test_proxy' => 'Test URL', |
|
| 520 | + 'info_urlref' => 'Hyperlink:', |
|
| 521 | + 'info_utilisation_spip' => 'SPIP is now ready for use', |
|
| 522 | + 'info_visites_par_mois' => 'Monthly display:', |
|
| 523 | + 'info_visiteur_1' => 'Visitor', |
|
| 524 | + 'info_visiteur_2' => 'to the public site', |
|
| 525 | + 'info_visiteurs' => 'Visitors', |
|
| 526 | + 'info_visiteurs_02' => 'Public site visitors', |
|
| 527 | + 'info_webmestre_forces' => 'The web administrators are currently defined in <tt>@file_options@</tt>.', |
|
| 528 | + 'install_adresse_base_hebergeur' => 'Database address attributed by the hosting provider', |
|
| 529 | + 'install_connect_ok' => 'The new database has been declared using the server name @connect@.', |
|
| 530 | + 'install_echec_annonce' => 'This installation will probably fail, or damage your site.', |
|
| 531 | + 'install_extension_mbstring' => 'SPIP does not work with:', |
|
| 532 | + 'install_extension_php_obligatoire' => 'SPIP requires the php extension:', |
|
| 533 | + 'install_login_base_hebergeur' => 'Login attributed by the service provider', |
|
| 534 | + 'install_nom_base_hebergeur' => 'Database name attributed by the service provider:', |
|
| 535 | + 'install_pas_table' => 'The database has no tables', |
|
| 536 | + 'install_pass_base_hebergeur' => 'Password attributed by your hosting service ', |
|
| 537 | + 'install_php_extension' => 'The following extensions are missing : @extensions@', |
|
| 538 | + 'install_php_version' => 'This version of PHP @version@ is too old (minimum = @minimum@)', |
|
| 539 | + 'install_php_version_max' => 'PHP version @version@ too recent (maximum = @maximum@)', |
|
| 540 | + 'install_select_langue' => 'Select a language, then click on "next" to start installation.', |
|
| 541 | + 'install_select_type_db' => 'Indicate the type of database:', |
|
| 542 | + 'install_select_type_mysql' => 'MySQL', |
|
| 543 | + 'install_select_type_pg' => 'PostgreSQL', |
|
| 544 | + 'install_select_type_sqlite2' => 'SQLite 2', |
|
| 545 | + 'install_select_type_sqlite3' => 'SQLite 3', |
|
| 546 | + 'install_serveur_hebergeur' => 'Database server attributed by the hosting provider', |
|
| 547 | + 'install_table_prefix_hebergeur' => 'Table prefix attributed by your hosting provider:', |
|
| 548 | + 'install_tables_base' => 'Tables in the database', |
|
| 549 | + 'install_types_db_connus' => 'SPIP can use <b>MySQL</b> (the most common) and <b>SQLite</b>.', |
|
| 550 | + 'install_types_db_connus_avertissement' => 'The support of <b>PostgreSQL</b is actually proposed as experimental', |
|
| 551 | + 'instituer_erreur_statut_a_change' => 'The status has already been modified', |
|
| 552 | + 'instituer_erreur_statut_non_autorise' => 'You cannot select this status', |
|
| 553 | + 'intem_redacteur' => 'editor', |
|
| 554 | + 'intitule_licence' => 'Licence', |
|
| 555 | + 'item_accepter_inscriptions' => 'Allow registration', |
|
| 556 | + 'item_activer_messages_avertissement' => 'Activate warning messages', |
|
| 557 | + 'item_administrateur_2' => 'administrator', |
|
| 558 | + 'item_afficher_calendrier' => 'Display in calendar', |
|
| 559 | + 'item_autoriser_syndication_integrale' => 'Include entire articles in syndication feeds', |
|
| 560 | + 'item_choix_administrateurs' => 'administrators', |
|
| 561 | + 'item_choix_generation_miniature' => 'Generate thumbnails automatically.', |
|
| 562 | + 'item_choix_non_generation_miniature' => 'Do not generate thumbnails.', |
|
| 563 | + 'item_choix_redacteurs' => 'editors', |
|
| 564 | + 'item_choix_visiteurs' => 'visitors to the public site', |
|
| 565 | + 'item_creer_fichiers_authent' => 'Create .htpasswd files', |
|
| 566 | + 'item_login' => 'Login', |
|
| 567 | + 'item_messagerie_agenda' => 'Activate messaging system and calendars', |
|
| 568 | + 'item_mots_cles_association_articles' => 'articles', |
|
| 569 | + 'item_mots_cles_association_rubriques' => 'sections', |
|
| 570 | + 'item_mots_cles_association_sites' => 'referenced or syndicated sites.', |
|
| 571 | + 'item_non' => 'No', |
|
| 572 | + 'item_non_accepter_inscriptions' => 'Disable registration', |
|
| 573 | + 'item_non_activer_messages_avertissement' => 'No warning messages', |
|
| 574 | + 'item_non_afficher_calendrier' => 'Do not show in calendar', |
|
| 575 | + 'item_non_autoriser_syndication_integrale' => 'Only send a summary', |
|
| 576 | + 'item_non_creer_fichiers_authent' => 'Do not create these files', |
|
| 577 | + 'item_non_messagerie_agenda' => 'Disable the messaging system and calendars', |
|
| 578 | + 'item_non_publier_articles' => 'Do not publish articles before their specified publication date.', |
|
| 579 | + 'item_nouvel_auteur' => 'New author', |
|
| 580 | + 'item_nouvelle_rubrique' => 'New section', |
|
| 581 | + 'item_oui' => 'Yes', |
|
| 582 | + 'item_publier_articles' => 'Publish articles, irrespective of publication date.', |
|
| 583 | + 'item_reponse_article' => 'Reply to the article', |
|
| 584 | + 'item_visiteur' => 'visitor', |
|
| 585 | 585 | |
| 586 | - // J |
|
| 587 | - 'jour_non_connu_nc' => 'unknown', |
|
| 586 | + // J |
|
| 587 | + 'jour_non_connu_nc' => 'unknown', |
|
| 588 | 588 | |
| 589 | - // L |
|
| 590 | - 'label_bando_outils' => 'Toolbar', |
|
| 591 | - 'label_bando_outils_afficher' => 'Show the tools', |
|
| 592 | - 'label_bando_outils_masquer' => 'Hide the tools', |
|
| 593 | - 'label_choix_langue' => 'Choose your language', |
|
| 594 | - 'label_langue' => 'Language', |
|
| 595 | - 'label_nom_fichier_connect' => 'Indicate the name for this server', |
|
| 596 | - 'label_slogan_site' => 'Website slogan', |
|
| 597 | - 'label_taille_ecran' => 'Screen width', |
|
| 598 | - 'label_texte_et_icones_navigation' => 'Navigation menu', |
|
| 599 | - 'label_texte_et_icones_page' => 'Page display', |
|
| 600 | - 'ldap_correspondance' => 'inherit field @champ@', |
|
| 601 | - 'ldap_correspondance_1' => 'Inherit LDAP fields', |
|
| 602 | - 'ldap_correspondance_2' => 'For each of these SPIP fields, enter the name of the corresponding LDAP field. Leave blank if you don’t want it filled, separate with spaces or commas to try several LDAP fields.', |
|
| 603 | - 'lien_ajouter_auteur' => 'Add this author', |
|
| 604 | - 'lien_ajouter_une_rubrique' => 'Add this section', |
|
| 605 | - 'lien_email' => 'email', |
|
| 606 | - 'lien_nom_site' => 'SITE NAME:', |
|
| 607 | - 'lien_rapide_contenu' => 'Go to the content', |
|
| 608 | - 'lien_rapide_navigation' => 'Go to the navigation', |
|
| 609 | - 'lien_rapide_recherche' => 'Go to the search', |
|
| 610 | - 'lien_retirer_auteur' => 'Remove author', |
|
| 611 | - 'lien_retirer_rubrique' => 'Remove the section', |
|
| 612 | - 'lien_retirer_tous_auteurs' => 'Remove all authors', |
|
| 613 | - 'lien_retirer_toutes_rubriques' => 'Remove all sections', |
|
| 614 | - 'lien_site' => 'site', |
|
| 615 | - 'lien_tout_decocher' => 'Uncheck all', |
|
| 616 | - 'lien_tout_deplier' => 'Expand all', |
|
| 617 | - 'lien_tout_replier' => 'Collapse all', |
|
| 618 | - 'lien_tout_supprimer' => 'Delete all', |
|
| 619 | - 'lien_trier_nom' => 'Sort by name', |
|
| 620 | - 'lien_trier_nombre_articles' => 'Sort by total articles', |
|
| 621 | - 'lien_trier_statut' => 'Sort by status', |
|
| 622 | - 'lien_voir_en_ligne' => 'VIEW ONLINE:', |
|
| 623 | - 'logo_article' => 'Article’s logo', |
|
| 624 | - 'logo_auteur' => 'Author’s logo', |
|
| 625 | - 'logo_rubrique' => 'Section’s logo', |
|
| 626 | - 'logo_site' => 'Website’s logo', |
|
| 627 | - 'logo_standard_rubrique' => 'Default sections’ logo', |
|
| 628 | - 'logo_survol' => 'Mouseover logo', |
|
| 589 | + // L |
|
| 590 | + 'label_bando_outils' => 'Toolbar', |
|
| 591 | + 'label_bando_outils_afficher' => 'Show the tools', |
|
| 592 | + 'label_bando_outils_masquer' => 'Hide the tools', |
|
| 593 | + 'label_choix_langue' => 'Choose your language', |
|
| 594 | + 'label_langue' => 'Language', |
|
| 595 | + 'label_nom_fichier_connect' => 'Indicate the name for this server', |
|
| 596 | + 'label_slogan_site' => 'Website slogan', |
|
| 597 | + 'label_taille_ecran' => 'Screen width', |
|
| 598 | + 'label_texte_et_icones_navigation' => 'Navigation menu', |
|
| 599 | + 'label_texte_et_icones_page' => 'Page display', |
|
| 600 | + 'ldap_correspondance' => 'inherit field @champ@', |
|
| 601 | + 'ldap_correspondance_1' => 'Inherit LDAP fields', |
|
| 602 | + 'ldap_correspondance_2' => 'For each of these SPIP fields, enter the name of the corresponding LDAP field. Leave blank if you don’t want it filled, separate with spaces or commas to try several LDAP fields.', |
|
| 603 | + 'lien_ajouter_auteur' => 'Add this author', |
|
| 604 | + 'lien_ajouter_une_rubrique' => 'Add this section', |
|
| 605 | + 'lien_email' => 'email', |
|
| 606 | + 'lien_nom_site' => 'SITE NAME:', |
|
| 607 | + 'lien_rapide_contenu' => 'Go to the content', |
|
| 608 | + 'lien_rapide_navigation' => 'Go to the navigation', |
|
| 609 | + 'lien_rapide_recherche' => 'Go to the search', |
|
| 610 | + 'lien_retirer_auteur' => 'Remove author', |
|
| 611 | + 'lien_retirer_rubrique' => 'Remove the section', |
|
| 612 | + 'lien_retirer_tous_auteurs' => 'Remove all authors', |
|
| 613 | + 'lien_retirer_toutes_rubriques' => 'Remove all sections', |
|
| 614 | + 'lien_site' => 'site', |
|
| 615 | + 'lien_tout_decocher' => 'Uncheck all', |
|
| 616 | + 'lien_tout_deplier' => 'Expand all', |
|
| 617 | + 'lien_tout_replier' => 'Collapse all', |
|
| 618 | + 'lien_tout_supprimer' => 'Delete all', |
|
| 619 | + 'lien_trier_nom' => 'Sort by name', |
|
| 620 | + 'lien_trier_nombre_articles' => 'Sort by total articles', |
|
| 621 | + 'lien_trier_statut' => 'Sort by status', |
|
| 622 | + 'lien_voir_en_ligne' => 'VIEW ONLINE:', |
|
| 623 | + 'logo_article' => 'Article’s logo', |
|
| 624 | + 'logo_auteur' => 'Author’s logo', |
|
| 625 | + 'logo_rubrique' => 'Section’s logo', |
|
| 626 | + 'logo_site' => 'Website’s logo', |
|
| 627 | + 'logo_standard_rubrique' => 'Default sections’ logo', |
|
| 628 | + 'logo_survol' => 'Mouseover logo', |
|
| 629 | 629 | |
| 630 | - // M |
|
| 631 | - 'menu_aide_installation_choix_base' => 'Choosing your database', |
|
| 632 | - 'module_fichier_langue' => 'Language file', |
|
| 633 | - 'module_raccourci' => 'Shortcut', |
|
| 634 | - 'module_texte_affiche' => 'Displayed text', |
|
| 635 | - 'module_texte_explicatif' => 'You can insert thse shortcuts in your website templates. They will be automatically translated into any languages for which a language file exists.', |
|
| 636 | - 'module_texte_traduction' => 'The language file « @module@ » is available in:', |
|
| 637 | - 'mois_non_connu' => 'unknown', |
|
| 630 | + // M |
|
| 631 | + 'menu_aide_installation_choix_base' => 'Choosing your database', |
|
| 632 | + 'module_fichier_langue' => 'Language file', |
|
| 633 | + 'module_raccourci' => 'Shortcut', |
|
| 634 | + 'module_texte_affiche' => 'Displayed text', |
|
| 635 | + 'module_texte_explicatif' => 'You can insert thse shortcuts in your website templates. They will be automatically translated into any languages for which a language file exists.', |
|
| 636 | + 'module_texte_traduction' => 'The language file « @module@ » is available in:', |
|
| 637 | + 'mois_non_connu' => 'unknown', |
|
| 638 | 638 | |
| 639 | - // N |
|
| 640 | - 'nouvelle_version_spip' => 'SPIP upgrade @version@ is available', |
|
| 641 | - 'nouvelle_version_spip_majeure' => 'A new SPIP version @version@ is available', |
|
| 639 | + // N |
|
| 640 | + 'nouvelle_version_spip' => 'SPIP upgrade @version@ is available', |
|
| 641 | + 'nouvelle_version_spip_majeure' => 'A new SPIP version @version@ is available', |
|
| 642 | 642 | |
| 643 | - // O |
|
| 644 | - 'onglet_contenu' => 'Contents', |
|
| 645 | - 'onglet_declarer_une_autre_base' => 'Declare another database', |
|
| 646 | - 'onglet_discuter' => 'Discuss', |
|
| 647 | - 'onglet_interactivite' => 'Interactivity', |
|
| 648 | - 'onglet_proprietes' => 'Properties', |
|
| 649 | - 'onglet_repartition_actuelle' => 'now', |
|
| 650 | - 'onglet_sous_rubriques' => 'Subsections', |
|
| 643 | + // O |
|
| 644 | + 'onglet_contenu' => 'Contents', |
|
| 645 | + 'onglet_declarer_une_autre_base' => 'Declare another database', |
|
| 646 | + 'onglet_discuter' => 'Discuss', |
|
| 647 | + 'onglet_interactivite' => 'Interactivity', |
|
| 648 | + 'onglet_proprietes' => 'Properties', |
|
| 649 | + 'onglet_repartition_actuelle' => 'now', |
|
| 650 | + 'onglet_sous_rubriques' => 'Subsections', |
|
| 651 | 651 | |
| 652 | - // P |
|
| 653 | - 'page_pas_proxy' => 'This page must not go through the proxy', |
|
| 654 | - 'pas_de_proxy_pour' => 'If necessary, indicate to which machines or domains this proxy should not apply (for example: @exemple@)', |
|
| 655 | - 'phpinfo' => 'PHP configuration', |
|
| 656 | - 'plugin_charge_paquet' => 'Loading the archive file @name@', |
|
| 657 | - 'plugin_charger' => 'Download', |
|
| 658 | - 'plugin_erreur_charger' => 'error: @zip@ cannot be loaded', |
|
| 659 | - 'plugin_erreur_droit1' => 'Cannot write to directory <code>@dest@</code>.', |
|
| 660 | - 'plugin_erreur_droit2' => 'Please check write permissions for this directory (and create the directory if necessary). Alternatively, install the files by FTP.', |
|
| 661 | - 'plugin_erreur_zip' => 'pclzip failure: error @status@', |
|
| 662 | - 'plugin_etat_developpement' => 'under development', |
|
| 663 | - 'plugin_etat_experimental' => 'experimental', |
|
| 664 | - 'plugin_etat_stable' => 'stable', |
|
| 665 | - 'plugin_etat_test' => 'being tested', |
|
| 666 | - 'plugin_impossible_activer' => 'Impossible to activate the plugin @plugin@', |
|
| 667 | - 'plugin_info_automatique1' => 'If you wish to allow automatic plugin installation, please:', |
|
| 668 | - 'plugin_info_automatique1_lib' => 'If you want to let this library to be installed automatically, please:', |
|
| 669 | - 'plugin_info_automatique2' => 'Create a directory <code>@rep@</code> ;', |
|
| 670 | - 'plugin_info_automatique3' => 'Check that the server has the proper permissions to write to this directory.', |
|
| 671 | - 'plugin_info_automatique_creer' => 'to create at the root of the website.', |
|
| 672 | - 'plugin_info_automatique_exemples' => 'examples:', |
|
| 673 | - 'plugin_info_automatique_ftp' => 'You may install plugins by FTP in the <tt>@rep@</tt> directory', |
|
| 674 | - 'plugin_info_automatique_lib' => 'Some plugins need to be able to load files into the <code>lib/</code> directory. This directory should be created at the website root.', |
|
| 675 | - 'plugin_info_automatique_liste' => 'Your plugin lists:', |
|
| 676 | - 'plugin_info_automatique_liste_officielle' => 'official plugins', |
|
| 677 | - 'plugin_info_automatique_liste_update' => 'Update lists', |
|
| 678 | - 'plugin_info_automatique_ou' => 'or...', |
|
| 679 | - 'plugin_info_automatique_select' => 'Select a plugin below: SPIP will load it and will install it in the <code>@rep@</code> directory. If the plugin already exists, it will be updated.', |
|
| 680 | - 'plugin_info_credit' => 'Credits', |
|
| 681 | - 'plugin_info_erreur_xml' => 'Incorrect declaration of the plugin', |
|
| 682 | - 'plugin_info_install_ok' => 'Installation successful', |
|
| 683 | - 'plugin_info_necessite' => 'Requires:', |
|
| 684 | - 'plugin_info_non_compatible_spip' => 'This plugin is incompatible with this version of SPIP', |
|
| 685 | - 'plugin_info_plugins_dist_1' => 'The following plugins are loaded and activated in the @plugins_dist@ directory.', |
|
| 686 | - 'plugin_info_plugins_dist_2' => 'They cannot be disabled.', |
|
| 687 | - 'plugin_info_telecharger' => 'load from @url@ and install to @rep@', |
|
| 688 | - 'plugin_info_upgrade_ok' => 'Successful update', |
|
| 689 | - 'plugin_librairies_installees' => 'Libraries installed', |
|
| 690 | - 'plugin_necessite_extension_php' => 'Requires the PHP extension @plugin@ version @version@.', |
|
| 691 | - 'plugin_necessite_extension_php_sans_version' => 'Requires the PHP extension @plugin@', |
|
| 692 | - 'plugin_necessite_lib' => 'This plugin requires the library @lib@', |
|
| 693 | - 'plugin_necessite_php' => 'Requires @plugin@ version @version@.', |
|
| 694 | - 'plugin_necessite_plugin' => 'Version @version@ of the plugin @plugin@ is required.', |
|
| 695 | - 'plugin_necessite_plugin_sans_version' => 'Requires the plugin @plugin@', |
|
| 696 | - 'plugin_necessite_spip' => 'SPIP version @version@ or newer is required.', |
|
| 697 | - 'plugin_source' => 'source: ', |
|
| 698 | - 'plugin_titre_automatique' => 'Automatic installation', |
|
| 699 | - 'plugin_titre_automatique_ajouter' => 'Add plugins', |
|
| 700 | - 'plugin_titre_installation' => '@plugin@ plugin installation', |
|
| 701 | - 'plugin_titre_modifier' => 'My plugins', |
|
| 702 | - 'plugin_utilise_extension_php' => 'The version of the PHP extension @plugin@ must be @version@.', |
|
| 703 | - 'plugin_utilise_php' => '@plugin@ version must be @version@.', |
|
| 704 | - 'plugin_utilise_plugin' => 'The version of the plugin @plugin@ must be @version@.', |
|
| 705 | - 'plugin_zip_active' => 'Continue in order to activate', |
|
| 706 | - 'plugin_zip_adresse' => 'To load a zipped plugin file, or a list of plugins, enter the path below.', |
|
| 707 | - 'plugin_zip_adresse_champ' => 'Path of the plugin or list ', |
|
| 708 | - 'plugin_zip_content' => 'It contains the following files(@taille@),<br />ready to be installed in the <code>@rep@</code> directory', |
|
| 709 | - 'plugin_zip_installe_finie' => 'The file @zip@ has been unpacked and installed.', |
|
| 710 | - 'plugin_zip_installe_rep_finie' => 'The file @zip@ has been unpacked and installed in the @rep@ directory', |
|
| 711 | - 'plugin_zip_installer' => 'You may now install it.', |
|
| 712 | - 'plugin_zip_telecharge' => 'The file @zip@ has been loaded', |
|
| 713 | - 'plugins_actif_aucun' => 'No plugins active.', |
|
| 714 | - 'plugins_actif_un' => 'One plugin active', |
|
| 715 | - 'plugins_actifs' => '@count@ active plugins.', |
|
| 716 | - 'plugins_actifs_liste' => 'Enabled', |
|
| 717 | - 'plugins_compte' => '@count@ plugins', |
|
| 718 | - 'plugins_disponible_un' => 'One plugin available', |
|
| 719 | - 'plugins_disponibles' => '@count@ plugins available.', |
|
| 720 | - 'plugins_erreur' => 'Error in the plugins: @plugins@', |
|
| 721 | - 'plugins_liste' => 'List of plugins', |
|
| 722 | - 'plugins_liste_dist' => 'Locked plugins', |
|
| 723 | - 'plugins_recents' => 'Recent plugins', |
|
| 724 | - 'plugins_tous_liste' => 'All', |
|
| 725 | - 'plugins_vue_hierarchie' => 'Hierarchy', |
|
| 726 | - 'plugins_vue_liste' => 'List', |
|
| 727 | - 'protocole_ldap' => 'Protocol version:', |
|
| 652 | + // P |
|
| 653 | + 'page_pas_proxy' => 'This page must not go through the proxy', |
|
| 654 | + 'pas_de_proxy_pour' => 'If necessary, indicate to which machines or domains this proxy should not apply (for example: @exemple@)', |
|
| 655 | + 'phpinfo' => 'PHP configuration', |
|
| 656 | + 'plugin_charge_paquet' => 'Loading the archive file @name@', |
|
| 657 | + 'plugin_charger' => 'Download', |
|
| 658 | + 'plugin_erreur_charger' => 'error: @zip@ cannot be loaded', |
|
| 659 | + 'plugin_erreur_droit1' => 'Cannot write to directory <code>@dest@</code>.', |
|
| 660 | + 'plugin_erreur_droit2' => 'Please check write permissions for this directory (and create the directory if necessary). Alternatively, install the files by FTP.', |
|
| 661 | + 'plugin_erreur_zip' => 'pclzip failure: error @status@', |
|
| 662 | + 'plugin_etat_developpement' => 'under development', |
|
| 663 | + 'plugin_etat_experimental' => 'experimental', |
|
| 664 | + 'plugin_etat_stable' => 'stable', |
|
| 665 | + 'plugin_etat_test' => 'being tested', |
|
| 666 | + 'plugin_impossible_activer' => 'Impossible to activate the plugin @plugin@', |
|
| 667 | + 'plugin_info_automatique1' => 'If you wish to allow automatic plugin installation, please:', |
|
| 668 | + 'plugin_info_automatique1_lib' => 'If you want to let this library to be installed automatically, please:', |
|
| 669 | + 'plugin_info_automatique2' => 'Create a directory <code>@rep@</code> ;', |
|
| 670 | + 'plugin_info_automatique3' => 'Check that the server has the proper permissions to write to this directory.', |
|
| 671 | + 'plugin_info_automatique_creer' => 'to create at the root of the website.', |
|
| 672 | + 'plugin_info_automatique_exemples' => 'examples:', |
|
| 673 | + 'plugin_info_automatique_ftp' => 'You may install plugins by FTP in the <tt>@rep@</tt> directory', |
|
| 674 | + 'plugin_info_automatique_lib' => 'Some plugins need to be able to load files into the <code>lib/</code> directory. This directory should be created at the website root.', |
|
| 675 | + 'plugin_info_automatique_liste' => 'Your plugin lists:', |
|
| 676 | + 'plugin_info_automatique_liste_officielle' => 'official plugins', |
|
| 677 | + 'plugin_info_automatique_liste_update' => 'Update lists', |
|
| 678 | + 'plugin_info_automatique_ou' => 'or...', |
|
| 679 | + 'plugin_info_automatique_select' => 'Select a plugin below: SPIP will load it and will install it in the <code>@rep@</code> directory. If the plugin already exists, it will be updated.', |
|
| 680 | + 'plugin_info_credit' => 'Credits', |
|
| 681 | + 'plugin_info_erreur_xml' => 'Incorrect declaration of the plugin', |
|
| 682 | + 'plugin_info_install_ok' => 'Installation successful', |
|
| 683 | + 'plugin_info_necessite' => 'Requires:', |
|
| 684 | + 'plugin_info_non_compatible_spip' => 'This plugin is incompatible with this version of SPIP', |
|
| 685 | + 'plugin_info_plugins_dist_1' => 'The following plugins are loaded and activated in the @plugins_dist@ directory.', |
|
| 686 | + 'plugin_info_plugins_dist_2' => 'They cannot be disabled.', |
|
| 687 | + 'plugin_info_telecharger' => 'load from @url@ and install to @rep@', |
|
| 688 | + 'plugin_info_upgrade_ok' => 'Successful update', |
|
| 689 | + 'plugin_librairies_installees' => 'Libraries installed', |
|
| 690 | + 'plugin_necessite_extension_php' => 'Requires the PHP extension @plugin@ version @version@.', |
|
| 691 | + 'plugin_necessite_extension_php_sans_version' => 'Requires the PHP extension @plugin@', |
|
| 692 | + 'plugin_necessite_lib' => 'This plugin requires the library @lib@', |
|
| 693 | + 'plugin_necessite_php' => 'Requires @plugin@ version @version@.', |
|
| 694 | + 'plugin_necessite_plugin' => 'Version @version@ of the plugin @plugin@ is required.', |
|
| 695 | + 'plugin_necessite_plugin_sans_version' => 'Requires the plugin @plugin@', |
|
| 696 | + 'plugin_necessite_spip' => 'SPIP version @version@ or newer is required.', |
|
| 697 | + 'plugin_source' => 'source: ', |
|
| 698 | + 'plugin_titre_automatique' => 'Automatic installation', |
|
| 699 | + 'plugin_titre_automatique_ajouter' => 'Add plugins', |
|
| 700 | + 'plugin_titre_installation' => '@plugin@ plugin installation', |
|
| 701 | + 'plugin_titre_modifier' => 'My plugins', |
|
| 702 | + 'plugin_utilise_extension_php' => 'The version of the PHP extension @plugin@ must be @version@.', |
|
| 703 | + 'plugin_utilise_php' => '@plugin@ version must be @version@.', |
|
| 704 | + 'plugin_utilise_plugin' => 'The version of the plugin @plugin@ must be @version@.', |
|
| 705 | + 'plugin_zip_active' => 'Continue in order to activate', |
|
| 706 | + 'plugin_zip_adresse' => 'To load a zipped plugin file, or a list of plugins, enter the path below.', |
|
| 707 | + 'plugin_zip_adresse_champ' => 'Path of the plugin or list ', |
|
| 708 | + 'plugin_zip_content' => 'It contains the following files(@taille@),<br />ready to be installed in the <code>@rep@</code> directory', |
|
| 709 | + 'plugin_zip_installe_finie' => 'The file @zip@ has been unpacked and installed.', |
|
| 710 | + 'plugin_zip_installe_rep_finie' => 'The file @zip@ has been unpacked and installed in the @rep@ directory', |
|
| 711 | + 'plugin_zip_installer' => 'You may now install it.', |
|
| 712 | + 'plugin_zip_telecharge' => 'The file @zip@ has been loaded', |
|
| 713 | + 'plugins_actif_aucun' => 'No plugins active.', |
|
| 714 | + 'plugins_actif_un' => 'One plugin active', |
|
| 715 | + 'plugins_actifs' => '@count@ active plugins.', |
|
| 716 | + 'plugins_actifs_liste' => 'Enabled', |
|
| 717 | + 'plugins_compte' => '@count@ plugins', |
|
| 718 | + 'plugins_disponible_un' => 'One plugin available', |
|
| 719 | + 'plugins_disponibles' => '@count@ plugins available.', |
|
| 720 | + 'plugins_erreur' => 'Error in the plugins: @plugins@', |
|
| 721 | + 'plugins_liste' => 'List of plugins', |
|
| 722 | + 'plugins_liste_dist' => 'Locked plugins', |
|
| 723 | + 'plugins_recents' => 'Recent plugins', |
|
| 724 | + 'plugins_tous_liste' => 'All', |
|
| 725 | + 'plugins_vue_hierarchie' => 'Hierarchy', |
|
| 726 | + 'plugins_vue_liste' => 'List', |
|
| 727 | + 'protocole_ldap' => 'Protocol version:', |
|
| 728 | 728 | |
| 729 | - // Q |
|
| 730 | - 'queue_executer_maintenant' => 'Run now', |
|
| 731 | - 'queue_info_purger' => 'You can delete all pending tasks and reset the list with periodic tasks', |
|
| 732 | - 'queue_nb_jobs_in_queue' => '@nb@ pending tasks', |
|
| 733 | - 'queue_next_job_in_nb_sec' => 'Next task in @nb@ s', |
|
| 734 | - 'queue_no_job_in_queue' => 'No pending tasks', |
|
| 735 | - 'queue_one_job_in_queue' => '1 pending task', |
|
| 736 | - 'queue_priorite_tache' => 'priority', |
|
| 737 | - 'queue_purger_queue' => 'Reset the tasks queue', |
|
| 738 | - 'queue_titre' => 'Background tasks', |
|
| 729 | + // Q |
|
| 730 | + 'queue_executer_maintenant' => 'Run now', |
|
| 731 | + 'queue_info_purger' => 'You can delete all pending tasks and reset the list with periodic tasks', |
|
| 732 | + 'queue_nb_jobs_in_queue' => '@nb@ pending tasks', |
|
| 733 | + 'queue_next_job_in_nb_sec' => 'Next task in @nb@ s', |
|
| 734 | + 'queue_no_job_in_queue' => 'No pending tasks', |
|
| 735 | + 'queue_one_job_in_queue' => '1 pending task', |
|
| 736 | + 'queue_priorite_tache' => 'priority', |
|
| 737 | + 'queue_purger_queue' => 'Reset the tasks queue', |
|
| 738 | + 'queue_titre' => 'Background tasks', |
|
| 739 | 739 | |
| 740 | - // R |
|
| 741 | - 'repertoire_plugins' => 'Directory:', |
|
| 742 | - 'required' => '(Required)', |
|
| 740 | + // R |
|
| 741 | + 'repertoire_plugins' => 'Directory:', |
|
| 742 | + 'required' => '(Required)', |
|
| 743 | 743 | |
| 744 | - // S |
|
| 745 | - 'sans_heure' => 'time not specified', |
|
| 746 | - 'statut_admin_restreint' => 'restricted admin', |
|
| 747 | - 'statut_webmestre' => 'webmaster', |
|
| 744 | + // S |
|
| 745 | + 'sans_heure' => 'time not specified', |
|
| 746 | + 'statut_admin_restreint' => 'restricted admin', |
|
| 747 | + 'statut_webmestre' => 'webmaster', |
|
| 748 | 748 | |
| 749 | - // T |
|
| 750 | - 'tache_cron_asap' => 'CRON task @function@ (ASAP)', |
|
| 751 | - 'tache_cron_secondes' => 'CRON task @function@ (every @nb@ s)', |
|
| 752 | - 'taille_cache_image' => 'The images calculated automatically by SPIP (thumbnails, titles transformed into graphics, mathematical formulae in TeX format, etc.) take up a total of @taille@ in the @dir@ directory.', |
|
| 753 | - 'taille_cache_moins_de' => 'The cache size is less than @octets@.', |
|
| 754 | - 'taille_cache_octets' => 'The size of the cache is currently around @octets@.', |
|
| 755 | - 'taille_cache_vide' => 'The cache is empty.', |
|
| 756 | - 'taille_repertoire_cache' => 'Current cache size ', |
|
| 757 | - 'text_article_propose_publication' => 'Article submitted for publication.', |
|
| 758 | - 'texte_acces_ldap_anonyme_1' => 'Some LDAP servers do not allow anonymous access. In this case you must indicate an initial access identifier for future directory searches. However, in most cases the following fields can be left empty.', |
|
| 759 | - 'texte_admin_effacer_01' => 'This command deletes <i>all</i> content in the database, |
|
| 749 | + // T |
|
| 750 | + 'tache_cron_asap' => 'CRON task @function@ (ASAP)', |
|
| 751 | + 'tache_cron_secondes' => 'CRON task @function@ (every @nb@ s)', |
|
| 752 | + 'taille_cache_image' => 'The images calculated automatically by SPIP (thumbnails, titles transformed into graphics, mathematical formulae in TeX format, etc.) take up a total of @taille@ in the @dir@ directory.', |
|
| 753 | + 'taille_cache_moins_de' => 'The cache size is less than @octets@.', |
|
| 754 | + 'taille_cache_octets' => 'The size of the cache is currently around @octets@.', |
|
| 755 | + 'taille_cache_vide' => 'The cache is empty.', |
|
| 756 | + 'taille_repertoire_cache' => 'Current cache size ', |
|
| 757 | + 'text_article_propose_publication' => 'Article submitted for publication.', |
|
| 758 | + 'texte_acces_ldap_anonyme_1' => 'Some LDAP servers do not allow anonymous access. In this case you must indicate an initial access identifier for future directory searches. However, in most cases the following fields can be left empty.', |
|
| 759 | + 'texte_admin_effacer_01' => 'This command deletes <i>all</i> content in the database, |
|
| 760 | 760 | including <i>all</i> the access parameters for editors and administrators. After using it, you must |
| 761 | 761 | reinstall SPIP, create a new database and a new administrator account.', |
| 762 | - 'texte_adresse_annuaire_1' => '(If your directory is installed on the same machine as your website, it is probably «localhost».)', |
|
| 763 | - 'texte_ajout_auteur' => 'The following author was added to the article:', |
|
| 764 | - 'texte_annuaire_ldap_1' => 'If you have access to a LDAP directory server, you can use it to import users automatically into SPIP.', |
|
| 765 | - 'texte_article_statut' => 'Article status:', |
|
| 766 | - 'texte_article_virtuel' => 'Virtual article', |
|
| 767 | - 'texte_article_virtuel_reference' => '<b>Virtual article:</b> an article on your SPIP website which redirects to another URL. To remove redirection, delete the URL.', |
|
| 768 | - 'texte_aucun_resultat_auteur' => 'No results for "@cherche_auteur@".', |
|
| 769 | - 'texte_auteur_messagerie' => 'This site can update the list of editors online in real time, which allows you to be contacted by other users. You can opt not to appear in this list (you are then "invisible" to other users).', |
|
| 770 | - 'texte_auteurs' => 'THE AUTHORS', |
|
| 771 | - 'texte_choix_base_1' => 'Select your database:', |
|
| 772 | - 'texte_choix_base_2' => 'The SQL server contains several databases.', |
|
| 773 | - 'texte_choix_base_3' => '<b>Select</b> below the one attributed by your hosting provider:', |
|
| 774 | - 'texte_choix_table_prefix' => 'Prefix for tables:', |
|
| 775 | - 'texte_compte_element' => '@count@ element', |
|
| 776 | - 'texte_compte_elements' => '@count@ elements', |
|
| 777 | - 'texte_conflit_edition_correction' => 'Please compare differences between the two versions. You can also copy your changes and start over.', |
|
| 778 | - 'texte_connexion_mysql' => 'Consult the information provided by your hosting service. It should contain the connection codes for the SQL server.', |
|
| 779 | - 'texte_contenu_article' => '(Brief description of the article.)', |
|
| 780 | - 'texte_contenu_articles' => 'Depending on the layout chosen for your site, you can decide |
|
| 762 | + 'texte_adresse_annuaire_1' => '(If your directory is installed on the same machine as your website, it is probably «localhost».)', |
|
| 763 | + 'texte_ajout_auteur' => 'The following author was added to the article:', |
|
| 764 | + 'texte_annuaire_ldap_1' => 'If you have access to a LDAP directory server, you can use it to import users automatically into SPIP.', |
|
| 765 | + 'texte_article_statut' => 'Article status:', |
|
| 766 | + 'texte_article_virtuel' => 'Virtual article', |
|
| 767 | + 'texte_article_virtuel_reference' => '<b>Virtual article:</b> an article on your SPIP website which redirects to another URL. To remove redirection, delete the URL.', |
|
| 768 | + 'texte_aucun_resultat_auteur' => 'No results for "@cherche_auteur@".', |
|
| 769 | + 'texte_auteur_messagerie' => 'This site can update the list of editors online in real time, which allows you to be contacted by other users. You can opt not to appear in this list (you are then "invisible" to other users).', |
|
| 770 | + 'texte_auteurs' => 'THE AUTHORS', |
|
| 771 | + 'texte_choix_base_1' => 'Select your database:', |
|
| 772 | + 'texte_choix_base_2' => 'The SQL server contains several databases.', |
|
| 773 | + 'texte_choix_base_3' => '<b>Select</b> below the one attributed by your hosting provider:', |
|
| 774 | + 'texte_choix_table_prefix' => 'Prefix for tables:', |
|
| 775 | + 'texte_compte_element' => '@count@ element', |
|
| 776 | + 'texte_compte_elements' => '@count@ elements', |
|
| 777 | + 'texte_conflit_edition_correction' => 'Please compare differences between the two versions. You can also copy your changes and start over.', |
|
| 778 | + 'texte_connexion_mysql' => 'Consult the information provided by your hosting service. It should contain the connection codes for the SQL server.', |
|
| 779 | + 'texte_contenu_article' => '(Brief description of the article.)', |
|
| 780 | + 'texte_contenu_articles' => 'Depending on the layout chosen for your site, you can decide |
|
| 781 | 781 | that some article options are not to be used. |
| 782 | 782 | Use the following list to choose which options should be available.', |
| 783 | - 'texte_crash_base' => 'If your database |
|
| 783 | + 'texte_crash_base' => 'If your database |
|
| 784 | 784 | crashed, you can try to repair it |
| 785 | 785 | automatically.', |
| 786 | - 'texte_creer_rubrique' => 'Before writing any articles,<br /> you must create a section.', |
|
| 787 | - 'texte_date_creation_article' => 'ARTICLE CREATION DATE:', |
|
| 788 | - 'texte_date_creation_objet' => 'Creation date:', # on ajoute le ":" |
|
| 789 | - 'texte_date_publication_anterieure' => 'Date first published:', |
|
| 790 | - 'texte_date_publication_anterieure_nonaffichee' => 'Hide previous publication date.', |
|
| 791 | - 'texte_date_publication_article' => 'PUBLISHED ON:', |
|
| 792 | - 'texte_date_publication_objet' => 'Published on:', |
|
| 793 | - 'texte_definir_comme_traduction_rubrique' => 'This section is a translation of section number:', |
|
| 794 | - 'texte_descriptif_rapide' => 'Brief description', |
|
| 795 | - 'texte_effacer_base' => 'Delete the SPIP database', |
|
| 796 | - 'texte_effacer_statistiques' => 'Delete the statistics', |
|
| 797 | - 'texte_en_cours_validation' => 'The following articles and news have been submitted for evaluation.', |
|
| 798 | - 'texte_enrichir_mise_a_jour' => 'You can enrich the layout of your text by using "typographical shortcuts".', |
|
| 799 | - 'texte_fichier_authent' => '<b>Should SPIP create the special files <tt>.htpasswd</tt> |
|
| 786 | + 'texte_creer_rubrique' => 'Before writing any articles,<br /> you must create a section.', |
|
| 787 | + 'texte_date_creation_article' => 'ARTICLE CREATION DATE:', |
|
| 788 | + 'texte_date_creation_objet' => 'Creation date:', # on ajoute le ":" |
|
| 789 | + 'texte_date_publication_anterieure' => 'Date first published:', |
|
| 790 | + 'texte_date_publication_anterieure_nonaffichee' => 'Hide previous publication date.', |
|
| 791 | + 'texte_date_publication_article' => 'PUBLISHED ON:', |
|
| 792 | + 'texte_date_publication_objet' => 'Published on:', |
|
| 793 | + 'texte_definir_comme_traduction_rubrique' => 'This section is a translation of section number:', |
|
| 794 | + 'texte_descriptif_rapide' => 'Brief description', |
|
| 795 | + 'texte_effacer_base' => 'Delete the SPIP database', |
|
| 796 | + 'texte_effacer_statistiques' => 'Delete the statistics', |
|
| 797 | + 'texte_en_cours_validation' => 'The following articles and news have been submitted for evaluation.', |
|
| 798 | + 'texte_enrichir_mise_a_jour' => 'You can enrich the layout of your text by using "typographical shortcuts".', |
|
| 799 | + 'texte_fichier_authent' => '<b>Should SPIP create the special files <tt>.htpasswd</tt> |
|
| 800 | 800 | and <tt>.htpasswd-admin</tt> in the directory @dossier@?</b> |
| 801 | 801 | <p>These files can be used to restrict access to authors and administrators to other parts of your site (for instance, external statistical programme).</p><p>If you have no need of such files, you can keep this option with its default value (no file creation).</p>', |
| 802 | - 'texte_informations_personnelles_1' => 'The system will now create your personal account for this site.', |
|
| 803 | - 'texte_informations_personnelles_2' => '(Note: if it is a reinstallation, if your former access is still working, you can', |
|
| 804 | - 'texte_introductif_article' => '(Introductory text for the article.)', |
|
| 805 | - 'texte_jeu_caractere' => 'We advise using the universal alphabet (<tt>utf-8</tt>) on your site. This will make it possible to display text in any language. All modern browsers are fully comptabile with this character set.', |
|
| 806 | - 'texte_jeu_caractere_3' => 'Your site currently uses this character set:', |
|
| 807 | - 'texte_jeu_caractere_4' => 'If that does not correspond to your current data (this may occur after restoring your database from a backup), or if <em>you are setting up this site</em> and wish to use a different character set, please indicate the character set here:', |
|
| 808 | - 'texte_login_ldap_1' => '(Keep empty for anonymous access or enter complete path, for instance «<tt>uid=smith, ou=users, dc=my-domain, dc=com</tt>».)', |
|
| 809 | - 'texte_login_precaution' => 'Warning! This is the login which you are currently using. |
|
| 802 | + 'texte_informations_personnelles_1' => 'The system will now create your personal account for this site.', |
|
| 803 | + 'texte_informations_personnelles_2' => '(Note: if it is a reinstallation, if your former access is still working, you can', |
|
| 804 | + 'texte_introductif_article' => '(Introductory text for the article.)', |
|
| 805 | + 'texte_jeu_caractere' => 'We advise using the universal alphabet (<tt>utf-8</tt>) on your site. This will make it possible to display text in any language. All modern browsers are fully comptabile with this character set.', |
|
| 806 | + 'texte_jeu_caractere_3' => 'Your site currently uses this character set:', |
|
| 807 | + 'texte_jeu_caractere_4' => 'If that does not correspond to your current data (this may occur after restoring your database from a backup), or if <em>you are setting up this site</em> and wish to use a different character set, please indicate the character set here:', |
|
| 808 | + 'texte_login_ldap_1' => '(Keep empty for anonymous access or enter complete path, for instance «<tt>uid=smith, ou=users, dc=my-domain, dc=com</tt>».)', |
|
| 809 | + 'texte_login_precaution' => 'Warning! This is the login which you are currently using. |
|
| 810 | 810 | Use this form with caution...', |
| 811 | - 'texte_messagerie_agenda' => 'A messaging system lets website’s authors communicate directly into the admin area. It is linked to a calendar.', |
|
| 812 | - 'texte_mise_a_niveau_base_1' => 'You have just updated SPIP files. |
|
| 811 | + 'texte_messagerie_agenda' => 'A messaging system lets website’s authors communicate directly into the admin area. It is linked to a calendar.', |
|
| 812 | + 'texte_mise_a_niveau_base_1' => 'You have just updated SPIP files. |
|
| 813 | 813 | Now you must upgrade the site |
| 814 | 814 | database.', |
| 815 | - 'texte_modifier_article' => 'Edit this article:', |
|
| 816 | - 'texte_multilinguisme' => 'If you want to manage objects in several languages, with complex navigation, you can add a language selection menu to these objects, depending on the organization of your site.', |
|
| 817 | - 'texte_multilinguisme_trad' => 'You can also enable a system for managing links between the various translations of certain objects.', |
|
| 818 | - 'texte_non_compresse' => '<i>uncompressed</i> (your server does not support this feature)', |
|
| 819 | - 'texte_nouvelle_version_spip_1' => 'You have just installed a new version of SPIP.', |
|
| 820 | - 'texte_nouvelle_version_spip_2' => 'This new version requires a more thorough update than usual. If you are the webmaster of this site, please delete the file @connect@ and restart installation in order to update your database connection parameters. <p>(PS.: if you have forgotten your connection parameters, take a look at the file @connect@ before deleting it!)</p>', |
|
| 821 | - 'texte_operation_echec' => 'Go back to the previous page, select another database or create a new one. Verify the information provided by your hosting service.', |
|
| 822 | - 'texte_plus_trois_car' => 'more than 3 characters', |
|
| 823 | - 'texte_plusieurs_articles' => 'Several authors were found for "@cherche_auteur@":', |
|
| 824 | - 'texte_port_annuaire' => '(Default value is generally suitable.)', |
|
| 825 | - 'texte_presente_plugin' => 'This page shows the plugins available on this site. Activate the plugins you require by ticking the corresponding box.', |
|
| 826 | - 'texte_proposer_publication' => 'When your article is finished,<br /> you can submit it for publication.', |
|
| 827 | - 'texte_proxy' => 'In some cases (e.g. intranet, protected network), it is necessary to use an <i>HTTP proxy</i> to reach external sites (SPIP documentation, syndicated sites, etc.). If this is the case, enter its address in the form @proxy_en_cours@. In most cases you can leave this box empty.', |
|
| 828 | - 'texte_publication_articles_post_dates' => 'Which behaviour should SPIP adopt for articles whose |
|
| 815 | + 'texte_modifier_article' => 'Edit this article:', |
|
| 816 | + 'texte_multilinguisme' => 'If you want to manage objects in several languages, with complex navigation, you can add a language selection menu to these objects, depending on the organization of your site.', |
|
| 817 | + 'texte_multilinguisme_trad' => 'You can also enable a system for managing links between the various translations of certain objects.', |
|
| 818 | + 'texte_non_compresse' => '<i>uncompressed</i> (your server does not support this feature)', |
|
| 819 | + 'texte_nouvelle_version_spip_1' => 'You have just installed a new version of SPIP.', |
|
| 820 | + 'texte_nouvelle_version_spip_2' => 'This new version requires a more thorough update than usual. If you are the webmaster of this site, please delete the file @connect@ and restart installation in order to update your database connection parameters. <p>(PS.: if you have forgotten your connection parameters, take a look at the file @connect@ before deleting it!)</p>', |
|
| 821 | + 'texte_operation_echec' => 'Go back to the previous page, select another database or create a new one. Verify the information provided by your hosting service.', |
|
| 822 | + 'texte_plus_trois_car' => 'more than 3 characters', |
|
| 823 | + 'texte_plusieurs_articles' => 'Several authors were found for "@cherche_auteur@":', |
|
| 824 | + 'texte_port_annuaire' => '(Default value is generally suitable.)', |
|
| 825 | + 'texte_presente_plugin' => 'This page shows the plugins available on this site. Activate the plugins you require by ticking the corresponding box.', |
|
| 826 | + 'texte_proposer_publication' => 'When your article is finished,<br /> you can submit it for publication.', |
|
| 827 | + 'texte_proxy' => 'In some cases (e.g. intranet, protected network), it is necessary to use an <i>HTTP proxy</i> to reach external sites (SPIP documentation, syndicated sites, etc.). If this is the case, enter its address in the form @proxy_en_cours@. In most cases you can leave this box empty.', |
|
| 828 | + 'texte_publication_articles_post_dates' => 'Which behaviour should SPIP adopt for articles whose |
|
| 829 | 829 | publication date has been set in |
| 830 | 830 | the future?', |
| 831 | - 'texte_rappel_selection_champs' => '[Remember to select this field correctly.]', |
|
| 832 | - 'texte_recalcul_page' => 'If you want |
|
| 831 | + 'texte_rappel_selection_champs' => '[Remember to select this field correctly.]', |
|
| 832 | + 'texte_recalcul_page' => 'If you want |
|
| 833 | 833 | to re-process a single page, it is easier to view that page from the public site and click "Re-process this page".', |
| 834 | - 'texte_recuperer_base' => 'Repair the database', |
|
| 835 | - 'texte_reference_mais_redirige' => 'article referenced in your SPIP site, but redirected to another URL.', |
|
| 836 | - 'texte_requetes_echouent' => '<b>When some SQL queries fail |
|
| 834 | + 'texte_recuperer_base' => 'Repair the database', |
|
| 835 | + 'texte_reference_mais_redirige' => 'article referenced in your SPIP site, but redirected to another URL.', |
|
| 836 | + 'texte_requetes_echouent' => '<b>When some SQL queries fail |
|
| 837 | 837 | systematically, without apparent reason, it is possible |
| 838 | 838 | that the database itself |
| 839 | 839 | is the culprit.</b><p> |
@@ -844,87 +844,87 @@ discard block |
||
| 844 | 844 | clues as to where the problem lies.</p><p> |
| 845 | 845 | If the problem persists, contact your |
| 846 | 846 | service provider.</p>', |
| 847 | - 'texte_selection_langue_principale' => 'You can choose the website’s "primary language". This does not mean that you can only write articles in that language, but it will be used to determine |
|
| 847 | + 'texte_selection_langue_principale' => 'You can choose the website’s "primary language". This does not mean that you can only write articles in that language, but it will be used to determine |
|
| 848 | 848 | |
| 849 | 849 | <ul><li> the default date/time format on the public website,</li> |
| 850 | 850 | <li> the nature of the typographical engine which will be used by SPIP for rendering text,</li> |
| 851 | 851 | <li> the language in use in public website’s forms,</li> |
| 852 | 852 | <li> the default language in use in the admin area.</li></ul>', |
| 853 | - 'texte_sous_titre' => 'Subtitle', |
|
| 854 | - 'texte_statistiques_visites' => '(dark bars = Sunday, dark curve: average visits)', |
|
| 855 | - 'texte_statut_attente_validation' => 'awaiting validation', |
|
| 856 | - 'texte_statut_publies' => 'published online', |
|
| 857 | - 'texte_statut_refuses' => 'rejected', |
|
| 858 | - 'texte_suppression_fichiers' => 'Use this command to purge all the files |
|
| 853 | + 'texte_sous_titre' => 'Subtitle', |
|
| 854 | + 'texte_statistiques_visites' => '(dark bars = Sunday, dark curve: average visits)', |
|
| 855 | + 'texte_statut_attente_validation' => 'awaiting validation', |
|
| 856 | + 'texte_statut_publies' => 'published online', |
|
| 857 | + 'texte_statut_refuses' => 'rejected', |
|
| 858 | + 'texte_suppression_fichiers' => 'Use this command to purge all the files |
|
| 859 | 859 | in the SPIP cache. This will force recalculation of every page on the site, useful after |
| 860 | 860 | significant modifications to the site’s graphics or structure.', |
| 861 | - 'texte_sur_titre' => 'Lead-in title', |
|
| 862 | - 'texte_table_ok' => ': this table is OK.', |
|
| 863 | - 'texte_tentative_recuperation' => 'Attempting to repair', |
|
| 864 | - 'texte_tenter_reparation' => 'Attempt to repair the database', |
|
| 865 | - 'texte_test_proxy' => 'To test this proxy, enter the address of a website |
|
| 861 | + 'texte_sur_titre' => 'Lead-in title', |
|
| 862 | + 'texte_table_ok' => ': this table is OK.', |
|
| 863 | + 'texte_tentative_recuperation' => 'Attempting to repair', |
|
| 864 | + 'texte_tenter_reparation' => 'Attempt to repair the database', |
|
| 865 | + 'texte_test_proxy' => 'To test this proxy, enter the address of a website |
|
| 866 | 866 | for verification.', |
| 867 | - 'texte_titre_02' => 'Subject:', |
|
| 868 | - 'texte_titre_obligatoire' => '<b>Title</b> [Required]', |
|
| 869 | - 'texte_travail_article' => '@nom_auteur_modif@ edited this article @date_diff@ minutes ago', |
|
| 870 | - 'texte_travail_collaboratif' => 'If several editors often work on the same article, the system can mark recently "opened" articles in order to avoid multiple simultaneous editing. |
|
| 867 | + 'texte_titre_02' => 'Subject:', |
|
| 868 | + 'texte_titre_obligatoire' => '<b>Title</b> [Required]', |
|
| 869 | + 'texte_travail_article' => '@nom_auteur_modif@ edited this article @date_diff@ minutes ago', |
|
| 870 | + 'texte_travail_collaboratif' => 'If several editors often work on the same article, the system can mark recently "opened" articles in order to avoid multiple simultaneous editing. |
|
| 871 | 871 | This option is disabled by default to avoid displaying unnecessary warning |
| 872 | 872 | messages.', |
| 873 | - 'texte_vide' => 'empty', |
|
| 874 | - 'texte_vider_cache' => 'Empty the cache', |
|
| 875 | - 'titre_admin_tech' => 'Technical maintenance', |
|
| 876 | - 'titre_admin_vider' => 'Technical maintenance', |
|
| 877 | - 'titre_ajouter_un_auteur' => 'Add an author', |
|
| 878 | - 'titre_ajouter_un_mot' => 'Add a keyword', |
|
| 879 | - 'titre_cadre_afficher_article' => 'Show the articles:', |
|
| 880 | - 'titre_cadre_afficher_traductions' => 'Display the translation status for these languages:', |
|
| 881 | - 'titre_cadre_ajouter_auteur' => 'ADD AN AUTHOR:', |
|
| 882 | - 'titre_cadre_interieur_rubrique' => 'In section', |
|
| 883 | - 'titre_cadre_numero_auteur' => 'AUTHOR NUMBER', |
|
| 884 | - 'titre_cadre_numero_objet' => '@objet@ NUMBER:', |
|
| 885 | - 'titre_cadre_signature_obligatoire' => '<b>Signature</b> [Required]<br />', |
|
| 886 | - 'titre_config_contenu_notifications' => 'Notifications', |
|
| 887 | - 'titre_config_contenu_prive' => 'In the admin area', |
|
| 888 | - 'titre_config_contenu_public' => 'On the public site', |
|
| 889 | - 'titre_config_fonctions' => 'Site configuration', |
|
| 890 | - 'titre_config_langage' => 'Configure the language', |
|
| 891 | - 'titre_configuration' => 'Site configuration', |
|
| 892 | - 'titre_configurer_preferences' => 'Configure your preferences', |
|
| 893 | - 'titre_configurer_preferences_menus' => 'Settings of your menus preferences', |
|
| 894 | - 'titre_conflit_edition' => 'Conflict while editing', |
|
| 895 | - 'titre_connexion_ldap' => 'Options: <b>Your LDAP connection</b>', |
|
| 896 | - 'titre_groupe_mots' => 'KEYWORD GROUP:', |
|
| 897 | - 'titre_identite_site' => 'Site identity', |
|
| 898 | - 'titre_langue_article' => 'Article language', |
|
| 899 | - 'titre_langue_rubrique' => 'Section language', |
|
| 900 | - 'titre_langue_trad_article' => 'ARTICLE LANGUAGE AND TRANSLATIONS', |
|
| 901 | - 'titre_les_articles' => 'ARTICLES', |
|
| 902 | - 'titre_messagerie_agenda' => 'Messaging system and calendar', |
|
| 903 | - 'titre_naviguer_dans_le_site' => 'Browse the site...', |
|
| 904 | - 'titre_nouvelle_rubrique' => 'New section', |
|
| 905 | - 'titre_numero_rubrique' => 'SECTION NUMBER:', |
|
| 906 | - 'titre_page_articles_edit' => 'Modify: @titre@', |
|
| 907 | - 'titre_page_articles_page' => 'Articles', |
|
| 908 | - 'titre_page_articles_tous' => 'The entire site', |
|
| 909 | - 'titre_page_calendrier' => 'Calendar @nom_mois@ @annee@', |
|
| 910 | - 'titre_page_config_contenu' => 'Site configuration', |
|
| 911 | - 'titre_page_delete_all' => 'total and irreversible deletion', |
|
| 912 | - 'titre_page_recherche' => 'Search results @recherche@', |
|
| 913 | - 'titre_page_statistiques_referers' => 'Statistics (incoming links)', |
|
| 914 | - 'titre_page_upgrade' => 'SPIP upgrade', |
|
| 915 | - 'titre_preference_menus_favoris' => 'Favourites menu', |
|
| 916 | - 'titre_publication_articles_post_dates' => 'Publication of post dated articles', |
|
| 917 | - 'titre_reparation' => 'Repair', |
|
| 918 | - 'titre_suivi_petition' => 'Petitions follow-up', |
|
| 919 | - 'tls_ldap' => 'Transport Layer Security :', |
|
| 920 | - 'trad_article_traduction' => 'All the versions of this article:', |
|
| 921 | - 'trad_delier' => 'Stop linking to these translations', |
|
| 922 | - 'trad_lier' => 'This article is a translation of article number:', |
|
| 923 | - 'trad_new' => 'Write a new translation', |
|
| 873 | + 'texte_vide' => 'empty', |
|
| 874 | + 'texte_vider_cache' => 'Empty the cache', |
|
| 875 | + 'titre_admin_tech' => 'Technical maintenance', |
|
| 876 | + 'titre_admin_vider' => 'Technical maintenance', |
|
| 877 | + 'titre_ajouter_un_auteur' => 'Add an author', |
|
| 878 | + 'titre_ajouter_un_mot' => 'Add a keyword', |
|
| 879 | + 'titre_cadre_afficher_article' => 'Show the articles:', |
|
| 880 | + 'titre_cadre_afficher_traductions' => 'Display the translation status for these languages:', |
|
| 881 | + 'titre_cadre_ajouter_auteur' => 'ADD AN AUTHOR:', |
|
| 882 | + 'titre_cadre_interieur_rubrique' => 'In section', |
|
| 883 | + 'titre_cadre_numero_auteur' => 'AUTHOR NUMBER', |
|
| 884 | + 'titre_cadre_numero_objet' => '@objet@ NUMBER:', |
|
| 885 | + 'titre_cadre_signature_obligatoire' => '<b>Signature</b> [Required]<br />', |
|
| 886 | + 'titre_config_contenu_notifications' => 'Notifications', |
|
| 887 | + 'titre_config_contenu_prive' => 'In the admin area', |
|
| 888 | + 'titre_config_contenu_public' => 'On the public site', |
|
| 889 | + 'titre_config_fonctions' => 'Site configuration', |
|
| 890 | + 'titre_config_langage' => 'Configure the language', |
|
| 891 | + 'titre_configuration' => 'Site configuration', |
|
| 892 | + 'titre_configurer_preferences' => 'Configure your preferences', |
|
| 893 | + 'titre_configurer_preferences_menus' => 'Settings of your menus preferences', |
|
| 894 | + 'titre_conflit_edition' => 'Conflict while editing', |
|
| 895 | + 'titre_connexion_ldap' => 'Options: <b>Your LDAP connection</b>', |
|
| 896 | + 'titre_groupe_mots' => 'KEYWORD GROUP:', |
|
| 897 | + 'titre_identite_site' => 'Site identity', |
|
| 898 | + 'titre_langue_article' => 'Article language', |
|
| 899 | + 'titre_langue_rubrique' => 'Section language', |
|
| 900 | + 'titre_langue_trad_article' => 'ARTICLE LANGUAGE AND TRANSLATIONS', |
|
| 901 | + 'titre_les_articles' => 'ARTICLES', |
|
| 902 | + 'titre_messagerie_agenda' => 'Messaging system and calendar', |
|
| 903 | + 'titre_naviguer_dans_le_site' => 'Browse the site...', |
|
| 904 | + 'titre_nouvelle_rubrique' => 'New section', |
|
| 905 | + 'titre_numero_rubrique' => 'SECTION NUMBER:', |
|
| 906 | + 'titre_page_articles_edit' => 'Modify: @titre@', |
|
| 907 | + 'titre_page_articles_page' => 'Articles', |
|
| 908 | + 'titre_page_articles_tous' => 'The entire site', |
|
| 909 | + 'titre_page_calendrier' => 'Calendar @nom_mois@ @annee@', |
|
| 910 | + 'titre_page_config_contenu' => 'Site configuration', |
|
| 911 | + 'titre_page_delete_all' => 'total and irreversible deletion', |
|
| 912 | + 'titre_page_recherche' => 'Search results @recherche@', |
|
| 913 | + 'titre_page_statistiques_referers' => 'Statistics (incoming links)', |
|
| 914 | + 'titre_page_upgrade' => 'SPIP upgrade', |
|
| 915 | + 'titre_preference_menus_favoris' => 'Favourites menu', |
|
| 916 | + 'titre_publication_articles_post_dates' => 'Publication of post dated articles', |
|
| 917 | + 'titre_reparation' => 'Repair', |
|
| 918 | + 'titre_suivi_petition' => 'Petitions follow-up', |
|
| 919 | + 'tls_ldap' => 'Transport Layer Security :', |
|
| 920 | + 'trad_article_traduction' => 'All the versions of this article:', |
|
| 921 | + 'trad_delier' => 'Stop linking to these translations', |
|
| 922 | + 'trad_lier' => 'This article is a translation of article number:', |
|
| 923 | + 'trad_new' => 'Write a new translation', |
|
| 924 | 924 | |
| 925 | - // U |
|
| 926 | - 'utf8_convert_erreur_orig' => 'Error: the character set @charset@ is not supported.', |
|
| 925 | + // U |
|
| 926 | + 'utf8_convert_erreur_orig' => 'Error: the character set @charset@ is not supported.', |
|
| 927 | 927 | |
| 928 | - // V |
|
| 929 | - 'version' => 'Version:' |
|
| 928 | + // V |
|
| 929 | + 'version' => 'Version:' |
|
| 930 | 930 | ); |
@@ -39,7 +39,7 @@ discard block |
||
| 39 | 39 | |
| 40 | 40 | $GLOBALS['contexte'] = calculer_contexte(); |
| 41 | 41 | $page = ['contexte_implicite' => calculer_contexte_implicite()]; |
| 42 | - $page['contexte_implicite']['cache'] = $fond . preg_replace( |
|
| 42 | + $page['contexte_implicite']['cache'] = $fond.preg_replace( |
|
| 43 | 43 | ',\.[a-zA-Z0-9]*$,', |
| 44 | 44 | '', |
| 45 | 45 | preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI']) |
@@ -140,7 +140,7 @@ discard block |
||
| 140 | 140 | if ($page === '') { |
| 141 | 141 | $erreur = _T( |
| 142 | 142 | 'info_erreur_squelette2', |
| 143 | - ['fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES] |
|
| 143 | + ['fichier' => spip_htmlspecialchars($fond).'.'._EXTENSION_SQUELETTES] |
|
| 144 | 144 | ); |
| 145 | 145 | erreur_squelette($erreur); |
| 146 | 146 | // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4 |
@@ -183,7 +183,7 @@ discard block |
||
| 183 | 183 | and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) |
| 184 | 184 | and !isset($page['entetes']['Last-Modified']) |
| 185 | 185 | ) { |
| 186 | - $page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT'; |
|
| 186 | + $page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified).' GMT'; |
|
| 187 | 187 | } |
| 188 | 188 | |
| 189 | 189 | // fermer la connexion apres les headers si requete HEAD |
@@ -246,7 +246,7 @@ discard block |
||
| 246 | 246 | 'spip_version_code' => $GLOBALS['spip_version_code'], |
| 247 | 247 | ]; |
| 248 | 248 | if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { |
| 249 | - $contexte_implicite['host'] .= '|' . $_SERVER['HTTP_X_FORWARDED_HOST']; |
|
| 249 | + $contexte_implicite['host'] .= '|'.$_SERVER['HTTP_X_FORWARDED_HOST']; |
|
| 250 | 250 | } |
| 251 | 251 | |
| 252 | 252 | return $contexte_implicite; |
@@ -578,7 +578,7 @@ discard block |
||
| 578 | 578 | } |
| 579 | 579 | } |
| 580 | 580 | if (is_null($id)) { |
| 581 | - $msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]); |
|
| 581 | + $msg = "modeles/$modele : "._T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]); |
|
| 582 | 582 | erreur_squelette($msg); |
| 583 | 583 | // on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant |
| 584 | 584 | $id = 0; |
@@ -623,7 +623,7 @@ discard block |
||
| 623 | 623 | } |
| 624 | 624 | |
| 625 | 625 | if (preg_match(',^[a-z0-9_]+$,', $soustype)) { |
| 626 | - if (!trouve_modele($fond = ($type . '_' . $soustype))) { |
|
| 626 | + if (!trouve_modele($fond = ($type.'_'.$soustype))) { |
|
| 627 | 627 | $fond = ''; |
| 628 | 628 | $class = $soustype; |
| 629 | 629 | } |
@@ -638,7 +638,7 @@ discard block |
||
| 638 | 638 | |
| 639 | 639 | return false; |
| 640 | 640 | } |
| 641 | - $fond = 'modeles/' . $fond; |
|
| 641 | + $fond = 'modeles/'.$fond; |
|
| 642 | 642 | // Creer le contexte |
| 643 | 643 | $contexte = $env; |
| 644 | 644 | $contexte['dir_racine'] = _DIR_RACINE; # eviter de mixer un cache racine et un cache ecrire (meme si pour l'instant les modeles ne sont pas caches, le resultat etant different il faut que le contexte en tienne compte |
@@ -679,7 +679,7 @@ discard block |
||
| 679 | 679 | // sinon, s'il y a un lien, on l'ajoute classiquement |
| 680 | 680 | if ( |
| 681 | 681 | strstr( |
| 682 | - ' ' . ($classes = extraire_attribut($retour, 'class')) . ' ', |
|
| 682 | + ' '.($classes = extraire_attribut($retour, 'class')).' ', |
|
| 683 | 683 | 'spip_lien_ok' |
| 684 | 684 | ) |
| 685 | 685 | ) { |
@@ -690,7 +690,7 @@ discard block |
||
| 690 | 690 | ); |
| 691 | 691 | } else { |
| 692 | 692 | if ($lien) { |
| 693 | - $retour = "<a href=\"" . $lien['href'] . "\" class=\"" . $lien['class'] . "\">" . $retour . '</a>'; |
|
| 693 | + $retour = "<a href=\"".$lien['href']."\" class=\"".$lien['class']."\">".$retour.'</a>'; |
|
| 694 | 694 | } |
| 695 | 695 | } |
| 696 | 696 | |
@@ -713,7 +713,7 @@ discard block |
||
| 713 | 713 | return $page; |
| 714 | 714 | } |
| 715 | 715 | // eval $page et affecte $res |
| 716 | - include _ROOT_RESTREINT . 'public/evaluer_page.php'; |
|
| 716 | + include _ROOT_RESTREINT.'public/evaluer_page.php'; |
|
| 717 | 717 | |
| 718 | 718 | // Lever un drapeau (global) si le fond utilise #SESSION |
| 719 | 719 | // a destination de public/parametrer |
@@ -780,16 +780,16 @@ discard block |
||
| 780 | 780 | if (($pos = strpos($head, '<head>')) !== false) { |
| 781 | 781 | $head = substr_replace($head, $base, $pos + 6, 0); |
| 782 | 782 | } elseif (preg_match(',<head[^>]*>,i', $head, $r)) { |
| 783 | - $head = str_replace($r[0], $r[0] . $base, $head); |
|
| 783 | + $head = str_replace($r[0], $r[0].$base, $head); |
|
| 784 | 784 | } |
| 785 | - $texte = $head . substr($texte, $poshead); |
|
| 785 | + $texte = $head.substr($texte, $poshead); |
|
| 786 | 786 | } |
| 787 | 787 | if ($href_base) { |
| 788 | 788 | // gerer les ancres |
| 789 | 789 | $base = $_SERVER['REQUEST_URI']; |
| 790 | 790 | // pas de guillemets ni < dans l'URL qu'on insere dans le HTML |
| 791 | 791 | if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) { |
| 792 | - $base = str_replace(["'",'"','<'], ['%27','%22','%3C'], $base); |
|
| 792 | + $base = str_replace(["'", '"', '<'], ['%27', '%22', '%3C'], $base); |
|
| 793 | 793 | } |
| 794 | 794 | if (strpos($texte, "href='#") !== false) { |
| 795 | 795 | $texte = str_replace("href='#", "href='$base#", $texte); |
@@ -20,178 +20,178 @@ discard block |
||
| 20 | 20 | **/ |
| 21 | 21 | |
| 22 | 22 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 23 | - return; |
|
| 23 | + return; |
|
| 24 | 24 | } |
| 25 | 25 | |
| 26 | 26 | // En cas de modification, il faut aussi actualiser la regexp de nettoyer_uri_var() dans inc/utils.php |
| 27 | 27 | if (!defined('_CONTEXTE_IGNORE_VARIABLES')) { |
| 28 | - define('_CONTEXTE_IGNORE_VARIABLES', '/(^var_|^PHPSESSID$|^fbclid$|^utm_)/'); |
|
| 28 | + define('_CONTEXTE_IGNORE_VARIABLES', '/(^var_|^PHPSESSID$|^fbclid$|^utm_)/'); |
|
| 29 | 29 | } |
| 30 | 30 | |
| 31 | 31 | function assembler($fond, string $connect = '') { |
| 32 | 32 | |
| 33 | - $chemin_cache = null; |
|
| 34 | - $lastmodified = null; |
|
| 35 | - $res = null; |
|
| 36 | - // flag_preserver est modifie ici, et utilise en globale |
|
| 37 | - // use_cache sert a informer le bouton d'admin pr savoir s'il met un * |
|
| 38 | - // contexte est utilise en globale dans le formulaire d'admin |
|
| 39 | - |
|
| 40 | - $GLOBALS['contexte'] = calculer_contexte(); |
|
| 41 | - $page = ['contexte_implicite' => calculer_contexte_implicite()]; |
|
| 42 | - $page['contexte_implicite']['cache'] = $fond . preg_replace( |
|
| 43 | - ',\.[a-zA-Z0-9]*$,', |
|
| 44 | - '', |
|
| 45 | - preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI']) |
|
| 46 | - ); |
|
| 47 | - // Cette fonction est utilisee deux fois |
|
| 48 | - $cacher = charger_fonction('cacher', 'public', true); |
|
| 49 | - // Les quatre derniers parametres sont modifies par la fonction: |
|
| 50 | - // emplacement, validite, et, s'il est valide, contenu & age |
|
| 51 | - if ($cacher) { |
|
| 52 | - $res = $cacher($GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, $page, $lastmodified); |
|
| 53 | - } else { |
|
| 54 | - $GLOBALS['use_cache'] = -1; |
|
| 55 | - } |
|
| 56 | - // Si un resultat est retourne, c'est un message d'impossibilite |
|
| 57 | - if ($res) { |
|
| 58 | - return ['texte' => $res]; |
|
| 59 | - } |
|
| 60 | - |
|
| 61 | - if (!$chemin_cache || !$lastmodified) { |
|
| 62 | - $lastmodified = time(); |
|
| 63 | - } |
|
| 64 | - |
|
| 65 | - $headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD'); |
|
| 66 | - $calculer_page = true; |
|
| 67 | - |
|
| 68 | - // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client}) |
|
| 69 | - // une perennite valide a meme reponse qu'une requete HEAD (par defaut les |
|
| 70 | - // pages sont dynamiques) |
|
| 71 | - if ( |
|
| 72 | - isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) |
|
| 73 | - and (!defined('_VAR_MODE') or !_VAR_MODE) |
|
| 74 | - and $chemin_cache |
|
| 75 | - and isset($page['entetes']) |
|
| 76 | - and isset($page['entetes']['Cache-Control']) |
|
| 77 | - and strstr($page['entetes']['Cache-Control'], 'max-age=') |
|
| 78 | - and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/') |
|
| 79 | - ) { |
|
| 80 | - $since = preg_replace( |
|
| 81 | - '/;.*/', |
|
| 82 | - '', |
|
| 83 | - $_SERVER['HTTP_IF_MODIFIED_SINCE'] |
|
| 84 | - ); |
|
| 85 | - $since = str_replace('GMT', '', $since); |
|
| 86 | - if (trim($since) == gmdate('D, d M Y H:i:s', $lastmodified)) { |
|
| 87 | - $page['status'] = 304; |
|
| 88 | - $headers_only = true; |
|
| 89 | - $calculer_page = false; |
|
| 90 | - } |
|
| 91 | - } |
|
| 92 | - |
|
| 93 | - // Si requete HEAD ou Last-modified compatible, ignorer le texte |
|
| 94 | - // et pas de content-type (pour contrer le bouton admin de inc-public) |
|
| 95 | - if (!$calculer_page) { |
|
| 96 | - $page['texte'] = ''; |
|
| 97 | - } else { |
|
| 98 | - // si la page est prise dans le cache |
|
| 99 | - if (!$GLOBALS['use_cache']) { |
|
| 100 | - // Informer les boutons d'admin du contexte |
|
| 101 | - // (fourni par urls_decoder_url ci-dessous lors de la mise en cache) |
|
| 102 | - $GLOBALS['contexte'] = $page['contexte']; |
|
| 103 | - |
|
| 104 | - // vider les globales url propres qui ne doivent plus etre utilisees en cas |
|
| 105 | - // d'inversion url => objet |
|
| 106 | - // plus necessaire si on utilise bien la fonction urls_decoder_url |
|
| 107 | - #unset($_SERVER['REDIRECT_url_propre']); |
|
| 108 | - #unset($_ENV['url_propre']); |
|
| 109 | - } else { |
|
| 110 | - // Compat ascendante : |
|
| 111 | - // 1. $contexte est global |
|
| 112 | - // (a evacuer car urls_decoder_url gere ce probleme ?) |
|
| 113 | - // et calculer la page |
|
| 114 | - if (!test_espace_prive()) { |
|
| 115 | - include_spip('inc/urls'); |
|
| 116 | - [$fond, $GLOBALS['contexte'], $url_redirect] = urls_decoder_url( |
|
| 117 | - nettoyer_uri(), |
|
| 118 | - $fond, |
|
| 119 | - $GLOBALS['contexte'], |
|
| 120 | - true |
|
| 121 | - ); |
|
| 122 | - } |
|
| 123 | - // squelette par defaut |
|
| 124 | - if (!strlen($fond ?? '')) { |
|
| 125 | - $fond = 'sommaire'; |
|
| 126 | - } |
|
| 127 | - |
|
| 128 | - // produire la page : peut mettre a jour $lastmodified |
|
| 129 | - $produire_page = charger_fonction('produire_page', 'public'); |
|
| 130 | - $page = $produire_page( |
|
| 131 | - $fond, |
|
| 132 | - $GLOBALS['contexte'], |
|
| 133 | - $GLOBALS['use_cache'], |
|
| 134 | - $chemin_cache, |
|
| 135 | - null, |
|
| 136 | - $page, |
|
| 137 | - $lastmodified, |
|
| 138 | - $connect |
|
| 139 | - ); |
|
| 140 | - if ($page === '') { |
|
| 141 | - $erreur = _T( |
|
| 142 | - 'info_erreur_squelette2', |
|
| 143 | - ['fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES] |
|
| 144 | - ); |
|
| 145 | - erreur_squelette($erreur); |
|
| 146 | - // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4 |
|
| 147 | - $page = ['texte' => '', 'erreur' => $erreur]; |
|
| 148 | - } |
|
| 149 | - } |
|
| 150 | - |
|
| 151 | - if ($page and $chemin_cache) { |
|
| 152 | - $page['cache'] = $chemin_cache; |
|
| 153 | - } |
|
| 154 | - |
|
| 155 | - auto_content_type($page); |
|
| 156 | - |
|
| 157 | - $GLOBALS['flag_preserver'] |= headers_sent(); |
|
| 158 | - |
|
| 159 | - // Definir les entetes si ce n'est fait |
|
| 160 | - if (!$GLOBALS['flag_preserver']) { |
|
| 161 | - // Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions |
|
| 162 | - if ( |
|
| 163 | - trim($page['texte']) === '' |
|
| 164 | - and _VAR_MODE !== 'debug' |
|
| 165 | - and !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur |
|
| 166 | - ) { |
|
| 167 | - $GLOBALS['contexte']['fond_erreur'] = $fond; |
|
| 168 | - $page = message_page_indisponible($page, $GLOBALS['contexte']); |
|
| 169 | - } |
|
| 170 | - // pas de cache client en mode 'observation' |
|
| 171 | - if (defined('_VAR_MODE') and _VAR_MODE) { |
|
| 172 | - $page['entetes']['Cache-Control'] = 'no-cache,must-revalidate'; |
|
| 173 | - $page['entetes']['Pragma'] = 'no-cache'; |
|
| 174 | - } |
|
| 175 | - } |
|
| 176 | - } |
|
| 177 | - |
|
| 178 | - // Entete Last-Modified: |
|
| 179 | - // eviter d'etre incoherent en envoyant un lastmodified identique |
|
| 180 | - // a celui qu'on a refuse d'honorer plus haut (cf. #655) |
|
| 181 | - if ( |
|
| 182 | - $lastmodified |
|
| 183 | - and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) |
|
| 184 | - and !isset($page['entetes']['Last-Modified']) |
|
| 185 | - ) { |
|
| 186 | - $page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT'; |
|
| 187 | - } |
|
| 188 | - |
|
| 189 | - // fermer la connexion apres les headers si requete HEAD |
|
| 190 | - if ($headers_only) { |
|
| 191 | - $page['entetes']['Connection'] = 'close'; |
|
| 192 | - } |
|
| 193 | - |
|
| 194 | - return $page; |
|
| 33 | + $chemin_cache = null; |
|
| 34 | + $lastmodified = null; |
|
| 35 | + $res = null; |
|
| 36 | + // flag_preserver est modifie ici, et utilise en globale |
|
| 37 | + // use_cache sert a informer le bouton d'admin pr savoir s'il met un * |
|
| 38 | + // contexte est utilise en globale dans le formulaire d'admin |
|
| 39 | + |
|
| 40 | + $GLOBALS['contexte'] = calculer_contexte(); |
|
| 41 | + $page = ['contexte_implicite' => calculer_contexte_implicite()]; |
|
| 42 | + $page['contexte_implicite']['cache'] = $fond . preg_replace( |
|
| 43 | + ',\.[a-zA-Z0-9]*$,', |
|
| 44 | + '', |
|
| 45 | + preg_replace('/[?].*$/', '', $GLOBALS['REQUEST_URI']) |
|
| 46 | + ); |
|
| 47 | + // Cette fonction est utilisee deux fois |
|
| 48 | + $cacher = charger_fonction('cacher', 'public', true); |
|
| 49 | + // Les quatre derniers parametres sont modifies par la fonction: |
|
| 50 | + // emplacement, validite, et, s'il est valide, contenu & age |
|
| 51 | + if ($cacher) { |
|
| 52 | + $res = $cacher($GLOBALS['contexte'], $GLOBALS['use_cache'], $chemin_cache, $page, $lastmodified); |
|
| 53 | + } else { |
|
| 54 | + $GLOBALS['use_cache'] = -1; |
|
| 55 | + } |
|
| 56 | + // Si un resultat est retourne, c'est un message d'impossibilite |
|
| 57 | + if ($res) { |
|
| 58 | + return ['texte' => $res]; |
|
| 59 | + } |
|
| 60 | + |
|
| 61 | + if (!$chemin_cache || !$lastmodified) { |
|
| 62 | + $lastmodified = time(); |
|
| 63 | + } |
|
| 64 | + |
|
| 65 | + $headers_only = ($_SERVER['REQUEST_METHOD'] == 'HEAD'); |
|
| 66 | + $calculer_page = true; |
|
| 67 | + |
|
| 68 | + // Pour les pages non-dynamiques (indiquees par #CACHE{duree,cache-client}) |
|
| 69 | + // une perennite valide a meme reponse qu'une requete HEAD (par defaut les |
|
| 70 | + // pages sont dynamiques) |
|
| 71 | + if ( |
|
| 72 | + isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) |
|
| 73 | + and (!defined('_VAR_MODE') or !_VAR_MODE) |
|
| 74 | + and $chemin_cache |
|
| 75 | + and isset($page['entetes']) |
|
| 76 | + and isset($page['entetes']['Cache-Control']) |
|
| 77 | + and strstr($page['entetes']['Cache-Control'], 'max-age=') |
|
| 78 | + and !strstr($_SERVER['SERVER_SOFTWARE'], 'IIS/') |
|
| 79 | + ) { |
|
| 80 | + $since = preg_replace( |
|
| 81 | + '/;.*/', |
|
| 82 | + '', |
|
| 83 | + $_SERVER['HTTP_IF_MODIFIED_SINCE'] |
|
| 84 | + ); |
|
| 85 | + $since = str_replace('GMT', '', $since); |
|
| 86 | + if (trim($since) == gmdate('D, d M Y H:i:s', $lastmodified)) { |
|
| 87 | + $page['status'] = 304; |
|
| 88 | + $headers_only = true; |
|
| 89 | + $calculer_page = false; |
|
| 90 | + } |
|
| 91 | + } |
|
| 92 | + |
|
| 93 | + // Si requete HEAD ou Last-modified compatible, ignorer le texte |
|
| 94 | + // et pas de content-type (pour contrer le bouton admin de inc-public) |
|
| 95 | + if (!$calculer_page) { |
|
| 96 | + $page['texte'] = ''; |
|
| 97 | + } else { |
|
| 98 | + // si la page est prise dans le cache |
|
| 99 | + if (!$GLOBALS['use_cache']) { |
|
| 100 | + // Informer les boutons d'admin du contexte |
|
| 101 | + // (fourni par urls_decoder_url ci-dessous lors de la mise en cache) |
|
| 102 | + $GLOBALS['contexte'] = $page['contexte']; |
|
| 103 | + |
|
| 104 | + // vider les globales url propres qui ne doivent plus etre utilisees en cas |
|
| 105 | + // d'inversion url => objet |
|
| 106 | + // plus necessaire si on utilise bien la fonction urls_decoder_url |
|
| 107 | + #unset($_SERVER['REDIRECT_url_propre']); |
|
| 108 | + #unset($_ENV['url_propre']); |
|
| 109 | + } else { |
|
| 110 | + // Compat ascendante : |
|
| 111 | + // 1. $contexte est global |
|
| 112 | + // (a evacuer car urls_decoder_url gere ce probleme ?) |
|
| 113 | + // et calculer la page |
|
| 114 | + if (!test_espace_prive()) { |
|
| 115 | + include_spip('inc/urls'); |
|
| 116 | + [$fond, $GLOBALS['contexte'], $url_redirect] = urls_decoder_url( |
|
| 117 | + nettoyer_uri(), |
|
| 118 | + $fond, |
|
| 119 | + $GLOBALS['contexte'], |
|
| 120 | + true |
|
| 121 | + ); |
|
| 122 | + } |
|
| 123 | + // squelette par defaut |
|
| 124 | + if (!strlen($fond ?? '')) { |
|
| 125 | + $fond = 'sommaire'; |
|
| 126 | + } |
|
| 127 | + |
|
| 128 | + // produire la page : peut mettre a jour $lastmodified |
|
| 129 | + $produire_page = charger_fonction('produire_page', 'public'); |
|
| 130 | + $page = $produire_page( |
|
| 131 | + $fond, |
|
| 132 | + $GLOBALS['contexte'], |
|
| 133 | + $GLOBALS['use_cache'], |
|
| 134 | + $chemin_cache, |
|
| 135 | + null, |
|
| 136 | + $page, |
|
| 137 | + $lastmodified, |
|
| 138 | + $connect |
|
| 139 | + ); |
|
| 140 | + if ($page === '') { |
|
| 141 | + $erreur = _T( |
|
| 142 | + 'info_erreur_squelette2', |
|
| 143 | + ['fichier' => spip_htmlspecialchars($fond) . '.' . _EXTENSION_SQUELETTES] |
|
| 144 | + ); |
|
| 145 | + erreur_squelette($erreur); |
|
| 146 | + // eviter des erreurs strictes ensuite sur $page['cle'] en PHP >= 5.4 |
|
| 147 | + $page = ['texte' => '', 'erreur' => $erreur]; |
|
| 148 | + } |
|
| 149 | + } |
|
| 150 | + |
|
| 151 | + if ($page and $chemin_cache) { |
|
| 152 | + $page['cache'] = $chemin_cache; |
|
| 153 | + } |
|
| 154 | + |
|
| 155 | + auto_content_type($page); |
|
| 156 | + |
|
| 157 | + $GLOBALS['flag_preserver'] |= headers_sent(); |
|
| 158 | + |
|
| 159 | + // Definir les entetes si ce n'est fait |
|
| 160 | + if (!$GLOBALS['flag_preserver']) { |
|
| 161 | + // Si la page est vide, produire l'erreur 404 ou message d'erreur pour les inclusions |
|
| 162 | + if ( |
|
| 163 | + trim($page['texte']) === '' |
|
| 164 | + and _VAR_MODE !== 'debug' |
|
| 165 | + and !isset($page['entetes']['Location']) // cette page realise une redirection, donc pas d'erreur |
|
| 166 | + ) { |
|
| 167 | + $GLOBALS['contexte']['fond_erreur'] = $fond; |
|
| 168 | + $page = message_page_indisponible($page, $GLOBALS['contexte']); |
|
| 169 | + } |
|
| 170 | + // pas de cache client en mode 'observation' |
|
| 171 | + if (defined('_VAR_MODE') and _VAR_MODE) { |
|
| 172 | + $page['entetes']['Cache-Control'] = 'no-cache,must-revalidate'; |
|
| 173 | + $page['entetes']['Pragma'] = 'no-cache'; |
|
| 174 | + } |
|
| 175 | + } |
|
| 176 | + } |
|
| 177 | + |
|
| 178 | + // Entete Last-Modified: |
|
| 179 | + // eviter d'etre incoherent en envoyant un lastmodified identique |
|
| 180 | + // a celui qu'on a refuse d'honorer plus haut (cf. #655) |
|
| 181 | + if ( |
|
| 182 | + $lastmodified |
|
| 183 | + and !isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) |
|
| 184 | + and !isset($page['entetes']['Last-Modified']) |
|
| 185 | + ) { |
|
| 186 | + $page['entetes']['Last-Modified'] = gmdate('D, d M Y H:i:s', $lastmodified) . ' GMT'; |
|
| 187 | + } |
|
| 188 | + |
|
| 189 | + // fermer la connexion apres les headers si requete HEAD |
|
| 190 | + if ($headers_only) { |
|
| 191 | + $page['entetes']['Connection'] = 'close'; |
|
| 192 | + } |
|
| 193 | + |
|
| 194 | + return $page; |
|
| 195 | 195 | } |
| 196 | 196 | |
| 197 | 197 | /** |
@@ -208,19 +208,19 @@ discard block |
||
| 208 | 208 | */ |
| 209 | 209 | function calculer_contexte() { |
| 210 | 210 | |
| 211 | - $contexte = []; |
|
| 212 | - foreach ($_GET as $var => $val) { |
|
| 213 | - if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) { |
|
| 214 | - $contexte[$var] = $val; |
|
| 215 | - } |
|
| 216 | - } |
|
| 217 | - foreach ($_POST as $var => $val) { |
|
| 218 | - if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) { |
|
| 219 | - $contexte[$var] = $val; |
|
| 220 | - } |
|
| 221 | - } |
|
| 222 | - |
|
| 223 | - return $contexte; |
|
| 211 | + $contexte = []; |
|
| 212 | + foreach ($_GET as $var => $val) { |
|
| 213 | + if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) { |
|
| 214 | + $contexte[$var] = $val; |
|
| 215 | + } |
|
| 216 | + } |
|
| 217 | + foreach ($_POST as $var => $val) { |
|
| 218 | + if (!preg_match(_CONTEXTE_IGNORE_VARIABLES, $var)) { |
|
| 219 | + $contexte[$var] = $val; |
|
| 220 | + } |
|
| 221 | + } |
|
| 222 | + |
|
| 223 | + return $contexte; |
|
| 224 | 224 | } |
| 225 | 225 | |
| 226 | 226 | /** |
@@ -231,25 +231,25 @@ discard block |
||
| 231 | 231 | * @return array |
| 232 | 232 | */ |
| 233 | 233 | function calculer_contexte_implicite() { |
| 234 | - static $notes = null; |
|
| 235 | - if (is_null($notes)) { |
|
| 236 | - $notes = charger_fonction('notes', 'inc', true); |
|
| 237 | - } |
|
| 238 | - $contexte_implicite = [ |
|
| 239 | - 'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ? |
|
| 240 | - 'host' => ($_SERVER['HTTP_HOST'] ?? null), |
|
| 241 | - 'https' => ($_SERVER['HTTPS'] ?? ''), |
|
| 242 | - 'espace' => test_espace_prive(), |
|
| 243 | - 'marqueur' => ($GLOBALS['marqueur'] ?? ''), |
|
| 244 | - 'marqueur_skel' => ($GLOBALS['marqueur_skel'] ?? ''), |
|
| 245 | - 'notes' => $notes ? $notes('', 'contexter_cache') : '', |
|
| 246 | - 'spip_version_code' => $GLOBALS['spip_version_code'], |
|
| 247 | - ]; |
|
| 248 | - if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { |
|
| 249 | - $contexte_implicite['host'] .= '|' . $_SERVER['HTTP_X_FORWARDED_HOST']; |
|
| 250 | - } |
|
| 251 | - |
|
| 252 | - return $contexte_implicite; |
|
| 234 | + static $notes = null; |
|
| 235 | + if (is_null($notes)) { |
|
| 236 | + $notes = charger_fonction('notes', 'inc', true); |
|
| 237 | + } |
|
| 238 | + $contexte_implicite = [ |
|
| 239 | + 'squelettes' => $GLOBALS['dossier_squelettes'], // devrait etre 'chemin' => $GLOBALS['path_sig'], ? |
|
| 240 | + 'host' => ($_SERVER['HTTP_HOST'] ?? null), |
|
| 241 | + 'https' => ($_SERVER['HTTPS'] ?? ''), |
|
| 242 | + 'espace' => test_espace_prive(), |
|
| 243 | + 'marqueur' => ($GLOBALS['marqueur'] ?? ''), |
|
| 244 | + 'marqueur_skel' => ($GLOBALS['marqueur_skel'] ?? ''), |
|
| 245 | + 'notes' => $notes ? $notes('', 'contexter_cache') : '', |
|
| 246 | + 'spip_version_code' => $GLOBALS['spip_version_code'], |
|
| 247 | + ]; |
|
| 248 | + if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { |
|
| 249 | + $contexte_implicite['host'] .= '|' . $_SERVER['HTTP_X_FORWARDED_HOST']; |
|
| 250 | + } |
|
| 251 | + |
|
| 252 | + return $contexte_implicite; |
|
| 253 | 253 | } |
| 254 | 254 | |
| 255 | 255 | // |
@@ -258,55 +258,55 @@ discard block |
||
| 258 | 258 | |
| 259 | 259 | function auto_content_type($page) { |
| 260 | 260 | |
| 261 | - if (!isset($GLOBALS['flag_preserver'])) { |
|
| 262 | - $GLOBALS['flag_preserver'] = ($page && preg_match( |
|
| 263 | - '/header\s*\(\s*.content\-type:/isx', |
|
| 264 | - $page['texte'] |
|
| 265 | - ) || (isset($page['entetes']['Content-Type']))); |
|
| 266 | - } |
|
| 261 | + if (!isset($GLOBALS['flag_preserver'])) { |
|
| 262 | + $GLOBALS['flag_preserver'] = ($page && preg_match( |
|
| 263 | + '/header\s*\(\s*.content\-type:/isx', |
|
| 264 | + $page['texte'] |
|
| 265 | + ) || (isset($page['entetes']['Content-Type']))); |
|
| 266 | + } |
|
| 267 | 267 | } |
| 268 | 268 | |
| 269 | 269 | function inclure_page($fond, $contexte, string $connect = '') { |
| 270 | - $use_cache = null; |
|
| 271 | - $chemin_cache = null; |
|
| 272 | - $lastinclude = null; |
|
| 273 | - $res = null; |
|
| 274 | - static $cacher, $produire_page; |
|
| 275 | - |
|
| 276 | - // enlever le fond de contexte inclus car sinon il prend la main |
|
| 277 | - // dans les sous inclusions -> boucle infinie d'inclusion identique |
|
| 278 | - // (cette precaution n'est probablement plus utile) |
|
| 279 | - unset($contexte['fond']); |
|
| 280 | - $page = ['contexte_implicite' => calculer_contexte_implicite()]; |
|
| 281 | - $page['contexte_implicite']['cache'] = $fond; |
|
| 282 | - if (is_null($cacher)) { |
|
| 283 | - $cacher = charger_fonction('cacher', 'public', true); |
|
| 284 | - } |
|
| 285 | - // Les quatre derniers parametres sont modifies par la fonction: |
|
| 286 | - // emplacement, validite, et, s'il est valide, contenu & age |
|
| 287 | - if ($cacher) { |
|
| 288 | - $res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude); |
|
| 289 | - } else { |
|
| 290 | - $use_cache = -1; |
|
| 291 | - } |
|
| 292 | - // $res = message d'erreur : on sort de la |
|
| 293 | - if ($res) { |
|
| 294 | - return ['texte' => $res]; |
|
| 295 | - } |
|
| 296 | - |
|
| 297 | - // Si use_cache ne vaut pas 0, la page doit etre calculee |
|
| 298 | - // produire la page : peut mettre a jour $lastinclude |
|
| 299 | - // le contexte_cache envoye a cacher() a ete conserve et est passe a produire |
|
| 300 | - if ($use_cache) { |
|
| 301 | - if (is_null($produire_page)) { |
|
| 302 | - $produire_page = charger_fonction('produire_page', 'public'); |
|
| 303 | - } |
|
| 304 | - $page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect); |
|
| 305 | - } |
|
| 306 | - // dans tous les cas, mettre a jour $GLOBALS['lastmodified'] |
|
| 307 | - $GLOBALS['lastmodified'] = max(($GLOBALS['lastmodified'] ?? 0), $lastinclude); |
|
| 308 | - |
|
| 309 | - return $page; |
|
| 270 | + $use_cache = null; |
|
| 271 | + $chemin_cache = null; |
|
| 272 | + $lastinclude = null; |
|
| 273 | + $res = null; |
|
| 274 | + static $cacher, $produire_page; |
|
| 275 | + |
|
| 276 | + // enlever le fond de contexte inclus car sinon il prend la main |
|
| 277 | + // dans les sous inclusions -> boucle infinie d'inclusion identique |
|
| 278 | + // (cette precaution n'est probablement plus utile) |
|
| 279 | + unset($contexte['fond']); |
|
| 280 | + $page = ['contexte_implicite' => calculer_contexte_implicite()]; |
|
| 281 | + $page['contexte_implicite']['cache'] = $fond; |
|
| 282 | + if (is_null($cacher)) { |
|
| 283 | + $cacher = charger_fonction('cacher', 'public', true); |
|
| 284 | + } |
|
| 285 | + // Les quatre derniers parametres sont modifies par la fonction: |
|
| 286 | + // emplacement, validite, et, s'il est valide, contenu & age |
|
| 287 | + if ($cacher) { |
|
| 288 | + $res = $cacher($contexte, $use_cache, $chemin_cache, $page, $lastinclude); |
|
| 289 | + } else { |
|
| 290 | + $use_cache = -1; |
|
| 291 | + } |
|
| 292 | + // $res = message d'erreur : on sort de la |
|
| 293 | + if ($res) { |
|
| 294 | + return ['texte' => $res]; |
|
| 295 | + } |
|
| 296 | + |
|
| 297 | + // Si use_cache ne vaut pas 0, la page doit etre calculee |
|
| 298 | + // produire la page : peut mettre a jour $lastinclude |
|
| 299 | + // le contexte_cache envoye a cacher() a ete conserve et est passe a produire |
|
| 300 | + if ($use_cache) { |
|
| 301 | + if (is_null($produire_page)) { |
|
| 302 | + $produire_page = charger_fonction('produire_page', 'public'); |
|
| 303 | + } |
|
| 304 | + $page = $produire_page($fond, $contexte, $use_cache, $chemin_cache, $contexte, $page, $lastinclude, $connect); |
|
| 305 | + } |
|
| 306 | + // dans tous les cas, mettre a jour $GLOBALS['lastmodified'] |
|
| 307 | + $GLOBALS['lastmodified'] = max(($GLOBALS['lastmodified'] ?? 0), $lastinclude); |
|
| 308 | + |
|
| 309 | + return $page; |
|
| 310 | 310 | } |
| 311 | 311 | |
| 312 | 312 | /** |
@@ -324,41 +324,41 @@ discard block |
||
| 324 | 324 | * @return array |
| 325 | 325 | */ |
| 326 | 326 | function public_produire_page_dist( |
| 327 | - $fond, |
|
| 328 | - $contexte, |
|
| 329 | - $use_cache, |
|
| 330 | - $chemin_cache, |
|
| 331 | - $contexte_cache, |
|
| 332 | - &$page, |
|
| 333 | - &$lastinclude, |
|
| 334 | - $connect = '' |
|
| 327 | + $fond, |
|
| 328 | + $contexte, |
|
| 329 | + $use_cache, |
|
| 330 | + $chemin_cache, |
|
| 331 | + $contexte_cache, |
|
| 332 | + &$page, |
|
| 333 | + &$lastinclude, |
|
| 334 | + $connect = '' |
|
| 335 | 335 | ) { |
| 336 | - static $parametrer, $cacher; |
|
| 337 | - if (!$parametrer) { |
|
| 338 | - $parametrer = charger_fonction('parametrer', 'public'); |
|
| 339 | - } |
|
| 340 | - $page = $parametrer($fond, $contexte, $chemin_cache, $connect); |
|
| 341 | - // et on l'enregistre sur le disque |
|
| 342 | - if ( |
|
| 343 | - $chemin_cache |
|
| 344 | - and $use_cache > -1 |
|
| 345 | - and is_array($page) |
|
| 346 | - and count($page) |
|
| 347 | - and isset($page['entetes']['X-Spip-Cache']) |
|
| 348 | - and $page['entetes']['X-Spip-Cache'] > 0 |
|
| 349 | - ) { |
|
| 350 | - if (is_null($cacher)) { |
|
| 351 | - $cacher = charger_fonction('cacher', 'public', true); |
|
| 352 | - } |
|
| 353 | - $lastinclude = time(); |
|
| 354 | - if ($cacher) { |
|
| 355 | - $cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude); |
|
| 356 | - } else { |
|
| 357 | - $use_cache = -1; |
|
| 358 | - } |
|
| 359 | - } |
|
| 360 | - |
|
| 361 | - return $page; |
|
| 336 | + static $parametrer, $cacher; |
|
| 337 | + if (!$parametrer) { |
|
| 338 | + $parametrer = charger_fonction('parametrer', 'public'); |
|
| 339 | + } |
|
| 340 | + $page = $parametrer($fond, $contexte, $chemin_cache, $connect); |
|
| 341 | + // et on l'enregistre sur le disque |
|
| 342 | + if ( |
|
| 343 | + $chemin_cache |
|
| 344 | + and $use_cache > -1 |
|
| 345 | + and is_array($page) |
|
| 346 | + and count($page) |
|
| 347 | + and isset($page['entetes']['X-Spip-Cache']) |
|
| 348 | + and $page['entetes']['X-Spip-Cache'] > 0 |
|
| 349 | + ) { |
|
| 350 | + if (is_null($cacher)) { |
|
| 351 | + $cacher = charger_fonction('cacher', 'public', true); |
|
| 352 | + } |
|
| 353 | + $lastinclude = time(); |
|
| 354 | + if ($cacher) { |
|
| 355 | + $cacher($contexte_cache, $use_cache, $chemin_cache, $page, $lastinclude); |
|
| 356 | + } else { |
|
| 357 | + $use_cache = -1; |
|
| 358 | + } |
|
| 359 | + } |
|
| 360 | + |
|
| 361 | + return $page; |
|
| 362 | 362 | } |
| 363 | 363 | |
| 364 | 364 | // Fonction inseree par le compilateur dans le code compile. |
@@ -372,14 +372,14 @@ discard block |
||
| 372 | 372 | // 4: langue |
| 373 | 373 | |
| 374 | 374 | function inserer_balise_dynamique($contexte_exec, $contexte_compil) { |
| 375 | - arguments_balise_dyn_depuis_modele(null, 'reset'); |
|
| 376 | - |
|
| 377 | - if (!is_array($contexte_exec)) { |
|
| 378 | - echo $contexte_exec; |
|
| 379 | - } // message d'erreur etc |
|
| 380 | - else { |
|
| 381 | - inclure_balise_dynamique($contexte_exec, true, $contexte_compil); |
|
| 382 | - } |
|
| 375 | + arguments_balise_dyn_depuis_modele(null, 'reset'); |
|
| 376 | + |
|
| 377 | + if (!is_array($contexte_exec)) { |
|
| 378 | + echo $contexte_exec; |
|
| 379 | + } // message d'erreur etc |
|
| 380 | + else { |
|
| 381 | + inclure_balise_dynamique($contexte_exec, true, $contexte_compil); |
|
| 382 | + } |
|
| 383 | 383 | } |
| 384 | 384 | |
| 385 | 385 | /** |
@@ -392,101 +392,101 @@ discard block |
||
| 392 | 392 | * @return string|void |
| 393 | 393 | */ |
| 394 | 394 | function inclure_balise_dynamique($texte, $echo = true, $contexte_compil = []) { |
| 395 | - if (is_array($texte)) { |
|
| 396 | - [$fond, $delainc, $contexte_inclus] = $texte; |
|
| 397 | - |
|
| 398 | - // delais a l'ancienne, c'est pratiquement mort |
|
| 399 | - $d = $GLOBALS['delais'] ?? null; |
|
| 400 | - $GLOBALS['delais'] = $delainc; |
|
| 401 | - |
|
| 402 | - $page = recuperer_fond( |
|
| 403 | - $fond, |
|
| 404 | - $contexte_inclus, |
|
| 405 | - ['trim' => false, 'raw' => true, 'compil' => $contexte_compil] |
|
| 406 | - ); |
|
| 407 | - |
|
| 408 | - $texte = $page['texte']; |
|
| 409 | - |
|
| 410 | - $GLOBALS['delais'] = $d; |
|
| 411 | - // Faire remonter les entetes |
|
| 412 | - if ( |
|
| 413 | - isset($page['entetes']) |
|
| 414 | - and is_array($page['entetes']) |
|
| 415 | - ) { |
|
| 416 | - // mais pas toutes |
|
| 417 | - unset($page['entetes']['X-Spip-Cache']); |
|
| 418 | - unset($page['entetes']['Content-Type']); |
|
| 419 | - if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) { |
|
| 420 | - if (!is_array($GLOBALS['page']['entetes'])) { |
|
| 421 | - $GLOBALS['page']['entetes'] = []; |
|
| 422 | - } |
|
| 423 | - $GLOBALS['page']['entetes'] = |
|
| 424 | - array_merge($GLOBALS['page']['entetes'], $page['entetes']); |
|
| 425 | - } |
|
| 426 | - } |
|
| 427 | - // _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines |
|
| 428 | - if ( |
|
| 429 | - isset($page['contexte']['_pipelines']) |
|
| 430 | - and is_array($page['contexte']['_pipelines']) |
|
| 431 | - and count($page['contexte']['_pipelines']) |
|
| 432 | - ) { |
|
| 433 | - foreach ($page['contexte']['_pipelines'] as $pipe => $args) { |
|
| 434 | - $args['contexte'] = $page['contexte']; |
|
| 435 | - unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul |
|
| 436 | - $texte = pipeline( |
|
| 437 | - $pipe, |
|
| 438 | - [ |
|
| 439 | - 'data' => $texte, |
|
| 440 | - 'args' => $args |
|
| 441 | - ] |
|
| 442 | - ); |
|
| 443 | - } |
|
| 444 | - } |
|
| 445 | - } |
|
| 446 | - |
|
| 447 | - if (defined('_VAR_MODE') and _VAR_MODE == 'debug') { |
|
| 448 | - // compatibilite : avant on donnait le numero de ligne ou rien. |
|
| 449 | - $ligne = intval($contexte_compil[3] ?? $contexte_compil); |
|
| 450 | - $GLOBALS['debug_objets']['resultat'][$ligne] = $texte; |
|
| 451 | - } |
|
| 452 | - if ($echo) { |
|
| 453 | - echo $texte; |
|
| 454 | - } else { |
|
| 455 | - return $texte; |
|
| 456 | - } |
|
| 395 | + if (is_array($texte)) { |
|
| 396 | + [$fond, $delainc, $contexte_inclus] = $texte; |
|
| 397 | + |
|
| 398 | + // delais a l'ancienne, c'est pratiquement mort |
|
| 399 | + $d = $GLOBALS['delais'] ?? null; |
|
| 400 | + $GLOBALS['delais'] = $delainc; |
|
| 401 | + |
|
| 402 | + $page = recuperer_fond( |
|
| 403 | + $fond, |
|
| 404 | + $contexte_inclus, |
|
| 405 | + ['trim' => false, 'raw' => true, 'compil' => $contexte_compil] |
|
| 406 | + ); |
|
| 407 | + |
|
| 408 | + $texte = $page['texte']; |
|
| 409 | + |
|
| 410 | + $GLOBALS['delais'] = $d; |
|
| 411 | + // Faire remonter les entetes |
|
| 412 | + if ( |
|
| 413 | + isset($page['entetes']) |
|
| 414 | + and is_array($page['entetes']) |
|
| 415 | + ) { |
|
| 416 | + // mais pas toutes |
|
| 417 | + unset($page['entetes']['X-Spip-Cache']); |
|
| 418 | + unset($page['entetes']['Content-Type']); |
|
| 419 | + if (isset($GLOBALS['page']) and is_array($GLOBALS['page'])) { |
|
| 420 | + if (!is_array($GLOBALS['page']['entetes'])) { |
|
| 421 | + $GLOBALS['page']['entetes'] = []; |
|
| 422 | + } |
|
| 423 | + $GLOBALS['page']['entetes'] = |
|
| 424 | + array_merge($GLOBALS['page']['entetes'], $page['entetes']); |
|
| 425 | + } |
|
| 426 | + } |
|
| 427 | + // _pipelines au pluriel array('nom_pipeline' => $args...) avec une syntaxe permettant plusieurs pipelines |
|
| 428 | + if ( |
|
| 429 | + isset($page['contexte']['_pipelines']) |
|
| 430 | + and is_array($page['contexte']['_pipelines']) |
|
| 431 | + and count($page['contexte']['_pipelines']) |
|
| 432 | + ) { |
|
| 433 | + foreach ($page['contexte']['_pipelines'] as $pipe => $args) { |
|
| 434 | + $args['contexte'] = $page['contexte']; |
|
| 435 | + unset($args['contexte']['_pipelines']); // par precaution, meme si le risque de boucle infinie est a priori nul |
|
| 436 | + $texte = pipeline( |
|
| 437 | + $pipe, |
|
| 438 | + [ |
|
| 439 | + 'data' => $texte, |
|
| 440 | + 'args' => $args |
|
| 441 | + ] |
|
| 442 | + ); |
|
| 443 | + } |
|
| 444 | + } |
|
| 445 | + } |
|
| 446 | + |
|
| 447 | + if (defined('_VAR_MODE') and _VAR_MODE == 'debug') { |
|
| 448 | + // compatibilite : avant on donnait le numero de ligne ou rien. |
|
| 449 | + $ligne = intval($contexte_compil[3] ?? $contexte_compil); |
|
| 450 | + $GLOBALS['debug_objets']['resultat'][$ligne] = $texte; |
|
| 451 | + } |
|
| 452 | + if ($echo) { |
|
| 453 | + echo $texte; |
|
| 454 | + } else { |
|
| 455 | + return $texte; |
|
| 456 | + } |
|
| 457 | 457 | } |
| 458 | 458 | |
| 459 | 459 | function message_page_indisponible($page, $contexte) { |
| 460 | - static $deja = false; |
|
| 461 | - if ($deja) { |
|
| 462 | - return 'erreur'; |
|
| 463 | - } |
|
| 464 | - $codes = [ |
|
| 465 | - '404' => '404 Not Found', |
|
| 466 | - '503' => '503 Service Unavailable', |
|
| 467 | - ]; |
|
| 468 | - |
|
| 469 | - $contexte['status'] = ($page !== false) ? '404' : '503'; |
|
| 470 | - $contexte['code'] = $codes[$contexte['status']]; |
|
| 471 | - $contexte['fond'] = '404'; // gere les 2 erreurs |
|
| 472 | - if (!isset($contexte['lang'])) { |
|
| 473 | - include_spip('inc/lang'); |
|
| 474 | - $contexte['lang'] = $GLOBALS['spip_lang']; |
|
| 475 | - } |
|
| 476 | - |
|
| 477 | - $deja = true; |
|
| 478 | - // passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent |
|
| 479 | - // ex restriction d'acces => 401 |
|
| 480 | - $contexte = pipeline('page_indisponible', $contexte); |
|
| 481 | - |
|
| 482 | - // produire la page d'erreur |
|
| 483 | - $page = inclure_page($contexte['fond'], $contexte); |
|
| 484 | - if (!$page) { |
|
| 485 | - $page = inclure_page('404', $contexte); |
|
| 486 | - } |
|
| 487 | - $page['status'] = $contexte['status']; |
|
| 488 | - |
|
| 489 | - return $page; |
|
| 460 | + static $deja = false; |
|
| 461 | + if ($deja) { |
|
| 462 | + return 'erreur'; |
|
| 463 | + } |
|
| 464 | + $codes = [ |
|
| 465 | + '404' => '404 Not Found', |
|
| 466 | + '503' => '503 Service Unavailable', |
|
| 467 | + ]; |
|
| 468 | + |
|
| 469 | + $contexte['status'] = ($page !== false) ? '404' : '503'; |
|
| 470 | + $contexte['code'] = $codes[$contexte['status']]; |
|
| 471 | + $contexte['fond'] = '404'; // gere les 2 erreurs |
|
| 472 | + if (!isset($contexte['lang'])) { |
|
| 473 | + include_spip('inc/lang'); |
|
| 474 | + $contexte['lang'] = $GLOBALS['spip_lang']; |
|
| 475 | + } |
|
| 476 | + |
|
| 477 | + $deja = true; |
|
| 478 | + // passer aux plugins qui peuvent decider d'une page d'erreur plus pertinent |
|
| 479 | + // ex restriction d'acces => 401 |
|
| 480 | + $contexte = pipeline('page_indisponible', $contexte); |
|
| 481 | + |
|
| 482 | + // produire la page d'erreur |
|
| 483 | + $page = inclure_page($contexte['fond'], $contexte); |
|
| 484 | + if (!$page) { |
|
| 485 | + $page = inclure_page('404', $contexte); |
|
| 486 | + } |
|
| 487 | + $page['status'] = $contexte['status']; |
|
| 488 | + |
|
| 489 | + return $page; |
|
| 490 | 490 | } |
| 491 | 491 | |
| 492 | 492 | /** |
@@ -498,44 +498,44 @@ discard block |
||
| 498 | 498 | * @return mixed |
| 499 | 499 | */ |
| 500 | 500 | function arguments_balise_dyn_depuis_modele($arg, $operation = 'set') { |
| 501 | - static $balise_dyn_appellee_par_modele = null; |
|
| 502 | - switch ($operation) { |
|
| 503 | - case 'read': |
|
| 504 | - return $balise_dyn_appellee_par_modele; |
|
| 505 | - case 'reset': |
|
| 506 | - $balise_dyn_appellee_par_modele = null; |
|
| 507 | - return null; |
|
| 508 | - case 'set': |
|
| 509 | - default: |
|
| 510 | - $balise_dyn_appellee_par_modele = $arg; |
|
| 511 | - return $arg; |
|
| 512 | - } |
|
| 501 | + static $balise_dyn_appellee_par_modele = null; |
|
| 502 | + switch ($operation) { |
|
| 503 | + case 'read': |
|
| 504 | + return $balise_dyn_appellee_par_modele; |
|
| 505 | + case 'reset': |
|
| 506 | + $balise_dyn_appellee_par_modele = null; |
|
| 507 | + return null; |
|
| 508 | + case 'set': |
|
| 509 | + default: |
|
| 510 | + $balise_dyn_appellee_par_modele = $arg; |
|
| 511 | + return $arg; |
|
| 512 | + } |
|
| 513 | 513 | } |
| 514 | 514 | |
| 515 | 515 | // temporairement ici : a mettre dans le futur inc/modeles |
| 516 | 516 | // creer_contexte_de_modele('left', 'autostart=true', ...) renvoie un array() |
| 517 | 517 | function creer_contexte_de_modele($args) { |
| 518 | - $contexte = []; |
|
| 519 | - foreach ($args as $var => $val) { |
|
| 520 | - if (is_int($var)) { // argument pas formate |
|
| 521 | - if (in_array($val, ['left', 'right', 'center'])) { |
|
| 522 | - $var = 'align'; |
|
| 523 | - $contexte[$var] = $val; |
|
| 524 | - } else { |
|
| 525 | - $args = explode('=', $val); |
|
| 526 | - if (count($args) >= 2) { // Flashvars=arg1=machin&arg2=truc genere plus de deux args |
|
| 527 | - $contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1); |
|
| 528 | - } else // notation abregee |
|
| 529 | - { |
|
| 530 | - $contexte[trim($val)] = trim($val); |
|
| 531 | - } |
|
| 532 | - } |
|
| 533 | - } else { |
|
| 534 | - $contexte[$var] = $val; |
|
| 535 | - } |
|
| 536 | - } |
|
| 537 | - |
|
| 538 | - return $contexte; |
|
| 518 | + $contexte = []; |
|
| 519 | + foreach ($args as $var => $val) { |
|
| 520 | + if (is_int($var)) { // argument pas formate |
|
| 521 | + if (in_array($val, ['left', 'right', 'center'])) { |
|
| 522 | + $var = 'align'; |
|
| 523 | + $contexte[$var] = $val; |
|
| 524 | + } else { |
|
| 525 | + $args = explode('=', $val); |
|
| 526 | + if (count($args) >= 2) { // Flashvars=arg1=machin&arg2=truc genere plus de deux args |
|
| 527 | + $contexte[trim($args[0])] = substr($val, strlen($args[0]) + 1); |
|
| 528 | + } else // notation abregee |
|
| 529 | + { |
|
| 530 | + $contexte[trim($val)] = trim($val); |
|
| 531 | + } |
|
| 532 | + } |
|
| 533 | + } else { |
|
| 534 | + $contexte[$var] = $val; |
|
| 535 | + } |
|
| 536 | + } |
|
| 537 | + |
|
| 538 | + return $contexte; |
|
| 539 | 539 | } |
| 540 | 540 | |
| 541 | 541 | /** |
@@ -550,43 +550,43 @@ discard block |
||
| 550 | 550 | * @return string |
| 551 | 551 | */ |
| 552 | 552 | function styliser_modele($modele, $id, $contexte = null) { |
| 553 | - static $styliseurs = null; |
|
| 554 | - if (is_null($styliseurs)) { |
|
| 555 | - $tables_objet = lister_tables_objets_sql(); |
|
| 556 | - foreach ($tables_objet as $table => $desc) { |
|
| 557 | - if ( |
|
| 558 | - isset($desc['modeles']) and $desc['modeles'] |
|
| 559 | - and isset($desc['modeles_styliser']) and $desc['modeles_styliser'] |
|
| 560 | - and function_exists($desc['modeles_styliser']) |
|
| 561 | - ) { |
|
| 562 | - $primary = id_table_objet($table); |
|
| 563 | - foreach ($desc['modeles'] as $m) { |
|
| 564 | - $styliseurs[$m] = ['primary' => $primary, 'callback' => $desc['modeles_styliser']]; |
|
| 565 | - } |
|
| 566 | - } |
|
| 567 | - } |
|
| 568 | - } |
|
| 569 | - |
|
| 570 | - if (isset($styliseurs[$modele])) { |
|
| 571 | - $styliseur = $styliseurs[$modele]['callback']; |
|
| 572 | - $primary = $styliseurs[$modele]['primary']; |
|
| 573 | - if (is_null($id) and $contexte) { |
|
| 574 | - if (isset($contexte['id'])) { |
|
| 575 | - $id = $contexte['id']; |
|
| 576 | - } elseif (isset($contexte[$primary])) { |
|
| 577 | - $id = $contexte[$primary]; |
|
| 578 | - } |
|
| 579 | - } |
|
| 580 | - if (is_null($id)) { |
|
| 581 | - $msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]); |
|
| 582 | - erreur_squelette($msg); |
|
| 583 | - // on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant |
|
| 584 | - $id = 0; |
|
| 585 | - } |
|
| 586 | - $modele = $styliseur($modele, $id); |
|
| 587 | - } |
|
| 588 | - |
|
| 589 | - return $modele; |
|
| 553 | + static $styliseurs = null; |
|
| 554 | + if (is_null($styliseurs)) { |
|
| 555 | + $tables_objet = lister_tables_objets_sql(); |
|
| 556 | + foreach ($tables_objet as $table => $desc) { |
|
| 557 | + if ( |
|
| 558 | + isset($desc['modeles']) and $desc['modeles'] |
|
| 559 | + and isset($desc['modeles_styliser']) and $desc['modeles_styliser'] |
|
| 560 | + and function_exists($desc['modeles_styliser']) |
|
| 561 | + ) { |
|
| 562 | + $primary = id_table_objet($table); |
|
| 563 | + foreach ($desc['modeles'] as $m) { |
|
| 564 | + $styliseurs[$m] = ['primary' => $primary, 'callback' => $desc['modeles_styliser']]; |
|
| 565 | + } |
|
| 566 | + } |
|
| 567 | + } |
|
| 568 | + } |
|
| 569 | + |
|
| 570 | + if (isset($styliseurs[$modele])) { |
|
| 571 | + $styliseur = $styliseurs[$modele]['callback']; |
|
| 572 | + $primary = $styliseurs[$modele]['primary']; |
|
| 573 | + if (is_null($id) and $contexte) { |
|
| 574 | + if (isset($contexte['id'])) { |
|
| 575 | + $id = $contexte['id']; |
|
| 576 | + } elseif (isset($contexte[$primary])) { |
|
| 577 | + $id = $contexte[$primary]; |
|
| 578 | + } |
|
| 579 | + } |
|
| 580 | + if (is_null($id)) { |
|
| 581 | + $msg = "modeles/$modele : " . _T('zbug_parametres_inclus_incorrects', ['param' => "id/$primary"]); |
|
| 582 | + erreur_squelette($msg); |
|
| 583 | + // on passe id=0 au routeur pour tomber sur le modele par defaut et eviter une seconde erreur sur un modele inexistant |
|
| 584 | + $id = 0; |
|
| 585 | + } |
|
| 586 | + $modele = $styliseur($modele, $id); |
|
| 587 | + } |
|
| 588 | + |
|
| 589 | + return $modele; |
|
| 590 | 590 | } |
| 591 | 591 | |
| 592 | 592 | /** |
@@ -603,102 +603,102 @@ discard block |
||
| 603 | 603 | */ |
| 604 | 604 | function inclure_modele($type, $id, $params, $lien, string $connect = '', $env = []) { |
| 605 | 605 | |
| 606 | - static $compteur; |
|
| 607 | - if (++$compteur > 10) { |
|
| 608 | - return ''; |
|
| 609 | - } # ne pas boucler indefiniment |
|
| 610 | - |
|
| 611 | - $type = strtolower($type); |
|
| 612 | - $type = styliser_modele($type, $id); |
|
| 613 | - |
|
| 614 | - $fond = $class = ''; |
|
| 615 | - |
|
| 616 | - $params = array_filter(explode('|', $params)); |
|
| 617 | - if ($params) { |
|
| 618 | - $soustype = current($params); |
|
| 619 | - $soustype = strtolower(trim($soustype)); |
|
| 620 | - if (in_array($soustype, ['left', 'right', 'center', 'ajax'])) { |
|
| 621 | - $soustype = next($params); |
|
| 622 | - $soustype = strtolower($soustype); |
|
| 623 | - } |
|
| 624 | - |
|
| 625 | - if (preg_match(',^[a-z0-9_]+$,', $soustype)) { |
|
| 626 | - if (!trouve_modele($fond = ($type . '_' . $soustype))) { |
|
| 627 | - $fond = ''; |
|
| 628 | - $class = $soustype; |
|
| 629 | - } |
|
| 630 | - // enlever le sous type des params |
|
| 631 | - $params = array_diff($params, [$soustype]); |
|
| 632 | - } |
|
| 633 | - } |
|
| 634 | - |
|
| 635 | - // Si ca marche pas en precisant le sous-type, prendre le type |
|
| 636 | - if (!$fond and !trouve_modele($fond = $type)) { |
|
| 637 | - spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE); |
|
| 638 | - |
|
| 639 | - return false; |
|
| 640 | - } |
|
| 641 | - $fond = 'modeles/' . $fond; |
|
| 642 | - // Creer le contexte |
|
| 643 | - $contexte = $env; |
|
| 644 | - $contexte['dir_racine'] = _DIR_RACINE; # eviter de mixer un cache racine et un cache ecrire (meme si pour l'instant les modeles ne sont pas caches, le resultat etant different il faut que le contexte en tienne compte |
|
| 645 | - |
|
| 646 | - // Le numero du modele est mis dans l'environnement |
|
| 647 | - // d'une part sous l'identifiant "id" |
|
| 648 | - // et d'autre part sous l'identifiant de la cle primaire |
|
| 649 | - // par la fonction id_table_objet, |
|
| 650 | - // (<article1> =>> article =>> id_article =>> id_article=1) |
|
| 651 | - $_id = id_table_objet($type); |
|
| 652 | - $contexte['id'] = $contexte[$_id] = $id; |
|
| 653 | - |
|
| 654 | - if (isset($class)) { |
|
| 655 | - $contexte['class'] = $class; |
|
| 656 | - } |
|
| 657 | - |
|
| 658 | - // Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url] |
|
| 659 | - if ($lien) { |
|
| 660 | - # un eventuel guillemet (") sera reechappe par #ENV |
|
| 661 | - $contexte['lien'] = str_replace('"', '"', $lien['href']); |
|
| 662 | - $contexte['lien_class'] = $lien['class']; |
|
| 663 | - $contexte['lien_mime'] = $lien['mime']; |
|
| 664 | - $contexte['lien_title'] = $lien['title']; |
|
| 665 | - $contexte['lien_hreflang'] = $lien['hreflang']; |
|
| 666 | - } |
|
| 667 | - |
|
| 668 | - // Traiter les parametres |
|
| 669 | - // par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en> |
|
| 670 | - $arg_list = creer_contexte_de_modele($params); |
|
| 671 | - $contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args |
|
| 672 | - $contexte = array_merge($contexte, $arg_list); |
|
| 673 | - |
|
| 674 | - // Appliquer le modele avec le contexte |
|
| 675 | - $retour = recuperer_fond($fond, $contexte, [], $connect); |
|
| 676 | - |
|
| 677 | - // Regarder si le modele tient compte des liens (il *doit* alors indiquer |
|
| 678 | - // spip_lien_ok dans les classes de son conteneur de premier niveau ; |
|
| 679 | - // sinon, s'il y a un lien, on l'ajoute classiquement |
|
| 680 | - if ( |
|
| 681 | - strstr( |
|
| 682 | - ' ' . ($classes = extraire_attribut($retour, 'class')) . ' ', |
|
| 683 | - 'spip_lien_ok' |
|
| 684 | - ) |
|
| 685 | - ) { |
|
| 686 | - $retour = inserer_attribut( |
|
| 687 | - $retour, |
|
| 688 | - 'class', |
|
| 689 | - trim(str_replace(' spip_lien_ok ', ' ', " $classes ")) |
|
| 690 | - ); |
|
| 691 | - } else { |
|
| 692 | - if ($lien) { |
|
| 693 | - $retour = "<a href=\"" . $lien['href'] . "\" class=\"" . $lien['class'] . "\">" . $retour . '</a>'; |
|
| 694 | - } |
|
| 695 | - } |
|
| 696 | - |
|
| 697 | - $compteur--; |
|
| 698 | - |
|
| 699 | - return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax') |
|
| 700 | - ? encoder_contexte_ajax($contexte, '', $retour) |
|
| 701 | - : $retour; |
|
| 606 | + static $compteur; |
|
| 607 | + if (++$compteur > 10) { |
|
| 608 | + return ''; |
|
| 609 | + } # ne pas boucler indefiniment |
|
| 610 | + |
|
| 611 | + $type = strtolower($type); |
|
| 612 | + $type = styliser_modele($type, $id); |
|
| 613 | + |
|
| 614 | + $fond = $class = ''; |
|
| 615 | + |
|
| 616 | + $params = array_filter(explode('|', $params)); |
|
| 617 | + if ($params) { |
|
| 618 | + $soustype = current($params); |
|
| 619 | + $soustype = strtolower(trim($soustype)); |
|
| 620 | + if (in_array($soustype, ['left', 'right', 'center', 'ajax'])) { |
|
| 621 | + $soustype = next($params); |
|
| 622 | + $soustype = strtolower($soustype); |
|
| 623 | + } |
|
| 624 | + |
|
| 625 | + if (preg_match(',^[a-z0-9_]+$,', $soustype)) { |
|
| 626 | + if (!trouve_modele($fond = ($type . '_' . $soustype))) { |
|
| 627 | + $fond = ''; |
|
| 628 | + $class = $soustype; |
|
| 629 | + } |
|
| 630 | + // enlever le sous type des params |
|
| 631 | + $params = array_diff($params, [$soustype]); |
|
| 632 | + } |
|
| 633 | + } |
|
| 634 | + |
|
| 635 | + // Si ca marche pas en precisant le sous-type, prendre le type |
|
| 636 | + if (!$fond and !trouve_modele($fond = $type)) { |
|
| 637 | + spip_log("Modele $type introuvable", _LOG_INFO_IMPORTANTE); |
|
| 638 | + |
|
| 639 | + return false; |
|
| 640 | + } |
|
| 641 | + $fond = 'modeles/' . $fond; |
|
| 642 | + // Creer le contexte |
|
| 643 | + $contexte = $env; |
|
| 644 | + $contexte['dir_racine'] = _DIR_RACINE; # eviter de mixer un cache racine et un cache ecrire (meme si pour l'instant les modeles ne sont pas caches, le resultat etant different il faut que le contexte en tienne compte |
|
| 645 | + |
|
| 646 | + // Le numero du modele est mis dans l'environnement |
|
| 647 | + // d'une part sous l'identifiant "id" |
|
| 648 | + // et d'autre part sous l'identifiant de la cle primaire |
|
| 649 | + // par la fonction id_table_objet, |
|
| 650 | + // (<article1> =>> article =>> id_article =>> id_article=1) |
|
| 651 | + $_id = id_table_objet($type); |
|
| 652 | + $contexte['id'] = $contexte[$_id] = $id; |
|
| 653 | + |
|
| 654 | + if (isset($class)) { |
|
| 655 | + $contexte['class'] = $class; |
|
| 656 | + } |
|
| 657 | + |
|
| 658 | + // Si un lien a ete passe en parametre, ex: [<modele1>->url] ou [<modele1|title_du_lien{hreflang}->url] |
|
| 659 | + if ($lien) { |
|
| 660 | + # un eventuel guillemet (") sera reechappe par #ENV |
|
| 661 | + $contexte['lien'] = str_replace('"', '"', $lien['href']); |
|
| 662 | + $contexte['lien_class'] = $lien['class']; |
|
| 663 | + $contexte['lien_mime'] = $lien['mime']; |
|
| 664 | + $contexte['lien_title'] = $lien['title']; |
|
| 665 | + $contexte['lien_hreflang'] = $lien['hreflang']; |
|
| 666 | + } |
|
| 667 | + |
|
| 668 | + // Traiter les parametres |
|
| 669 | + // par exemple : <img1|center>, <emb12|autostart=true> ou <doc1|lang=en> |
|
| 670 | + $arg_list = creer_contexte_de_modele($params); |
|
| 671 | + $contexte['args'] = $arg_list; // on passe la liste des arguments du modeles dans une variable args |
|
| 672 | + $contexte = array_merge($contexte, $arg_list); |
|
| 673 | + |
|
| 674 | + // Appliquer le modele avec le contexte |
|
| 675 | + $retour = recuperer_fond($fond, $contexte, [], $connect); |
|
| 676 | + |
|
| 677 | + // Regarder si le modele tient compte des liens (il *doit* alors indiquer |
|
| 678 | + // spip_lien_ok dans les classes de son conteneur de premier niveau ; |
|
| 679 | + // sinon, s'il y a un lien, on l'ajoute classiquement |
|
| 680 | + if ( |
|
| 681 | + strstr( |
|
| 682 | + ' ' . ($classes = extraire_attribut($retour, 'class')) . ' ', |
|
| 683 | + 'spip_lien_ok' |
|
| 684 | + ) |
|
| 685 | + ) { |
|
| 686 | + $retour = inserer_attribut( |
|
| 687 | + $retour, |
|
| 688 | + 'class', |
|
| 689 | + trim(str_replace(' spip_lien_ok ', ' ', " $classes ")) |
|
| 690 | + ); |
|
| 691 | + } else { |
|
| 692 | + if ($lien) { |
|
| 693 | + $retour = "<a href=\"" . $lien['href'] . "\" class=\"" . $lien['class'] . "\">" . $retour . '</a>'; |
|
| 694 | + } |
|
| 695 | + } |
|
| 696 | + |
|
| 697 | + $compteur--; |
|
| 698 | + |
|
| 699 | + return (isset($arg_list['ajax']) and $arg_list['ajax'] == 'ajax') |
|
| 700 | + ? encoder_contexte_ajax($contexte, '', $retour) |
|
| 701 | + : $retour; |
|
| 702 | 702 | } |
| 703 | 703 | |
| 704 | 704 | // Un inclure_page qui marche aussi pour l'espace prive |
@@ -707,105 +707,105 @@ discard block |
||
| 707 | 707 | // recuperer_fond($fond,$contexte,array('raw'=>true)) |
| 708 | 708 | function evaluer_fond($fond, $contexte = [], string $connect = '') { |
| 709 | 709 | |
| 710 | - $page = inclure_page($fond, $contexte, $connect); |
|
| 711 | - |
|
| 712 | - if (!$page) { |
|
| 713 | - return $page; |
|
| 714 | - } |
|
| 715 | - // eval $page et affecte $res |
|
| 716 | - include _ROOT_RESTREINT . 'public/evaluer_page.php'; |
|
| 717 | - |
|
| 718 | - // Lever un drapeau (global) si le fond utilise #SESSION |
|
| 719 | - // a destination de public/parametrer |
|
| 720 | - // pour remonter vers les inclusions appelantes |
|
| 721 | - // il faut bien lever ce drapeau apres avoir evalue le fond |
|
| 722 | - // pour ne pas faire descendre le flag vers les inclusions appelees |
|
| 723 | - if ( |
|
| 724 | - isset($page['invalideurs']) |
|
| 725 | - and isset($page['invalideurs']['session']) |
|
| 726 | - ) { |
|
| 727 | - $GLOBALS['cache_utilise_session'] = $page['invalideurs']['session']; |
|
| 728 | - } |
|
| 729 | - |
|
| 730 | - return $page; |
|
| 710 | + $page = inclure_page($fond, $contexte, $connect); |
|
| 711 | + |
|
| 712 | + if (!$page) { |
|
| 713 | + return $page; |
|
| 714 | + } |
|
| 715 | + // eval $page et affecte $res |
|
| 716 | + include _ROOT_RESTREINT . 'public/evaluer_page.php'; |
|
| 717 | + |
|
| 718 | + // Lever un drapeau (global) si le fond utilise #SESSION |
|
| 719 | + // a destination de public/parametrer |
|
| 720 | + // pour remonter vers les inclusions appelantes |
|
| 721 | + // il faut bien lever ce drapeau apres avoir evalue le fond |
|
| 722 | + // pour ne pas faire descendre le flag vers les inclusions appelees |
|
| 723 | + if ( |
|
| 724 | + isset($page['invalideurs']) |
|
| 725 | + and isset($page['invalideurs']['session']) |
|
| 726 | + ) { |
|
| 727 | + $GLOBALS['cache_utilise_session'] = $page['invalideurs']['session']; |
|
| 728 | + } |
|
| 729 | + |
|
| 730 | + return $page; |
|
| 731 | 731 | } |
| 732 | 732 | |
| 733 | 733 | |
| 734 | 734 | function page_base_href(&$texte) { |
| 735 | - static $set_html_base = null; |
|
| 736 | - if (is_null($set_html_base)) { |
|
| 737 | - if (!defined('_SET_HTML_BASE')) { |
|
| 738 | - // si la profondeur est superieure a 1 |
|
| 739 | - // est que ce n'est pas une url page ni une url action |
|
| 740 | - // activer par defaut |
|
| 741 | - $set_html_base = (( |
|
| 742 | - $GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2) |
|
| 743 | - and _request(_SPIP_PAGE) !== 'login' |
|
| 744 | - and !_request('action')) ? true : false); |
|
| 745 | - } else { |
|
| 746 | - $set_html_base = _SET_HTML_BASE; |
|
| 747 | - } |
|
| 748 | - } |
|
| 749 | - |
|
| 750 | - if ( |
|
| 751 | - $set_html_base |
|
| 752 | - and isset($GLOBALS['html']) and $GLOBALS['html'] |
|
| 753 | - and $GLOBALS['profondeur_url'] > 0 |
|
| 754 | - and ($poshead = strpos($texte, '</head>')) !== false |
|
| 755 | - ) { |
|
| 756 | - $head = substr($texte, 0, $poshead); |
|
| 757 | - $insert = false; |
|
| 758 | - $href_base = false; |
|
| 759 | - if (strpos($head, '<base') === false) { |
|
| 760 | - $insert = true; |
|
| 761 | - } else { |
|
| 762 | - // si aucun <base ...> n'a de href il faut en inserer un |
|
| 763 | - // sinon juste re-ecrire les ancres si besoin |
|
| 764 | - $insert = true; |
|
| 765 | - include_spip('inc/filtres'); |
|
| 766 | - $bases = extraire_balises($head, 'base'); |
|
| 767 | - foreach ($bases as $base) { |
|
| 768 | - if ($href_base = extraire_attribut($base, 'href')) { |
|
| 769 | - $insert = false; |
|
| 770 | - break; |
|
| 771 | - } |
|
| 772 | - } |
|
| 773 | - } |
|
| 774 | - |
|
| 775 | - if ($insert) { |
|
| 776 | - include_spip('inc/filtres_mini'); |
|
| 777 | - // ajouter un base qui reglera tous les liens relatifs |
|
| 778 | - $href_base = url_absolue('./'); |
|
| 779 | - $base = "\n<base href=\"$href_base\" />"; |
|
| 780 | - if (($pos = strpos($head, '<head>')) !== false) { |
|
| 781 | - $head = substr_replace($head, $base, $pos + 6, 0); |
|
| 782 | - } elseif (preg_match(',<head[^>]*>,i', $head, $r)) { |
|
| 783 | - $head = str_replace($r[0], $r[0] . $base, $head); |
|
| 784 | - } |
|
| 785 | - $texte = $head . substr($texte, $poshead); |
|
| 786 | - } |
|
| 787 | - if ($href_base) { |
|
| 788 | - // gerer les ancres |
|
| 789 | - $base = $_SERVER['REQUEST_URI']; |
|
| 790 | - // pas de guillemets ni < dans l'URL qu'on insere dans le HTML |
|
| 791 | - if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) { |
|
| 792 | - $base = str_replace(["'",'"','<'], ['%27','%22','%3C'], $base); |
|
| 793 | - } |
|
| 794 | - if (strpos($texte, "href='#") !== false) { |
|
| 795 | - $texte = str_replace("href='#", "href='$base#", $texte); |
|
| 796 | - } |
|
| 797 | - if (strpos($texte, 'href="#') !== false) { |
|
| 798 | - $texte = str_replace('href="#', "href=\"$base#", $texte); |
|
| 799 | - } |
|
| 800 | - } |
|
| 801 | - } |
|
| 735 | + static $set_html_base = null; |
|
| 736 | + if (is_null($set_html_base)) { |
|
| 737 | + if (!defined('_SET_HTML_BASE')) { |
|
| 738 | + // si la profondeur est superieure a 1 |
|
| 739 | + // est que ce n'est pas une url page ni une url action |
|
| 740 | + // activer par defaut |
|
| 741 | + $set_html_base = (( |
|
| 742 | + $GLOBALS['profondeur_url'] >= (_DIR_RESTREINT ? 1 : 2) |
|
| 743 | + and _request(_SPIP_PAGE) !== 'login' |
|
| 744 | + and !_request('action')) ? true : false); |
|
| 745 | + } else { |
|
| 746 | + $set_html_base = _SET_HTML_BASE; |
|
| 747 | + } |
|
| 748 | + } |
|
| 749 | + |
|
| 750 | + if ( |
|
| 751 | + $set_html_base |
|
| 752 | + and isset($GLOBALS['html']) and $GLOBALS['html'] |
|
| 753 | + and $GLOBALS['profondeur_url'] > 0 |
|
| 754 | + and ($poshead = strpos($texte, '</head>')) !== false |
|
| 755 | + ) { |
|
| 756 | + $head = substr($texte, 0, $poshead); |
|
| 757 | + $insert = false; |
|
| 758 | + $href_base = false; |
|
| 759 | + if (strpos($head, '<base') === false) { |
|
| 760 | + $insert = true; |
|
| 761 | + } else { |
|
| 762 | + // si aucun <base ...> n'a de href il faut en inserer un |
|
| 763 | + // sinon juste re-ecrire les ancres si besoin |
|
| 764 | + $insert = true; |
|
| 765 | + include_spip('inc/filtres'); |
|
| 766 | + $bases = extraire_balises($head, 'base'); |
|
| 767 | + foreach ($bases as $base) { |
|
| 768 | + if ($href_base = extraire_attribut($base, 'href')) { |
|
| 769 | + $insert = false; |
|
| 770 | + break; |
|
| 771 | + } |
|
| 772 | + } |
|
| 773 | + } |
|
| 774 | + |
|
| 775 | + if ($insert) { |
|
| 776 | + include_spip('inc/filtres_mini'); |
|
| 777 | + // ajouter un base qui reglera tous les liens relatifs |
|
| 778 | + $href_base = url_absolue('./'); |
|
| 779 | + $base = "\n<base href=\"$href_base\" />"; |
|
| 780 | + if (($pos = strpos($head, '<head>')) !== false) { |
|
| 781 | + $head = substr_replace($head, $base, $pos + 6, 0); |
|
| 782 | + } elseif (preg_match(',<head[^>]*>,i', $head, $r)) { |
|
| 783 | + $head = str_replace($r[0], $r[0] . $base, $head); |
|
| 784 | + } |
|
| 785 | + $texte = $head . substr($texte, $poshead); |
|
| 786 | + } |
|
| 787 | + if ($href_base) { |
|
| 788 | + // gerer les ancres |
|
| 789 | + $base = $_SERVER['REQUEST_URI']; |
|
| 790 | + // pas de guillemets ni < dans l'URL qu'on insere dans le HTML |
|
| 791 | + if (strpos($base, "'") or strpos($base, '"') or strpos($base, '<')) { |
|
| 792 | + $base = str_replace(["'",'"','<'], ['%27','%22','%3C'], $base); |
|
| 793 | + } |
|
| 794 | + if (strpos($texte, "href='#") !== false) { |
|
| 795 | + $texte = str_replace("href='#", "href='$base#", $texte); |
|
| 796 | + } |
|
| 797 | + if (strpos($texte, 'href="#') !== false) { |
|
| 798 | + $texte = str_replace('href="#', "href=\"$base#", $texte); |
|
| 799 | + } |
|
| 800 | + } |
|
| 801 | + } |
|
| 802 | 802 | } |
| 803 | 803 | |
| 804 | 804 | |
| 805 | 805 | // Envoyer les entetes, en retenant ceux qui sont a usage interne |
| 806 | 806 | // et demarrent par X-Spip-... |
| 807 | 807 | function envoyer_entetes($entetes) { |
| 808 | - foreach ($entetes as $k => $v) { # if (strncmp($k, 'X-Spip-', 7)) |
|
| 809 | - @header(strlen($v) ? "$k: $v" : $k); |
|
| 810 | - } |
|
| 808 | + foreach ($entetes as $k => $v) { # if (strncmp($k, 'X-Spip-', 7)) |
|
| 809 | + @header(strlen($v) ? "$k: $v" : $k); |
|
| 810 | + } |
|
| 811 | 811 | } |
@@ -59,7 +59,7 @@ discard block |
||
| 59 | 59 | } |
| 60 | 60 | |
| 61 | 61 | $n = intval(sql_errno()); |
| 62 | - spip_log("Erreur base de donnees $n " . sql_error()); |
|
| 62 | + spip_log("Erreur base de donnees $n ".sql_error()); |
|
| 63 | 63 | |
| 64 | 64 | return $n ?: 1; |
| 65 | 65 | } |
@@ -110,19 +110,19 @@ discard block |
||
| 110 | 110 | // erreur SQL a afficher |
| 111 | 111 | $raison = minipres( |
| 112 | 112 | _T('info_travaux_titre'), |
| 113 | - _T('titre_probleme_technique') . '<p><tt>' . sql_errno() . ' ' . sql_error() . '</tt></p>' |
|
| 113 | + _T('titre_probleme_technique').'<p><tt>'.sql_errno().' '.sql_error().'</tt></p>' |
|
| 114 | 114 | ); |
| 115 | 115 | } elseif (@$raison['statut']) { |
| 116 | 116 | // un simple visiteur n'a pas acces a l'espace prive |
| 117 | - spip_log('connexion refusee a ' . @$raison['id_auteur']); |
|
| 117 | + spip_log('connexion refusee a '.@$raison['id_auteur']); |
|
| 118 | 118 | $est_connecte = (!empty($GLOBALS['visiteur_session']['login']) and !empty($GLOBALS['visiteur_session']['statut'])); // idem test balise #URL_LOGOUT |
| 119 | 119 | $raison = minipres( |
| 120 | 120 | _T('avis_erreur_connexion'), |
| 121 | 121 | _T('avis_erreur_visiteur') |
| 122 | 122 | // Lien vers le site public |
| 123 | - . '<br /><a href="' . url_de_base() . '">' . _T('login_retour_public') . '</a>' |
|
| 123 | + . '<br /><a href="'.url_de_base().'">'._T('login_retour_public').'</a>' |
|
| 124 | 124 | // Si la personne est connectée, lien de déconnexion ramenant vers la page de login |
| 125 | - . ($est_connecte ? ' | <a href="' . generer_url_public('', 'action=logout&logout=prive') . '">' . _T('icone_deconnecter') . '</a>' : '') |
|
| 125 | + . ($est_connecte ? ' | <a href="'.generer_url_public('', 'action=logout&logout=prive').'">'._T('icone_deconnecter').'</a>' : '') |
|
| 126 | 126 | ); |
| 127 | 127 | } else { |
| 128 | 128 | // auteur en fin de droits ... |
@@ -212,8 +212,7 @@ discard block |
||
| 212 | 212 | $where = (is_numeric($id_auteur) |
| 213 | 213 | /*AND $id_auteur>0*/ // reprise lors des restaurations |
| 214 | 214 | ) ? |
| 215 | - "id_auteur=$id_auteur" : |
|
| 216 | - (!strlen($GLOBALS['connect_login']) ? '' : 'login=' . sql_quote($GLOBALS['connect_login'], '', 'text')); |
|
| 215 | + "id_auteur=$id_auteur" : (!strlen($GLOBALS['connect_login']) ? '' : 'login='.sql_quote($GLOBALS['connect_login'], '', 'text')); |
|
| 217 | 216 | |
| 218 | 217 | if (!$where) { |
| 219 | 218 | return ''; |
@@ -255,7 +254,7 @@ discard block |
||
| 255 | 254 | $GLOBALS['connect_login'] = $row['login']; |
| 256 | 255 | $GLOBALS['connect_statut'] = $row['statut']; |
| 257 | 256 | |
| 258 | - $GLOBALS['visiteur_session'] = array_merge((array)$GLOBALS['visiteur_session'], $row); |
|
| 257 | + $GLOBALS['visiteur_session'] = array_merge((array) $GLOBALS['visiteur_session'], $row); |
|
| 259 | 258 | |
| 260 | 259 | // au cas ou : ne pas memoriser les champs sensibles |
| 261 | 260 | unset($GLOBALS['visiteur_session']['pass']); |
@@ -327,7 +326,7 @@ discard block |
||
| 327 | 326 | * @return string |
| 328 | 327 | */ |
| 329 | 328 | function auth_a_loger() { |
| 330 | - $redirect = generer_url_public('login', 'url=' . rawurlencode(self('&', true)), true); |
|
| 329 | + $redirect = generer_url_public('login', 'url='.rawurlencode(self('&', true)), true); |
|
| 331 | 330 | |
| 332 | 331 | // un echec au "bonjour" (login initial) quand le statut est |
| 333 | 332 | // inconnu signale sans doute un probleme de cookies |
@@ -363,7 +362,7 @@ discard block |
||
| 363 | 362 | $date ??= date('Y-m-d H:i:s'); |
| 364 | 363 | |
| 365 | 364 | if (abs(strtotime($date) - $connect_quand) >= 60) { |
| 366 | - sql_updateq('spip_auteurs', ['en_ligne' => $date], 'id_auteur=' . intval($row['id_auteur'])); |
|
| 365 | + sql_updateq('spip_auteurs', ['en_ligne' => $date], 'id_auteur='.intval($row['id_auteur'])); |
|
| 367 | 366 | $row['en_ligne'] = $date; |
| 368 | 367 | } |
| 369 | 368 | |
@@ -472,7 +471,7 @@ discard block |
||
| 472 | 471 | if ( |
| 473 | 472 | !$login |
| 474 | 473 | or !$login_base = auth_retrouver_login($login, $serveur) |
| 475 | - or !$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur) |
|
| 474 | + or !$row = sql_fetsel('*', 'spip_auteurs', 'login='.sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur) |
|
| 476 | 475 | ) { |
| 477 | 476 | // generer de fausses infos, mais credibles, pour eviter une attaque |
| 478 | 477 | // https://core.spip.net/issues/1758 + https://core.spip.net/issues/3691 |
@@ -582,7 +581,7 @@ discard block |
||
| 582 | 581 | sql_updateq( |
| 583 | 582 | 'spip_auteurs', |
| 584 | 583 | ['prefs' => serialize($p)], |
| 585 | - 'id_auteur=' . intval($auteur['id_auteur']) |
|
| 584 | + 'id_auteur='.intval($auteur['id_auteur']) |
|
| 586 | 585 | ); |
| 587 | 586 | |
| 588 | 587 | // bloquer ici le visiteur qui tente d'abuser de ses droits |
@@ -746,7 +745,7 @@ discard block |
||
| 746 | 745 | return false; |
| 747 | 746 | } |
| 748 | 747 | |
| 749 | - $row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur); |
|
| 748 | + $row = sql_fetsel('*', 'spip_auteurs', 'login='.sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur); |
|
| 750 | 749 | |
| 751 | 750 | if (!$row) { |
| 752 | 751 | if ( |
@@ -802,11 +801,11 @@ discard block |
||
| 802 | 801 | $retour = $retour ?: _T('icone_retour'); |
| 803 | 802 | $corps .= "<p>$raison</p>[<a href='$public'>$retour</a>] "; |
| 804 | 803 | if ($url) { |
| 805 | - $corps .= "[<a href='" . generer_url_action('cookie', "essai_auth_http=oui&$url") . "'>$re</a>]"; |
|
| 804 | + $corps .= "[<a href='".generer_url_action('cookie', "essai_auth_http=oui&$url")."'>$re</a>]"; |
|
| 806 | 805 | } |
| 807 | 806 | |
| 808 | 807 | if ($lien) { |
| 809 | - $corps .= " [<a href='$ecrire'>" . _T('login_espace_prive') . '</a>]'; |
|
| 808 | + $corps .= " [<a href='$ecrire'>"._T('login_espace_prive').'</a>]'; |
|
| 810 | 809 | } |
| 811 | 810 | include_spip('inc/minipres'); |
| 812 | 811 | echo minipres($pb, $corps); |
@@ -16,7 +16,7 @@ discard block |
||
| 16 | 16 | **/ |
| 17 | 17 | |
| 18 | 18 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 19 | - return; |
|
| 19 | + return; |
|
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | include_spip('base/abstract_sql'); |
@@ -34,33 +34,33 @@ discard block |
||
| 34 | 34 | * - une chaîne vide si autorisation à pénétrer dans l'espace privé. |
| 35 | 35 | */ |
| 36 | 36 | function inc_auth_dist() { |
| 37 | - $row = auth_mode(); |
|
| 37 | + $row = auth_mode(); |
|
| 38 | 38 | |
| 39 | - if ($row) { |
|
| 40 | - return auth_init_droits($row); |
|
| 41 | - } |
|
| 39 | + if ($row) { |
|
| 40 | + return auth_init_droits($row); |
|
| 41 | + } |
|
| 42 | 42 | |
| 43 | - if (!$GLOBALS['connect_login']) { |
|
| 44 | - return auth_a_loger(); |
|
| 45 | - } |
|
| 43 | + if (!$GLOBALS['connect_login']) { |
|
| 44 | + return auth_a_loger(); |
|
| 45 | + } |
|
| 46 | 46 | |
| 47 | - // Cas ou l'auteur a ete identifie mais on n'a pas d'info sur lui |
|
| 48 | - // C'est soit parce que la base est inutilisable, |
|
| 49 | - // soit parce que la table des auteurs a changee (restauration etc) |
|
| 50 | - // Pas la peine d'insister. |
|
| 51 | - // Renvoyer le nom fautif et une URL de remise a zero |
|
| 47 | + // Cas ou l'auteur a ete identifie mais on n'a pas d'info sur lui |
|
| 48 | + // C'est soit parce que la base est inutilisable, |
|
| 49 | + // soit parce que la table des auteurs a changee (restauration etc) |
|
| 50 | + // Pas la peine d'insister. |
|
| 51 | + // Renvoyer le nom fautif et une URL de remise a zero |
|
| 52 | 52 | |
| 53 | - if (spip_connect()) { |
|
| 54 | - return [ |
|
| 55 | - 'login' => $GLOBALS['connect_login'], |
|
| 56 | - 'site' => generer_url_public('', 'action=logout&logout=prive') |
|
| 57 | - ]; |
|
| 58 | - } |
|
| 53 | + if (spip_connect()) { |
|
| 54 | + return [ |
|
| 55 | + 'login' => $GLOBALS['connect_login'], |
|
| 56 | + 'site' => generer_url_public('', 'action=logout&logout=prive') |
|
| 57 | + ]; |
|
| 58 | + } |
|
| 59 | 59 | |
| 60 | - $n = intval(sql_errno()); |
|
| 61 | - spip_log("Erreur base de donnees $n " . sql_error()); |
|
| 60 | + $n = intval(sql_errno()); |
|
| 61 | + spip_log("Erreur base de donnees $n " . sql_error()); |
|
| 62 | 62 | |
| 63 | - return $n ?: 1; |
|
| 63 | + return $n ?: 1; |
|
| 64 | 64 | } |
| 65 | 65 | |
| 66 | 66 | /** |
@@ -70,22 +70,22 @@ discard block |
||
| 70 | 70 | */ |
| 71 | 71 | function auth_controler_password_auteur_connecte(#[\SensitiveParameter] string $password): bool { |
| 72 | 72 | |
| 73 | - if ( |
|
| 74 | - empty($GLOBALS['visiteur_session']['id_auteur']) |
|
| 75 | - or empty($GLOBALS['visiteur_session']['login']) |
|
| 76 | - ) { |
|
| 77 | - return false; |
|
| 78 | - } |
|
| 79 | - |
|
| 80 | - $auth = auth_identifier_login($GLOBALS['visiteur_session']['login'], $password, '', true); |
|
| 81 | - if ( |
|
| 82 | - is_array($auth) |
|
| 83 | - and $auth['id_auteur'] == $GLOBALS['visiteur_session']['id_auteur'] |
|
| 84 | - ) { |
|
| 85 | - return true; |
|
| 86 | - } |
|
| 87 | - |
|
| 88 | - return false; |
|
| 73 | + if ( |
|
| 74 | + empty($GLOBALS['visiteur_session']['id_auteur']) |
|
| 75 | + or empty($GLOBALS['visiteur_session']['login']) |
|
| 76 | + ) { |
|
| 77 | + return false; |
|
| 78 | + } |
|
| 79 | + |
|
| 80 | + $auth = auth_identifier_login($GLOBALS['visiteur_session']['login'], $password, '', true); |
|
| 81 | + if ( |
|
| 82 | + is_array($auth) |
|
| 83 | + and $auth['id_auteur'] == $GLOBALS['visiteur_session']['id_auteur'] |
|
| 84 | + ) { |
|
| 85 | + return true; |
|
| 86 | + } |
|
| 87 | + |
|
| 88 | + return false; |
|
| 89 | 89 | } |
| 90 | 90 | |
| 91 | 91 | /** |
@@ -97,47 +97,47 @@ discard block |
||
| 97 | 97 | * @return array|string |
| 98 | 98 | */ |
| 99 | 99 | function auth_echec($raison) { |
| 100 | - include_spip('inc/minipres'); |
|
| 101 | - include_spip('inc/headers'); |
|
| 102 | - // pas authentifie. Pourquoi ? |
|
| 103 | - if (is_string($raison)) { |
|
| 104 | - // redirection vers une page d'authentification |
|
| 105 | - // on ne revient pas de cette fonction |
|
| 106 | - // sauf si pb de header |
|
| 107 | - $raison = redirige_formulaire($raison); |
|
| 108 | - } elseif (is_int($raison)) { |
|
| 109 | - // erreur SQL a afficher |
|
| 110 | - $raison = minipres( |
|
| 111 | - _T('info_travaux_titre'), |
|
| 112 | - _T('titre_probleme_technique') . '<p><tt>' . sql_errno() . ' ' . sql_error() . '</tt></p>' |
|
| 113 | - ); |
|
| 114 | - } elseif (@$raison['statut']) { |
|
| 115 | - // un simple visiteur n'a pas acces a l'espace prive |
|
| 116 | - spip_log('connexion refusee a ' . @$raison['id_auteur']); |
|
| 117 | - $est_connecte = (!empty($GLOBALS['visiteur_session']['login']) and !empty($GLOBALS['visiteur_session']['statut'])); // idem test balise #URL_LOGOUT |
|
| 118 | - $raison = minipres( |
|
| 119 | - _T('avis_erreur_connexion'), |
|
| 120 | - _T('avis_erreur_visiteur') |
|
| 121 | - // Lien vers le site public |
|
| 122 | - . '<br /><a href="' . url_de_base() . '">' . _T('login_retour_public') . '</a>' |
|
| 123 | - // Si la personne est connectée, lien de déconnexion ramenant vers la page de login |
|
| 124 | - . ($est_connecte ? ' | <a href="' . generer_url_public('', 'action=logout&logout=prive') . '">' . _T('icone_deconnecter') . '</a>' : '') |
|
| 125 | - ); |
|
| 126 | - } else { |
|
| 127 | - // auteur en fin de droits ... |
|
| 128 | - $h = $raison['site']; |
|
| 129 | - $raison = minipres( |
|
| 130 | - _T('avis_erreur_connexion'), |
|
| 131 | - '<br /><br /><p>' |
|
| 132 | - . _T('texte_inc_auth_1', ['auth_login' => $raison['login']]) |
|
| 133 | - . " <a href='$h'>" |
|
| 134 | - . _T('texte_inc_auth_2') |
|
| 135 | - . '</a>' |
|
| 136 | - . _T('texte_inc_auth_3') |
|
| 137 | - ); |
|
| 138 | - } |
|
| 139 | - |
|
| 140 | - return $raison; |
|
| 100 | + include_spip('inc/minipres'); |
|
| 101 | + include_spip('inc/headers'); |
|
| 102 | + // pas authentifie. Pourquoi ? |
|
| 103 | + if (is_string($raison)) { |
|
| 104 | + // redirection vers une page d'authentification |
|
| 105 | + // on ne revient pas de cette fonction |
|
| 106 | + // sauf si pb de header |
|
| 107 | + $raison = redirige_formulaire($raison); |
|
| 108 | + } elseif (is_int($raison)) { |
|
| 109 | + // erreur SQL a afficher |
|
| 110 | + $raison = minipres( |
|
| 111 | + _T('info_travaux_titre'), |
|
| 112 | + _T('titre_probleme_technique') . '<p><tt>' . sql_errno() . ' ' . sql_error() . '</tt></p>' |
|
| 113 | + ); |
|
| 114 | + } elseif (@$raison['statut']) { |
|
| 115 | + // un simple visiteur n'a pas acces a l'espace prive |
|
| 116 | + spip_log('connexion refusee a ' . @$raison['id_auteur']); |
|
| 117 | + $est_connecte = (!empty($GLOBALS['visiteur_session']['login']) and !empty($GLOBALS['visiteur_session']['statut'])); // idem test balise #URL_LOGOUT |
|
| 118 | + $raison = minipres( |
|
| 119 | + _T('avis_erreur_connexion'), |
|
| 120 | + _T('avis_erreur_visiteur') |
|
| 121 | + // Lien vers le site public |
|
| 122 | + . '<br /><a href="' . url_de_base() . '">' . _T('login_retour_public') . '</a>' |
|
| 123 | + // Si la personne est connectée, lien de déconnexion ramenant vers la page de login |
|
| 124 | + . ($est_connecte ? ' | <a href="' . generer_url_public('', 'action=logout&logout=prive') . '">' . _T('icone_deconnecter') . '</a>' : '') |
|
| 125 | + ); |
|
| 126 | + } else { |
|
| 127 | + // auteur en fin de droits ... |
|
| 128 | + $h = $raison['site']; |
|
| 129 | + $raison = minipres( |
|
| 130 | + _T('avis_erreur_connexion'), |
|
| 131 | + '<br /><br /><p>' |
|
| 132 | + . _T('texte_inc_auth_1', ['auth_login' => $raison['login']]) |
|
| 133 | + . " <a href='$h'>" |
|
| 134 | + . _T('texte_inc_auth_2') |
|
| 135 | + . '</a>' |
|
| 136 | + . _T('texte_inc_auth_3') |
|
| 137 | + ); |
|
| 138 | + } |
|
| 139 | + |
|
| 140 | + return $raison; |
|
| 141 | 141 | } |
| 142 | 142 | |
| 143 | 143 | /** |
@@ -147,81 +147,81 @@ discard block |
||
| 147 | 147 | * @return array|bool|string |
| 148 | 148 | */ |
| 149 | 149 | function auth_mode() { |
| 150 | - // |
|
| 151 | - // Initialiser variables (eviter hacks par URL) |
|
| 152 | - // |
|
| 153 | - $GLOBALS['connect_login'] = ''; |
|
| 154 | - $id_auteur = null; |
|
| 155 | - $GLOBALS['auth_can_disconnect'] = false; |
|
| 156 | - |
|
| 157 | - // |
|
| 158 | - // Recuperer les donnees d'identification |
|
| 159 | - // |
|
| 160 | - include_spip('inc/session'); |
|
| 161 | - // Session valide en cours ? |
|
| 162 | - if (isset($_COOKIE['spip_session'])) { |
|
| 163 | - $session = charger_fonction('session', 'inc'); |
|
| 164 | - if ( |
|
| 165 | - $id_auteur = $session() |
|
| 166 | - or $id_auteur === 0 // reprise sur restauration |
|
| 167 | - ) { |
|
| 168 | - $GLOBALS['auth_can_disconnect'] = true; |
|
| 169 | - $GLOBALS['connect_login'] = session_get('login'); |
|
| 170 | - } else { |
|
| 171 | - unset($_COOKIE['spip_session']); |
|
| 172 | - } |
|
| 173 | - } |
|
| 174 | - |
|
| 175 | - // Essayer auth http si significatif |
|
| 176 | - // (ignorer les login d'intranet independants de spip) |
|
| 177 | - if (!$GLOBALS['ignore_auth_http']) { |
|
| 178 | - if ( |
|
| 179 | - (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW']) |
|
| 180 | - and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) |
|
| 181 | - or |
|
| 182 | - // Si auth http differtente de basic, PHP_AUTH_PW |
|
| 183 | - // est indisponible mais tentons quand meme pour |
|
| 184 | - // autocreation via LDAP |
|
| 185 | - (isset($_SERVER['REMOTE_USER']) |
|
| 186 | - and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'], '')) |
|
| 187 | - ) { |
|
| 188 | - if (!$id_auteur) { |
|
| 189 | - $_SERVER['PHP_AUTH_PW'] = ''; |
|
| 190 | - $GLOBALS['auth_can_disconnect'] = true; |
|
| 191 | - $GLOBALS['visiteur_session'] = $r; |
|
| 192 | - $GLOBALS['connect_login'] = session_get('login'); |
|
| 193 | - $id_auteur = $r['id_auteur']; |
|
| 194 | - } else { |
|
| 195 | - // cas de la session en plus de PHP_AUTH |
|
| 196 | - /* if ($id_auteur != $r['id_auteur']){ |
|
| 150 | + // |
|
| 151 | + // Initialiser variables (eviter hacks par URL) |
|
| 152 | + // |
|
| 153 | + $GLOBALS['connect_login'] = ''; |
|
| 154 | + $id_auteur = null; |
|
| 155 | + $GLOBALS['auth_can_disconnect'] = false; |
|
| 156 | + |
|
| 157 | + // |
|
| 158 | + // Recuperer les donnees d'identification |
|
| 159 | + // |
|
| 160 | + include_spip('inc/session'); |
|
| 161 | + // Session valide en cours ? |
|
| 162 | + if (isset($_COOKIE['spip_session'])) { |
|
| 163 | + $session = charger_fonction('session', 'inc'); |
|
| 164 | + if ( |
|
| 165 | + $id_auteur = $session() |
|
| 166 | + or $id_auteur === 0 // reprise sur restauration |
|
| 167 | + ) { |
|
| 168 | + $GLOBALS['auth_can_disconnect'] = true; |
|
| 169 | + $GLOBALS['connect_login'] = session_get('login'); |
|
| 170 | + } else { |
|
| 171 | + unset($_COOKIE['spip_session']); |
|
| 172 | + } |
|
| 173 | + } |
|
| 174 | + |
|
| 175 | + // Essayer auth http si significatif |
|
| 176 | + // (ignorer les login d'intranet independants de spip) |
|
| 177 | + if (!$GLOBALS['ignore_auth_http']) { |
|
| 178 | + if ( |
|
| 179 | + (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW']) |
|
| 180 | + and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) |
|
| 181 | + or |
|
| 182 | + // Si auth http differtente de basic, PHP_AUTH_PW |
|
| 183 | + // est indisponible mais tentons quand meme pour |
|
| 184 | + // autocreation via LDAP |
|
| 185 | + (isset($_SERVER['REMOTE_USER']) |
|
| 186 | + and $r = lire_php_auth($_SERVER['PHP_AUTH_USER'] = $_SERVER['REMOTE_USER'], '')) |
|
| 187 | + ) { |
|
| 188 | + if (!$id_auteur) { |
|
| 189 | + $_SERVER['PHP_AUTH_PW'] = ''; |
|
| 190 | + $GLOBALS['auth_can_disconnect'] = true; |
|
| 191 | + $GLOBALS['visiteur_session'] = $r; |
|
| 192 | + $GLOBALS['connect_login'] = session_get('login'); |
|
| 193 | + $id_auteur = $r['id_auteur']; |
|
| 194 | + } else { |
|
| 195 | + // cas de la session en plus de PHP_AUTH |
|
| 196 | + /* if ($id_auteur != $r['id_auteur']){ |
|
| 197 | 197 | spip_log("vol de session $id_auteur" . join(', ', $r)); |
| 198 | 198 | unset($_COOKIE['spip_session']); |
| 199 | 199 | $id_auteur = ''; |
| 200 | 200 | } */ |
| 201 | - } |
|
| 202 | - } else { |
|
| 203 | - // Authentification .htaccess old style, car .htaccess semble |
|
| 204 | - // souvent definir *aussi* PHP_AUTH_USER et PHP_AUTH_PW |
|
| 205 | - if (isset($_SERVER['REMOTE_USER'])) { |
|
| 206 | - $GLOBALS['connect_login'] = $_SERVER['REMOTE_USER']; |
|
| 207 | - } |
|
| 208 | - } |
|
| 209 | - } |
|
| 210 | - |
|
| 211 | - $where = (is_numeric($id_auteur) |
|
| 212 | - /*AND $id_auteur>0*/ // reprise lors des restaurations |
|
| 213 | - ) ? |
|
| 214 | - "id_auteur=$id_auteur" : |
|
| 215 | - (!strlen($GLOBALS['connect_login']) ? '' : 'login=' . sql_quote($GLOBALS['connect_login'], '', 'text')); |
|
| 216 | - |
|
| 217 | - if (!$where) { |
|
| 218 | - return ''; |
|
| 219 | - } |
|
| 220 | - |
|
| 221 | - // Trouver les autres infos dans la table auteurs. |
|
| 222 | - // le champ 'quand' est utilise par l'agenda |
|
| 223 | - |
|
| 224 | - return sql_fetsel('*, en_ligne AS quand', 'spip_auteurs', "$where AND statut!='5poubelle'"); |
|
| 201 | + } |
|
| 202 | + } else { |
|
| 203 | + // Authentification .htaccess old style, car .htaccess semble |
|
| 204 | + // souvent definir *aussi* PHP_AUTH_USER et PHP_AUTH_PW |
|
| 205 | + if (isset($_SERVER['REMOTE_USER'])) { |
|
| 206 | + $GLOBALS['connect_login'] = $_SERVER['REMOTE_USER']; |
|
| 207 | + } |
|
| 208 | + } |
|
| 209 | + } |
|
| 210 | + |
|
| 211 | + $where = (is_numeric($id_auteur) |
|
| 212 | + /*AND $id_auteur>0*/ // reprise lors des restaurations |
|
| 213 | + ) ? |
|
| 214 | + "id_auteur=$id_auteur" : |
|
| 215 | + (!strlen($GLOBALS['connect_login']) ? '' : 'login=' . sql_quote($GLOBALS['connect_login'], '', 'text')); |
|
| 216 | + |
|
| 217 | + if (!$where) { |
|
| 218 | + return ''; |
|
| 219 | + } |
|
| 220 | + |
|
| 221 | + // Trouver les autres infos dans la table auteurs. |
|
| 222 | + // le champ 'quand' est utilise par l'agenda |
|
| 223 | + |
|
| 224 | + return sql_fetsel('*, en_ligne AS quand', 'spip_auteurs', "$where AND statut!='5poubelle'"); |
|
| 225 | 225 | } |
| 226 | 226 | |
| 227 | 227 | /** |
@@ -239,85 +239,85 @@ discard block |
||
| 239 | 239 | */ |
| 240 | 240 | function auth_init_droits($row) { |
| 241 | 241 | |
| 242 | - include_spip('inc/autoriser'); |
|
| 243 | - if (!autoriser('loger', '', 0, $row)) { |
|
| 244 | - return false; |
|
| 245 | - } |
|
| 246 | - |
|
| 247 | - |
|
| 248 | - if ($row['statut'] == 'nouveau') { |
|
| 249 | - include_spip('action/inscrire_auteur'); |
|
| 250 | - $row = confirmer_statut_inscription($row); |
|
| 251 | - } |
|
| 252 | - |
|
| 253 | - $GLOBALS['connect_id_auteur'] = $row['id_auteur']; |
|
| 254 | - $GLOBALS['connect_login'] = $row['login']; |
|
| 255 | - $GLOBALS['connect_statut'] = $row['statut']; |
|
| 256 | - |
|
| 257 | - $GLOBALS['visiteur_session'] = array_merge((array)$GLOBALS['visiteur_session'], $row); |
|
| 258 | - |
|
| 259 | - // au cas ou : ne pas memoriser les champs sensibles |
|
| 260 | - unset($GLOBALS['visiteur_session']['pass']); |
|
| 261 | - unset($GLOBALS['visiteur_session']['htpass']); |
|
| 262 | - unset($GLOBALS['visiteur_session']['alea_actuel']); |
|
| 263 | - unset($GLOBALS['visiteur_session']['alea_futur']); |
|
| 264 | - unset($GLOBALS['visiteur_session']['ldap_password']); |
|
| 265 | - |
|
| 266 | - // creer la session au besoin |
|
| 267 | - if (!isset($_COOKIE['spip_session'])) { |
|
| 268 | - $session = charger_fonction('session', 'inc'); |
|
| 269 | - $spip_session = $session($row); |
|
| 270 | - } |
|
| 271 | - |
|
| 272 | - // reinjecter les preferences_auteur apres le reset de spip_session |
|
| 273 | - // car utilisees au retour par auth_loger() |
|
| 274 | - $r = @unserialize($row['prefs']); |
|
| 275 | - $GLOBALS['visiteur_session']['prefs'] = ($r ?: []); |
|
| 276 | - // si prefs pas definies, les definir par defaut |
|
| 277 | - if (!isset($GLOBALS['visiteur_session']['prefs']['couleur'])) { |
|
| 278 | - $GLOBALS['visiteur_session']['prefs']['couleur'] = 2; |
|
| 279 | - $GLOBALS['visiteur_session']['prefs']['display'] = 2; |
|
| 280 | - $GLOBALS['visiteur_session']['prefs']['display_navigation'] = 'navigation_avec_icones'; |
|
| 281 | - } |
|
| 282 | - |
|
| 283 | - $GLOBALS['visiteur_session'] = pipeline( |
|
| 284 | - 'preparer_visiteur_session', |
|
| 285 | - ['args' => ['row' => $row], |
|
| 286 | - 'data' => $GLOBALS['visiteur_session']] |
|
| 287 | - ); |
|
| 288 | - |
|
| 289 | - // Etablir les droits selon le codage attendu |
|
| 290 | - // dans ecrire/index.php ecrire/prive.php |
|
| 291 | - |
|
| 292 | - // Pas autorise a acceder a ecrire ? renvoyer le tableau |
|
| 293 | - // A noter : le premier appel a autoriser() a le bon gout |
|
| 294 | - // d'initialiser $GLOBALS['visiteur_session']['restreint'], |
|
| 295 | - // qui ne figure pas dans le fichier de session |
|
| 296 | - |
|
| 297 | - if (!autoriser('ecrire')) { |
|
| 298 | - return $row; |
|
| 299 | - } |
|
| 300 | - |
|
| 301 | - // autoriser('ecrire') ne laisse passer que les Admin et les Redac |
|
| 302 | - |
|
| 303 | - auth_trace($row); |
|
| 304 | - |
|
| 305 | - // Administrateurs |
|
| 306 | - if (in_array($GLOBALS['connect_statut'], explode(',', _STATUT_AUTEUR_RUBRIQUE))) { |
|
| 307 | - if ( |
|
| 308 | - isset($GLOBALS['visiteur_session']['restreint']) |
|
| 309 | - and is_array($GLOBALS['visiteur_session']['restreint']) |
|
| 310 | - ) { |
|
| 311 | - $GLOBALS['connect_id_rubrique'] = $GLOBALS['visiteur_session']['restreint']; |
|
| 312 | - } |
|
| 313 | - if ($GLOBALS['connect_statut'] == '0minirezo') { |
|
| 314 | - $GLOBALS['connect_toutes_rubriques'] = !$GLOBALS['connect_id_rubrique']; |
|
| 315 | - } |
|
| 316 | - } |
|
| 317 | - |
|
| 318 | - // Pour les redacteurs, inc_version a fait l'initialisation minimale |
|
| 319 | - |
|
| 320 | - return ''; // i.e. pas de pb. |
|
| 242 | + include_spip('inc/autoriser'); |
|
| 243 | + if (!autoriser('loger', '', 0, $row)) { |
|
| 244 | + return false; |
|
| 245 | + } |
|
| 246 | + |
|
| 247 | + |
|
| 248 | + if ($row['statut'] == 'nouveau') { |
|
| 249 | + include_spip('action/inscrire_auteur'); |
|
| 250 | + $row = confirmer_statut_inscription($row); |
|
| 251 | + } |
|
| 252 | + |
|
| 253 | + $GLOBALS['connect_id_auteur'] = $row['id_auteur']; |
|
| 254 | + $GLOBALS['connect_login'] = $row['login']; |
|
| 255 | + $GLOBALS['connect_statut'] = $row['statut']; |
|
| 256 | + |
|
| 257 | + $GLOBALS['visiteur_session'] = array_merge((array)$GLOBALS['visiteur_session'], $row); |
|
| 258 | + |
|
| 259 | + // au cas ou : ne pas memoriser les champs sensibles |
|
| 260 | + unset($GLOBALS['visiteur_session']['pass']); |
|
| 261 | + unset($GLOBALS['visiteur_session']['htpass']); |
|
| 262 | + unset($GLOBALS['visiteur_session']['alea_actuel']); |
|
| 263 | + unset($GLOBALS['visiteur_session']['alea_futur']); |
|
| 264 | + unset($GLOBALS['visiteur_session']['ldap_password']); |
|
| 265 | + |
|
| 266 | + // creer la session au besoin |
|
| 267 | + if (!isset($_COOKIE['spip_session'])) { |
|
| 268 | + $session = charger_fonction('session', 'inc'); |
|
| 269 | + $spip_session = $session($row); |
|
| 270 | + } |
|
| 271 | + |
|
| 272 | + // reinjecter les preferences_auteur apres le reset de spip_session |
|
| 273 | + // car utilisees au retour par auth_loger() |
|
| 274 | + $r = @unserialize($row['prefs']); |
|
| 275 | + $GLOBALS['visiteur_session']['prefs'] = ($r ?: []); |
|
| 276 | + // si prefs pas definies, les definir par defaut |
|
| 277 | + if (!isset($GLOBALS['visiteur_session']['prefs']['couleur'])) { |
|
| 278 | + $GLOBALS['visiteur_session']['prefs']['couleur'] = 2; |
|
| 279 | + $GLOBALS['visiteur_session']['prefs']['display'] = 2; |
|
| 280 | + $GLOBALS['visiteur_session']['prefs']['display_navigation'] = 'navigation_avec_icones'; |
|
| 281 | + } |
|
| 282 | + |
|
| 283 | + $GLOBALS['visiteur_session'] = pipeline( |
|
| 284 | + 'preparer_visiteur_session', |
|
| 285 | + ['args' => ['row' => $row], |
|
| 286 | + 'data' => $GLOBALS['visiteur_session']] |
|
| 287 | + ); |
|
| 288 | + |
|
| 289 | + // Etablir les droits selon le codage attendu |
|
| 290 | + // dans ecrire/index.php ecrire/prive.php |
|
| 291 | + |
|
| 292 | + // Pas autorise a acceder a ecrire ? renvoyer le tableau |
|
| 293 | + // A noter : le premier appel a autoriser() a le bon gout |
|
| 294 | + // d'initialiser $GLOBALS['visiteur_session']['restreint'], |
|
| 295 | + // qui ne figure pas dans le fichier de session |
|
| 296 | + |
|
| 297 | + if (!autoriser('ecrire')) { |
|
| 298 | + return $row; |
|
| 299 | + } |
|
| 300 | + |
|
| 301 | + // autoriser('ecrire') ne laisse passer que les Admin et les Redac |
|
| 302 | + |
|
| 303 | + auth_trace($row); |
|
| 304 | + |
|
| 305 | + // Administrateurs |
|
| 306 | + if (in_array($GLOBALS['connect_statut'], explode(',', _STATUT_AUTEUR_RUBRIQUE))) { |
|
| 307 | + if ( |
|
| 308 | + isset($GLOBALS['visiteur_session']['restreint']) |
|
| 309 | + and is_array($GLOBALS['visiteur_session']['restreint']) |
|
| 310 | + ) { |
|
| 311 | + $GLOBALS['connect_id_rubrique'] = $GLOBALS['visiteur_session']['restreint']; |
|
| 312 | + } |
|
| 313 | + if ($GLOBALS['connect_statut'] == '0minirezo') { |
|
| 314 | + $GLOBALS['connect_toutes_rubriques'] = !$GLOBALS['connect_id_rubrique']; |
|
| 315 | + } |
|
| 316 | + } |
|
| 317 | + |
|
| 318 | + // Pour les redacteurs, inc_version a fait l'initialisation minimale |
|
| 319 | + |
|
| 320 | + return ''; // i.e. pas de pb. |
|
| 321 | 321 | } |
| 322 | 322 | |
| 323 | 323 | /** |
@@ -326,23 +326,23 @@ discard block |
||
| 326 | 326 | * @return string |
| 327 | 327 | */ |
| 328 | 328 | function auth_a_loger() { |
| 329 | - $redirect = generer_url_public('login', 'url=' . rawurlencode(self('&', true)), true); |
|
| 330 | - |
|
| 331 | - // un echec au "bonjour" (login initial) quand le statut est |
|
| 332 | - // inconnu signale sans doute un probleme de cookies |
|
| 333 | - if (isset($_GET['bonjour'])) { |
|
| 334 | - $redirect = parametre_url( |
|
| 335 | - $redirect, |
|
| 336 | - 'var_erreur', |
|
| 337 | - (!isset($GLOBALS['visiteur_session']['statut']) |
|
| 338 | - ? 'cookie' |
|
| 339 | - : 'statut' |
|
| 340 | - ), |
|
| 341 | - '&' |
|
| 342 | - ); |
|
| 343 | - } |
|
| 344 | - |
|
| 345 | - return $redirect; |
|
| 329 | + $redirect = generer_url_public('login', 'url=' . rawurlencode(self('&', true)), true); |
|
| 330 | + |
|
| 331 | + // un echec au "bonjour" (login initial) quand le statut est |
|
| 332 | + // inconnu signale sans doute un probleme de cookies |
|
| 333 | + if (isset($_GET['bonjour'])) { |
|
| 334 | + $redirect = parametre_url( |
|
| 335 | + $redirect, |
|
| 336 | + 'var_erreur', |
|
| 337 | + (!isset($GLOBALS['visiteur_session']['statut']) |
|
| 338 | + ? 'cookie' |
|
| 339 | + : 'statut' |
|
| 340 | + ), |
|
| 341 | + '&' |
|
| 342 | + ); |
|
| 343 | + } |
|
| 344 | + |
|
| 345 | + return $redirect; |
|
| 346 | 346 | } |
| 347 | 347 | |
| 348 | 348 | /** |
@@ -354,19 +354,19 @@ discard block |
||
| 354 | 354 | * @param null|string $date |
| 355 | 355 | */ |
| 356 | 356 | function auth_trace($row, $date = null) { |
| 357 | - // Indiquer la connexion. A la minute pres ca suffit. |
|
| 358 | - if (!is_numeric($connect_quand = $row['quand'] ?? '')) { |
|
| 359 | - $connect_quand = strtotime($connect_quand); |
|
| 360 | - } |
|
| 357 | + // Indiquer la connexion. A la minute pres ca suffit. |
|
| 358 | + if (!is_numeric($connect_quand = $row['quand'] ?? '')) { |
|
| 359 | + $connect_quand = strtotime($connect_quand); |
|
| 360 | + } |
|
| 361 | 361 | |
| 362 | - $date ??= date('Y-m-d H:i:s'); |
|
| 362 | + $date ??= date('Y-m-d H:i:s'); |
|
| 363 | 363 | |
| 364 | - if (abs(strtotime($date) - $connect_quand) >= 60) { |
|
| 365 | - sql_updateq('spip_auteurs', ['en_ligne' => $date], 'id_auteur=' . intval($row['id_auteur'])); |
|
| 366 | - $row['en_ligne'] = $date; |
|
| 367 | - } |
|
| 364 | + if (abs(strtotime($date) - $connect_quand) >= 60) { |
|
| 365 | + sql_updateq('spip_auteurs', ['en_ligne' => $date], 'id_auteur=' . intval($row['id_auteur'])); |
|
| 366 | + $row['en_ligne'] = $date; |
|
| 367 | + } |
|
| 368 | 368 | |
| 369 | - pipeline('trig_auth_trace', ['args' => ['row' => $row, 'date' => $date]]); |
|
| 369 | + pipeline('trig_auth_trace', ['args' => ['row' => $row, 'date' => $date]]); |
|
| 370 | 370 | } |
| 371 | 371 | |
| 372 | 372 | |
@@ -392,28 +392,28 @@ discard block |
||
| 392 | 392 | * @return mixed |
| 393 | 393 | */ |
| 394 | 394 | function auth_administrer($fonction, $args, $defaut = false) { |
| 395 | - $auth_methode = array_shift($args); |
|
| 396 | - $auth_methode = $auth_methode ?: 'spip'; // valeur par defaut au cas ou |
|
| 397 | - if ( |
|
| 398 | - $auth = charger_fonction($auth_methode, 'auth', true) |
|
| 399 | - and function_exists($f = "auth_{$auth_methode}_$fonction") |
|
| 400 | - ) { |
|
| 401 | - $res = $f(...$args); |
|
| 402 | - } else { |
|
| 403 | - $res = $defaut; |
|
| 404 | - } |
|
| 405 | - $res = pipeline( |
|
| 406 | - 'auth_administrer', |
|
| 407 | - [ |
|
| 408 | - 'args' => [ |
|
| 409 | - 'fonction' => $fonction, |
|
| 410 | - 'methode' => $auth_methode, |
|
| 411 | - 'args' => $args |
|
| 412 | - ], |
|
| 413 | - 'data' => $res |
|
| 414 | - ] |
|
| 415 | - ); |
|
| 416 | - return $res; |
|
| 395 | + $auth_methode = array_shift($args); |
|
| 396 | + $auth_methode = $auth_methode ?: 'spip'; // valeur par defaut au cas ou |
|
| 397 | + if ( |
|
| 398 | + $auth = charger_fonction($auth_methode, 'auth', true) |
|
| 399 | + and function_exists($f = "auth_{$auth_methode}_$fonction") |
|
| 400 | + ) { |
|
| 401 | + $res = $f(...$args); |
|
| 402 | + } else { |
|
| 403 | + $res = $defaut; |
|
| 404 | + } |
|
| 405 | + $res = pipeline( |
|
| 406 | + 'auth_administrer', |
|
| 407 | + [ |
|
| 408 | + 'args' => [ |
|
| 409 | + 'fonction' => $fonction, |
|
| 410 | + 'methode' => $auth_methode, |
|
| 411 | + 'args' => $args |
|
| 412 | + ], |
|
| 413 | + 'data' => $res |
|
| 414 | + ] |
|
| 415 | + ); |
|
| 416 | + return $res; |
|
| 417 | 417 | } |
| 418 | 418 | |
| 419 | 419 | /** |
@@ -423,11 +423,11 @@ discard block |
||
| 423 | 423 | * @return array |
| 424 | 424 | */ |
| 425 | 425 | function auth_formulaire_login($flux) { |
| 426 | - foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 427 | - $flux = auth_administrer('formulaire_login', [$methode, $flux], $flux); |
|
| 428 | - } |
|
| 426 | + foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 427 | + $flux = auth_administrer('formulaire_login', [$methode, $flux], $flux); |
|
| 428 | + } |
|
| 429 | 429 | |
| 430 | - return $flux; |
|
| 430 | + return $flux; |
|
| 431 | 431 | } |
| 432 | 432 | |
| 433 | 433 | |
@@ -441,19 +441,19 @@ discard block |
||
| 441 | 441 | * @return string/bool |
| 442 | 442 | */ |
| 443 | 443 | function auth_retrouver_login($login, $serveur = '') { |
| 444 | - if (!spip_connect($serveur)) { |
|
| 445 | - include_spip('inc/minipres'); |
|
| 446 | - echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique')); |
|
| 447 | - exit; |
|
| 448 | - } |
|
| 449 | - |
|
| 450 | - foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 451 | - if ($auteur = auth_administrer('retrouver_login', [$methode, $login, $serveur])) { |
|
| 452 | - return $auteur; |
|
| 453 | - } |
|
| 454 | - } |
|
| 455 | - |
|
| 456 | - return false; |
|
| 444 | + if (!spip_connect($serveur)) { |
|
| 445 | + include_spip('inc/minipres'); |
|
| 446 | + echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique')); |
|
| 447 | + exit; |
|
| 448 | + } |
|
| 449 | + |
|
| 450 | + foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 451 | + if ($auteur = auth_administrer('retrouver_login', [$methode, $login, $serveur])) { |
|
| 452 | + return $auteur; |
|
| 453 | + } |
|
| 454 | + } |
|
| 455 | + |
|
| 456 | + return false; |
|
| 457 | 457 | } |
| 458 | 458 | |
| 459 | 459 | /** |
@@ -468,34 +468,34 @@ discard block |
||
| 468 | 468 | * @return array |
| 469 | 469 | */ |
| 470 | 470 | function auth_informer_login($login, $serveur = '') { |
| 471 | - if ( |
|
| 472 | - !$login |
|
| 473 | - or !$login_base = auth_retrouver_login($login, $serveur) |
|
| 474 | - or !$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur) |
|
| 475 | - ) { |
|
| 476 | - // generer de fausses infos, mais credibles, pour eviter une attaque |
|
| 477 | - // https://core.spip.net/issues/1758 + https://core.spip.net/issues/3691 |
|
| 478 | - |
|
| 479 | - $row = [ |
|
| 480 | - 'login' => $login, |
|
| 481 | - 'cnx' => '0', |
|
| 482 | - 'logo' => '', |
|
| 483 | - ]; |
|
| 484 | - |
|
| 485 | - return $row; |
|
| 486 | - } |
|
| 487 | - |
|
| 488 | - $prefs = @unserialize($row['prefs']); |
|
| 489 | - $infos = [ |
|
| 490 | - 'id_auteur' => $row['id_auteur'], |
|
| 491 | - 'login' => $row['login'], |
|
| 492 | - 'cnx' => (isset($prefs['cnx']) and $prefs['cnx'] === 'perma') ? '1' : '0', |
|
| 493 | - 'logo' => recuperer_fond('formulaires/inc-logo_auteur', $row), |
|
| 494 | - ]; |
|
| 495 | - |
|
| 496 | - verifier_visiteur(); |
|
| 497 | - |
|
| 498 | - return auth_administrer('informer_login', [$row['source'], $infos, $row, $serveur], $infos); |
|
| 471 | + if ( |
|
| 472 | + !$login |
|
| 473 | + or !$login_base = auth_retrouver_login($login, $serveur) |
|
| 474 | + or !$row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur) |
|
| 475 | + ) { |
|
| 476 | + // generer de fausses infos, mais credibles, pour eviter une attaque |
|
| 477 | + // https://core.spip.net/issues/1758 + https://core.spip.net/issues/3691 |
|
| 478 | + |
|
| 479 | + $row = [ |
|
| 480 | + 'login' => $login, |
|
| 481 | + 'cnx' => '0', |
|
| 482 | + 'logo' => '', |
|
| 483 | + ]; |
|
| 484 | + |
|
| 485 | + return $row; |
|
| 486 | + } |
|
| 487 | + |
|
| 488 | + $prefs = @unserialize($row['prefs']); |
|
| 489 | + $infos = [ |
|
| 490 | + 'id_auteur' => $row['id_auteur'], |
|
| 491 | + 'login' => $row['login'], |
|
| 492 | + 'cnx' => (isset($prefs['cnx']) and $prefs['cnx'] === 'perma') ? '1' : '0', |
|
| 493 | + 'logo' => recuperer_fond('formulaires/inc-logo_auteur', $row), |
|
| 494 | + ]; |
|
| 495 | + |
|
| 496 | + verifier_visiteur(); |
|
| 497 | + |
|
| 498 | + return auth_administrer('informer_login', [$row['source'], $infos, $row, $serveur], $infos); |
|
| 499 | 499 | } |
| 500 | 500 | |
| 501 | 501 | |
@@ -509,21 +509,21 @@ discard block |
||
| 509 | 509 | * @return mixed |
| 510 | 510 | */ |
| 511 | 511 | function auth_identifier_login($login, #[\SensitiveParameter] $password, $serveur = '', bool $phpauth = false) { |
| 512 | - $erreur = ''; |
|
| 513 | - foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 514 | - if ($auth = charger_fonction($methode, 'auth', true)) { |
|
| 515 | - $auteur = $auth($login, $password, $serveur, $phpauth); |
|
| 516 | - if (is_array($auteur) and count($auteur)) { |
|
| 517 | - spip_log("connexion de $login par methode $methode"); |
|
| 518 | - $auteur['auth'] = $methode; |
|
| 519 | - return $auteur; |
|
| 520 | - } elseif (is_string($auteur)) { |
|
| 521 | - $erreur .= "$auteur "; |
|
| 522 | - } |
|
| 523 | - } |
|
| 524 | - } |
|
| 525 | - |
|
| 526 | - return $erreur; |
|
| 512 | + $erreur = ''; |
|
| 513 | + foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 514 | + if ($auth = charger_fonction($methode, 'auth', true)) { |
|
| 515 | + $auteur = $auth($login, $password, $serveur, $phpauth); |
|
| 516 | + if (is_array($auteur) and count($auteur)) { |
|
| 517 | + spip_log("connexion de $login par methode $methode"); |
|
| 518 | + $auteur['auth'] = $methode; |
|
| 519 | + return $auteur; |
|
| 520 | + } elseif (is_string($auteur)) { |
|
| 521 | + $erreur .= "$auteur "; |
|
| 522 | + } |
|
| 523 | + } |
|
| 524 | + } |
|
| 525 | + |
|
| 526 | + return $erreur; |
|
| 527 | 527 | } |
| 528 | 528 | |
| 529 | 529 | /** |
@@ -537,8 +537,8 @@ discard block |
||
| 537 | 537 | * @return string |
| 538 | 538 | */ |
| 539 | 539 | function auth_url_retour_login($auth_methode, $login, $redirect = '', $serveur = '') { |
| 540 | - $securiser_action = charger_fonction('securiser_action', 'inc'); |
|
| 541 | - return $securiser_action('auth', "$auth_methode/$login", $redirect, true); |
|
| 540 | + $securiser_action = charger_fonction('securiser_action', 'inc'); |
|
| 541 | + return $securiser_action('auth', "$auth_methode/$login", $redirect, true); |
|
| 542 | 542 | } |
| 543 | 543 | |
| 544 | 544 | /** |
@@ -552,9 +552,9 @@ discard block |
||
| 552 | 552 | * @return mixed |
| 553 | 553 | */ |
| 554 | 554 | function auth_terminer_identifier_login($auth_methode, $login, $serveur = '') { |
| 555 | - $args = func_get_args(); |
|
| 556 | - $auteur = auth_administrer('terminer_identifier_login', $args); |
|
| 557 | - return $auteur; |
|
| 555 | + $args = func_get_args(); |
|
| 556 | + $auteur = auth_administrer('terminer_identifier_login', $args); |
|
| 557 | + return $auteur; |
|
| 558 | 558 | } |
| 559 | 559 | |
| 560 | 560 | /** |
@@ -564,29 +564,29 @@ discard block |
||
| 564 | 564 | * @return bool |
| 565 | 565 | */ |
| 566 | 566 | function auth_loger($auteur) { |
| 567 | - if (!is_array($auteur) or !count($auteur)) { |
|
| 568 | - return false; |
|
| 569 | - } |
|
| 570 | - |
|
| 571 | - // initialiser et poser le cookie de session |
|
| 572 | - unset($_COOKIE['spip_session']); |
|
| 573 | - if (auth_init_droits($auteur) === false) { |
|
| 574 | - return false; |
|
| 575 | - } |
|
| 576 | - |
|
| 577 | - // initialiser les prefs |
|
| 578 | - $p = $GLOBALS['visiteur_session']['prefs']; |
|
| 579 | - $p['cnx'] = (isset($auteur['cookie']) and $auteur['cookie'] == 'oui') ? 'perma' : ''; |
|
| 580 | - |
|
| 581 | - sql_updateq( |
|
| 582 | - 'spip_auteurs', |
|
| 583 | - ['prefs' => serialize($p)], |
|
| 584 | - 'id_auteur=' . intval($auteur['id_auteur']) |
|
| 585 | - ); |
|
| 586 | - |
|
| 587 | - // bloquer ici le visiteur qui tente d'abuser de ses droits |
|
| 588 | - verifier_visiteur(); |
|
| 589 | - return true; |
|
| 567 | + if (!is_array($auteur) or !count($auteur)) { |
|
| 568 | + return false; |
|
| 569 | + } |
|
| 570 | + |
|
| 571 | + // initialiser et poser le cookie de session |
|
| 572 | + unset($_COOKIE['spip_session']); |
|
| 573 | + if (auth_init_droits($auteur) === false) { |
|
| 574 | + return false; |
|
| 575 | + } |
|
| 576 | + |
|
| 577 | + // initialiser les prefs |
|
| 578 | + $p = $GLOBALS['visiteur_session']['prefs']; |
|
| 579 | + $p['cnx'] = (isset($auteur['cookie']) and $auteur['cookie'] == 'oui') ? 'perma' : ''; |
|
| 580 | + |
|
| 581 | + sql_updateq( |
|
| 582 | + 'spip_auteurs', |
|
| 583 | + ['prefs' => serialize($p)], |
|
| 584 | + 'id_auteur=' . intval($auteur['id_auteur']) |
|
| 585 | + ); |
|
| 586 | + |
|
| 587 | + // bloquer ici le visiteur qui tente d'abuser de ses droits |
|
| 588 | + verifier_visiteur(); |
|
| 589 | + return true; |
|
| 590 | 590 | } |
| 591 | 591 | |
| 592 | 592 | /** |
@@ -596,8 +596,8 @@ discard block |
||
| 596 | 596 | * return void |
| 597 | 597 | **/ |
| 598 | 598 | function auth_deloger() { |
| 599 | - $logout = charger_fonction('logout', 'action'); |
|
| 600 | - $logout(); |
|
| 599 | + $logout = charger_fonction('logout', 'action'); |
|
| 600 | + $logout(); |
|
| 601 | 601 | } |
| 602 | 602 | |
| 603 | 603 | /** |
@@ -611,8 +611,8 @@ discard block |
||
| 611 | 611 | * @return bool |
| 612 | 612 | */ |
| 613 | 613 | function auth_autoriser_modifier_login($auth_methode, $serveur = '') { |
| 614 | - $args = func_get_args(); |
|
| 615 | - return auth_administrer('autoriser_modifier_login', $args); |
|
| 614 | + $args = func_get_args(); |
|
| 615 | + return auth_administrer('autoriser_modifier_login', $args); |
|
| 616 | 616 | } |
| 617 | 617 | |
| 618 | 618 | /** |
@@ -627,8 +627,8 @@ discard block |
||
| 627 | 627 | * message d'erreur ou chaine vide si pas d'erreur |
| 628 | 628 | */ |
| 629 | 629 | function auth_verifier_login($auth_methode, $new_login, $id_auteur = 0, $serveur = '') { |
| 630 | - $args = func_get_args(); |
|
| 631 | - return auth_administrer('verifier_login', $args, ''); |
|
| 630 | + $args = func_get_args(); |
|
| 631 | + return auth_administrer('verifier_login', $args, ''); |
|
| 632 | 632 | } |
| 633 | 633 | |
| 634 | 634 | /** |
@@ -641,8 +641,8 @@ discard block |
||
| 641 | 641 | * @return bool |
| 642 | 642 | */ |
| 643 | 643 | function auth_modifier_login($auth_methode, $new_login, $id_auteur, $serveur = '') { |
| 644 | - $args = func_get_args(); |
|
| 645 | - return auth_administrer('modifier_login', $args); |
|
| 644 | + $args = func_get_args(); |
|
| 645 | + return auth_administrer('modifier_login', $args); |
|
| 646 | 646 | } |
| 647 | 647 | |
| 648 | 648 | /** |
@@ -657,8 +657,8 @@ discard block |
||
| 657 | 657 | * succès ou échec |
| 658 | 658 | */ |
| 659 | 659 | function auth_autoriser_modifier_pass($auth_methode, $serveur = '') { |
| 660 | - $args = func_get_args(); |
|
| 661 | - return auth_administrer('autoriser_modifier_pass', $args); |
|
| 660 | + $args = func_get_args(); |
|
| 661 | + return auth_administrer('autoriser_modifier_pass', $args); |
|
| 662 | 662 | } |
| 663 | 663 | |
| 664 | 664 | /** |
@@ -674,8 +674,8 @@ discard block |
||
| 674 | 674 | * message d'erreur ou chaine vide si pas d'erreur |
| 675 | 675 | */ |
| 676 | 676 | function auth_verifier_pass($auth_methode, $login, #[\SensitiveParameter] $new_pass, $id_auteur = 0, $serveur = '') { |
| 677 | - $args = func_get_args(); |
|
| 678 | - return auth_administrer('verifier_pass', $args, ''); |
|
| 677 | + $args = func_get_args(); |
|
| 678 | + return auth_administrer('verifier_pass', $args, ''); |
|
| 679 | 679 | } |
| 680 | 680 | |
| 681 | 681 | /** |
@@ -691,8 +691,8 @@ discard block |
||
| 691 | 691 | * succes ou echec |
| 692 | 692 | */ |
| 693 | 693 | function auth_modifier_pass($auth_methode, $login, #[\SensitiveParameter] $new_pass, $id_auteur, $serveur = '') { |
| 694 | - $args = func_get_args(); |
|
| 695 | - return auth_administrer('modifier_pass', $args); |
|
| 694 | + $args = func_get_args(); |
|
| 695 | + return auth_administrer('modifier_pass', $args); |
|
| 696 | 696 | } |
| 697 | 697 | |
| 698 | 698 | /** |
@@ -708,24 +708,24 @@ discard block |
||
| 708 | 708 | * @return void |
| 709 | 709 | */ |
| 710 | 710 | function auth_synchroniser_distant( |
| 711 | - $auth_methode = true, |
|
| 712 | - $id_auteur = 0, |
|
| 713 | - $champs = [], |
|
| 714 | - $options = [], |
|
| 715 | - $serveur = '' |
|
| 711 | + $auth_methode = true, |
|
| 712 | + $id_auteur = 0, |
|
| 713 | + $champs = [], |
|
| 714 | + $options = [], |
|
| 715 | + $serveur = '' |
|
| 716 | 716 | ) { |
| 717 | - $args = func_get_args(); |
|
| 718 | - if ($auth_methode === true or (isset($options['all']) and $options['all'] == true)) { |
|
| 719 | - $options['all'] = true; // ajouter une option all=>true pour chaque auth |
|
| 720 | - $args = [true, $id_auteur, $champs, $options, $serveur]; |
|
| 721 | - foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 722 | - array_shift($args); |
|
| 723 | - array_unshift($args, $methode); |
|
| 724 | - auth_administrer('synchroniser_distant', $args); |
|
| 725 | - } |
|
| 726 | - } else { |
|
| 727 | - auth_administrer('synchroniser_distant', $args); |
|
| 728 | - } |
|
| 717 | + $args = func_get_args(); |
|
| 718 | + if ($auth_methode === true or (isset($options['all']) and $options['all'] == true)) { |
|
| 719 | + $options['all'] = true; // ajouter une option all=>true pour chaque auth |
|
| 720 | + $args = [true, $id_auteur, $champs, $options, $serveur]; |
|
| 721 | + foreach ($GLOBALS['liste_des_authentifications'] as $methode) { |
|
| 722 | + array_shift($args); |
|
| 723 | + array_unshift($args, $methode); |
|
| 724 | + auth_administrer('synchroniser_distant', $args); |
|
| 725 | + } |
|
| 726 | + } else { |
|
| 727 | + auth_administrer('synchroniser_distant', $args); |
|
| 728 | + } |
|
| 729 | 729 | } |
| 730 | 730 | |
| 731 | 731 | |
@@ -738,46 +738,46 @@ discard block |
||
| 738 | 738 | * @return array|bool |
| 739 | 739 | */ |
| 740 | 740 | function lire_php_auth($login, #[\SensitiveParameter] $pw, $serveur = '') { |
| 741 | - if ( |
|
| 742 | - !$login |
|
| 743 | - or !$login_base = auth_retrouver_login($login, $serveur) |
|
| 744 | - ) { |
|
| 745 | - return false; |
|
| 746 | - } |
|
| 747 | - |
|
| 748 | - $row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur); |
|
| 749 | - |
|
| 750 | - if (!$row) { |
|
| 751 | - if ( |
|
| 752 | - include_spip('inc/auth') |
|
| 753 | - and auth_ldap_connect($serveur) |
|
| 754 | - and $auth_ldap = charger_fonction('ldap', 'auth', true) |
|
| 755 | - ) { |
|
| 756 | - return $auth_ldap($login_base, $pw, $serveur, true); |
|
| 757 | - } |
|
| 758 | - |
|
| 759 | - return false; |
|
| 760 | - } |
|
| 761 | - |
|
| 762 | - // si pas de source definie |
|
| 763 | - // ou auth/xxx introuvable, utiliser 'spip' ou autre et avec le login passé par PHP_AUTH_USER |
|
| 764 | - if ( |
|
| 765 | - !$auth_methode = $row['source'] |
|
| 766 | - or !$auth = charger_fonction($auth_methode, 'auth', true) |
|
| 767 | - ) { |
|
| 768 | - $auth = charger_fonction('spip', 'auth', true); |
|
| 769 | - } |
|
| 770 | - |
|
| 771 | - $auteur = ''; |
|
| 772 | - if ($auth) { |
|
| 773 | - $auteur = $auth($login, $pw, $serveur, true); |
|
| 774 | - } |
|
| 775 | - // verifier que ce n'est pas un message d'erreur |
|
| 776 | - if (is_array($auteur) and count($auteur)) { |
|
| 777 | - return $auteur; |
|
| 778 | - } |
|
| 779 | - |
|
| 780 | - return false; |
|
| 741 | + if ( |
|
| 742 | + !$login |
|
| 743 | + or !$login_base = auth_retrouver_login($login, $serveur) |
|
| 744 | + ) { |
|
| 745 | + return false; |
|
| 746 | + } |
|
| 747 | + |
|
| 748 | + $row = sql_fetsel('*', 'spip_auteurs', 'login=' . sql_quote($login_base, $serveur, 'text'), '', '', '', '', $serveur); |
|
| 749 | + |
|
| 750 | + if (!$row) { |
|
| 751 | + if ( |
|
| 752 | + include_spip('inc/auth') |
|
| 753 | + and auth_ldap_connect($serveur) |
|
| 754 | + and $auth_ldap = charger_fonction('ldap', 'auth', true) |
|
| 755 | + ) { |
|
| 756 | + return $auth_ldap($login_base, $pw, $serveur, true); |
|
| 757 | + } |
|
| 758 | + |
|
| 759 | + return false; |
|
| 760 | + } |
|
| 761 | + |
|
| 762 | + // si pas de source definie |
|
| 763 | + // ou auth/xxx introuvable, utiliser 'spip' ou autre et avec le login passé par PHP_AUTH_USER |
|
| 764 | + if ( |
|
| 765 | + !$auth_methode = $row['source'] |
|
| 766 | + or !$auth = charger_fonction($auth_methode, 'auth', true) |
|
| 767 | + ) { |
|
| 768 | + $auth = charger_fonction('spip', 'auth', true); |
|
| 769 | + } |
|
| 770 | + |
|
| 771 | + $auteur = ''; |
|
| 772 | + if ($auth) { |
|
| 773 | + $auteur = $auth($login, $pw, $serveur, true); |
|
| 774 | + } |
|
| 775 | + // verifier que ce n'est pas un message d'erreur |
|
| 776 | + if (is_array($auteur) and count($auteur)) { |
|
| 777 | + return $auteur; |
|
| 778 | + } |
|
| 779 | + |
|
| 780 | + return false; |
|
| 781 | 781 | } |
| 782 | 782 | |
| 783 | 783 | /** |
@@ -793,21 +793,21 @@ discard block |
||
| 793 | 793 | * @param string $lien |
| 794 | 794 | */ |
| 795 | 795 | function ask_php_auth($pb, $raison, $retour = '', $url = '', $re = '', $lien = '') { |
| 796 | - @Header('WWW-Authenticate: Basic realm="espace prive"'); |
|
| 797 | - @Header('HTTP/1.0 401 Unauthorized'); |
|
| 798 | - $corps = ''; |
|
| 799 | - $public = generer_url_public(); |
|
| 800 | - $ecrire = generer_url_ecrire(); |
|
| 801 | - $retour = $retour ?: _T('icone_retour'); |
|
| 802 | - $corps .= "<p>$raison</p>[<a href='$public'>$retour</a>] "; |
|
| 803 | - if ($url) { |
|
| 804 | - $corps .= "[<a href='" . generer_url_action('cookie', "essai_auth_http=oui&$url") . "'>$re</a>]"; |
|
| 805 | - } |
|
| 806 | - |
|
| 807 | - if ($lien) { |
|
| 808 | - $corps .= " [<a href='$ecrire'>" . _T('login_espace_prive') . '</a>]'; |
|
| 809 | - } |
|
| 810 | - include_spip('inc/minipres'); |
|
| 811 | - echo minipres($pb, $corps); |
|
| 812 | - exit; |
|
| 796 | + @Header('WWW-Authenticate: Basic realm="espace prive"'); |
|
| 797 | + @Header('HTTP/1.0 401 Unauthorized'); |
|
| 798 | + $corps = ''; |
|
| 799 | + $public = generer_url_public(); |
|
| 800 | + $ecrire = generer_url_ecrire(); |
|
| 801 | + $retour = $retour ?: _T('icone_retour'); |
|
| 802 | + $corps .= "<p>$raison</p>[<a href='$public'>$retour</a>] "; |
|
| 803 | + if ($url) { |
|
| 804 | + $corps .= "[<a href='" . generer_url_action('cookie', "essai_auth_http=oui&$url") . "'>$re</a>]"; |
|
| 805 | + } |
|
| 806 | + |
|
| 807 | + if ($lien) { |
|
| 808 | + $corps .= " [<a href='$ecrire'>" . _T('login_espace_prive') . '</a>]'; |
|
| 809 | + } |
|
| 810 | + include_spip('inc/minipres'); |
|
| 811 | + echo minipres($pb, $corps); |
|
| 812 | + exit; |
|
| 813 | 813 | } |
@@ -16,7 +16,7 @@ discard block |
||
| 16 | 16 | * @package SPIP\Core\Formulaires |
| 17 | 17 | **/ |
| 18 | 18 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 19 | - return; |
|
| 19 | + return; |
|
| 20 | 20 | } |
| 21 | 21 | |
| 22 | 22 | |
@@ -36,25 +36,25 @@ discard block |
||
| 36 | 36 | * ($table_source,$objet,$id_objet,$objet_lien) |
| 37 | 37 | */ |
| 38 | 38 | function determine_source_lien_objet($a, $b, $c) { |
| 39 | - $table_source = $objet_lien = $objet = $id_objet = null; |
|
| 40 | - // auteurs, article, 23 : |
|
| 41 | - // associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens |
|
| 42 | - if (is_numeric($c) and !is_numeric($b)) { |
|
| 43 | - $table_source = table_objet($a); |
|
| 44 | - $objet_lien = objet_type($a); |
|
| 45 | - $objet = objet_type($b); |
|
| 46 | - $id_objet = $c; |
|
| 47 | - } |
|
| 48 | - // article, 23, auteurs |
|
| 49 | - // associer des auteurs à l'article 23, sur la table pivot spip_articles_liens |
|
| 50 | - if (is_numeric($b) and !is_numeric($c)) { |
|
| 51 | - $table_source = table_objet($c); |
|
| 52 | - $objet_lien = objet_type($a); |
|
| 53 | - $objet = objet_type($a); |
|
| 54 | - $id_objet = $b; |
|
| 55 | - } |
|
| 56 | - |
|
| 57 | - return [$table_source, $objet, $id_objet, $objet_lien]; |
|
| 39 | + $table_source = $objet_lien = $objet = $id_objet = null; |
|
| 40 | + // auteurs, article, 23 : |
|
| 41 | + // associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens |
|
| 42 | + if (is_numeric($c) and !is_numeric($b)) { |
|
| 43 | + $table_source = table_objet($a); |
|
| 44 | + $objet_lien = objet_type($a); |
|
| 45 | + $objet = objet_type($b); |
|
| 46 | + $id_objet = $c; |
|
| 47 | + } |
|
| 48 | + // article, 23, auteurs |
|
| 49 | + // associer des auteurs à l'article 23, sur la table pivot spip_articles_liens |
|
| 50 | + if (is_numeric($b) and !is_numeric($c)) { |
|
| 51 | + $table_source = table_objet($c); |
|
| 52 | + $objet_lien = objet_type($a); |
|
| 53 | + $objet = objet_type($a); |
|
| 54 | + $id_objet = $b; |
|
| 55 | + } |
|
| 56 | + |
|
| 57 | + return [$table_source, $objet, $id_objet, $objet_lien]; |
|
| 58 | 58 | } |
| 59 | 59 | |
| 60 | 60 | /** |
@@ -80,86 +80,86 @@ discard block |
||
| 80 | 80 | */ |
| 81 | 81 | function formulaires_editer_liens_charger_dist($a, $b, $c, $options = []) { |
| 82 | 82 | |
| 83 | - // compat avec ancienne signature ou le 4eme argument est $editable |
|
| 84 | - if (!is_array($options)) { |
|
| 85 | - $options = ['editable' => $options]; |
|
| 86 | - } elseif (!isset($options['editable'])) { |
|
| 87 | - $options['editable'] = true; |
|
| 88 | - } |
|
| 89 | - |
|
| 90 | - $editable = $options['editable']; |
|
| 91 | - |
|
| 92 | - [$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c); |
|
| 93 | - if (!$table_source or !$objet or !$objet_lien or !$id_objet) { |
|
| 94 | - return false; |
|
| 95 | - } |
|
| 96 | - |
|
| 97 | - $objet_source = objet_type($table_source); |
|
| 98 | - $table_sql_source = table_objet_sql($objet_source); |
|
| 99 | - |
|
| 100 | - // verifier existence de la table xxx_liens |
|
| 101 | - include_spip('action/editer_liens'); |
|
| 102 | - if (!objet_associable($objet_lien)) { |
|
| 103 | - return false; |
|
| 104 | - } |
|
| 105 | - |
|
| 106 | - // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument |
|
| 107 | - include_spip('inc/autoriser'); |
|
| 108 | - $editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet) |
|
| 109 | - and autoriser('modifier', $objet, $id_objet)); |
|
| 110 | - |
|
| 111 | - if ( |
|
| 112 | - !$editable and !count(objet_trouver_liens( |
|
| 113 | - [$objet_lien => '*'], |
|
| 114 | - [($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet] |
|
| 115 | - )) |
|
| 116 | - ) { |
|
| 117 | - return false; |
|
| 118 | - } |
|
| 119 | - |
|
| 120 | - // squelettes de vue et de d'association |
|
| 121 | - // ils sont différents si des rôles sont définis. |
|
| 122 | - $skel_vue = $table_source . '_lies'; |
|
| 123 | - $skel_ajout = $table_source . '_associer'; |
|
| 124 | - |
|
| 125 | - // description des roles |
|
| 126 | - include_spip('inc/roles'); |
|
| 127 | - if ($roles = roles_presents($objet_source, $objet)) { |
|
| 128 | - // on demande de nouveaux squelettes en conséquence |
|
| 129 | - $skel_vue = $table_source . '_roles_lies'; |
|
| 130 | - $skel_ajout = $table_source . '_roles_associer'; |
|
| 131 | - } |
|
| 132 | - |
|
| 133 | - $oups = ''; |
|
| 134 | - if ($editable) { |
|
| 135 | - $oups = lien_gerer__oups('editer_liens', 'hash'); |
|
| 136 | - } |
|
| 137 | - $valeurs = [ |
|
| 138 | - 'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form |
|
| 139 | - '_vue_liee' => $skel_vue, |
|
| 140 | - '_vue_ajout' => $skel_ajout, |
|
| 141 | - '_objet_lien' => $objet_lien, |
|
| 142 | - 'id_lien_ajoute' => _request('id_lien_ajoute'), |
|
| 143 | - 'objet' => $objet, |
|
| 144 | - 'id_objet' => $id_objet, |
|
| 145 | - 'objet_source' => $objet_source, |
|
| 146 | - 'table_source' => $table_source, |
|
| 147 | - 'recherche' => '', |
|
| 148 | - 'visible' => 0, |
|
| 149 | - 'ajouter_lien' => '', |
|
| 150 | - 'supprimer_lien' => '', |
|
| 151 | - 'qualifier_lien' => '', |
|
| 152 | - 'ordonner_lien' => '', |
|
| 153 | - 'desordonner_liens' => '', |
|
| 154 | - '_roles' => $roles, # description des roles |
|
| 155 | - '_oups' => entites_html($oups), |
|
| 156 | - 'editable' => $editable, |
|
| 157 | - ]; |
|
| 158 | - |
|
| 159 | - // les options non definies dans $valeurs sont passees telles quelles au formulaire html |
|
| 160 | - $valeurs = array_merge($options, $valeurs); |
|
| 161 | - |
|
| 162 | - return $valeurs; |
|
| 83 | + // compat avec ancienne signature ou le 4eme argument est $editable |
|
| 84 | + if (!is_array($options)) { |
|
| 85 | + $options = ['editable' => $options]; |
|
| 86 | + } elseif (!isset($options['editable'])) { |
|
| 87 | + $options['editable'] = true; |
|
| 88 | + } |
|
| 89 | + |
|
| 90 | + $editable = $options['editable']; |
|
| 91 | + |
|
| 92 | + [$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c); |
|
| 93 | + if (!$table_source or !$objet or !$objet_lien or !$id_objet) { |
|
| 94 | + return false; |
|
| 95 | + } |
|
| 96 | + |
|
| 97 | + $objet_source = objet_type($table_source); |
|
| 98 | + $table_sql_source = table_objet_sql($objet_source); |
|
| 99 | + |
|
| 100 | + // verifier existence de la table xxx_liens |
|
| 101 | + include_spip('action/editer_liens'); |
|
| 102 | + if (!objet_associable($objet_lien)) { |
|
| 103 | + return false; |
|
| 104 | + } |
|
| 105 | + |
|
| 106 | + // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument |
|
| 107 | + include_spip('inc/autoriser'); |
|
| 108 | + $editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet) |
|
| 109 | + and autoriser('modifier', $objet, $id_objet)); |
|
| 110 | + |
|
| 111 | + if ( |
|
| 112 | + !$editable and !count(objet_trouver_liens( |
|
| 113 | + [$objet_lien => '*'], |
|
| 114 | + [($objet_lien == $objet_source ? $objet : $objet_source) => $id_objet] |
|
| 115 | + )) |
|
| 116 | + ) { |
|
| 117 | + return false; |
|
| 118 | + } |
|
| 119 | + |
|
| 120 | + // squelettes de vue et de d'association |
|
| 121 | + // ils sont différents si des rôles sont définis. |
|
| 122 | + $skel_vue = $table_source . '_lies'; |
|
| 123 | + $skel_ajout = $table_source . '_associer'; |
|
| 124 | + |
|
| 125 | + // description des roles |
|
| 126 | + include_spip('inc/roles'); |
|
| 127 | + if ($roles = roles_presents($objet_source, $objet)) { |
|
| 128 | + // on demande de nouveaux squelettes en conséquence |
|
| 129 | + $skel_vue = $table_source . '_roles_lies'; |
|
| 130 | + $skel_ajout = $table_source . '_roles_associer'; |
|
| 131 | + } |
|
| 132 | + |
|
| 133 | + $oups = ''; |
|
| 134 | + if ($editable) { |
|
| 135 | + $oups = lien_gerer__oups('editer_liens', 'hash'); |
|
| 136 | + } |
|
| 137 | + $valeurs = [ |
|
| 138 | + 'id' => "$table_source-$objet-$id_objet-$objet_lien", // identifiant unique pour les id du form |
|
| 139 | + '_vue_liee' => $skel_vue, |
|
| 140 | + '_vue_ajout' => $skel_ajout, |
|
| 141 | + '_objet_lien' => $objet_lien, |
|
| 142 | + 'id_lien_ajoute' => _request('id_lien_ajoute'), |
|
| 143 | + 'objet' => $objet, |
|
| 144 | + 'id_objet' => $id_objet, |
|
| 145 | + 'objet_source' => $objet_source, |
|
| 146 | + 'table_source' => $table_source, |
|
| 147 | + 'recherche' => '', |
|
| 148 | + 'visible' => 0, |
|
| 149 | + 'ajouter_lien' => '', |
|
| 150 | + 'supprimer_lien' => '', |
|
| 151 | + 'qualifier_lien' => '', |
|
| 152 | + 'ordonner_lien' => '', |
|
| 153 | + 'desordonner_liens' => '', |
|
| 154 | + '_roles' => $roles, # description des roles |
|
| 155 | + '_oups' => entites_html($oups), |
|
| 156 | + 'editable' => $editable, |
|
| 157 | + ]; |
|
| 158 | + |
|
| 159 | + // les options non definies dans $valeurs sont passees telles quelles au formulaire html |
|
| 160 | + $valeurs = array_merge($options, $valeurs); |
|
| 161 | + |
|
| 162 | + return $valeurs; |
|
| 163 | 163 | } |
| 164 | 164 | |
| 165 | 165 | /** |
@@ -203,170 +203,170 @@ discard block |
||
| 203 | 203 | * @return array |
| 204 | 204 | */ |
| 205 | 205 | function formulaires_editer_liens_traiter_dist($a, $b, $c, $options = []) { |
| 206 | - // compat avec ancienne signature ou le 4eme argument est $editable |
|
| 207 | - if (!is_array($options)) { |
|
| 208 | - $options = ['editable' => $options]; |
|
| 209 | - } elseif (!isset($options['editable'])) { |
|
| 210 | - $options['editable'] = true; |
|
| 211 | - } |
|
| 212 | - |
|
| 213 | - $editable = $options['editable']; |
|
| 214 | - |
|
| 215 | - $res = ['editable' => $editable ? true : false]; |
|
| 216 | - [$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c); |
|
| 217 | - if (!$table_source or !$objet or !$objet_lien) { |
|
| 218 | - return $res; |
|
| 219 | - } |
|
| 220 | - |
|
| 221 | - |
|
| 222 | - if (_request('tout_voir')) { |
|
| 223 | - set_request('recherche', ''); |
|
| 224 | - } |
|
| 225 | - |
|
| 226 | - include_spip('inc/autoriser'); |
|
| 227 | - if (autoriser('modifier', $objet, $id_objet)) { |
|
| 228 | - // recuperer le oups du coup d'avant pour le propager à charger() si on ne fait rien par exemple |
|
| 229 | - lien_gerer__oups('editer_liens','request'); |
|
| 230 | - |
|
| 231 | - // annuler les suppressions du coup d'avant ? |
|
| 232 | - if ( |
|
| 233 | - _request('annuler_oups') |
|
| 234 | - and $oups = lien_gerer__oups('editer_liens','get') |
|
| 235 | - ) { |
|
| 236 | - if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) { |
|
| 237 | - $oups_objets($oups); |
|
| 238 | - } else { |
|
| 239 | - $objet_source = objet_type($table_source); |
|
| 240 | - include_spip('action/editer_liens'); |
|
| 241 | - foreach ($oups as $oup) { |
|
| 242 | - if ($objet_lien == $objet_source) { |
|
| 243 | - objet_associer([$objet_source => $oup[$objet_source]], [$objet => $oup[$objet]], $oup); |
|
| 244 | - } else { |
|
| 245 | - objet_associer([$objet => $oup[$objet]], [$objet_source => $oup[$objet_source]], $oup); |
|
| 246 | - } |
|
| 247 | - } |
|
| 248 | - } |
|
| 249 | - # oups ne persiste que pour la derniere action, si suppression |
|
| 250 | - lien_gerer__oups('editer_liens','reset'); |
|
| 251 | - } |
|
| 252 | - |
|
| 253 | - $supprimer = _request('supprimer_lien'); |
|
| 254 | - $ajouter = _request('ajouter_lien'); |
|
| 255 | - $ordonner = _request('ordonner_lien'); |
|
| 256 | - |
|
| 257 | - if (_request('desordonner_liens')) { |
|
| 258 | - include_spip('action/editer_liens'); |
|
| 259 | - objet_qualifier_liens([$objet_lien => '*'], [$objet => $id_objet], ['rang_lien' => 0]); |
|
| 260 | - } |
|
| 261 | - |
|
| 262 | - // il est possible de preciser dans une seule variable un remplacement : |
|
| 263 | - // remplacer_lien[old][new] |
|
| 264 | - if ($remplacer = _request('remplacer_lien')) { |
|
| 265 | - foreach ($remplacer as $k => $v) { |
|
| 266 | - if ($old = lien_verifier_action($k, '')) { |
|
| 267 | - foreach (is_array($v) ? $v : [$v] as $kn => $vn) { |
|
| 268 | - if ($new = lien_verifier_action($kn, $vn)) { |
|
| 269 | - $supprimer[$old] = 'x'; |
|
| 270 | - $ajouter[$new] = '+'; |
|
| 271 | - } |
|
| 272 | - } |
|
| 273 | - } |
|
| 274 | - } |
|
| 275 | - } |
|
| 276 | - |
|
| 277 | - if ($supprimer) { |
|
| 278 | - if ( |
|
| 279 | - $supprimer_objets = charger_fonction( |
|
| 280 | - "editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}", |
|
| 281 | - 'action', |
|
| 282 | - true |
|
| 283 | - ) |
|
| 284 | - ) { |
|
| 285 | - $oups = $supprimer_objets($supprimer); |
|
| 286 | - } else { |
|
| 287 | - include_spip('action/editer_liens'); |
|
| 288 | - $oups = []; |
|
| 289 | - |
|
| 290 | - foreach ($supprimer as $k => $v) { |
|
| 291 | - if ($lien = lien_verifier_action($k, $v)) { |
|
| 292 | - $lien = explode('-', $lien); |
|
| 293 | - [$objet_source, $ids, $objet_lie, $idl, $role] = array_pad($lien, 5, null); |
|
| 294 | - // appliquer une condition sur le rôle si défini ('*' pour tous les roles) |
|
| 295 | - $cond = (!is_null($role) ? ['role' => $role] : []); |
|
| 296 | - if ($objet_lien == $objet_source) { |
|
| 297 | - $oups = array_merge( |
|
| 298 | - $oups, |
|
| 299 | - objet_trouver_liens([$objet_source => $ids], [$objet_lie => $idl], $cond) |
|
| 300 | - ); |
|
| 301 | - objet_dissocier([$objet_source => $ids], [$objet_lie => $idl], $cond); |
|
| 302 | - } else { |
|
| 303 | - $oups = array_merge( |
|
| 304 | - $oups, |
|
| 305 | - objet_trouver_liens([$objet_lie => $idl], [$objet_source => $ids], $cond) |
|
| 306 | - ); |
|
| 307 | - objet_dissocier([$objet_lie => $idl], [$objet_source => $ids], $cond); |
|
| 308 | - } |
|
| 309 | - } |
|
| 310 | - } |
|
| 311 | - } |
|
| 312 | - if (!empty($oups)) { |
|
| 313 | - lien_gerer__oups('editer_liens','set', $oups); |
|
| 314 | - } else { |
|
| 315 | - lien_gerer__oups('editer_liens','reset'); |
|
| 316 | - } |
|
| 317 | - } |
|
| 318 | - |
|
| 319 | - if ($ajouter) { |
|
| 320 | - if ( |
|
| 321 | - $ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true) |
|
| 322 | - ) { |
|
| 323 | - $ajout_ok = $ajouter_objets($ajouter); |
|
| 324 | - } else { |
|
| 325 | - $ajout_ok = false; |
|
| 326 | - include_spip('action/editer_liens'); |
|
| 327 | - foreach ($ajouter as $k => $v) { |
|
| 328 | - if ($lien = lien_verifier_action($k, $v)) { |
|
| 329 | - $ajout_ok = true; |
|
| 330 | - [$objet1, $ids, $objet2, $idl] = explode('-', $lien); |
|
| 331 | - $qualifs = lien_retrouver_qualif($objet_lien, $lien); |
|
| 332 | - if ($objet_lien == $objet1) { |
|
| 333 | - lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs); |
|
| 334 | - } else { |
|
| 335 | - lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs); |
|
| 336 | - } |
|
| 337 | - set_request('id_lien_ajoute', $ids); |
|
| 338 | - } |
|
| 339 | - } |
|
| 340 | - } |
|
| 341 | - # oups ne persiste que pour la derniere action, si suppression |
|
| 342 | - # une suppression suivie d'un ajout dans le meme hit est un remplacement |
|
| 343 | - # non annulable ! |
|
| 344 | - if ($ajout_ok) { |
|
| 345 | - lien_gerer__oups('editer_liens','reset'); |
|
| 346 | - } |
|
| 347 | - } |
|
| 348 | - |
|
| 349 | - if ($ordonner) { |
|
| 350 | - include_spip('action/editer_liens'); |
|
| 351 | - foreach ($ordonner as $k => $rang_lien) { |
|
| 352 | - if ($lien = lien_verifier_action($k, '')) { |
|
| 353 | - [$objet1, $ids, $objet2, $idl] = explode('-', $lien); |
|
| 354 | - $qualif = ['rang_lien' => $rang_lien]; |
|
| 355 | - |
|
| 356 | - if ($objet_lien == $objet1) { |
|
| 357 | - objet_qualifier_liens([$objet1 => $ids], [$objet2 => $idl], $qualif); |
|
| 358 | - } else { |
|
| 359 | - objet_qualifier_liens([$objet2 => $idl], [$objet1 => $ids], $qualif); |
|
| 360 | - } |
|
| 361 | - set_request('id_lien_ajoute', $ids); |
|
| 362 | - lien_gerer__oups('editer_liens','reset'); |
|
| 363 | - } |
|
| 364 | - } |
|
| 365 | - } |
|
| 366 | - } |
|
| 367 | - |
|
| 368 | - |
|
| 369 | - return $res; |
|
| 206 | + // compat avec ancienne signature ou le 4eme argument est $editable |
|
| 207 | + if (!is_array($options)) { |
|
| 208 | + $options = ['editable' => $options]; |
|
| 209 | + } elseif (!isset($options['editable'])) { |
|
| 210 | + $options['editable'] = true; |
|
| 211 | + } |
|
| 212 | + |
|
| 213 | + $editable = $options['editable']; |
|
| 214 | + |
|
| 215 | + $res = ['editable' => $editable ? true : false]; |
|
| 216 | + [$table_source, $objet, $id_objet, $objet_lien] = determine_source_lien_objet($a, $b, $c); |
|
| 217 | + if (!$table_source or !$objet or !$objet_lien) { |
|
| 218 | + return $res; |
|
| 219 | + } |
|
| 220 | + |
|
| 221 | + |
|
| 222 | + if (_request('tout_voir')) { |
|
| 223 | + set_request('recherche', ''); |
|
| 224 | + } |
|
| 225 | + |
|
| 226 | + include_spip('inc/autoriser'); |
|
| 227 | + if (autoriser('modifier', $objet, $id_objet)) { |
|
| 228 | + // recuperer le oups du coup d'avant pour le propager à charger() si on ne fait rien par exemple |
|
| 229 | + lien_gerer__oups('editer_liens','request'); |
|
| 230 | + |
|
| 231 | + // annuler les suppressions du coup d'avant ? |
|
| 232 | + if ( |
|
| 233 | + _request('annuler_oups') |
|
| 234 | + and $oups = lien_gerer__oups('editer_liens','get') |
|
| 235 | + ) { |
|
| 236 | + if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) { |
|
| 237 | + $oups_objets($oups); |
|
| 238 | + } else { |
|
| 239 | + $objet_source = objet_type($table_source); |
|
| 240 | + include_spip('action/editer_liens'); |
|
| 241 | + foreach ($oups as $oup) { |
|
| 242 | + if ($objet_lien == $objet_source) { |
|
| 243 | + objet_associer([$objet_source => $oup[$objet_source]], [$objet => $oup[$objet]], $oup); |
|
| 244 | + } else { |
|
| 245 | + objet_associer([$objet => $oup[$objet]], [$objet_source => $oup[$objet_source]], $oup); |
|
| 246 | + } |
|
| 247 | + } |
|
| 248 | + } |
|
| 249 | + # oups ne persiste que pour la derniere action, si suppression |
|
| 250 | + lien_gerer__oups('editer_liens','reset'); |
|
| 251 | + } |
|
| 252 | + |
|
| 253 | + $supprimer = _request('supprimer_lien'); |
|
| 254 | + $ajouter = _request('ajouter_lien'); |
|
| 255 | + $ordonner = _request('ordonner_lien'); |
|
| 256 | + |
|
| 257 | + if (_request('desordonner_liens')) { |
|
| 258 | + include_spip('action/editer_liens'); |
|
| 259 | + objet_qualifier_liens([$objet_lien => '*'], [$objet => $id_objet], ['rang_lien' => 0]); |
|
| 260 | + } |
|
| 261 | + |
|
| 262 | + // il est possible de preciser dans une seule variable un remplacement : |
|
| 263 | + // remplacer_lien[old][new] |
|
| 264 | + if ($remplacer = _request('remplacer_lien')) { |
|
| 265 | + foreach ($remplacer as $k => $v) { |
|
| 266 | + if ($old = lien_verifier_action($k, '')) { |
|
| 267 | + foreach (is_array($v) ? $v : [$v] as $kn => $vn) { |
|
| 268 | + if ($new = lien_verifier_action($kn, $vn)) { |
|
| 269 | + $supprimer[$old] = 'x'; |
|
| 270 | + $ajouter[$new] = '+'; |
|
| 271 | + } |
|
| 272 | + } |
|
| 273 | + } |
|
| 274 | + } |
|
| 275 | + } |
|
| 276 | + |
|
| 277 | + if ($supprimer) { |
|
| 278 | + if ( |
|
| 279 | + $supprimer_objets = charger_fonction( |
|
| 280 | + "editer_liens_supprimer_{$table_source}_{$objet}_{$objet_lien}", |
|
| 281 | + 'action', |
|
| 282 | + true |
|
| 283 | + ) |
|
| 284 | + ) { |
|
| 285 | + $oups = $supprimer_objets($supprimer); |
|
| 286 | + } else { |
|
| 287 | + include_spip('action/editer_liens'); |
|
| 288 | + $oups = []; |
|
| 289 | + |
|
| 290 | + foreach ($supprimer as $k => $v) { |
|
| 291 | + if ($lien = lien_verifier_action($k, $v)) { |
|
| 292 | + $lien = explode('-', $lien); |
|
| 293 | + [$objet_source, $ids, $objet_lie, $idl, $role] = array_pad($lien, 5, null); |
|
| 294 | + // appliquer une condition sur le rôle si défini ('*' pour tous les roles) |
|
| 295 | + $cond = (!is_null($role) ? ['role' => $role] : []); |
|
| 296 | + if ($objet_lien == $objet_source) { |
|
| 297 | + $oups = array_merge( |
|
| 298 | + $oups, |
|
| 299 | + objet_trouver_liens([$objet_source => $ids], [$objet_lie => $idl], $cond) |
|
| 300 | + ); |
|
| 301 | + objet_dissocier([$objet_source => $ids], [$objet_lie => $idl], $cond); |
|
| 302 | + } else { |
|
| 303 | + $oups = array_merge( |
|
| 304 | + $oups, |
|
| 305 | + objet_trouver_liens([$objet_lie => $idl], [$objet_source => $ids], $cond) |
|
| 306 | + ); |
|
| 307 | + objet_dissocier([$objet_lie => $idl], [$objet_source => $ids], $cond); |
|
| 308 | + } |
|
| 309 | + } |
|
| 310 | + } |
|
| 311 | + } |
|
| 312 | + if (!empty($oups)) { |
|
| 313 | + lien_gerer__oups('editer_liens','set', $oups); |
|
| 314 | + } else { |
|
| 315 | + lien_gerer__oups('editer_liens','reset'); |
|
| 316 | + } |
|
| 317 | + } |
|
| 318 | + |
|
| 319 | + if ($ajouter) { |
|
| 320 | + if ( |
|
| 321 | + $ajouter_objets = charger_fonction("editer_liens_ajouter_{$table_source}_{$objet}_{$objet_lien}", 'action', true) |
|
| 322 | + ) { |
|
| 323 | + $ajout_ok = $ajouter_objets($ajouter); |
|
| 324 | + } else { |
|
| 325 | + $ajout_ok = false; |
|
| 326 | + include_spip('action/editer_liens'); |
|
| 327 | + foreach ($ajouter as $k => $v) { |
|
| 328 | + if ($lien = lien_verifier_action($k, $v)) { |
|
| 329 | + $ajout_ok = true; |
|
| 330 | + [$objet1, $ids, $objet2, $idl] = explode('-', $lien); |
|
| 331 | + $qualifs = lien_retrouver_qualif($objet_lien, $lien); |
|
| 332 | + if ($objet_lien == $objet1) { |
|
| 333 | + lien_ajouter_liaisons($objet1, $ids, $objet2, $idl, $qualifs); |
|
| 334 | + } else { |
|
| 335 | + lien_ajouter_liaisons($objet2, $idl, $objet1, $ids, $qualifs); |
|
| 336 | + } |
|
| 337 | + set_request('id_lien_ajoute', $ids); |
|
| 338 | + } |
|
| 339 | + } |
|
| 340 | + } |
|
| 341 | + # oups ne persiste que pour la derniere action, si suppression |
|
| 342 | + # une suppression suivie d'un ajout dans le meme hit est un remplacement |
|
| 343 | + # non annulable ! |
|
| 344 | + if ($ajout_ok) { |
|
| 345 | + lien_gerer__oups('editer_liens','reset'); |
|
| 346 | + } |
|
| 347 | + } |
|
| 348 | + |
|
| 349 | + if ($ordonner) { |
|
| 350 | + include_spip('action/editer_liens'); |
|
| 351 | + foreach ($ordonner as $k => $rang_lien) { |
|
| 352 | + if ($lien = lien_verifier_action($k, '')) { |
|
| 353 | + [$objet1, $ids, $objet2, $idl] = explode('-', $lien); |
|
| 354 | + $qualif = ['rang_lien' => $rang_lien]; |
|
| 355 | + |
|
| 356 | + if ($objet_lien == $objet1) { |
|
| 357 | + objet_qualifier_liens([$objet1 => $ids], [$objet2 => $idl], $qualif); |
|
| 358 | + } else { |
|
| 359 | + objet_qualifier_liens([$objet2 => $idl], [$objet1 => $ids], $qualif); |
|
| 360 | + } |
|
| 361 | + set_request('id_lien_ajoute', $ids); |
|
| 362 | + lien_gerer__oups('editer_liens','reset'); |
|
| 363 | + } |
|
| 364 | + } |
|
| 365 | + } |
|
| 366 | + } |
|
| 367 | + |
|
| 368 | + |
|
| 369 | + return $res; |
|
| 370 | 370 | } |
| 371 | 371 | |
| 372 | 372 | |
@@ -389,24 +389,24 @@ discard block |
||
| 389 | 389 | * @return string Action demandée si trouvée, sinon '' |
| 390 | 390 | */ |
| 391 | 391 | function lien_verifier_action($k, $v) { |
| 392 | - $action = ''; |
|
| 393 | - if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) { |
|
| 394 | - $action = $k; |
|
| 395 | - } |
|
| 396 | - if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) { |
|
| 397 | - if (is_numeric($k)) { |
|
| 398 | - $action = $v; |
|
| 399 | - } |
|
| 400 | - if (_request($k)) { |
|
| 401 | - $action = $v; |
|
| 402 | - } |
|
| 403 | - } |
|
| 404 | - // ajout un role null fictif (plus pratique) si pas défini |
|
| 405 | - if ($action and count(explode('-', $action)) == 4) { |
|
| 406 | - $action .= '-'; |
|
| 407 | - } |
|
| 408 | - |
|
| 409 | - return $action; |
|
| 392 | + $action = ''; |
|
| 393 | + if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $k)) { |
|
| 394 | + $action = $k; |
|
| 395 | + } |
|
| 396 | + if (preg_match(',^\w+-[\w*]+-[\w*]+-[\w*]+(-[\w*])?,', $v)) { |
|
| 397 | + if (is_numeric($k)) { |
|
| 398 | + $action = $v; |
|
| 399 | + } |
|
| 400 | + if (_request($k)) { |
|
| 401 | + $action = $v; |
|
| 402 | + } |
|
| 403 | + } |
|
| 404 | + // ajout un role null fictif (plus pratique) si pas défini |
|
| 405 | + if ($action and count(explode('-', $action)) == 4) { |
|
| 406 | + $action .= '-'; |
|
| 407 | + } |
|
| 408 | + |
|
| 409 | + return $action; |
|
| 410 | 410 | } |
| 411 | 411 | |
| 412 | 412 | |
@@ -422,66 +422,66 @@ discard block |
||
| 422 | 422 | * Liste des qualifs pour chaque lien. Tableau vide s'il n'y en a pas. |
| 423 | 423 | **/ |
| 424 | 424 | function lien_retrouver_qualif($objet_lien, $lien) { |
| 425 | - // un role est défini dans la liaison |
|
| 426 | - $defs = explode('-', $lien); |
|
| 427 | - [$objet1, , $objet2, , $role] = array_pad($defs, 5, null); |
|
| 428 | - if ($objet_lien == $objet1) { |
|
| 429 | - $colonne_role = roles_colonne($objet1, $objet2); |
|
| 430 | - } else { |
|
| 431 | - $colonne_role = roles_colonne($objet2, $objet1); |
|
| 432 | - } |
|
| 433 | - |
|
| 434 | - // cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut) |
|
| 435 | - if ($role) { |
|
| 436 | - return [ |
|
| 437 | - // un seul lien avec ce role |
|
| 438 | - [$colonne_role => $role] |
|
| 439 | - ]; |
|
| 440 | - } |
|
| 441 | - |
|
| 442 | - // retrouver les rôles postés pour cette liaison, s'il y en a. |
|
| 443 | - $qualifier_lien = _request('qualifier_lien'); |
|
| 444 | - if (!$qualifier_lien or !is_array($qualifier_lien)) { |
|
| 445 | - return []; |
|
| 446 | - } |
|
| 447 | - |
|
| 448 | - // pas avec l'action complete (incluant le role) |
|
| 449 | - $qualif = []; |
|
| 450 | - if ( |
|
| 451 | - (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) |
|
| 452 | - and count($defs) == 5 |
|
| 453 | - ) { |
|
| 454 | - // on tente avec l'action sans le role |
|
| 455 | - array_pop($defs); |
|
| 456 | - $lien = implode('-', $defs); |
|
| 457 | - if (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) { |
|
| 458 | - $qualif = []; |
|
| 459 | - } |
|
| 460 | - } |
|
| 461 | - |
|
| 462 | - // $qualif de la forme array(role=>array(...),valeur=>array(...),....) |
|
| 463 | - // on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...) |
|
| 464 | - $qualifs = []; |
|
| 465 | - while (is_countable($qualif) ? count($qualif) : 0) { |
|
| 466 | - $q = []; |
|
| 467 | - foreach ($qualif as $att => $values) { |
|
| 468 | - if (is_array($values)) { |
|
| 469 | - $q[$att] = array_shift($qualif[$att]); |
|
| 470 | - if (!(is_countable($qualif[$att]) ? count($qualif[$att]) : 0)) { |
|
| 471 | - unset($qualif[$att]); |
|
| 472 | - } |
|
| 473 | - } else { |
|
| 474 | - $q[$att] = $values; |
|
| 475 | - unset($qualif[$att]); |
|
| 476 | - } |
|
| 477 | - } |
|
| 478 | - // pas de rôle vide |
|
| 479 | - if (!$colonne_role or !isset($q[$colonne_role]) or $q[$colonne_role]) { |
|
| 480 | - $qualifs[] = $q; |
|
| 481 | - } |
|
| 482 | - } |
|
| 483 | - |
|
| 484 | - return $qualifs; |
|
| 425 | + // un role est défini dans la liaison |
|
| 426 | + $defs = explode('-', $lien); |
|
| 427 | + [$objet1, , $objet2, , $role] = array_pad($defs, 5, null); |
|
| 428 | + if ($objet_lien == $objet1) { |
|
| 429 | + $colonne_role = roles_colonne($objet1, $objet2); |
|
| 430 | + } else { |
|
| 431 | + $colonne_role = roles_colonne($objet2, $objet1); |
|
| 432 | + } |
|
| 433 | + |
|
| 434 | + // cas ou le role est defini en 5e argument de l'action sur le lien (suppression, ajout rapide sans autre attribut) |
|
| 435 | + if ($role) { |
|
| 436 | + return [ |
|
| 437 | + // un seul lien avec ce role |
|
| 438 | + [$colonne_role => $role] |
|
| 439 | + ]; |
|
| 440 | + } |
|
| 441 | + |
|
| 442 | + // retrouver les rôles postés pour cette liaison, s'il y en a. |
|
| 443 | + $qualifier_lien = _request('qualifier_lien'); |
|
| 444 | + if (!$qualifier_lien or !is_array($qualifier_lien)) { |
|
| 445 | + return []; |
|
| 446 | + } |
|
| 447 | + |
|
| 448 | + // pas avec l'action complete (incluant le role) |
|
| 449 | + $qualif = []; |
|
| 450 | + if ( |
|
| 451 | + (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) |
|
| 452 | + and count($defs) == 5 |
|
| 453 | + ) { |
|
| 454 | + // on tente avec l'action sans le role |
|
| 455 | + array_pop($defs); |
|
| 456 | + $lien = implode('-', $defs); |
|
| 457 | + if (!isset($qualifier_lien[$lien]) or !$qualif = $qualifier_lien[$lien]) { |
|
| 458 | + $qualif = []; |
|
| 459 | + } |
|
| 460 | + } |
|
| 461 | + |
|
| 462 | + // $qualif de la forme array(role=>array(...),valeur=>array(...),....) |
|
| 463 | + // on le reforme en array(array(role=>..,valeur=>..,..),array(role=>..,valeur=>..,..),...) |
|
| 464 | + $qualifs = []; |
|
| 465 | + while (is_countable($qualif) ? count($qualif) : 0) { |
|
| 466 | + $q = []; |
|
| 467 | + foreach ($qualif as $att => $values) { |
|
| 468 | + if (is_array($values)) { |
|
| 469 | + $q[$att] = array_shift($qualif[$att]); |
|
| 470 | + if (!(is_countable($qualif[$att]) ? count($qualif[$att]) : 0)) { |
|
| 471 | + unset($qualif[$att]); |
|
| 472 | + } |
|
| 473 | + } else { |
|
| 474 | + $q[$att] = $values; |
|
| 475 | + unset($qualif[$att]); |
|
| 476 | + } |
|
| 477 | + } |
|
| 478 | + // pas de rôle vide |
|
| 479 | + if (!$colonne_role or !isset($q[$colonne_role]) or $q[$colonne_role]) { |
|
| 480 | + $qualifs[] = $q; |
|
| 481 | + } |
|
| 482 | + } |
|
| 483 | + |
|
| 484 | + return $qualifs; |
|
| 485 | 485 | } |
| 486 | 486 | |
| 487 | 487 | /** |
@@ -500,14 +500,14 @@ discard block |
||
| 500 | 500 | **/ |
| 501 | 501 | function lien_ajouter_liaisons($objet_source, $ids, $objet_lien, $idl, $qualifs) { |
| 502 | 502 | |
| 503 | - // retrouver la colonne de roles s'il y en a a lier |
|
| 504 | - if (is_array($qualifs) and count($qualifs)) { |
|
| 505 | - foreach ($qualifs as $qualif) { |
|
| 506 | - objet_associer([$objet_source => $ids], [$objet_lien => $idl], $qualif); |
|
| 507 | - } |
|
| 508 | - } else { |
|
| 509 | - objet_associer([$objet_source => $ids], [$objet_lien => $idl]); |
|
| 510 | - } |
|
| 503 | + // retrouver la colonne de roles s'il y en a a lier |
|
| 504 | + if (is_array($qualifs) and count($qualifs)) { |
|
| 505 | + foreach ($qualifs as $qualif) { |
|
| 506 | + objet_associer([$objet_source => $ids], [$objet_lien => $idl], $qualif); |
|
| 507 | + } |
|
| 508 | + } else { |
|
| 509 | + objet_associer([$objet_source => $ids], [$objet_lien => $idl]); |
|
| 510 | + } |
|
| 511 | 511 | } |
| 512 | 512 | |
| 513 | 513 | |
@@ -519,79 +519,79 @@ discard block |
||
| 519 | 519 | * @return array|string|null |
| 520 | 520 | */ |
| 521 | 521 | function lien_gerer__oups(string $form, string $action, ?array $valeur = null) { |
| 522 | - static $_oups_value; |
|
| 523 | - |
|
| 524 | - switch ($action) { |
|
| 525 | - case 'reset': |
|
| 526 | - $res = (empty($_oups_value) ? false : true); |
|
| 527 | - $_oups_value = null; |
|
| 528 | - return $res; |
|
| 529 | - |
|
| 530 | - case 'get': |
|
| 531 | - return $_oups_value ?: null; |
|
| 532 | - |
|
| 533 | - case 'set': |
|
| 534 | - $_oups_value = $valeur; |
|
| 535 | - return true; |
|
| 536 | - |
|
| 537 | - case 'request': |
|
| 538 | - $_oups_value = null; |
|
| 539 | - if ($oups = _request('_oups')) { |
|
| 540 | - include_spip('inc/filtres'); |
|
| 541 | - // on accepte uniquement une valeur signée |
|
| 542 | - if ($oups = decoder_contexte_ajax($oups, $form)) { |
|
| 543 | - if (!is_array($oups) |
|
| 544 | - or empty($oups['id_auteur']) |
|
| 545 | - or $oups['id_auteur'] !== $GLOBALS['visiteur_session']['id_auteur'] |
|
| 546 | - or empty($oups['time']) |
|
| 547 | - or $oups['time'] < $_SERVER['REQUEST_TIME'] - 86400 |
|
| 548 | - or empty($oups['args']) |
|
| 549 | - or $oups['args'] !== lien_gerer__oups_collecter_args($form, debug_backtrace(null, 5)) |
|
| 550 | - or empty($oups['oups_value'])) { |
|
| 551 | - $oups = null; |
|
| 552 | - } |
|
| 553 | - else { |
|
| 554 | - $oups = $oups['oups_value']; |
|
| 555 | - // controler le contenu |
|
| 556 | - foreach ($oups as $k => $oup) { |
|
| 557 | - if (!is_array($oup)) { |
|
| 558 | - unset($oups[$k]); |
|
| 559 | - } |
|
| 560 | - else { |
|
| 561 | - foreach ($oup as $champ => $valeur) { |
|
| 562 | - if (!is_scalar($champ) |
|
| 563 | - or !is_scalar($valeur) |
|
| 564 | - or preg_match(',\W,', $champ) |
|
| 565 | - ) { |
|
| 566 | - unset($oups[$k][$champ]); |
|
| 567 | - } |
|
| 568 | - } |
|
| 569 | - if (empty($oups[$k])) { |
|
| 570 | - unset($oups[$k]); |
|
| 571 | - } |
|
| 572 | - } |
|
| 573 | - } |
|
| 574 | - } |
|
| 575 | - $_oups_value = $oups; |
|
| 576 | - return $_oups_value; |
|
| 577 | - } |
|
| 578 | - } |
|
| 579 | - break; |
|
| 580 | - |
|
| 581 | - case 'hash': |
|
| 582 | - if (!$_oups_value) { |
|
| 583 | - return ''; |
|
| 584 | - } |
|
| 585 | - |
|
| 586 | - include_spip('inc/filtres'); |
|
| 587 | - $oups = [ |
|
| 588 | - 'id_auteur' => $GLOBALS['visiteur_session']['id_auteur'] ?? 0, |
|
| 589 | - 'time' => strtotime(date('Y-m-d H:00:00')), |
|
| 590 | - 'args' => lien_gerer__oups_collecter_args($form, debug_backtrace(null, 5)), |
|
| 591 | - 'oups_value' => $_oups_value, |
|
| 592 | - ]; |
|
| 593 | - return encoder_contexte_ajax($oups, $form); |
|
| 594 | - } |
|
| 522 | + static $_oups_value; |
|
| 523 | + |
|
| 524 | + switch ($action) { |
|
| 525 | + case 'reset': |
|
| 526 | + $res = (empty($_oups_value) ? false : true); |
|
| 527 | + $_oups_value = null; |
|
| 528 | + return $res; |
|
| 529 | + |
|
| 530 | + case 'get': |
|
| 531 | + return $_oups_value ?: null; |
|
| 532 | + |
|
| 533 | + case 'set': |
|
| 534 | + $_oups_value = $valeur; |
|
| 535 | + return true; |
|
| 536 | + |
|
| 537 | + case 'request': |
|
| 538 | + $_oups_value = null; |
|
| 539 | + if ($oups = _request('_oups')) { |
|
| 540 | + include_spip('inc/filtres'); |
|
| 541 | + // on accepte uniquement une valeur signée |
|
| 542 | + if ($oups = decoder_contexte_ajax($oups, $form)) { |
|
| 543 | + if (!is_array($oups) |
|
| 544 | + or empty($oups['id_auteur']) |
|
| 545 | + or $oups['id_auteur'] !== $GLOBALS['visiteur_session']['id_auteur'] |
|
| 546 | + or empty($oups['time']) |
|
| 547 | + or $oups['time'] < $_SERVER['REQUEST_TIME'] - 86400 |
|
| 548 | + or empty($oups['args']) |
|
| 549 | + or $oups['args'] !== lien_gerer__oups_collecter_args($form, debug_backtrace(null, 5)) |
|
| 550 | + or empty($oups['oups_value'])) { |
|
| 551 | + $oups = null; |
|
| 552 | + } |
|
| 553 | + else { |
|
| 554 | + $oups = $oups['oups_value']; |
|
| 555 | + // controler le contenu |
|
| 556 | + foreach ($oups as $k => $oup) { |
|
| 557 | + if (!is_array($oup)) { |
|
| 558 | + unset($oups[$k]); |
|
| 559 | + } |
|
| 560 | + else { |
|
| 561 | + foreach ($oup as $champ => $valeur) { |
|
| 562 | + if (!is_scalar($champ) |
|
| 563 | + or !is_scalar($valeur) |
|
| 564 | + or preg_match(',\W,', $champ) |
|
| 565 | + ) { |
|
| 566 | + unset($oups[$k][$champ]); |
|
| 567 | + } |
|
| 568 | + } |
|
| 569 | + if (empty($oups[$k])) { |
|
| 570 | + unset($oups[$k]); |
|
| 571 | + } |
|
| 572 | + } |
|
| 573 | + } |
|
| 574 | + } |
|
| 575 | + $_oups_value = $oups; |
|
| 576 | + return $_oups_value; |
|
| 577 | + } |
|
| 578 | + } |
|
| 579 | + break; |
|
| 580 | + |
|
| 581 | + case 'hash': |
|
| 582 | + if (!$_oups_value) { |
|
| 583 | + return ''; |
|
| 584 | + } |
|
| 585 | + |
|
| 586 | + include_spip('inc/filtres'); |
|
| 587 | + $oups = [ |
|
| 588 | + 'id_auteur' => $GLOBALS['visiteur_session']['id_auteur'] ?? 0, |
|
| 589 | + 'time' => strtotime(date('Y-m-d H:00:00')), |
|
| 590 | + 'args' => lien_gerer__oups_collecter_args($form, debug_backtrace(null, 5)), |
|
| 591 | + 'oups_value' => $_oups_value, |
|
| 592 | + ]; |
|
| 593 | + return encoder_contexte_ajax($oups, $form); |
|
| 594 | + } |
|
| 595 | 595 | } |
| 596 | 596 | |
| 597 | 597 | /** |
@@ -600,19 +600,19 @@ discard block |
||
| 600 | 600 | * @return false|float|int|mixed|Services_JSON_Error|string |
| 601 | 601 | */ |
| 602 | 602 | function lien_gerer__oups_collecter_args($form, $trace) { |
| 603 | - $args = ''; |
|
| 604 | - if (!empty($trace)) { |
|
| 605 | - do { |
|
| 606 | - $t = array_shift($trace); |
|
| 607 | - $function = $t['function'] ?? ''; |
|
| 608 | - if (strpos($function, 'formulaires_'. $form) === 0) { |
|
| 609 | - if (isset($t['args'])) { |
|
| 610 | - $args = json_encode($t['args']); |
|
| 611 | - } |
|
| 612 | - break; |
|
| 613 | - } |
|
| 614 | - } |
|
| 615 | - while (count($trace)); |
|
| 616 | - } |
|
| 617 | - return $args; |
|
| 603 | + $args = ''; |
|
| 604 | + if (!empty($trace)) { |
|
| 605 | + do { |
|
| 606 | + $t = array_shift($trace); |
|
| 607 | + $function = $t['function'] ?? ''; |
|
| 608 | + if (strpos($function, 'formulaires_'. $form) === 0) { |
|
| 609 | + if (isset($t['args'])) { |
|
| 610 | + $args = json_encode($t['args']); |
|
| 611 | + } |
|
| 612 | + break; |
|
| 613 | + } |
|
| 614 | + } |
|
| 615 | + while (count($trace)); |
|
| 616 | + } |
|
| 617 | + return $args; |
|
| 618 | 618 | } |
@@ -105,7 +105,7 @@ discard block |
||
| 105 | 105 | |
| 106 | 106 | // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument |
| 107 | 107 | include_spip('inc/autoriser'); |
| 108 | - $editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet) |
|
| 108 | + $editable = ($editable and autoriser('associer'.$table_source, $objet, $id_objet) |
|
| 109 | 109 | and autoriser('modifier', $objet, $id_objet)); |
| 110 | 110 | |
| 111 | 111 | if ( |
@@ -119,15 +119,15 @@ discard block |
||
| 119 | 119 | |
| 120 | 120 | // squelettes de vue et de d'association |
| 121 | 121 | // ils sont différents si des rôles sont définis. |
| 122 | - $skel_vue = $table_source . '_lies'; |
|
| 123 | - $skel_ajout = $table_source . '_associer'; |
|
| 122 | + $skel_vue = $table_source.'_lies'; |
|
| 123 | + $skel_ajout = $table_source.'_associer'; |
|
| 124 | 124 | |
| 125 | 125 | // description des roles |
| 126 | 126 | include_spip('inc/roles'); |
| 127 | 127 | if ($roles = roles_presents($objet_source, $objet)) { |
| 128 | 128 | // on demande de nouveaux squelettes en conséquence |
| 129 | - $skel_vue = $table_source . '_roles_lies'; |
|
| 130 | - $skel_ajout = $table_source . '_roles_associer'; |
|
| 129 | + $skel_vue = $table_source.'_roles_lies'; |
|
| 130 | + $skel_ajout = $table_source.'_roles_associer'; |
|
| 131 | 131 | } |
| 132 | 132 | |
| 133 | 133 | $oups = ''; |
@@ -226,12 +226,12 @@ discard block |
||
| 226 | 226 | include_spip('inc/autoriser'); |
| 227 | 227 | if (autoriser('modifier', $objet, $id_objet)) { |
| 228 | 228 | // recuperer le oups du coup d'avant pour le propager à charger() si on ne fait rien par exemple |
| 229 | - lien_gerer__oups('editer_liens','request'); |
|
| 229 | + lien_gerer__oups('editer_liens', 'request'); |
|
| 230 | 230 | |
| 231 | 231 | // annuler les suppressions du coup d'avant ? |
| 232 | 232 | if ( |
| 233 | 233 | _request('annuler_oups') |
| 234 | - and $oups = lien_gerer__oups('editer_liens','get') |
|
| 234 | + and $oups = lien_gerer__oups('editer_liens', 'get') |
|
| 235 | 235 | ) { |
| 236 | 236 | if ($oups_objets = charger_fonction("editer_liens_oups_{$table_source}_{$objet}_{$objet_lien}", 'action', true)) { |
| 237 | 237 | $oups_objets($oups); |
@@ -247,7 +247,7 @@ discard block |
||
| 247 | 247 | } |
| 248 | 248 | } |
| 249 | 249 | # oups ne persiste que pour la derniere action, si suppression |
| 250 | - lien_gerer__oups('editer_liens','reset'); |
|
| 250 | + lien_gerer__oups('editer_liens', 'reset'); |
|
| 251 | 251 | } |
| 252 | 252 | |
| 253 | 253 | $supprimer = _request('supprimer_lien'); |
@@ -310,9 +310,9 @@ discard block |
||
| 310 | 310 | } |
| 311 | 311 | } |
| 312 | 312 | if (!empty($oups)) { |
| 313 | - lien_gerer__oups('editer_liens','set', $oups); |
|
| 313 | + lien_gerer__oups('editer_liens', 'set', $oups); |
|
| 314 | 314 | } else { |
| 315 | - lien_gerer__oups('editer_liens','reset'); |
|
| 315 | + lien_gerer__oups('editer_liens', 'reset'); |
|
| 316 | 316 | } |
| 317 | 317 | } |
| 318 | 318 | |
@@ -342,7 +342,7 @@ discard block |
||
| 342 | 342 | # une suppression suivie d'un ajout dans le meme hit est un remplacement |
| 343 | 343 | # non annulable ! |
| 344 | 344 | if ($ajout_ok) { |
| 345 | - lien_gerer__oups('editer_liens','reset'); |
|
| 345 | + lien_gerer__oups('editer_liens', 'reset'); |
|
| 346 | 346 | } |
| 347 | 347 | } |
| 348 | 348 | |
@@ -359,7 +359,7 @@ discard block |
||
| 359 | 359 | objet_qualifier_liens([$objet2 => $idl], [$objet1 => $ids], $qualif); |
| 360 | 360 | } |
| 361 | 361 | set_request('id_lien_ajoute', $ids); |
| 362 | - lien_gerer__oups('editer_liens','reset'); |
|
| 362 | + lien_gerer__oups('editer_liens', 'reset'); |
|
| 363 | 363 | } |
| 364 | 364 | } |
| 365 | 365 | } |
@@ -424,7 +424,7 @@ discard block |
||
| 424 | 424 | function lien_retrouver_qualif($objet_lien, $lien) { |
| 425 | 425 | // un role est défini dans la liaison |
| 426 | 426 | $defs = explode('-', $lien); |
| 427 | - [$objet1, , $objet2, , $role] = array_pad($defs, 5, null); |
|
| 427 | + [$objet1,, $objet2,, $role] = array_pad($defs, 5, null); |
|
| 428 | 428 | if ($objet_lien == $objet1) { |
| 429 | 429 | $colonne_role = roles_colonne($objet1, $objet2); |
| 430 | 430 | } else { |
@@ -605,7 +605,7 @@ discard block |
||
| 605 | 605 | do { |
| 606 | 606 | $t = array_shift($trace); |
| 607 | 607 | $function = $t['function'] ?? ''; |
| 608 | - if (strpos($function, 'formulaires_'. $form) === 0) { |
|
| 608 | + if (strpos($function, 'formulaires_'.$form) === 0) { |
|
| 609 | 609 | if (isset($t['args'])) { |
| 610 | 610 | $args = json_encode($t['args']); |
| 611 | 611 | } |
@@ -549,15 +549,13 @@ |
||
| 549 | 549 | or $oups['args'] !== lien_gerer__oups_collecter_args($form, debug_backtrace(null, 5)) |
| 550 | 550 | or empty($oups['oups_value'])) { |
| 551 | 551 | $oups = null; |
| 552 | - } |
|
| 553 | - else { |
|
| 552 | + } else { |
|
| 554 | 553 | $oups = $oups['oups_value']; |
| 555 | 554 | // controler le contenu |
| 556 | 555 | foreach ($oups as $k => $oup) { |
| 557 | 556 | if (!is_array($oup)) { |
| 558 | 557 | unset($oups[$k]); |
| 559 | - } |
|
| 560 | - else { |
|
| 558 | + } else { |
|
| 561 | 559 | foreach ($oup as $champ => $valeur) { |
| 562 | 560 | if (!is_scalar($champ) |
| 563 | 561 | or !is_scalar($valeur) |
@@ -19,21 +19,21 @@ discard block |
||
| 19 | 19 | * @package SPIP\Core\SQL\Upgrade |
| 20 | 20 | **/ |
| 21 | 21 | if (!defined('_ECRIRE_INC_VERSION')) { |
| 22 | - return; |
|
| 22 | + return; |
|
| 23 | 23 | } |
| 24 | 24 | |
| 25 | 25 | $GLOBALS['maj'][2021_02_18_00] = [ |
| 26 | - ['sql_alter', "TABLE spip_auteurs CHANGE imessage imessage VARCHAR(3) DEFAULT '' NOT NULL" ], |
|
| 27 | - ['sql_updateq', 'spip_auteurs', ['imessage' => 'oui'], "imessage != 'non' OR imessage IS NULL" ], |
|
| 26 | + ['sql_alter', "TABLE spip_auteurs CHANGE imessage imessage VARCHAR(3) DEFAULT '' NOT NULL" ], |
|
| 27 | + ['sql_updateq', 'spip_auteurs', ['imessage' => 'oui'], "imessage != 'non' OR imessage IS NULL" ], |
|
| 28 | 28 | ]; |
| 29 | 29 | |
| 30 | 30 | $GLOBALS['maj'][2022_02_23_02] = [ |
| 31 | - ['sql_alter', "TABLE spip_auteurs ADD backup_cles mediumtext DEFAULT '' NOT NULL" ], |
|
| 32 | - ['sql_delete', 'spip_meta', "nom='secret_du_site'" ], |
|
| 31 | + ['sql_alter', "TABLE spip_auteurs ADD backup_cles mediumtext DEFAULT '' NOT NULL" ], |
|
| 32 | + ['sql_delete', 'spip_meta', "nom='secret_du_site'" ], |
|
| 33 | 33 | ]; |
| 34 | 34 | |
| 35 | 35 | $GLOBALS['maj'][2022_02_23_03] = [ |
| 36 | - ['maj2021_supprimer_toutes_sessions_si_aucun_backup_cles'], |
|
| 36 | + ['maj2021_supprimer_toutes_sessions_si_aucun_backup_cles'], |
|
| 37 | 37 | ]; |
| 38 | 38 | |
| 39 | 39 | /** |
@@ -44,15 +44,15 @@ discard block |
||
| 44 | 44 | * - les autres auteurs vont tous regénérer un mot de passe plus sécure au premier login |
| 45 | 45 | **/ |
| 46 | 46 | function maj2021_supprimer_toutes_sessions_si_aucun_backup_cles() { |
| 47 | - if (!sql_countsel('spip_auteurs', "webmestre='oui' AND backup_cles!=''")) { |
|
| 48 | - spip_log('supprimer sessions auteur', 'maj'); |
|
| 49 | - if ($dir = opendir(_DIR_SESSIONS)) { |
|
| 50 | - while (($f = readdir($dir)) !== false) { |
|
| 51 | - spip_unlink(_DIR_SESSIONS . $f); |
|
| 52 | - if (time() >= _TIME_OUT) { |
|
| 53 | - return; |
|
| 54 | - } |
|
| 55 | - } |
|
| 56 | - } |
|
| 57 | - } |
|
| 47 | + if (!sql_countsel('spip_auteurs', "webmestre='oui' AND backup_cles!=''")) { |
|
| 48 | + spip_log('supprimer sessions auteur', 'maj'); |
|
| 49 | + if ($dir = opendir(_DIR_SESSIONS)) { |
|
| 50 | + while (($f = readdir($dir)) !== false) { |
|
| 51 | + spip_unlink(_DIR_SESSIONS . $f); |
|
| 52 | + if (time() >= _TIME_OUT) { |
|
| 53 | + return; |
|
| 54 | + } |
|
| 55 | + } |
|
| 56 | + } |
|
| 57 | + } |
|
| 58 | 58 | } |
@@ -23,13 +23,13 @@ discard block |
||
| 23 | 23 | } |
| 24 | 24 | |
| 25 | 25 | $GLOBALS['maj'][2021_02_18_00] = [ |
| 26 | - ['sql_alter', "TABLE spip_auteurs CHANGE imessage imessage VARCHAR(3) DEFAULT '' NOT NULL" ], |
|
| 27 | - ['sql_updateq', 'spip_auteurs', ['imessage' => 'oui'], "imessage != 'non' OR imessage IS NULL" ], |
|
| 26 | + ['sql_alter', "TABLE spip_auteurs CHANGE imessage imessage VARCHAR(3) DEFAULT '' NOT NULL"], |
|
| 27 | + ['sql_updateq', 'spip_auteurs', ['imessage' => 'oui'], "imessage != 'non' OR imessage IS NULL"], |
|
| 28 | 28 | ]; |
| 29 | 29 | |
| 30 | 30 | $GLOBALS['maj'][2022_02_23_02] = [ |
| 31 | - ['sql_alter', "TABLE spip_auteurs ADD backup_cles mediumtext DEFAULT '' NOT NULL" ], |
|
| 32 | - ['sql_delete', 'spip_meta', "nom='secret_du_site'" ], |
|
| 31 | + ['sql_alter', "TABLE spip_auteurs ADD backup_cles mediumtext DEFAULT '' NOT NULL"], |
|
| 32 | + ['sql_delete', 'spip_meta', "nom='secret_du_site'"], |
|
| 33 | 33 | ]; |
| 34 | 34 | |
| 35 | 35 | $GLOBALS['maj'][2022_02_23_03] = [ |
@@ -48,7 +48,7 @@ discard block |
||
| 48 | 48 | spip_log('supprimer sessions auteur', 'maj'); |
| 49 | 49 | if ($dir = opendir(_DIR_SESSIONS)) { |
| 50 | 50 | while (($f = readdir($dir)) !== false) { |
| 51 | - spip_unlink(_DIR_SESSIONS . $f); |
|
| 51 | + spip_unlink(_DIR_SESSIONS.$f); |
|
| 52 | 52 | if (time() >= _TIME_OUT) { |
| 53 | 53 | return; |
| 54 | 54 | } |
@@ -14,154 +14,154 @@ |
||
| 14 | 14 | |
| 15 | 15 | abstract class AbstractCollecteur { |
| 16 | 16 | |
| 17 | - protected static string $markPrefix = 'COLLECT'; |
|
| 18 | - protected string $markId; |
|
| 19 | - |
|
| 20 | - /** |
|
| 21 | - * Collecteur générique des occurences d'une preg dans un texte avec leurs positions et longueur |
|
| 22 | - * @param string $texte |
|
| 23 | - * texte à analyser pour la collecte |
|
| 24 | - * @param string $if_chars |
|
| 25 | - * caractere(s) à tester avant de tenter la preg |
|
| 26 | - * @param string $start_with |
|
| 27 | - * caractere(s) par lesquels commencent l'expression recherchée (permet de démarrer la preg à la prochaine occurence de cette chaine) |
|
| 28 | - * @param string $preg |
|
| 29 | - * preg utilisée pour la collecte |
|
| 30 | - * @param int $max_items |
|
| 31 | - * pour limiter le nombre de preg collectée (pour la detection simple de présence par exemple) |
|
| 32 | - * @return array |
|
| 33 | - */ |
|
| 34 | - protected static function collecteur(string $texte, string $if_chars, string $start_with, string $preg, int $max_items = 0): array { |
|
| 35 | - |
|
| 36 | - $collection = []; |
|
| 37 | - $pos = 0; |
|
| 38 | - while ( |
|
| 39 | - (!$if_chars || strpos($texte, $if_chars, $pos) !== false) |
|
| 40 | - and ($next = ($start_with ? strpos($texte, $start_with, $pos) : $pos)) !== false |
|
| 41 | - and preg_match($preg, $texte, $r, PREG_OFFSET_CAPTURE, $next)) { |
|
| 42 | - |
|
| 43 | - $found_pos = $r[0][1]; |
|
| 44 | - $found_length = strlen($r[0][0]); |
|
| 45 | - $match = [ |
|
| 46 | - 'raw' => $r[0][0], |
|
| 47 | - 'match' => array_column($r, 0), |
|
| 48 | - 'pos' => $found_pos, |
|
| 49 | - 'length' => $found_length |
|
| 50 | - ]; |
|
| 51 | - |
|
| 52 | - $collection[] = $match; |
|
| 53 | - |
|
| 54 | - if ($max_items and count($collection) === $max_items) { |
|
| 55 | - break; |
|
| 56 | - } |
|
| 57 | - |
|
| 58 | - $pos = $match['pos'] + $match['length']; |
|
| 59 | - } |
|
| 60 | - |
|
| 61 | - return $collection; |
|
| 62 | - } |
|
| 63 | - |
|
| 64 | - /** |
|
| 65 | - * Sanitizer une collection d'occurences |
|
| 66 | - * |
|
| 67 | - * @param array $collection |
|
| 68 | - * @param string $sanitize_callback |
|
| 69 | - * @return array |
|
| 70 | - */ |
|
| 71 | - protected function sanitizer_collection(array $collection, string $sanitize_callback): array { |
|
| 72 | - foreach ($collection as &$c) { |
|
| 73 | - $c['raw'] = $sanitize_callback($c['raw']); |
|
| 74 | - } |
|
| 75 | - |
|
| 76 | - return $collection; |
|
| 77 | - } |
|
| 78 | - |
|
| 79 | - /** |
|
| 80 | - * @param string $texte |
|
| 81 | - * @param array $options |
|
| 82 | - * @return array |
|
| 83 | - */ |
|
| 84 | - public function collecter(string $texte, array $options = []): array { |
|
| 85 | - $collection = []; |
|
| 86 | - return $collection; |
|
| 87 | - } |
|
| 88 | - |
|
| 89 | - public function detecter($texte): bool { |
|
| 90 | - if (!empty($this->markId) and strpos($texte, $this->markId) !== false) { |
|
| 91 | - return true; |
|
| 92 | - } |
|
| 93 | - return !empty($this->collecter($texte, ['detecter_presence' => true])); |
|
| 94 | - } |
|
| 95 | - |
|
| 96 | - /** |
|
| 97 | - * Echapper les occurences de la collecte par un texte neutre du point de vue HTML |
|
| 98 | - * |
|
| 99 | - * @see retablir() |
|
| 100 | - * @param string $texte |
|
| 101 | - * @param array $options |
|
| 102 | - * string $sanitize_callback |
|
| 103 | - * @return array |
|
| 104 | - * texte, marqueur utilise pour echapper les modeles |
|
| 105 | - */ |
|
| 106 | - public function echapper(string $texte, array $options = []): string { |
|
| 107 | - if (!function_exists('creer_uniqid')) { |
|
| 108 | - include_spip('inc/acces'); |
|
| 109 | - } |
|
| 110 | - |
|
| 111 | - $collection = $this->collecter($texte, $options); |
|
| 112 | - if (!empty($options['sanitize_callback']) and is_callable($options['sanitize_callback'])) { |
|
| 113 | - $collection = $this->sanitizer_collection($collection, $options['sanitize_callback']); |
|
| 114 | - } |
|
| 115 | - |
|
| 116 | - if (!empty($collection)) { |
|
| 117 | - if (empty($this->markId)) { |
|
| 118 | - // generer un marqueur qui n'existe pas dans le texte |
|
| 119 | - do { |
|
| 120 | - $this->markId = substr(md5(uniqid(static::class, 1)), 0, 7); |
|
| 121 | - $this->markId = "@|".static::$markPrefix . $this->markId . "|"; |
|
| 122 | - } while (strpos($texte, $this->markId) !== false); |
|
| 123 | - } |
|
| 124 | - |
|
| 125 | - $offset_pos = 0; |
|
| 126 | - foreach ($collection as $c) { |
|
| 127 | - $rempl = $this->markId . base64_encode($c['raw']) . '|@'; |
|
| 128 | - $texte = substr_replace($texte, $rempl, $c['pos'] + $offset_pos, $c['length']); |
|
| 129 | - $offset_pos += strlen($rempl) - $c['length']; |
|
| 130 | - } |
|
| 131 | - } |
|
| 132 | - |
|
| 133 | - return $texte; |
|
| 134 | - } |
|
| 135 | - |
|
| 136 | - |
|
| 137 | - /** |
|
| 138 | - * Retablir les occurences échappées précédemment |
|
| 139 | - * |
|
| 140 | - * @see echapper() |
|
| 141 | - * @param string $texte |
|
| 142 | - * @return string |
|
| 143 | - */ |
|
| 144 | - function retablir(string $texte): string { |
|
| 145 | - |
|
| 146 | - if (!empty($this->markId)) { |
|
| 147 | - $lm = strlen($this->markId); |
|
| 148 | - $pos = 0; |
|
| 149 | - while ( |
|
| 150 | - ($p = strpos($texte, $this->markId, $pos)) !== false |
|
| 151 | - and $end = strpos($texte, '|@', $p + $lm) |
|
| 152 | - ) { |
|
| 153 | - $base64 = substr($texte, $p + $lm, $end - ($p + $lm)); |
|
| 154 | - if ($c = base64_decode($base64, true)) { |
|
| 155 | - $texte = substr_replace($texte, $c, $p, $end + 2 - $p); |
|
| 156 | - $pos = $p + strlen($c); |
|
| 157 | - } |
|
| 158 | - else { |
|
| 159 | - $pos = $end; |
|
| 160 | - } |
|
| 161 | - } |
|
| 162 | - } |
|
| 163 | - |
|
| 164 | - return $texte; |
|
| 165 | - } |
|
| 17 | + protected static string $markPrefix = 'COLLECT'; |
|
| 18 | + protected string $markId; |
|
| 19 | + |
|
| 20 | + /** |
|
| 21 | + * Collecteur générique des occurences d'une preg dans un texte avec leurs positions et longueur |
|
| 22 | + * @param string $texte |
|
| 23 | + * texte à analyser pour la collecte |
|
| 24 | + * @param string $if_chars |
|
| 25 | + * caractere(s) à tester avant de tenter la preg |
|
| 26 | + * @param string $start_with |
|
| 27 | + * caractere(s) par lesquels commencent l'expression recherchée (permet de démarrer la preg à la prochaine occurence de cette chaine) |
|
| 28 | + * @param string $preg |
|
| 29 | + * preg utilisée pour la collecte |
|
| 30 | + * @param int $max_items |
|
| 31 | + * pour limiter le nombre de preg collectée (pour la detection simple de présence par exemple) |
|
| 32 | + * @return array |
|
| 33 | + */ |
|
| 34 | + protected static function collecteur(string $texte, string $if_chars, string $start_with, string $preg, int $max_items = 0): array { |
|
| 35 | + |
|
| 36 | + $collection = []; |
|
| 37 | + $pos = 0; |
|
| 38 | + while ( |
|
| 39 | + (!$if_chars || strpos($texte, $if_chars, $pos) !== false) |
|
| 40 | + and ($next = ($start_with ? strpos($texte, $start_with, $pos) : $pos)) !== false |
|
| 41 | + and preg_match($preg, $texte, $r, PREG_OFFSET_CAPTURE, $next)) { |
|
| 42 | + |
|
| 43 | + $found_pos = $r[0][1]; |
|
| 44 | + $found_length = strlen($r[0][0]); |
|
| 45 | + $match = [ |
|
| 46 | + 'raw' => $r[0][0], |
|
| 47 | + 'match' => array_column($r, 0), |
|
| 48 | + 'pos' => $found_pos, |
|
| 49 | + 'length' => $found_length |
|
| 50 | + ]; |
|
| 51 | + |
|
| 52 | + $collection[] = $match; |
|
| 53 | + |
|
| 54 | + if ($max_items and count($collection) === $max_items) { |
|
| 55 | + break; |
|
| 56 | + } |
|
| 57 | + |
|
| 58 | + $pos = $match['pos'] + $match['length']; |
|
| 59 | + } |
|
| 60 | + |
|
| 61 | + return $collection; |
|
| 62 | + } |
|
| 63 | + |
|
| 64 | + /** |
|
| 65 | + * Sanitizer une collection d'occurences |
|
| 66 | + * |
|
| 67 | + * @param array $collection |
|
| 68 | + * @param string $sanitize_callback |
|
| 69 | + * @return array |
|
| 70 | + */ |
|
| 71 | + protected function sanitizer_collection(array $collection, string $sanitize_callback): array { |
|
| 72 | + foreach ($collection as &$c) { |
|
| 73 | + $c['raw'] = $sanitize_callback($c['raw']); |
|
| 74 | + } |
|
| 75 | + |
|
| 76 | + return $collection; |
|
| 77 | + } |
|
| 78 | + |
|
| 79 | + /** |
|
| 80 | + * @param string $texte |
|
| 81 | + * @param array $options |
|
| 82 | + * @return array |
|
| 83 | + */ |
|
| 84 | + public function collecter(string $texte, array $options = []): array { |
|
| 85 | + $collection = []; |
|
| 86 | + return $collection; |
|
| 87 | + } |
|
| 88 | + |
|
| 89 | + public function detecter($texte): bool { |
|
| 90 | + if (!empty($this->markId) and strpos($texte, $this->markId) !== false) { |
|
| 91 | + return true; |
|
| 92 | + } |
|
| 93 | + return !empty($this->collecter($texte, ['detecter_presence' => true])); |
|
| 94 | + } |
|
| 95 | + |
|
| 96 | + /** |
|
| 97 | + * Echapper les occurences de la collecte par un texte neutre du point de vue HTML |
|
| 98 | + * |
|
| 99 | + * @see retablir() |
|
| 100 | + * @param string $texte |
|
| 101 | + * @param array $options |
|
| 102 | + * string $sanitize_callback |
|
| 103 | + * @return array |
|
| 104 | + * texte, marqueur utilise pour echapper les modeles |
|
| 105 | + */ |
|
| 106 | + public function echapper(string $texte, array $options = []): string { |
|
| 107 | + if (!function_exists('creer_uniqid')) { |
|
| 108 | + include_spip('inc/acces'); |
|
| 109 | + } |
|
| 110 | + |
|
| 111 | + $collection = $this->collecter($texte, $options); |
|
| 112 | + if (!empty($options['sanitize_callback']) and is_callable($options['sanitize_callback'])) { |
|
| 113 | + $collection = $this->sanitizer_collection($collection, $options['sanitize_callback']); |
|
| 114 | + } |
|
| 115 | + |
|
| 116 | + if (!empty($collection)) { |
|
| 117 | + if (empty($this->markId)) { |
|
| 118 | + // generer un marqueur qui n'existe pas dans le texte |
|
| 119 | + do { |
|
| 120 | + $this->markId = substr(md5(uniqid(static::class, 1)), 0, 7); |
|
| 121 | + $this->markId = "@|".static::$markPrefix . $this->markId . "|"; |
|
| 122 | + } while (strpos($texte, $this->markId) !== false); |
|
| 123 | + } |
|
| 124 | + |
|
| 125 | + $offset_pos = 0; |
|
| 126 | + foreach ($collection as $c) { |
|
| 127 | + $rempl = $this->markId . base64_encode($c['raw']) . '|@'; |
|
| 128 | + $texte = substr_replace($texte, $rempl, $c['pos'] + $offset_pos, $c['length']); |
|
| 129 | + $offset_pos += strlen($rempl) - $c['length']; |
|
| 130 | + } |
|
| 131 | + } |
|
| 132 | + |
|
| 133 | + return $texte; |
|
| 134 | + } |
|
| 135 | + |
|
| 136 | + |
|
| 137 | + /** |
|
| 138 | + * Retablir les occurences échappées précédemment |
|
| 139 | + * |
|
| 140 | + * @see echapper() |
|
| 141 | + * @param string $texte |
|
| 142 | + * @return string |
|
| 143 | + */ |
|
| 144 | + function retablir(string $texte): string { |
|
| 145 | + |
|
| 146 | + if (!empty($this->markId)) { |
|
| 147 | + $lm = strlen($this->markId); |
|
| 148 | + $pos = 0; |
|
| 149 | + while ( |
|
| 150 | + ($p = strpos($texte, $this->markId, $pos)) !== false |
|
| 151 | + and $end = strpos($texte, '|@', $p + $lm) |
|
| 152 | + ) { |
|
| 153 | + $base64 = substr($texte, $p + $lm, $end - ($p + $lm)); |
|
| 154 | + if ($c = base64_decode($base64, true)) { |
|
| 155 | + $texte = substr_replace($texte, $c, $p, $end + 2 - $p); |
|
| 156 | + $pos = $p + strlen($c); |
|
| 157 | + } |
|
| 158 | + else { |
|
| 159 | + $pos = $end; |
|
| 160 | + } |
|
| 161 | + } |
|
| 162 | + } |
|
| 163 | + |
|
| 164 | + return $texte; |
|
| 165 | + } |
|
| 166 | 166 | |
| 167 | 167 | } |
@@ -118,13 +118,13 @@ |
||
| 118 | 118 | // generer un marqueur qui n'existe pas dans le texte |
| 119 | 119 | do { |
| 120 | 120 | $this->markId = substr(md5(uniqid(static::class, 1)), 0, 7); |
| 121 | - $this->markId = "@|".static::$markPrefix . $this->markId . "|"; |
|
| 121 | + $this->markId = "@|".static::$markPrefix.$this->markId."|"; |
|
| 122 | 122 | } while (strpos($texte, $this->markId) !== false); |
| 123 | 123 | } |
| 124 | 124 | |
| 125 | 125 | $offset_pos = 0; |
| 126 | 126 | foreach ($collection as $c) { |
| 127 | - $rempl = $this->markId . base64_encode($c['raw']) . '|@'; |
|
| 127 | + $rempl = $this->markId.base64_encode($c['raw']).'|@'; |
|
| 128 | 128 | $texte = substr_replace($texte, $rempl, $c['pos'] + $offset_pos, $c['length']); |
| 129 | 129 | $offset_pos += strlen($rempl) - $c['length']; |
| 130 | 130 | } |
@@ -154,8 +154,7 @@ |
||
| 154 | 154 | if ($c = base64_decode($base64, true)) { |
| 155 | 155 | $texte = substr_replace($texte, $c, $p, $end + 2 - $p); |
| 156 | 156 | $pos = $p + strlen($c); |
| 157 | - } |
|
| 158 | - else { |
|
| 157 | + } else { |
|
| 159 | 158 | $pos = $end; |
| 160 | 159 | } |
| 161 | 160 | } |
@@ -23,115 +23,115 @@ |
||
| 23 | 23 | */ |
| 24 | 24 | class Idiomes extends AbstractCollecteur { |
| 25 | 25 | |
| 26 | - protected static string $markPrefix = 'IDIOME'; |
|
| 27 | - |
|
| 28 | - /** |
|
| 29 | - * La preg pour découper et collecter les modèles |
|
| 30 | - * @var string |
|
| 31 | - */ |
|
| 32 | - protected string $preg_idiome; |
|
| 33 | - |
|
| 34 | - public function __construct(?string $preg = null) { |
|
| 35 | - |
|
| 36 | - $this->preg_idiome = ($preg ?: '@<:(?:([a-z0-9_]+):)?([a-z0-9_]+):>@isS'); |
|
| 37 | - } |
|
| 38 | - |
|
| 39 | - /** |
|
| 40 | - * Sanitizer une collection d'occurences d'idiomes : on ne fait rien |
|
| 41 | - * |
|
| 42 | - * @param array $collection |
|
| 43 | - * @param string $sanitize_callback |
|
| 44 | - * @return array |
|
| 45 | - */ |
|
| 46 | - protected function sanitizer_collection(array $collection, string $sanitize_callback): array { |
|
| 47 | - |
|
| 48 | - return $collection; |
|
| 49 | - } |
|
| 50 | - |
|
| 51 | - |
|
| 52 | - /** |
|
| 53 | - * @param string $texte |
|
| 54 | - * @param array $options |
|
| 55 | - * bool $collecter_liens |
|
| 56 | - * @return array |
|
| 57 | - */ |
|
| 58 | - public function collecter(string $texte, array $options = []): array { |
|
| 59 | - if (!$texte) { |
|
| 60 | - return []; |
|
| 61 | - } |
|
| 62 | - |
|
| 63 | - // collecter les matchs de la preg |
|
| 64 | - $idiomes = $this->collecteur($texte, '', '<:', $this->preg_idiome, empty($options['detecter_presence']) ? 0 : 1); |
|
| 65 | - |
|
| 66 | - // si on veut seulement detecter la présence, on peut retourner tel quel |
|
| 67 | - if (empty($options['detecter_presence'])) { |
|
| 68 | - |
|
| 69 | - $pos_prev = 0; |
|
| 70 | - foreach ($idiomes as $k => &$idiome) { |
|
| 71 | - |
|
| 72 | - $idiome['module'] = $idiome['match'][1]; |
|
| 73 | - $idiome['chaine'] = $idiome['match'][2]; |
|
| 74 | - } |
|
| 75 | - } |
|
| 76 | - |
|
| 77 | - return $idiomes; |
|
| 78 | - } |
|
| 79 | - |
|
| 80 | - /** |
|
| 81 | - * Traiter les idiomes d'un texte |
|
| 82 | - * |
|
| 83 | - * @uses inc_traduire_dist() |
|
| 84 | - * @uses code_echappement() |
|
| 85 | - * @uses echappe_retour() |
|
| 86 | - * |
|
| 87 | - * @param string $texte |
|
| 88 | - * @param array $options |
|
| 89 | - * ?string $lang |
|
| 90 | - * ?bool echappe_span |
|
| 91 | - * @return string |
|
| 92 | - */ |
|
| 93 | - public function traiter(string $texte, array $options) { |
|
| 94 | - static $traduire; |
|
| 95 | - if ($texte) { |
|
| 96 | - |
|
| 97 | - $idiomes = $this->collecter($texte); |
|
| 98 | - if (!empty($idiomes)) { |
|
| 99 | - $lang = $options['lang'] ?? $GLOBALS['spip_lang']; |
|
| 100 | - $echappe_span = $options['echappe_span'] ?? false; |
|
| 101 | - |
|
| 102 | - if (is_null($traduire)) { |
|
| 103 | - $traduire = charger_fonction('traduire', 'inc'); |
|
| 104 | - include_spip('inc/lang'); |
|
| 105 | - } |
|
| 106 | - |
|
| 107 | - $offset_pos = 0; |
|
| 108 | - foreach ($idiomes as $idiome) { |
|
| 109 | - |
|
| 110 | - $cle = ($idiome['module'] ? $idiome['module'] . ':' : '') . $idiome['chaine']; |
|
| 111 | - $desc = $traduire($cle, $lang, true); |
|
| 112 | - $l = $desc->langue; |
|
| 113 | - |
|
| 114 | - // si pas de traduction, on laissera l'écriture de l'idiome entier dans le texte. |
|
| 115 | - if (strlen($desc->texte ?? '')) { |
|
| 116 | - $trad = code_echappement($desc->texte, 'idiome', false); |
|
| 117 | - if ($l !== $lang) { |
|
| 118 | - $trad = str_replace("'", '"', inserer_attribut($trad, 'lang', $l)); |
|
| 119 | - } |
|
| 120 | - if (lang_dir($l) !== lang_dir($lang)) { |
|
| 121 | - $trad = str_replace("'", '"', inserer_attribut($trad, 'dir', lang_dir($l))); |
|
| 122 | - } |
|
| 123 | - if (!$echappe_span) { |
|
| 124 | - $trad = echappe_retour($trad, 'idiome'); |
|
| 125 | - } |
|
| 126 | - $texte = substr_replace($texte, $trad, $idiome['pos'] + $offset_pos, $idiome['length']); |
|
| 127 | - $offset_pos += strlen($trad) - $idiome['length']; |
|
| 128 | - } |
|
| 129 | - |
|
| 130 | - } |
|
| 131 | - } |
|
| 132 | - } |
|
| 133 | - |
|
| 134 | - return $texte; |
|
| 135 | - } |
|
| 26 | + protected static string $markPrefix = 'IDIOME'; |
|
| 27 | + |
|
| 28 | + /** |
|
| 29 | + * La preg pour découper et collecter les modèles |
|
| 30 | + * @var string |
|
| 31 | + */ |
|
| 32 | + protected string $preg_idiome; |
|
| 33 | + |
|
| 34 | + public function __construct(?string $preg = null) { |
|
| 35 | + |
|
| 36 | + $this->preg_idiome = ($preg ?: '@<:(?:([a-z0-9_]+):)?([a-z0-9_]+):>@isS'); |
|
| 37 | + } |
|
| 38 | + |
|
| 39 | + /** |
|
| 40 | + * Sanitizer une collection d'occurences d'idiomes : on ne fait rien |
|
| 41 | + * |
|
| 42 | + * @param array $collection |
|
| 43 | + * @param string $sanitize_callback |
|
| 44 | + * @return array |
|
| 45 | + */ |
|
| 46 | + protected function sanitizer_collection(array $collection, string $sanitize_callback): array { |
|
| 47 | + |
|
| 48 | + return $collection; |
|
| 49 | + } |
|
| 50 | + |
|
| 51 | + |
|
| 52 | + /** |
|
| 53 | + * @param string $texte |
|
| 54 | + * @param array $options |
|
| 55 | + * bool $collecter_liens |
|
| 56 | + * @return array |
|
| 57 | + */ |
|
| 58 | + public function collecter(string $texte, array $options = []): array { |
|
| 59 | + if (!$texte) { |
|
| 60 | + return []; |
|
| 61 | + } |
|
| 62 | + |
|
| 63 | + // collecter les matchs de la preg |
|
| 64 | + $idiomes = $this->collecteur($texte, '', '<:', $this->preg_idiome, empty($options['detecter_presence']) ? 0 : 1); |
|
| 65 | + |
|
| 66 | + // si on veut seulement detecter la présence, on peut retourner tel quel |
|
| 67 | + if (empty($options['detecter_presence'])) { |
|
| 68 | + |
|
| 69 | + $pos_prev = 0; |
|
| 70 | + foreach ($idiomes as $k => &$idiome) { |
|
| 71 | + |
|
| 72 | + $idiome['module'] = $idiome['match'][1]; |
|
| 73 | + $idiome['chaine'] = $idiome['match'][2]; |
|
| 74 | + } |
|
| 75 | + } |
|
| 76 | + |
|
| 77 | + return $idiomes; |
|
| 78 | + } |
|
| 79 | + |
|
| 80 | + /** |
|
| 81 | + * Traiter les idiomes d'un texte |
|
| 82 | + * |
|
| 83 | + * @uses inc_traduire_dist() |
|
| 84 | + * @uses code_echappement() |
|
| 85 | + * @uses echappe_retour() |
|
| 86 | + * |
|
| 87 | + * @param string $texte |
|
| 88 | + * @param array $options |
|
| 89 | + * ?string $lang |
|
| 90 | + * ?bool echappe_span |
|
| 91 | + * @return string |
|
| 92 | + */ |
|
| 93 | + public function traiter(string $texte, array $options) { |
|
| 94 | + static $traduire; |
|
| 95 | + if ($texte) { |
|
| 96 | + |
|
| 97 | + $idiomes = $this->collecter($texte); |
|
| 98 | + if (!empty($idiomes)) { |
|
| 99 | + $lang = $options['lang'] ?? $GLOBALS['spip_lang']; |
|
| 100 | + $echappe_span = $options['echappe_span'] ?? false; |
|
| 101 | + |
|
| 102 | + if (is_null($traduire)) { |
|
| 103 | + $traduire = charger_fonction('traduire', 'inc'); |
|
| 104 | + include_spip('inc/lang'); |
|
| 105 | + } |
|
| 106 | + |
|
| 107 | + $offset_pos = 0; |
|
| 108 | + foreach ($idiomes as $idiome) { |
|
| 109 | + |
|
| 110 | + $cle = ($idiome['module'] ? $idiome['module'] . ':' : '') . $idiome['chaine']; |
|
| 111 | + $desc = $traduire($cle, $lang, true); |
|
| 112 | + $l = $desc->langue; |
|
| 113 | + |
|
| 114 | + // si pas de traduction, on laissera l'écriture de l'idiome entier dans le texte. |
|
| 115 | + if (strlen($desc->texte ?? '')) { |
|
| 116 | + $trad = code_echappement($desc->texte, 'idiome', false); |
|
| 117 | + if ($l !== $lang) { |
|
| 118 | + $trad = str_replace("'", '"', inserer_attribut($trad, 'lang', $l)); |
|
| 119 | + } |
|
| 120 | + if (lang_dir($l) !== lang_dir($lang)) { |
|
| 121 | + $trad = str_replace("'", '"', inserer_attribut($trad, 'dir', lang_dir($l))); |
|
| 122 | + } |
|
| 123 | + if (!$echappe_span) { |
|
| 124 | + $trad = echappe_retour($trad, 'idiome'); |
|
| 125 | + } |
|
| 126 | + $texte = substr_replace($texte, $trad, $idiome['pos'] + $offset_pos, $idiome['length']); |
|
| 127 | + $offset_pos += strlen($trad) - $idiome['length']; |
|
| 128 | + } |
|
| 129 | + |
|
| 130 | + } |
|
| 131 | + } |
|
| 132 | + } |
|
| 133 | + |
|
| 134 | + return $texte; |
|
| 135 | + } |
|
| 136 | 136 | |
| 137 | 137 | } |
@@ -107,7 +107,7 @@ |
||
| 107 | 107 | $offset_pos = 0; |
| 108 | 108 | foreach ($idiomes as $idiome) { |
| 109 | 109 | |
| 110 | - $cle = ($idiome['module'] ? $idiome['module'] . ':' : '') . $idiome['chaine']; |
|
| 110 | + $cle = ($idiome['module'] ? $idiome['module'].':' : '').$idiome['chaine']; |
|
| 111 | 111 | $desc = $traduire($cle, $lang, true); |
| 112 | 112 | $l = $desc->langue; |
| 113 | 113 | |