<?php
return [
    // General
    'app_name'          => 'Plenvo',
    'save'              => 'Enregistrer',
    'cancel'            => 'Annuler',
    'delete'            => 'Supprimer',
    'edit'              => 'Modifier',
    'create'            => 'Créer',
    'created_at_label'  => 'Créé',
    'updated_at_label'  => 'Modifié',
    'back'              => 'Retour',
    'search'            => 'Rechercher',
    'filter'            => 'Filtrer',
    'actions'           => 'Actions',
    'yes'               => 'Oui',
    'no'                => 'Non',
    'confirm_delete'    => 'Vraiment supprimer ?',
    'loading'           => 'Chargement...',
    'error'             => 'Erreur',
    'success'           => 'Succès',
    'warning'           => 'Avertissement',
    'required_field'    => 'Requis',
    'optional'          => 'Optionnel',
    'none'              => 'Aucun',
    'all'               => 'Tous',
    'close'             => 'Fermer',
    'add'               => 'Ajouter',
    'remove'            => 'Retirer',
    'settings'          => 'Paramètres',
    'hello'             => 'Bonjour',
    'just_now'          => 'À l\'instant',
    'minutes_ago'       => 'minutes',
    'hours_ago'         => 'heures',
    'days_ago'          => 'jours',
    'view_task'         => 'Voir la tâche',
    'access_denied'     => 'Accès refusé',
    'not_found'         => 'Non trouvé',

    // Auth
    'login'             => 'Connexion',
    'register'          => 'S\'inscrire',
    'logout'            => 'Déconnexion',
    'email'             => 'E-mail',
    'password'          => 'Mot de passe',
    'password_confirm'  => 'Confirmer le mot de passe',
    'login_title'       => 'Bienvenue',
    'login_subtitle'    => 'Connectez-vous à votre compte',
    'login_error'       => 'E-mail ou mot de passe invalide',
    'login_rate_limited'=> 'Trop de tentatives de connexion. Veuillez attendre 15 minutes.',
    'login_account_locked' => 'Ce compte est temporairement verrouillé après plusieurs tentatives de connexion échouées. Veuillez réessayer plus tard ou réinitialiser votre mot de passe.',
    'session_expired'   => 'Votre session a expiré. Veuillez vous reconnecter.',
    'password_pwned'    => 'Ce mot de passe apparaît dans des fuites de données connues. Veuillez en choisir un autre.',

    // Security settings (BSI APP.3.1)
    'security_settings'         => 'Politiques de sécurité',
    'sec_lockout_title'         => 'Verrouillage du compte après échecs',
    'sec_lockout_desc'          => 'Verrouille le compte après plusieurs mots de passe incorrects. Les comptes avec authentification à deux facteurs active sont exemptés.',
    'sec_lockout_enable'        => 'Activer le verrouillage du compte',
    'sec_lockout_threshold'     => 'Tentatives échouées avant verrouillage',
    'sec_lockout_threshold_hint'=> 'Recommandé : 5 (BSI ORP.4.A8).',
    'sec_lockout_duration'      => 'Durée de verrouillage (minutes)',
    'sec_lockout_duration_hint' => 'Combien de temps le compte reste verrouillé une fois le seuil atteint.',
    'sec_session_title'         => 'Délais de session',
    'sec_session_desc'          => 'Termine automatiquement les sessions pour protéger les navigateurs compromis (BSI APP.3.1.A15). 0 = désactivé.',
    'sec_session_idle'          => 'Délai d\'inactivité (minutes)',
    'sec_session_idle_hint'     => 'Par défaut : 30. La session se termine après ce temps sans activité.',
    'sec_session_absolute'      => 'Durée maximale de session (heures)',
    'sec_session_absolute_hint' => 'Par défaut : 8. Force une re-authentification après ce temps total.',
    'sec_pwned_title'           => 'Bloquer les mots de passe déjà divulgués lors de la définition',
    'sec_pwned_enable'          => 'Vérifier les mots de passe par rapport à la base de fuites HIBP lors de leur définition ou modification',
    'sec_pwned_hint'            => 'Empêche uniquement qu\'un mot de passe figurant dans une fuite publiquement connue soit nouvellement attribué (inscription, changement, réinitialisation, création par un administrateur). Les mots de passe existants NE sont PAS revérifiés rétroactivement — HIBP fonctionne sur du texte clair, la BD ne contient qu\'un hash bcrypt. Seul un préfixe SHA-1 de 5 caractères est transmis, jamais le mot de passe lui-même (k-anonymity).',
    'login_btn'         => 'Connexion',
    'remember_me'       => 'Rester connecté',

    // Install
    'install_title'     => 'Installation',
    'install_subtitle'  => 'Créez votre compte administrateur',
    'install_btn'       => 'Terminer l\'installation',
    'install_success'   => 'Installation réussie',

    // System requirements check
    'sys_requirements'          => 'Configuration requise',
    'sys_req_all_ok'            => 'Toutes les conditions sont remplies',
    'sys_req_optional_missing'  => 'Fonctionnalités optionnelles manquantes',
    'sys_req_critical_missing'  => 'Conditions critiques manquantes',
    'sys_req_optional'          => 'optionnel',
    'sys_req_write_permission'  => 'Droit d\'écriture sur le répertoire du projet',
    'sys_req_curl_detail'       => 'Assistant IA & vérification des mises à jour',
    'sys_req_ldap_detail'       => 'Plugin d\'authentification LDAP / AD',
    'sys_req_zip_detail'        => 'Mises à jour en un clic',

    // Health check (admin settings)
    'health_check'           => 'Vérification système',
    'hc_refresh'             => 'Actualiser',
    'hc_loading'             => 'Vérification en cours…',
    'hc_cron'                => 'Cron Job',
    'hc_cron_never'          => 'Jamais exécuté – le cron est-il configuré ?',
    'hc_cron_ok'             => 'Exécuté il y a :min min',
    'hc_cron_late'           => 'Il y a :min min – peut ne pas s\'exécuter chaque minute',
    'hc_cron_stale'          => 'Il y a :h heures – le cron semble arrêté',
    'hc_probe_db'            => 'Fichier de base de données non accessible publiquement',
    'hc_probe_uploads'       => 'Répertoire d\'upload non accessible publiquement',
    'hc_probe_exposed'       => 'ACCESSIBLE PUBLIQUEMENT – vérifiez .htaccess immédiatement !',
    'hc_probe_blocked'       => 'Bloqué (HTTP :code)',
    'hc_probe_no_conn'       => 'Pas de connexion – l\'URL de l\'app est-elle configurée ?',
    'hc_probe_unexpected'    => 'Statut HTTP inattendu : :code',
    'hc_no_app_url'          => 'URL de l\'app non configurée',
    'hc_htaccess_data'       => '.htaccess présent dans data/',
    'hc_htaccess_uploads'    => '.htaccess présent dans uploads/',
    'hc_file_present'        => 'Fichier présent',
    'hc_file_missing'        => 'Fichier manquant – créez .htaccess ou relancez l\'assistant d\'installation',
    'admin_username'    => 'Prénom et nom',
    'admin_email'       => 'E-mail administrateur',
    'admin_password'    => 'Mot de passe administrateur',

    // Navigation
    'dashboard'         => 'Tableau de bord',
    'projects'          => 'Projets',
    'my_tasks'          => 'Mes tâches',
    'notifications'     => 'Notifications',
    'admin'             => 'Admin',
    'profile'           => 'Profil',
    'preferences'       => 'Préférences',
    'plugins'           => 'Plugins',
    'help'              => 'Aide',

    // Dashboard
    'welcome_back'      => 'Bon retour',
    'active_projects'   => 'Projets actifs',
    'open_tasks'        => 'Tâches ouvertes',
    'done_tasks'        => 'Tâches terminées',
    'all_tasks'         => 'Toutes les tâches',
    'my_tasks_empty'    => 'Aucune tâche ne vous est assignée.',
    'reset'             => 'Réinitialiser',
    'today'             => 'Aujourd\'hui',
    'due_today'         => 'Échéance aujourd\'hui',
    'overdue'           => 'En retard',
    'recent_activity'   => 'Activité récente',
    'my_open_tasks'     => 'Mes tâches ouvertes',
    'no_tasks'          => 'Aucune tâche',
    'no_activity'       => 'Aucune activité',

    // Projects
    'project'           => 'Projet',
    'new_project'       => 'Nouveau projet',
    'project_name'      => 'Nom du projet',
    'project_desc'      => 'Description',
    'project_color'     => 'Couleur',
    'project_status'    => 'Statut',
    'project_owner'     => 'Propriétaire',
    'project_members'   => 'Membres',
    'project_settings'  => 'Paramètres du projet',
    'default_view'      => 'Vue par défaut',
    'required_fields'   => 'Champs requis pour les tâches',
    'no_projects'       => 'Pas encore de projets',
    'create_first'      => 'Créez votre premier projet',
    'archived'          => 'Archivé',
    'active'            => 'Actif',
    'archive_project'   => 'Archiver le projet',
    'archive_project_desc' => 'Le projet sera masqué pour tous les membres.',
    'delete_project_desc'  => 'Cette action est irréversible. Toutes les tâches seront supprimées.',
    'delete_project_confirm' => 'Vraiment supprimer le projet ? Cette action est irréversible !',
    'restore_project'   => 'Restaurer',
    'delete_project'    => 'Supprimer le projet',
    'project_created'   => 'Projet créé',
    'project_updated'   => 'Projet mis à jour',
    'project_deleted'   => 'Projet supprimé',

    // Views
    'kanban'            => 'Kanban',
    'list'              => 'Liste',
    'gantt'             => 'Gantt',
    'add_status'        => 'Ajouter un statut',
    'status_name'       => 'Nom du statut',
    'mark_as_done'      => 'Marquer comme terminé',

    // Tasks
    'task'              => 'Tâche',
    'tasks'             => 'Tâches',
    'new_task'          => 'Nouvelle tâche',
    'task_title'        => 'Titre',
    'task_desc'         => 'Description',
    'description'       => 'Description',
    'task_status'       => 'Statut',
    'task_priority'     => 'Priorité',
    'assigned_to'       => 'Assigné à',
    'external_short'           => 'Ext.',
    'external_name_placeholder'=> 'Entrez le nom...',
    'created_by'        => 'Créé par',
    'due_date'          => 'Date d\'échéance',
    'start_date'        => 'Date de début',
    'labels'            => 'Étiquettes',
    'attachments'       => 'Pièces jointes',
    'upload_file'       => 'Télécharger un fichier',
    'predecessors'      => 'Prédécesseurs',
    'successors'        => 'Successeurs',
    'no_predecessors'   => 'Aucun prédécesseur',
    'no_successors'     => 'Aucun successeur',
    'predecessors_hint' => 'Sélection multiple avec Ctrl/Cmd + clic',
    'task_created'      => 'Tâche créée',
    'task_updated'      => 'Tâche mise à jour',
    'task_deleted'      => 'Tâche supprimée',
    'file_uploaded'     => 'Fichier téléchargé',
    'no_tasks_here'     => 'Aucune tâche dans ce statut',
    'drag_here'         => 'Glisser ici',

    // Priority
    'priority'          => 'Priorité',
    'priority_low'      => 'Basse',
    'priority_medium'   => 'Moyenne',
    'priority_high'     => 'Haute',
    'priority_urgent'   => 'Urgente',

    // Comments
    'comments'          => 'Commentaires',
    'add_comment'       => 'Ajouter un commentaire',
    'comment_placeholder' => 'Écrivez un commentaire...',
    'no_comments'       => 'Pas encore de commentaires',
    'comment_posted'    => 'Commentaire publié',
    'edited'            => 'modifié',

    // Members
    'members'           => 'Membres',
    'add_member'        => 'Ajouter un membre',
    'member_role'       => 'Rôle',
    'role_owner'        => 'Propriétaire',
    'role_manager'      => 'Manager',
    'role_member'       => 'Membre',
    'role_guest'        => 'Invité',
    'all_users_are_members' => 'Tous les utilisateurs sont déjà membres de ce projet.',
    'member_added'      => 'Membre ajouté',
    'member_removed'    => 'Membre retiré',
    'member_updated'    => 'Membre mis à jour',
    'last_owner_error'  => 'Le projet doit avoir au moins un propriétaire.',
    'select_user'       => 'Sélectionner un utilisateur',

    // Admin
    'users'             => 'Utilisateurs',
    'new_user'          => 'Nouvel utilisateur',
    'username'          => 'Prénom et nom',
    'user_role'         => 'Rôle système',
    'role_admin'        => 'Administrateur',
    'role_user'         => 'Utilisateur',
    'user_active'       => 'Actif',
    'user_inactive'     => 'Inactif',
    'user_created'      => 'Utilisateur créé',
    'user_updated'      => 'Utilisateur mis à jour',
    'user_deleted'      => 'Utilisateur supprimé',
    'remove_from_group'         => 'Retirer du groupe',
    'user_removed_from_group'   => 'Utilisateur retiré du groupe',
    'confirm_remove_from_group' => 'Vraiment retirer cet utilisateur du groupe ?',
    'last_login'        => 'Dernière connexion',
    'never'             => 'Jamais',
    'system_settings'   => 'Paramètres système',
    'nav_support'       => 'Support',

    // Groups / Multi-tenancy
    'groups'                => 'Groupes',
    'group'                 => 'Groupe',
    'new_group'             => 'Nouveau groupe',
    'group_name'            => 'Nom du groupe',
    'group_description'     => 'Description',
    'group_admin'           => 'Admin du groupe',
    'group_member'          => 'Membre',
    'no_group'              => 'Aucun groupe',
    'group_created'         => 'Groupe créé',
    'group_updated'         => 'Groupe mis à jour',
    'group_deleted'         => 'Groupe supprimé',
    'group_management'      => 'Gestion des groupes',
    'group_members'         => 'Membres du groupe',
    'group_role'            => 'Rôle dans le groupe',
    'assign_group'          => 'Assigner un groupe',
    'unassigned'            => 'Non assigné',
    'no_groups'             => 'Pas encore de groupes',
    'no_group_members'      => 'Aucun membre dans ce groupe',
    'language'          => 'Langue',
    'theme'             => 'Thème',
    'theme_light'       => 'Par défaut',
    'theme_dark'        => 'Sombre',
    'theme_sepia'       => 'Sépia',
    'theme_midnight'    => 'Minuit',
    'theme_ocean'       => 'Océan',
    'theme_matrix'      => 'Matrix',
    'theme_bluescreen'  => 'Écran bleu',
    'theme_forest'      => 'Forêt',
    'theme_crimson'     => 'Cramoisi',
    'theme_slate'       => 'Ardoise',

    // SMTP
    'smtp_settings'     => 'Paramètres SMTP',
    'smtp_host'         => 'Serveur SMTP',
    'smtp_port'         => 'Port',
    'smtp_username'     => 'Nom d\'utilisateur',
    'smtp_password'     => 'Mot de passe',
    'smtp_encryption'   => 'Chiffrement',
    'smtp_from_email'   => 'E-mail expéditeur',
    'smtp_from_name'    => 'Nom expéditeur',
    'smtp_test'         => 'Tester la connexion',
    'smtp_test_ok'      => 'Connexion SMTP réussie',
    'smtp_test_fail'    => 'Connexion SMTP échouée',
    'smtp_none'         => 'Aucun',
    'smtp_ssl'          => 'SSL (Port 465)',
    'smtp_tls'          => 'TLS/STARTTLS (Port 587)',
    'notifications_enabled' => 'Notifications actives (e-mail + in-app)',
    'notifications_enabled_hint' => 'Actif : les notifications in-app sont créées. Si un fournisseur de messagerie est configuré ci-dessous, les mêmes notifications sont également envoyées par e-mail. Inactif : ni les notifications in-app ni les e-mails ne sont produits, quelle que soit la configuration de messagerie.',
    'app_settings'      => 'Paramètres de l\'application',
    'app_name_label'    => 'Nom de l\'application',
    'app_url'           => 'URL du serveur',
    'app_url_hint'      => 'URL de base de cette installation, ex. https://example.com – utilisée dans les liens e-mail.',
    'privacy_url'       => 'Politique de confidentialité (URL)',
    'imprint_url'       => 'Mentions légales (URL)',
    'privacy_policy'    => 'Politique de confidentialité',
    'imprint'           => 'Mentions légales',
    'allow_registration'              => 'Autoriser l\'inscription',
    'registration_domains'            => 'Domaines e-mail autorisés',
    'registration_domains_placeholder'=> 'exemple.com, masociete.org',
    'registration_domains_hint'       => 'Un domaine par ligne ou séparés par des virgules. Laisser vide pour autoriser tous les domaines.',

    // Register
    'register_title'          => 'Créer un compte',
    'register_subtitle'       => 'Inscrivez-vous pour un nouveau compte',
    'register_btn'            => 'Créer le compte',
    'register_link'           => 'Créer un nouveau compte',
    'register_success'        => 'Compte créé. Veuillez vous connecter.',
    'register_username_short' => 'Le nom doit contenir au moins 3 caractères',
    'register_email_invalid'  => 'Adresse e-mail invalide',
    'register_password_short' => 'Le mot de passe doit contenir au moins 8 caractères',
    'register_duplicate'      => 'Cette adresse e-mail est déjà utilisée',
    'register_domain_not_allowed' => 'L\'inscription n\'est pas autorisée pour ce domaine e-mail',

    // Email verification
    'verify_email_subject'  => 'Vérifiez votre adresse e-mail',
    'verify_email_body'     => 'Veuillez vérifier votre adresse e-mail en cliquant sur le lien ci-dessous :',
    'verify_email_expires'  => 'Ce lien est valide pendant 24 heures.',
    'verify_email_sent'     => 'Compte créé. Veuillez vérifier votre boîte de réception et confirmer votre adresse e-mail.',
    'verify_email_required' => 'Veuillez d\'abord vérifier votre adresse e-mail. Consultez votre boîte de réception.',
    'verify_token_invalid'  => 'Lien de vérification invalide ou expiré.',
    'verify_email_success'  => 'Adresse e-mail vérifiée. Vous pouvez maintenant vous connecter.',

    // Profile
    'my_profile'        => 'Mon profil',
    'change_password'   => 'Changer le mot de passe',
    'current_password'  => 'Mot de passe actuel',
    'new_password'      => 'Nouveau mot de passe',
    'profile_updated'   => 'Profil mis à jour',
    'delete_account'         => 'Supprimer le compte',
    'delete_account_hint'    => 'Cette action est irréversible. Votre compte et toutes vos données personnelles seront définitivement supprimés.',
    'delete_account_confirm' => 'Vraiment supprimer définitivement votre compte ?',
    'account_deleted'        => 'Le compte a été supprimé.',
    'password_changed'  => 'Mot de passe modifié',
    'password_wrong'    => 'Le mot de passe actuel est incorrect',
    'password_mismatch' => 'Les mots de passe ne correspondent pas',

    // Notifications
    'mark_all_read'     => 'Tout marquer comme lu',
    'no_notifications'  => 'Aucune notification',

    // TOTP / 2FA
    'totp_settings'       => 'Authentification à deux facteurs',
    'totp_setup'          => 'Configurer 2FA',
    'totp_setup_desc'     => 'Protégez votre compte avec un mot de passe à usage unique (TOTP). Vous avez besoin d\'une application d\'authentification (ex. Google Authenticator, Aegis ou Bitwarden).',
    'totp_active'         => 'Actif',
    'totp_inactive'       => 'Inactif',
    'totp_active_desc'    => 'Votre application d\'authentification est active comme second facteur. Entrez un code actuel pour la désactiver. Vous pouvez également activer la vérification par e-mail comme second facteur supplémentaire.',
    'totp_scan_desc'      => 'Scannez le code QR avec votre application d\'authentification, puis entrez le code affiché pour confirmer.',
    'totp_manual_key'     => 'Clé manuelle',
    'totp_copy'           => 'Copier',
    'totp_confirm_code'   => 'Code de confirmation',
    'totp_confirm_hint'   => 'Entrez le code à 6 chiffres de votre application d\'authentification.',
    'totp_enable'         => 'Activer 2FA',
    'totp_enabled_ok'     => 'Authentification à deux facteurs activée',
    'totp_disable'        => 'Désactiver 2FA',
    'totp_disable_hint'   => 'Entrez un code actuel de votre application d\'authentification.',
    'totp_disabled_ok'    => 'Authentification à deux facteurs désactivée',
    'totp_invalid'        => 'Code invalide. Veuillez réessayer.',
    'totp_verify_title'   => 'Authentification à deux facteurs',
    'totp_verify_subtitle'=> 'Entrez le code de votre application d\'authentification.',
    'totp_verify_btn'     => 'Vérifier',
    'totp_code'           => 'Code d\'authentification',
    'totp_enforce'        => 'Imposer TOTP globalement',
    'totp_enforce_hint'   => 'Tous les utilisateurs sans TOTP actif seront obligés de le configurer à leur prochaine connexion.',
    'mfa_enforce'         => 'Imposer MFA',
    'mfa_enforce_hint'    => 'Tous les utilisateurs doivent s\'authentifier avec une application TOTP ou un code e-mail en plus de leur mot de passe.',
    'email_mfa_title'        => 'Vérification par e-mail',
    'email_mfa_desc'         => 'Un code à 6 chiffres a été envoyé à votre adresse e-mail. Veuillez le saisir ci-dessous.',
    'email_mfa_code_label'   => 'Code de vérification',
    'email_mfa_submit'       => 'Vérifier',
    'email_mfa_invalid'      => 'Code invalide ou expiré.',
    'email_mfa_resend'       => 'Renvoyer le code',
    'email_mfa_resent'       => 'Un nouveau code a été envoyé à votre adresse e-mail.',
    'mfa_resend_too_fast'    => 'Veuillez attendre un moment avant de demander un nouveau code.',
    'mfa_attempts_exceeded'  => 'Trop de tentatives échouées. Veuillez vous reconnecter.',
    'email_mfa_settings'     => 'Authentification à deux facteurs par e-mail',
    'email_mfa_active'       => 'Actif',
    'email_mfa_inactive'     => 'Inactif',
    'email_mfa_enable_btn'   => 'Activer 2FA par e-mail',
    'email_mfa_disable_btn'  => 'Désactiver 2FA par e-mail',
    'email_mfa_enable_desc'  => 'Si activé, vous recevrez un code à 6 chiffres par e-mail à chaque connexion.',
    'email_mfa_disable_desc' => 'L\'authentification à deux facteurs par e-mail est actuellement active. Vous pouvez la désactiver ici.',
    'email_mfa_enabled_ok'   => '2FA par e-mail a été activé.',
    'email_mfa_disabled_ok'  => '2FA par e-mail a été désactivé.',
    'email_mfa_mail_subject' => 'Votre code de connexion',
    'email_mfa_mail_greeting'=> 'Bonjour,',
    'email_mfa_mail_body'    => 'Votre code de vérification pour la connexion est :',
    'email_mfa_mail_expiry'  => 'Ce code est valide pendant 20 minutes.',
    'email_mfa_mail_warning' => 'Si vous n\'avez pas demandé ce code, veuillez ignorer cet e-mail.',
    'mfa_setup_title'        => 'Sécurisez votre compte',
    'mfa_setup_desc'         => 'Votre administrateur exige l\'authentification à deux facteurs. Veuillez choisir une méthode.',
    'mfa_setup_email_title'  => 'Code par e-mail',
    'mfa_setup_email_desc'   => 'Recevez un code à usage unique par e-mail à chaque connexion.',
    'mfa_setup_totp_title'   => 'Application d\'authentification',
    'mfa_setup_totp_desc'    => 'Utilisez une application comme Google Authenticator ou Authy.',
    'mfa_setup_back_choice'  => 'Changer de méthode',
    'mfa_choice_title'       => 'Confirmer la connexion',
    'mfa_choice_desc'        => 'Vous avez deux méthodes activées. Comment souhaitez-vous vous vérifier ?',
    'mfa_choice_totp_title'  => 'Application d\'authentification',
    'mfa_choice_totp_desc'   => 'Entrez le code de votre application TOTP.',
    'mfa_choice_email_title' => 'Code par e-mail',
    'mfa_choice_email_desc'  => 'Recevez un code par e-mail.',
    'ext_mfa_title'          => 'Vérifiez votre identité',
    'ext_mfa_desc'           => 'Comme vous avez été inactif pendant un moment, nous avons envoyé un code à 6 chiffres à votre adresse e-mail. Veuillez le saisir ci-dessous.',
    'ext_mfa_mail_greeting'  => 'Bonjour',
    'ext_mfa_mail_body'      => 'Votre code d\'accès pour la vue des tâches externes est :',
    'ext_mfa_mail_subject'   => 'Votre code d\'accès',
    'ext_mfa_resent'         => 'Un nouveau code a été envoyé à votre adresse e-mail.',
    'password_reset_enabled'      => 'Autoriser la réinitialisation du mot de passe',
    'password_reset_enabled_hint' => 'Affiche un lien "Mot de passe oublié ?" sur la page de connexion. Nécessite que l\'envoi de mails soit configuré.',
    'password_reset_requires_mail' => '(Pas de transport de messagerie configuré – option désactivée.)',
    'forgot_password'             => 'Mot de passe oublié ?',
    'forgot_password_title'       => 'Réinitialiser le mot de passe',
    'forgot_password_subtitle'    => 'Entrez votre adresse e-mail et nous vous enverrons un lien de réinitialisation.',
    'forgot_password_btn'         => 'Envoyer le lien',
    'forgot_password_sent'        => 'Si un compte avec cette adresse e-mail existe, un lien de réinitialisation a été envoyé.',
    'reset_password_title'        => 'Nouveau mot de passe',
    'reset_password_subtitle'     => 'Entrez votre nouveau mot de passe.',
    'reset_password_btn'          => 'Enregistrer le mot de passe',
    'reset_password_success'      => 'Mot de passe modifié avec succès. Veuillez vous connecter.',
    'reset_token_invalid'         => 'Le lien est invalide ou a expiré.',
    'back_to_login'               => 'Retour à la connexion',
    'totp_enforce_wizard_title'    => 'Configuration de sécurité requise',
    'totp_enforce_wizard_subtitle' => 'Votre administrateur exige l\'authentification à deux facteurs. Veuillez configurer TOTP maintenant pour continuer.',
    'totp_enforce_note'   => 'Cette configuration est obligatoire. Vous ne pourrez vous connecter qu\'après l\'activation.',

    // Project notifications
    'project_notifications'        => 'Notifications par e-mail',
    'project_notifications_hint'   => 'Configurez qui reçoit des notifications par e-mail pour quels événements. Nécessite que SMTP soit configuré.',
    'notif_assignee_section'       => 'Notifications aux utilisateurs assignés',
    'notif_assignee_on_assign'     => 'Lorsqu\'une tâche est assignée',
    'notif_assignee_on_comment'    => 'Lorsqu\'un commentaire est publié',
    'notif_assignee_on_change'     => 'Lorsque l\'échéance, la priorité ou la description change',
    'notif_assignee_reminder'      => 'Rappel 3 jours avant l\'échéance',
    'notif_assignee_on_due_day'    => 'Rappel le jour de l\'échéance',
    'notif_assignee_on_unassign'   => 'Lorsqu\'on est retiré d\'une tâche',
    'notif_assignee_on_attachment' => 'Lorsqu\'une nouvelle pièce jointe est téléchargée',
    'notif_assignee_predecessors'  => 'Lorsque toutes les tâches prédécesseurs sont terminées',
    'notif_manager_section'        => 'Notifications aux managers de projet',
    'notif_manager_any_activity'   => 'Pour toute activité du projet',
    'notif_manager_assignees_changed' => 'Lorsque les assignations d\'une tâche changent',
    'activity_assignees_changed'   => 'a modifié les assignations',
    'notif_manager_task_done'      => 'Lorsqu\'une tâche est terminée',
    'notif_manager_task_overdue'   => 'Lorsqu\'une tâche est en retard (+1 jour)',
    'notif_manager_task_created'   => 'Lorsqu\'une nouvelle tâche est créée',

    // External participants
    'dummy_assignees'            => 'Emplacements (pas de notification)',
    'external_participants'      => 'Participants externes',
    'external_participants_hint' => 'Les personnes externes reçoivent des notifications par e-mail et peuvent consulter et mettre à jour leurs tâches via un lien personnel.',
    'ext_name_placeholder'       => 'Nom',
    'ext_email_placeholder'      => 'Adresse e-mail',
    'ext_portal_link'            => 'Lien du portail',

    // AI
    'ai_settings'           => 'Intégration IA',
    'ai_enabled'            => 'Activer l\'IA globalement',
    'ai_enabled_hint'       => 'Active l\'assistant IA pour tous les projets.',
    'ai_provider'           => 'Fournisseur',
    'ai_ollama_url'         => 'URL Ollama',
    'ai_ollama_model'       => 'Modèle',
    'ai_claude_key'         => 'Clé API',
    'ai_claude_key_hint'    => 'Laisser vide pour conserver la clé existante.',
    'ai_claude_model'       => 'Modèle',
    'ai_assistant'          => 'Assistant IA',
    'ai_clear_history'      => 'Effacer l\'historique',
    'ai_empty_hint'         => 'Posez-moi une question ou laissez-moi générer des tâches pour ce projet.',
    'ai_examples'           => 'Exemples :',
    'ai_example_1'          => 'Générer toutes les tâches nécessaires pour implémenter un système de tickets',
    'ai_example_2'          => 'Quelles tâches manquent encore pour le projet ?',
    'ai_example_3'          => 'Créer un plan de projet structuré avec des jalons',
    'ai_example_4'          => 'Pose-moi des questions une par une sur ce projet pour me livrer les tâches appropriées',
    'ai_input_placeholder'  => 'Tapez un message … (Entrée pour envoyer, Shift+Entrée pour nouvelle ligne)',
    'ai_generated_tasks'    => 'Tâches générées',
    'ai_create_tasks'       => 'Créer les tâches',

    // Activity
    'activity_task_created'  => 'tâche créée',
    'activity_task_updated'  => 'tâche mise à jour',
    'activity_task_deleted'  => 'tâche supprimée',
    'activity_comment'       => 'commenté',
    'activity_status_changed'=> 'statut modifié',
    'activity_member_added'  => 'membre ajouté',

    // Invitations
    'invite'                  => 'Inviter',
    'invite_title'            => 'Accepter l\'invitation',
    'invite_subtitle_pre'     => 'Vous avez été invité à rejoindre le groupe :',
    'invite_accept_btn'       => 'Accepter l\'invitation',
    'invite_sent'             => 'L\'invitation a été envoyée par e-mail.',
    'invite_link_fallback'    => 'SMTP non configuré – lien d\'invitation (veuillez envoyer manuellement) :',
    'invite_email_subject'    => 'Vous avez été invité',
    'invite_email_body_intro' => 'vous a invité à rejoindre le groupe :',
    'invite_email_expiry'     => 'Ce lien d\'invitation est valide pendant 7 jours.',
    'invite_email_footer'     => 'Si le bouton ne fonctionne pas, copiez ce lien :',
    'invite_email_exists'     => 'Cette adresse e-mail est déjà enregistrée.',
    'invite_already_member'   => 'Vous êtes déjà membre de ce groupe.',
    'invite_joined'           => 'Vous avez rejoint le groupe avec succès.',
    'invite_registered'       => 'Compte créé. Veuillez vous connecter.',
    'invite_invalid_title'    => 'Invitation invalide',
    'invite_invalid_body'     => 'Ce lien d\'invitation a expiré ou a déjà été utilisé.',
    'invite_pending'          => 'Invitations en attente',
    'invite_revoke'           => 'Révoquer',
    'invite_expires'          => 'Expire',
    'username_min'            => 'Le nom doit contenir au moins 3 caractères',
    'password_min'            => 'Le mot de passe doit contenir au moins 8 caractères',
    'email_taken'             => 'Adresse e-mail déjà utilisée',
    'invalid_email'           => 'Adresse e-mail invalide',
    'admin_cannot_self_delete' => 'Les comptes administrateurs ne peuvent pas être supprimés depuis le profil. Demandez à un autre administrateur de supprimer le compte.',
    'current_password_label'   => 'Mot de passe actuel',

    // Email change with verification
    'email_change_pending'              => 'Changement d’e-mail demandé. Nous avons envoyé un lien de confirmation à la nouvelle adresse. Le changement ne sera effectif qu’après avoir cliqué sur le lien.',
    'email_change_pending_hint'         => 'Changement vers :email en attente de confirmation.',
    'email_change_token_invalid'        => 'Lien de confirmation invalide ou expiré.',
    'email_change_success'              => 'Adresse e-mail modifiée avec succès.',
    'mail_email_change_verify_subject'  => 'Confirmer l’adresse e-mail',
    'mail_email_change_verify_greeting' => 'Bonjour :name,',
    'mail_email_change_verify_body'     => 'quelqu’un a demandé à changer l’adresse e-mail de votre compte Plenvo vers cette adresse. Cliquez sur le bouton pour confirmer :',
    'mail_email_change_verify_button'   => 'Confirmer l’adresse',
    'mail_email_change_verify_expires'  => 'Le lien est valable 24 heures. Si vous n’avez pas demandé ce changement, ignorez ce message. Le changement ne sera pas appliqué sans confirmation.',
    'mail_email_change_notice_subject'  => 'Changement d’e-mail demandé',
    'mail_email_change_notice_greeting' => 'Bonjour :name,',
    'mail_email_change_notice_body'     => 'un changement de l’adresse e-mail de votre compte vers :email vient d’être demandé.',
    'mail_email_change_notice_warning'  => 'Si ce n’est pas vous, changez immédiatement votre mot de passe et contactez l’administrateur. Le changement ne sera effectif qu’après confirmation depuis la nouvelle adresse.',

    // Password change session invalidation + notify
    'session_invalidated_password_changed' => 'Session terminée car le mot de passe a été modifié. Veuillez vous reconnecter.',
    'mail_pw_changed_subject'   => 'Mot de passe modifié',
    'mail_pw_changed_greeting'  => 'Bonjour :name,',
    'mail_pw_changed_body'      => 'le mot de passe de votre compte vient d’être modifié. Toutes les autres sessions actives ont été terminées par sécurité.',
    'mail_pw_changed_warning'   => 'Si vous n’êtes pas à l’origine de ce changement, définissez immédiatement un nouveau mot de passe et contactez l’administrateur.',

    // Trust X-Forwarded-For toggle
    'sec_trustproxy_title'  => 'En-têtes de reverse proxy',
    'sec_trustproxy_desc'   => 'À activer uniquement si Plenvo s’exécute derrière un reverse proxy de confiance (nginx, Traefik, …) qui définit « X-Forwarded-For » de manière fiable. Sinon, les clients peuvent falsifier leur IP, contourner les limites de débit et altérer le journal de sécurité.',
    'sec_trustproxy_enable' => 'Faire confiance à X-Forwarded-For du reverse proxy',

    // Landing page
    'landing_meta_title'         => 'Gestion de projet avec Kanban, Gantt et IA',
    'landing_meta_desc'          => 'Plenvo est un logiciel de gestion de projet léger avec tableau Kanban, diagramme de Gantt, gestion des tâches et assistant IA. Cloud ou auto-hébergé, conforme au RGPD.',
    'landing_meta_keywords'      => 'gestion de projet, logiciel gestion projet, tableau kanban, diagramme gantt, gestion des tâches, collaboration équipe, planification projet IA, auto-hébergé, RGPD, open source',
    'landing_meta_og_title'      => 'Plenvo – Gestion de projet pour équipes',
    'landing_meta_og_alt'        => 'Tableau de bord Plenvo avec tableau Kanban et diagramme de Gantt',
    'landing_software_desc'      => 'Logiciel de gestion de projet web avec Kanban, Gantt, listes de tâches, assistant IA, partage externe et option d\'auto-hébergement.',
    'landing_breadcrumb_home'    => 'Accueil',
    'landing_breadcrumb_downloads' => 'Téléchargements',
    'landing_preview_eyebrow'    => 'Aperçu du produit',
    'landing_preview_title'      => 'Votre projet – sous tous les angles',
    'landing_preview_sub'        => '',
    'landing_preview_tab_gantt'  => 'Diagramme de Gantt',
    'landing_preview_tab_dashboard' => 'Tableau de bord',
    'landing_preview_tab_kanban' => 'Tableau Kanban',
    'landing_preview_tab_ai'      => 'Assistant IA',
    'landing_preview_tab_mytasks'  => 'Mes tâches',
    'landing_preview_tab_external' => 'Vue externe',
    'landing_badge'              => 'Gestion de projet moderne',
    'landing_hero_title_1'       => 'Planifier des projets,',
    'landing_hero_title_2'       => 'diriger des équipes.',
    'landing_hero_sub'           => 'Plenvo offre aux chefs de projet la vue d\'ensemble dont ils ont besoin. De la première tâche au projet terminé. Clair, structuré, sans chaos.',
    'landing_discover'           => 'En savoir plus',
    'landing_pill_made_in_germany' => 'Made in Germany',
    'landing_pill_gdpr'            => 'Conçu pour le RGPD',
    'landing_pill_opensource'      => 'Open Source',
    'landing_pill_selfhost_saas'   => 'Auto-hébergé ou SaaS',
    'landing_diff_2_title'         => 'Toutes les fonctions pour tous',
    'landing_diff_2_desc'          => 'Aucune offre Pro ou Enterprise. Quelle que soit la taille de l\'équipe.',
    'landing_diff_3_title'         => 'Assistant IA inclus',
    'landing_diff_3_desc'          => 'Planifiez les tâches par chat. En local avec Ollama ou via le cloud.',
    'landing_stat_views'         => 'Vues',
    'landing_stat_projects'      => 'Projets',
    'landing_stat_security'      => 'Sécurité',
    'landing_stat_ai'            => 'Assistant IA',
    'landing_pain_eyebrow'        => 'Ça vous dit quelque chose ?',
    'landing_pain_title'          => 'La gestion de projet sans le bon outil coûte du temps',
    'landing_pain_sub'            => 'De nombreuses équipes rencontrent les mêmes problèmes chaque jour. Plenvo les résout.',
    'landing_combined_eyebrow'    => 'Ça vous dit quelque chose ?',
    'landing_combined_title'      => 'La bonne solution pour chaque défi',
    'landing_combined_sub'        => 'Voici comment Plenvo transforme vos défis quotidiens en avantages mesurables.',
    'landing_combined_badge'      => 'Défi',
    'landing_combined_extras'     => 'Aussi inclus :',

    // ── Pro features section ─────────────────────────────────────────
    'landing_pro_eyebrow'             => 'Fonctions pro',
    'landing_pro_title'               => 'Des outils dont vous ne voudrez plus vous passer au bout d\'une semaine',
    'landing_pro_sub'                 => 'Les petites fonctions qui ne sont jamais en avant des démos – et que vous utiliserez chaque jour.',
    'landing_pro_cat_speed'           => 'Rapidité',
    'landing_pro_cat_speed_sub'       => 'Moins de clics. Plus de résultats.',
    'landing_pro_cat_clarity'         => 'Clarté',
    'landing_pro_cat_clarity_sub'     => 'Gardez la vue d\'ensemble sans avoir à demander.',
    'landing_pro_cat_tools'           => 'Outils',
    'landing_pro_cat_tools_sub'       => 'Des fonctions pro qui anticipent.',
    'landing_pro_cmdk_title'          => 'Palette de commandes',
    'landing_pro_cmdk_desc'           => 'Accédez à toute tâche, projet ou personne en moins d\'une seconde. Sans naviguer dans les menus.',
    'landing_pro_bulk_title'          => 'Édition en masse',
    'landing_pro_bulk_desc'           => 'Vingt tâches d\'un coup : statut, priorité, affectations, échéance, étiquettes. Un clic au lieu de vingt.',
    'landing_pro_inline_title'        => 'Édition en ligne',
    'landing_pro_inline_desc'         => 'Changez le statut, les affectations et l\'échéance directement dans le tableau. Sans modal, sans détour.',
    'landing_pro_managermail_title'   => 'Notifications manager',
    'landing_pro_managermail_desc'    => 'Recevez uniquement l\'essentiel : nouvelles tâches, changements d\'affectation, prédécesseurs terminés. Vous choisissez les déclencheurs.',
    'landing_pro_activity_title'      => 'Historique complet',
    'landing_pro_activity_desc'       => 'Le journal d\'activité enregistre chaque modification. Qui a fait quoi, quand ? Plus jamais besoin de demander.',
    'landing_pro_multiowner_title'    => 'Plusieurs responsables',
    'landing_pro_multiowner_desc'     => 'Plusieurs propriétaires et managers par projet. Le remplacement est intégré à l\'outil, pas au calendrier.',
    'landing_pro_autodeps_title'      => 'Liens automatiques dans le Gantt',
    'landing_pro_autodeps_desc'       => 'Plenvo détecte automatiquement les dépendances depuis le planning, y compris les pistes parallèles et fan-in / fan-out.',
    'landing_pro_dragdrop_title'      => 'Glisser-déposer partout',
    'landing_pro_dragdrop_desc'       => 'Déplacez les barres dans le Gantt, glissez les cartes sur le Kanban. Dates et statut se mettent à jour aussitôt.',
    'landing_pro_aichoice_title'      => 'L\'IA de votre choix',
    'landing_pro_aichoice_desc'       => 'Anthropic Claude, OpenAI, Azure ou Ollama local. Pas de dépendance fournisseur pour l\'intelligence.',
    'landing_pro_extras_title'        => 'Également à bord',
    'landing_pro_extra_mentions'      => 'Mentions @ dans les commentaires',
    'landing_pro_extra_attach'        => 'Pièces jointes',
    'landing_pro_extra_custom_status' => 'Statuts personnalisés par projet',
    'landing_pro_extra_labels'        => 'Étiquettes',
    'landing_pro_extra_required'      => 'Champs obligatoires par projet',
    'landing_pro_extra_polls'         => 'Sondages de planification',
    'landing_pro_extra_languages'     => '11 langues d\'interface',
    'landing_pro_extra_themes'        => '10 thèmes',
    'landing_pro_extra_fido'          => 'WebAuthn / FIDO2',
    'landing_pro_extra_mfa'           => 'TOTP + MFA par e-mail',
    'landing_pro_extra_archive'       => 'Archiver et restaurer',
    'landing_pro_extra_deps'          => 'Dépendances entre tâches',

    // ── Scheduling polls highlight ───────────────────────────────────
    'landing_poll_bonus'         => 'Bonus',
    'landing_poll_title'         => 'Trouver une date ? Plenvo s\'en charge aussi.',
    'landing_poll_sub'           => 'Un sondage de planification complet est intégré. Même langue, même conformité RGPD, même interface – pas besoin d\'un second outil.',
    'landing_poll_feat_link'     => 'Lien public – participer sans compte.',
    'landing_poll_feat_live'     => 'Résultats en direct, créneau gagnant mis en évidence automatiquement.',
    'landing_poll_feat_invite'   => 'Inviter par e-mail, en interne comme en externe.',
    'landing_poll_feat_finalize' => 'Un clic pour finaliser, e-mail à tous les participants.',
    'landing_poll_mock_title'    => 'Kickoff T1 2026',
    'landing_poll_mock_meta'     => '4 participants · jusqu\'au 12/04',
    'landing_poll_mock_count'    => '3 sur 4 ont répondu',
    'landing_poll_mock_cta'      => 'Fixer la date',
    'landing_pain1_title'         => 'Pas de vue d\'ensemble du statut du projet',
    'landing_pain1_desc'          => 'Qui travaille sur quoi ? Qu\'est-ce qui est encore ouvert ? Qu\'est-ce qui est en retard ?',
    'landing_pain1_solution'      => 'Le tableau de bord Plenvo affiche les tâches ouvertes, les éléments en retard et l\'activité de l\'équipe. Tout d\'un coup d\'œil, en temps réel.',
    'landing_pain2_title'         => 'Les délais sont manqués',
    'landing_pain2_desc'          => 'Les dépendances entre tâches sont négligées, les délais sont manqués.',
    'landing_pain2_solution'      => 'Le calendrier Gantt rend les dépendances visibles. Repérez les goulots d\'étranglement avant qu\'ils ne deviennent des problèmes.',
    'landing_pain3_title'         => 'La communication passe par e-mail',
    'landing_pain3_desc'          => 'Les mises à jour de statut se perdent, les responsabilités sont floues.',
    'landing_pain3_solution'      => 'Chaque tâche a des responsables clairs, des commentaires et un statut. Tout au même endroit, pas de chaînes d\'e-mails.',
    'landing_pain4_title'         => 'Partenaires externes difficiles à impliquer',
    'landing_pain4_desc'          => 'Les prestataires et clients ont besoin de leurs propres outils ou accès.',
    'landing_pain4_solution'      => 'Les externes reçoivent un lien personnel vers leurs tâches. Pas de compte nécessaire, pas d\'effort de configuration.',
    'landing_pain5_title'         => 'Charge de travail de l\'équipe floue',
    'landing_pain5_desc'          => 'Les tâches sont assignées en double ou les membres sont surchargés sans qu\'on le sache.',
    'landing_pain5_solution'      => 'Assignez les tâches délibérément et gardez toujours une trace de qui a pris quoi.',
    'landing_pain6_title'         => 'Les réunions de statut gaspillent un temps précieux',
    'landing_pain6_desc'          => 'Les mêmes questions chaque semaine : quel est le statut, que manque-t-il ?',
    'landing_pain6_solution'      => 'Avec Plenvo, tout le monde a le statut actuel à portée de main. Moins de réunions, plus de résultats.',
    'landing_features_eyebrow'   => 'Fonctionnalités',
    'landing_features_title'     => 'Tout ce dont votre équipe a besoin',
    'landing_features_sub'       => 'Des tâches individuelles aux plans de projet complets. Plenvo couvre chaque étape de votre flux de travail.',
    'landing_feat_overview'      => 'Vue d\'ensemble complète',
    'landing_feat_overview_desc' => 'Le tableau de bord affiche d\'un coup d\'œil : tâches ouvertes, échéances du jour, éléments en retard et l\'activité de votre équipe. Pas de recherche nécessaire.',
    'landing_feat_timeline'      => 'Calendrier avec Gantt',
    'landing_feat_timeline_desc' => 'Glissez-déposez les tâches directement sur le calendrier. Voyez instantanément quand une échéance est menacée et réagissez avant qu\'il ne soit trop tard.',
    'landing_feat_team'          => 'Responsabilités claires',
    'landing_feat_team_desc'     => 'Chaque tâche a un ou plusieurs propriétaires. Les rôles de projet (propriétaire, manager, membre) garantissent que chacun sait exactement ce qu\'on attend de lui.',
    'landing_feat_priority'      => 'Priorités et délais',
    'landing_feat_priority_desc' => 'Quatre niveaux de priorité, dates d\'échéance et rappels par e-mail garantissent que l\'essentiel est fait en premier.',
    'landing_feat_kanban'        => 'Tableau Kanban',
    'landing_feat_kanban_desc'   => 'Visualisez votre flux de travail avec des colonnes flexibles, glisser-déposer et transitions de statut configurables.',
    'landing_feat_gantt'         => 'Diagramme de Gantt',
    'landing_feat_gantt_desc'    => 'Voyez votre calendrier d\'un coup d\'œil : glissez et redimensionnez les tâches directement dans le diagramme, avec mise en évidence des week-ends.',
    'landing_feat_tasks'         => 'Gestion des tâches',
    'landing_feat_tasks_desc'    => 'Priorités, échéances, étiquettes, commentaires et pièces jointes. Tout au même endroit.',
    'landing_feat_deps'          => 'Dépendances',
    'landing_feat_deps_desc'     => 'Définissez les prédécesseurs et successeurs. Notification automatique quand tous les prédécesseurs sont terminés.',
    'landing_feat_groups'        => 'Multi-tenants',
    'landing_feat_groups_desc'   => 'Organisez les utilisateurs en groupes et déléguez les admins de groupe. Chaque groupe travaille dans son propre environnement isolé.',
    'landing_feat_external'      => 'Accès externe',
    'landing_feat_external_desc' => 'Partagez des tâches avec des partenaires externes via un lien personnel. Pas de compte requis, avec des droits d\'accès ciblés.',
    'landing_feat_ai'            => 'Assistant IA',
    'landing_feat_ai_desc'       => 'Laissez les tâches être générées automatiquement. Prend en charge Ollama (local) et l\'API Claude pour une configuration respectueuse de la vie privée.',
    'landing_feat_notif'         => 'Notifications par e-mail',
    'landing_feat_notif_desc'    => 'Assignation, échéance, prédécesseurs terminés. Tous les événements pertinents atterrissent automatiquement dans la boîte de réception.',
    'landing_feat_files'         => 'Pièces jointes',
    'landing_feat_files_desc'    => 'Attachez documents, images et plus directement aux tâches. Stockés en sécurité et toujours accessibles.',
    'landing_how_eyebrow'        => 'En 4 étapes',
    'landing_how_title'          => 'Commencez immédiatement',
    'landing_how_sub'            => 'Pas de longue configuration. Plenvo est prêt à l\'emploi en quelques minutes.',
    'landing_step1_title'        => 'Se connecter',
    'landing_step1_desc'         => 'Connectez-vous avec votre compte ou acceptez une invitation.',
    'landing_step2_title'        => 'Créer un projet',
    'landing_step2_desc'         => 'Créez un projet, choisissez une couleur, définissez la vue par défaut.',
    'landing_step3_title'        => 'Inviter l\'équipe',
    'landing_step3_desc'         => 'Invitez des membres par e-mail ou assignez des utilisateurs existants.',
    'landing_step4_title'        => 'Gérer les tâches',
    'landing_step4_desc'         => 'Créez, priorisez et assignez des tâches en vue Kanban, liste ou Gantt.',
    'landing_views_eyebrow'      => 'Vues',
    'landing_views_title'        => 'Chaque perspective sur votre projet',
    'landing_views_sub'          => 'Basculez entre les vues à tout moment. Les données restent toujours synchronisées.',
    'landing_view_kanban'         => 'Tableau Kanban',
    'landing_view_kanban_desc'    => 'Glissez-déposez les tâches dans votre flux de travail',
    'landing_view_list'           => 'Vue liste',
    'landing_view_list_desc'      => 'Filtrez, triez et voyez toutes les tâches d\'un coup d\'œil',
    'landing_view_gantt'          => 'Diagramme de Gantt',
    'landing_view_gantt_desc'     => 'Visualisez votre calendrier et repérez les dépendances',
    'landing_view_dashboard'      => 'Tableau de bord',
    'landing_view_dashboard_desc' => 'Statut du projet, tâches ouvertes et activité de l\'équipe',
    'landing_tag_dashboard'       => 'Tableau de bord',
    'landing_tag_gantt'           => 'Diagramme de Gantt',
    'landing_tag_team'            => 'Gestion d\'équipe',
    'landing_tag_tasks'           => 'Tâches',
    'landing_tag_planning'        => 'Planification',
    'landing_tag_collab'          => 'Collaboration',
    'landing_tag_notif'           => 'Notifications',
    'landing_tag_ai'              => 'Assistant IA',
    'landing_security_title'     => 'Sécurité par conception',
    'landing_security_sub'       => 'Plenvo a été conçu dès le départ avec la sécurité comme priorité.',
    'landing_sec_totp'           => 'Authentification à deux facteurs',
    'landing_sec_totp_desc'      => 'TOTP via application d\'authentification, optionnellement imposé globalement',
    'landing_sec_csrf'           => 'Protection CSRF',
    'landing_sec_csrf_desc'      => 'Tous les formulaires et points de terminaison API protégés par jetons',
    'landing_sec_groups'         => 'Isolation des données',
    'landing_sec_groups_desc'    => 'Les groupes sont entièrement isolés les uns des autres',
    'landing_sec_brute'          => 'Protection contre les attaques brute-force',
    'landing_sec_brute_desc'     => 'Limitation de débit sur toutes les tentatives de connexion',
    'landing_sec_bcrypt'         => 'Mots de passe sécurisés',
    'landing_sec_bcrypt_desc'    => 'Hachage BCrypt, pas de texte en clair dans la base de données',
    'landing_sec_audit'          => 'Journal d\'activité',
    'landing_sec_audit_desc'     => 'Tous les changements sont traçables et journalisés',
    'landing_no_account'         => 'Pas encore de compte ?',

    // Landing mock UI
    'landing_mock_status_open'        => 'Ouvert',
    'landing_mock_status_inprogress'  => 'En cours',
    'landing_mock_status_review'      => 'Révision',
    'landing_mock_status_done'        => 'Terminé',
    'landing_mock_welcome'            => 'Bon retour, Max',
    'landing_mock_date'               => '23 avril 2026',
    'landing_mock_filter_open'        => 'Tâches ouvertes',
    'landing_mock_task_req'           => 'Analyse des exigences',
    'landing_mock_task_design'        => 'Concept de design',
    'landing_mock_task_frontend'      => 'Développement Frontend',
    'landing_mock_task_backend'       => 'API Backend',
    'landing_mock_task_testing'       => 'Tests & QA',
    'landing_mock_task_content'       => 'Migration de contenu',
    'landing_mock_task_golive'        => 'Mise en ligne',
    'landing_mock_task_pushnotif'     => 'Notifications push',
    'landing_mock_task_appstore'      => 'Publication App Store',
    'landing_mock_card_server'        => 'Planifier l\'infrastructure serveur',
    'landing_mock_card_seo'           => 'Effectuer une analyse SEO',
    'landing_mock_card_privacy'       => 'Vérifier la confidentialité des données',
    'landing_mock_card_backenddev'    => 'Développer l\'API Backend',
    'landing_mock_card_designfinal'   => 'Finaliser le concept de design',
    'landing_mock_card_kickoff'       => 'Réunion de lancement',
    'landing_mock_ai_user_msg'        => 'Pouvez-vous créer toutes les tâches nécessaires pour le projet Refonte du site web 2026 – avec des dates de début et de fin réalistes et des liens prédécesseur/successeur ?',
    'landing_mock_ai_intro'           => 'Bien sûr ! Voici',
    'landing_mock_ai_for'             => 'pour',
    'landing_mock_ai_timeline'        => 'avec calendrier et toutes les dépendances :',
    'landing_mock_ai_dep_after'       => '→ après',
    'landing_mock_ai_confirm'         => 'Toutes les dépendances sont liées. Dois-je créer les tâches directement ?',
    'landing_mock_ai_cta_text'        => '7 tâches générées &amp; liées',
    'landing_mock_ai_create'          => 'Créer les tâches',
    'landing_mock_ext_open'           => 'Ouvrir la tâche',
    'landing_mock_ext_task1_title'    => 'Migration de contenu',
    'landing_mock_ext_task1_desc'     => 'Transférer tout le contenu de l\'ancien système, le structurer et le préparer pour le nouveau site web.',
    'landing_mock_ext_task2_title'    => 'Préparation de la mise en ligne',
    'landing_mock_ext_task2_desc'     => 'Approbation finale de toutes les pages, vérifier les redirections d\'URL et donner le feu vert pour le lancement.',
    'landing_mock_ext_task3_title'    => 'Approbation &amp; Retour',
    'landing_mock_ext_task3_desc'     => 'Donner l\'approbation finale pour l\'ensemble de la refonte et laisser un retour écrit sur l\'implémentation.',

    // Landing FAQs
    'landing_faq_title'  => 'Questions fréquemment posées',
    'landing_faq_sub'    => 'Réponses aux questions les plus importantes sur Plenvo.',
    'landing_faq_help'   => 'Trouvez plus de détails dans le <a href="/help" style="color:#4f46e5;font-weight:600">guide utilisateur</a>.',
    'landing_faq_1_q'    => 'Ai-je besoin d\'un compte pour voir les tâches ?',
    'landing_faq_1_a'    => 'Pas nécessairement. En tant que participant externe, vous recevez un lien d\'accès personnel par e-mail. En utilisant ce lien, vous pouvez voir vos tâches assignées, mettre à jour leur statut et laisser des commentaires – sans aucun compte.',
    'landing_faq_2_q'    => 'Comment inviter quelqu\'un à un projet ?',
    'landing_faq_2_a'    => 'Les managers de projet peuvent ajouter des utilisateurs internes ou inviter des participants externes par e-mail sous <em>Membres</em>. Les externes reçoivent un lien d\'accès unique. Les admins de groupe peuvent ajouter des utilisateurs au groupe via un lien d\'invitation.',
    'landing_faq_3_q'    => 'Quelle est la différence entre Kanban, Liste et Gantt ?',
    'landing_faq_3_a'    => 'Le <strong>tableau Kanban</strong> affiche les tâches comme des cartes que vous déplacez entre les colonnes de statut via glisser-déposer. La <strong>vue liste</strong> est idéale pour filtrer et trier. Le <strong>diagramme de Gantt</strong> visualise les tâches sur un calendrier, montre les dépendances comme lignes de connexion et peut être édité via glisser-déposer. Avec le bouton <em>Auto-lien</em>, Plenvo détecte automatiquement quelles tâches se suivent dans le temps et crée les dépendances appropriées.',
    'landing_faq_4_q'    => 'Que se passe-t-il quand je marque une tâche comme "terminée" ?',
    'landing_faq_4_a'    => 'La tâche passe au statut terminé. Selon les paramètres du projet, le manager de projet et/ou les assignés des tâches successeurs dépendantes reçoivent une notification par e-mail.',
    'landing_faq_5_q'    => 'Que sont les tâches prédécesseurs ?',
    'landing_faq_5_a'    => 'Les prédécesseurs sont des tâches qui doivent être terminées en premier avant qu\'une autre tâche puisse être travaillée de manière significative. Dans le diagramme de Gantt, ces dépendances sont montrées comme lignes de connexion. Avec la fonction <em>Auto-lien</em> dans le diagramme de Gantt, toutes les dépendances peuvent être automatiquement dérivées du calendrier — même avec plusieurs tâches s\'exécutant en parallèle. Quand un prédécesseur est terminé, une notification peut optionnellement être envoyée à l\'assigné de la tâche suivante.',
    'landing_faq_6_q'    => 'Comment sécuriser mon compte avec 2FA ?',
    'landing_faq_6_a'    => 'Sous <em>Paramètres → Sécurité</em>, vous pouvez activer soit une application d\'authentification (TOTP), soit la confirmation par e-mail. Les deux méthodes peuvent être utilisées simultanément. Si votre administrateur impose MFA, vous serez automatiquement invité à le configurer à votre prochaine connexion.',
    'landing_faq_7_q'    => 'Qui peut créer un projet ?',
    'landing_faq_7_a'    => 'Tout utilisateur connecté peut créer un nouveau projet. Celui qui crée un projet en devient automatiquement le propriétaire et a le contrôle total sur les membres, les tâches et les paramètres.',
    'landing_faq_8_q'    => 'Puis-je appartenir à plusieurs projets ?',
    'landing_faq_8_a'    => 'Oui. Vous pouvez être membre d\'un nombre illimité de projets, chacun avec son propre rôle (propriétaire, manager, membre ou invité). Vous pouvez voir vos tâches de tous les projets rassemblées sous "Mes tâches".',
    'landing_faq_9_q'    => 'La fonctionnalité IA peut-elle être désactivée ?',
    'landing_faq_9_a'    => 'Oui. Les admins de groupe peuvent individuellement activer ou désactiver l\'accès IA pour leur groupe. Cela permet à l\'IA d\'être utilisée uniquement là où elle est souhaitée.',
    'landing_faq_10_q'   => 'Quelles données l\'IA peut-elle accéder ?',
    'landing_faq_10_a'   => 'L\'IA reçoit automatiquement le nom du projet et – si disponible – la description du projet, ainsi que les messages que vous entrez dans le chat. Les tâches, les membres de l\'équipe ou d\'autres données de projet ne sont pas automatiquement transmis. Vous décidez quelles informations supplémentaires vous partagez avec l\'IA.',

    // Hosting options section
    'landing_hosting_eyebrow'        => 'Deux chemins, un produit',
    'landing_hosting_title'          => 'Hébergé ou auto-géré — à vous de choisir',
    'landing_hosting_subtitle'       => 'Plenvo s\'adapte à votre infrastructure. Commencez instantanément dans le cloud ou installez le logiciel sur votre propre serveur.',
    'landing_hosting_saas_badge'     => 'Software as a Service',
    'landing_hosting_saas_title'     => 'Entièrement hébergé',
    'landing_hosting_saas_desc'      => 'Pas de serveur, pas de maintenance. Les opérations, les mises à jour et la disponibilité sont incluses. Inscrivez-vous simplement et commencez.',
    'landing_hosting_saas_1'         => 'Prêt à l\'emploi instantanément, pas de configuration',
    'landing_hosting_saas_2'         => 'Mises à jour automatiques vers les nouvelles versions',
    'landing_hosting_saas_3'         => 'Opérations et maintenance incluses',
    'landing_hosting_saas_cta'       => 'S\'inscrire maintenant',
    'landing_hosting_self_badge'     => 'Auto-hébergé',
    'landing_hosting_self_title'     => 'Sur votre propre serveur',
    'landing_hosting_self_desc'      => 'Contrôle total sur vos données. Installez Plenvo sur votre propre infrastructure — gratuitement et sans dépendances.',
    'landing_hosting_self_1'         => 'Vos données restent sur votre serveur',
    'landing_hosting_self_2'         => 'Téléchargement et installation gratuits',

    // Downloads page
    'dl_hero_sub'      => 'Version stable &ndash; auto-hébergé, sans dépendances, sans lock-in cloud.',
    'dl_download_btn'  => 'Télécharger plenvo-latest.zip',
    'dl_req_title'              => 'Configuration requise',
    'dl_req_php'                => 'PHP 8.1 ou plus récent',
    'dl_req_sqlite'             => 'SQLite (inclus avec PHP)',
    'dl_req_webserver'          => 'Apache, nginx ou serveur web équivalent',
    'dl_quickstart_title'       => 'Prêt en 3 étapes',
    'dl_quickstart_step1_title' => 'Décompresser le ZIP',
    'dl_quickstart_step1_desc'  => 'Téléchargez l\'archive et décompressez-la localement.',
    'dl_quickstart_step2_title' => 'Copier sur le serveur',
    'dl_quickstart_step2_desc'  => 'Téléversez le dossier extrait via FTP/SSH dans le répertoire web de votre hôte PHP.',
    'dl_quickstart_step3_title' => 'Ouvrir index.php',
    'dl_quickstart_step3_desc'  => 'Ouvrez l\'URL installée dans le navigateur. L\'assistant vous guide pour la configuration.',
    'dl_sha_copy'               => 'Copier',
    'dl_sha_copied'             => 'Copié !',
    'dl_sha_verify_hint'        => 'Vérifiez l\'intégrité avec `sha256sum plenvo-latest.zip`.',
    'dl_changelog_jump'         => 'Aller à :',
    'dl_readme_hint'   => 'Contient la configuration requise, les instructions d\'installation, la confidentialité et les informations de licence :',
    'dl_readme_open'   => 'Ouvrir README',
    'dl_changelog_eyebrow' => 'Notes de version',
    'dl_meta_title'    => 'Téléchargement Plenvo – Logiciel de gestion de projet auto-hébergé',
    'dl_meta_desc'     => 'Téléchargez Plenvo gratuitement. Logiciel de gestion de projet auto-hébergé avec Kanban, Gantt, assistant IA et mise à jour automatique intégrée. Propulsé par PHP et SQLite, sans dépendances externes.',
    'dl_meta_keywords' => 'Téléchargement Plenvo, téléchargement logiciel gestion projet, auto-hébergé, logiciel kanban, logiciel gantt, gestion projet open source',
    'landing_hosting_self_3'         => 'Mise à jour automatique intégrée pour les mises à niveau faciles',
    'landing_hosting_self_cta'       => 'Télécharger',
    // Contact form (landing page)
    // WebAuthn / Security Keys
    'webauthn_settings'         => 'Clés de sécurité (YubiKey / FIDO2)',
    'webauthn_desc'             => 'Connectez-vous avec une clé de sécurité physique (ex. YubiKey) — sans mot de passe. La clé doit d\'abord être enregistrée ici.',
    'webauthn_add_key'          => 'Enregistrer une clé',
    'webauthn_key_name'         => 'Nom',
    'webauthn_key_name_ph'      => 'ex. YubiKey 5',
    'webauthn_default_key_name' => 'Clé de sécurité',
    'webauthn_registered_count' => 'enregistrée',
    'webauthn_registered_on'    => 'Enregistrée le',
    'webauthn_last_used'        => 'Dernière utilisation',
    'webauthn_touch_key'        => 'Touchez votre clé ou entrez le PIN …',
    'webauthn_register_success' => 'Clé de sécurité enregistrée avec succès.',
    'webauthn_register_error'   => 'L\'enregistrement a échoué. Veuillez réessayer.',
    'webauthn_login_btn'        => 'Se connecter avec une clé de sécurité',
    'webauthn_login_success'    => 'Authentification réussie.',
    'webauthn_cancelled'        => 'Annulé.',

    'contact_nav'               => 'Contact',
    'contact_eyebrow'           => 'Contact',
    'contact_title'             => 'Nous contacter',
    'contact_subtitle'          => 'Vous avez trouvé un bug, une idée de fonctionnalité ou simplement un retour ? Chaque message est le bienvenu.',
    'contact_name'              => 'Nom',
    'contact_category'          => 'Catégorie',
    'contact_category_ph'       => 'Veuillez sélectionner ...',
    'contact_cat_bug'           => 'Signaler un bug',
    'contact_cat_feature'       => 'Demande de fonctionnalité',
    'contact_cat_praise'        => 'Éloges',
    'contact_cat_critique'      => 'Critique',
    'contact_cat_question'      => 'Question générale',
    'contact_cat_other'         => 'Autre',
    'contact_message'           => 'Message',
    'contact_max_chars'         => 'max. 5 000 caractères',
    'contact_submit'            => 'Envoyer le message',
    'contact_success'           => 'Message envoyé ! Une réponse suivra dès que possible.',
    'contact_error_generic'     => 'Une erreur s\'est produite.',
    'contact_error_network'     => 'Erreur de connexion. Veuillez réessayer plus tard.',
    'contact_err_not_configured'=> 'Le formulaire de contact n\'est pas configuré sur ce serveur.',
    'contact_err_invalid'       => 'Requête invalide.',
    'contact_err_too_fast'      => 'Veuillez attendre un moment et réessayer.',
    'contact_err_rate_limit'    => 'Veuillez attendre avant d\'envoyer un autre message.',
    'contact_err_name'          => 'Veuillez entrer un nom valide (max. 100 caractères).',
    'contact_err_email'         => 'Veuillez entrer une adresse e-mail valide.',
    'contact_err_category'      => 'Veuillez sélectionner une catégorie.',
    'contact_err_message'       => 'Le message doit contenir entre 10 et 5 000 caractères.',
    'contact_err_send'          => 'L\'e-mail n\'a pas pu être envoyé. Veuillez réessayer plus tard.',

    'landing_license_title'          => 'Open Source – AGPL v3',
    'landing_license_body'           => 'Plenvo est publié sous la <strong>GNU Affero General Public License v3</strong>. Le logiciel peut être utilisé, exploité et inspecté gratuitement. La redistribution ou modification du code source n\'est autorisée que sous les mêmes conditions de licence. Les installations doivent conserver visiblement la mention "Powered by Plenvo" avec un lien vers <a href="https://plenvo.gp-server.com" target="_blank" rel="noopener" style="color:#4f46e5;text-decoration:none;font-weight:600">plenvo.gp-server.com</a>.',

    // Layout / Navigation
    'delete_all'                  => 'Tout supprimer',
    'pending_count'               => 'en attente',

    // Preferences page
    'preferred_project_view'      => 'Vue de projet préférée',
    'preferred_view_hint'         => 'Cette vue est automatiquement présélectionnée quand vous créez un nouveau projet.',
    'request_group_creation_hint' => 'Vous pouvez demander à l\'administrateur l\'autorisation de créer vos propres groupes.',
    'group_creation'              => 'Créer un groupe',
    'permission_active'           => 'Permission active',
    'permission_active_desc'      => 'Vous pouvez créer vos propres groupes.',
    'request_pending_status'      => 'Demande en attente',
    'request_pending_desc'        => 'Votre demande est examinée par un administrateur.',
    'request_denied_status'       => 'Refusée',
    'request_denied_desc'         => 'Votre dernière demande a été refusée.',
    'request_again'               => 'Redemander',
    'permission_revoked_status'   => 'Permission révoquée',
    'permission_revoked_desc'     => 'Votre permission a été révoquée par un administrateur.',
    'request_access'              => 'Demander l\'accès',

    // Group requests (admin)
    'group_requests_title'        => 'Demandes de groupe',
    'group_creation_requests'     => 'Demandes de création de groupe',
    'no_requests'                 => 'Pas encore de demandes.',
    'status_label'                => 'Statut',
    'date_label'                  => 'Date',
    'pending_status'              => 'En attente',
    'approved_status'             => 'Approuvée',
    'revoked_status'              => 'Révoquée',
    'denied_status'               => 'Refusée',
    'approve'                     => 'Approuver',
    'deny'                        => 'Refuser',
    'confirm_deny'                => 'Refuser la demande ?',
    'revoke_permission'           => 'Révoquer la permission',
    'confirm_revoke_permission'   => 'Révoquer la permission ?',
    'approve_again'               => 'Approuver à nouveau',
    'grant_permission_direct'     => 'Accorder la permission directement',
    'grant_permission'            => 'Accorder la permission',

    // Plugins (admin)
    'installed_plugins'           => 'Plugins installés',
    'no_plugins'                  => 'Aucun plugin installé.',
    'plugin_version'              => 'Version',
    'plugin_active'               => 'Actif',
    'plugin_disabled'             => 'Désactivé',
    'plugin_deactivate'           => 'Désactiver',
    'plugin_activate'             => 'Activer',
    'plugin_delete_confirm'       => 'Vraiment supprimer le plugin ?',
    'plugin_upload_title'         => 'Télécharger un plugin',
    'plugin_upload_label'         => 'Fichier ZIP (max. 5 Mo)',
    'plugin_upload_btn'           => 'Télécharger et installer',
    'plugin_structure_title'      => 'Structure du plugin',
    'plugin_upload_hint'          => 'Téléchargez un plugin en tant que fichier <strong>.zip</strong>. Le ZIP doit contenir un fichier <code>plugin.json</code> avec les champs <code>id</code>, <code>name</code> et <code>class</code>.',
    'plugin_structure_hint'       => '<code>plugin.json</code> minimal :',
    'plugin_class_hint'           => 'La classe doit avoir une méthode <code>register()</code> et être placée en tant que <code>ClassName.php</code> dans le même répertoire.',

    // Users (admin)
    'pw_reset_short'              => 'Réinit. MP',
    'reset_btn'                   => 'Réinitialiser',

    // Group admin
    'new_group'                   => 'Nouveau groupe',
    'new_group_title'             => 'Créer un nouveau groupe',
    'no_group_yet'                => 'Vous n\'avez pas encore de groupe. Créez votre premier groupe maintenant.',
    'group_name_label'            => 'Nom du groupe',
    'group_name_placeholder'      => 'ex. Marketing, Développement…',
    'group_desc_placeholder'      => 'Brève description du groupe…',
    'group_admin_auto'            => 'Vous serez automatiquement ajouté comme admin du groupe.',
    'create_btn'                  => 'Créer',
    'ai_blocked_label'            => 'IA bloquée',
    'ai_active_label'             => 'IA active',
    'ai_block_confirm'            => 'Bloquer l\'IA pour tous les membres de ce groupe ?',
    'ai_blocked_title'            => 'L\'IA est bloquée – cliquer pour activer',
    'ai_active_title'             => 'L\'IA est active – cliquer pour bloquer',
    'delete_group'                => 'Supprimer le groupe',
    'delete_group_confirm'        => 'Vraiment supprimer le groupe ? Cette action est irréversible.',
    'me_badge'                    => 'Moi',
    'reset_password_btn'          => 'Réinitialiser',
    'no_permission_hint'          => 'Pas de permission – demander dans les paramètres',

    // Notifications
    'open_btn'                    => 'Ouvrir',

    // Invite accept
    'invite_wrong_user'           => 'Cette invitation a été envoyée à une autre adresse e-mail et ne peut pas être acceptée avec votre compte.',
    'invite_to_dashboard'         => 'Aller au tableau de bord',
    'invite_login_required'       => 'Connectez-vous avec ce compte pour rejoindre le groupe.',
    'invite_login_btn'            => 'Se connecter et accepter l\'invitation',
    'invite_join_text'            => 'Vous avez été invité à rejoindre le groupe.',
    'invite_join_btn'             => 'Accepter l\'invitation',

    // Gantt
    'manual'                      => 'Manuel',

    // Admin settings
    'smtp_external_badge'         => 'SMTP externe – pas de serveur de messagerie local',
    'smtp_info_text'              => 'Le système utilise <strong>exclusivement</strong> le serveur SMTP configuré. L\'envoi de mail local (sendmail/mail) est désactivé.',
    'keep_password_hint'          => 'Laisser vide pour conserver le mot de passe actuel',
    'mail_settings'               => 'Paramètres de messagerie',
    'mail_provider'               => 'Fournisseur de messagerie',
    'mail_provider_smtp'          => 'SMTP',
    'mail_provider_microsoft'     => 'Microsoft 365 (OAuth)',
    'mail_provider_local'         => 'Messagerie locale (sendmail)',
    'local_mail_info_text'        => 'Les e-mails sont envoyés via la configuration de messagerie locale du serveur (PHP mail() / sendmail). Aucun serveur de messagerie externe requis. Une adresse et un nom d\'expéditeur peuvent être configurés optionnellement.',
    'ms_tenant_id'                => 'ID du tenant',
    'ms_client_id'                => 'ID client',
    'ms_client_secret'            => 'Secret client',
    'ms_from_email'               => 'E-mail expéditeur',
    'ms_info_text'                => 'Envoi d\'e-mails via l\'API Microsoft Graph (OAuth 2.0 client credentials). Créez un enregistrement d\'application dans Azure, accordez la permission Mail.Send (permission d\'application) et entrez l\'ID du tenant, l\'ID client et le secret client.',
    'ms_test_ok'                  => 'Connexion Microsoft réussie – authentification OK',
    'ms_test_fail'                => 'Connexion Microsoft échouée – vérifiez vos identifiants',
    'ms_missing_fields'           => 'L\'ID du tenant, l\'ID client et le secret client sont requis',
    'ollama_url_hint'             => 'Local ou distant, ex. https://mon-serveur.com',
    'ai_rate_limited'             => 'Trop de messages. Veuillez attendre une heure avant d\'en envoyer d\'autres.',
    'ai_authentication'           => 'Authentification',
    'auth_none_label'             => 'Aucune (installation locale)',
    'bearer_token_hint'           => 'Pour ollama.com : clé API depuis les paramètres du compte',
    'openai_key_hint'             => 'Clé API OpenAI depuis platform.openai.com',
    'model_label'                 => 'Modèle',
    'azure_endpoint_label'        => 'Point de terminaison Azure',
    'azure_endpoint_hint'         => 'L\'URL de base de votre ressource Azure OpenAI',
    'deployment_label'            => 'Déploiement',
    'api_version_label'           => 'Version de l\'API',
    'api_key_label'               => 'Clé API',
    'azure_key_hint'              => 'Trouvé dans Portail Azure → votre ressource OpenAI → Clés et point de terminaison',
    'load_models'                 => 'Charger les modèles',
    'stored_placeholder'          => '(enregistré)',
    'password_min'                => 'Le mot de passe doit contenir au moins 8 caractères',
    'new_password_min'            => 'Le nouveau mot de passe doit contenir au moins 8 caractères',
    'password_reset_success'      => 'Mot de passe réinitialisé',
    'request_approved'            => 'Demande approuvée.',
    'request_denied'              => 'Demande refusée.',
    'notif_group_approved_title'  => 'Demande de groupe approuvée',
    'notif_group_approved_msg'    => 'Votre demande de créer des groupes a été approuvée.',
    'notif_group_denied_title'    => 'Demande de groupe refusée',
    'notif_group_denied_msg'      => 'Votre demande de créer des groupes a malheureusement été refusée.',
    'status_updated'              => 'Statut mis à jour',
    'comment_saved'               => 'Commentaire enregistré.',
    'invalid_request'             => 'Requête invalide.',
    'plugin_deleted'              => 'Plugin supprimé.',
    'plugin_uploaded'             => 'Plugin téléchargé et installé.',
    'plugin_delete_error'         => 'Le plugin n\'a pas pu être supprimé.',
    'plugin_lock_active_hint'     => 'Ce plugin est actif en permanence. Le désactiver lèverait l\'isolation des données qu\'il garantit et provoquerait un incident de confidentialité.',
    'plugin_lock_active_error'    => 'Ce plugin ne peut pas être désactivé ou supprimé car il garantit une isolation permanente des données.',
    'zip_only'                    => 'Seuls les fichiers ZIP sont autorisés.',
    'zip_not_supported'           => 'Support ZIP non disponible.',
    'zip_not_openable'            => 'Le ZIP n\'a pas pu être ouvert.',
    'upload_failed'               => 'Téléchargement échoué.',
    'file_too_large'              => 'Fichier trop volumineux (max. 5 Mo).',
    'zip_path_traversal'          => 'ZIP invalide (traversée de chemin détectée).',
    'zip_no_manifest'             => 'Aucun plugin.json trouvé dans le ZIP.',
    'invalid_plugin_json'         => 'plugin.json invalide (id et class sont requis).',
    'invalid_plugin_id'           => 'ID de plugin invalide (uniquement lettres, chiffres, - et _).',
    'name_required'               => 'Le nom est requis',
    'group_name_required'         => 'Le nom du groupe est requis.',
    'group_created_success'       => 'Le groupe a été créé avec succès.',
    'group_invite_notif_title'    => 'Invitation au groupe',
    'title_required'              => 'Le titre est requis',
    'description_required'        => 'La description est requise',
    'due_date_required'           => 'La date d\'échéance est requise',
    'image_only'                  => 'Seules les images sont autorisées (jpg, png, gif, webp)',
    'image_too_large'             => 'Image max. 2 Mo',
    'avatar_updated'              => 'Avatar mis à jour',
    'new_group_request_title'     => 'Nouvelle demande de groupe',
    'new_group_request_msg'       => '%s demande l\'autorisation de créer des groupes.',
    'group_request_sent'          => 'Votre demande a été envoyée et sera examinée par l\'administrateur.',
    'invite_not_found'            => 'Invitation non trouvée ou expirée',
    'invite_wrong_account'        => 'Cette invitation ne s\'applique pas à votre compte',
    'invite_join_error'           => 'Erreur lors de la rejoindre du groupe',
    'group_invite_notif_msg'      => '%s vous a invité au groupe "%s".',
    'model_load_unknown_provider' => 'Fournisseur inconnu.',
    'model_load_failed'           => 'Connexion échouée – veuillez vérifier les identifiants.',
    'project_create_error'        => 'Erreur lors de la création du projet',
    'status_open'                 => 'Ouvert',
    'status_in_progress'          => 'En cours',
    'status_review'               => 'Révision',
    'status_done'                 => 'Terminé',
    'project_label'               => 'Projet',
    'gantt_weeks'                 => 'Semaines',
    'gantt_months'                => 'Mois',
    'gantt_auto_deps'             => 'Auto-lien',
    'gantt_auto_deps_title'       => 'Créer automatiquement les dépendances depuis le calendrier',
    'gantt_clear_deps'            => 'Effacer les liens',
    'gantt_clear_deps_title'      => 'Supprimer toutes les dépendances de ce projet',
    'gantt_confirm_clear_deps'    => 'Supprimer toutes les dépendances de ce projet ?',
    'gantt_clear_dates'           => 'Effacer les dates',
    'gantt_clear_dates_title'     => 'Supprimer toutes les dates de début et d\'échéance des tâches',
    'gantt_confirm_clear_dates'   => 'Supprimer toutes les dates de début et d\'échéance de toutes les tâches ?',

    'powered_by_plenvo'   => 'Powered by Plenvo',

    // Auto-updater
    'update_nav'               => 'Mises à jour',
    'update_title'             => 'Mise à jour système',
    'update_status'            => 'Statut de mise à jour',
    'update_installed_version' => 'Version installée',
    'update_available_version' => 'Version disponible',
    'update_new'               => 'Nouvelle version disponible',
    'update_latest'            => 'À jour',
    'update_preview'           => 'Version preview',
    'update_check_failed'      => 'Vérification échouée – serveur inaccessible',
    'update_changelog'         => 'Changements',
    'update_force_check'       => 'Revérifier',
    'update_now'               => 'Mettre à jour vers :version',
    'update_confirm'           => 'Mettre à jour vers la nouvelle version maintenant ? Assurez-vous de sauvegarder votre dossier data/ d\'abord.',
    'update_already_latest'    => 'Déjà à jour.',
    'update_success'           => 'Mise à jour réussie ! Les migrations de base de données s\'exécuteront au prochain chargement de page.',
    'update_progress_title'    => 'Mise à jour en cours',
    'update_progress_starting' => 'Démarrage de la mise à jour…',
    'update_redirect_in'       => 'Redirection dans',
    'update_unknown_error'     => 'Erreur inconnue',
    'update_hints_title'       => 'Remarques',
    'update_hint_backup'       => '⚠ Sauvegardez toujours votre dossier data/ avant une mise à jour (base de données, uploads, avatars).',
    'update_hint_data'         => '✓ Vos données dans data/ ne seront jamais écrasées lors d\'une mise à jour.',
    'update_hint_migrations'   => '✓ Les migrations de base de données s\'exécutent automatiquement au prochain chargement de page.',
    'updates_enabled'          => 'Activer les vérifications automatiques de mise à jour',
    'updates_enabled_hint'     => 'Désactiver cela empêche toutes les connexions sortantes vers plenvo.gp-server.com.',
    'updates_disabled_label'   => 'Vérifications de mise à jour désactivées',

    // System info
    'system_info'         => 'Mise à jour logicielle',
    'changelog_since'     => 'Changements dans cette mise à jour',
    'view_changelog'      => 'Voir le changelog',
    'app_version_label'   => 'Version installée',

    // External views
    'overview'                    => 'Aperçu',
    'send'                        => 'Envoyer',
    'change_status'               => 'Changer le statut',
    'no_tasks_assigned'           => 'Aucune tâche assignée.',
    'ext_badge'                   => 'Ext.',
    'ext_comment_placeholder'     => 'Écrire un commentaire… – @ pour mentionner',
    'due_label'                   => 'Échéance',
    'comment_empty_error'         => 'Le commentaire ne peut pas être vide.',
    'comment_too_long'            => 'Commentaire trop long (max. 5000 caractères).',
    'ext_assign_greeting' => 'Bonjour :name,',
    'ext_assign_intro' => 'La tâche :task vous a été attribuée dans le projet :project.',
    'ext_assign_link' => 'Afficher les tâches →',
    'ext_assign_footer' => 'Ce lien est personnel et vous donne accès à vos tâches dans ce projet.',
    'ext_assign_subject' => 'Tâche attribuée – :task',
    'app_default_language_label' => 'Langue système par défaut',
    'app_default_language_hint' => 'Utilisée lorsque ni la langue du navigateur ni le paramètre personnel de l\'utilisateur ne correspondent à une langue prise en charge.',
    'domain_lang_title' => 'Mappage langue/domaine',
    'domain_lang_desc' => 'Les destinataires externes reçoivent les courriels dans la langue associée au domaine de leur adresse e-mail.',
    'domain_lang_col_domain' => 'Domaine',
    'domain_lang_col_language' => 'Langue',
    'domain_lang_add_btn' => 'Enregistrer le mappage',
    'domain_lang_empty' => 'Aucun mappage de domaine configuré.',
    'domain_lang_invalid_domain' => 'Domaine invalide.',
    'domain_lang_invalid_language' => 'Langue invalide.',
    'domain_lang_saved' => 'Mappage de domaine enregistré.',
    'domain_lang_save_failed' => 'Impossible d\'enregistrer le mappage de domaine.',
    'domain_lang_deleted' => 'Mappage de domaine supprimé.',
    'contact_attachment_label' => 'Fichier (facultatif)',
    'contact_attachment_hint' => 'Images ou PDF, max. 10 Mo.',
    'contact_err_attachment_type' => 'Seules les images (jpg, png, gif, webp) et le PDF sont autorisés.',
    'contact_err_attachment_size' => 'Fichier trop volumineux (max. 10 Mo).',
    'contact_err_attachment_upload' => 'Échec du téléversement du fichier.',
    'auto_update_title' => 'Mises à jour automatiques planifiées',
    'auto_update_desc' => 'Lorsqu\'elles sont activées, le cron installe automatiquement les mises à jour disponibles dans la fenêtre configurée. Nécessite que cron.php s\'exécute régulièrement (par exemple toutes les 5 à 15 minutes) et que les mises à jour soient autorisées.',
    'auto_update_enabled' => 'Activer les mises à jour automatiques',
    'auto_update_time_label' => 'Heure planifiée (HH:MM, heure du serveur)',
    'auto_update_time_hint' => 'Les mises à jour s\'exécutent lors du cycle cron suivant cette heure, au maximum une fois par jour.',
    'hc_migrations' => 'Migrations de base de données',
    'hc_migrations_ok' => 'Toutes les migrations appliquées',
    'hc_migrations_pending' => ':n en attente',
    'hc_migrations_failed' => 'Échec : :id (:error)',
    'hc_migrations_failed_generic' => 'Échec, consultez le journal du serveur',
    'hc_app_version' => 'Version de l\'app (code vs. BD)',
    'hc_app_version_ok' => 'Code et base de données synchronisés (:code)',
    'hc_app_version_mismatch' => 'Version du code :code, version de la BD :db',
    'plugin_settings' => 'Paramètres',
    'hc_ldap_transport' => 'Transport LDAP',
    'hc_ldap_inactive' => 'Plugin LDAP désactivé',
    'hc_ldap_transport_ok' => ':mode actif',
    'hc_ldap_transport_cleartext' => 'LDAP en clair transmet les identifiants et mots de passe sans chiffrement',
    'hc_ldap_ca' => 'Certificat CA LDAP',
    'hc_ldap_ca_none' => 'Aucun certificat CA téléchargé',
    'hc_ldap_ca_unknown' => 'CA enregistré, validité inconnue',
    'hc_ldap_ca_expired' => 'Certificat CA expiré depuis :days jours',
    'hc_ldap_ca_soon' => 'Le certificat CA expire dans :days jours',
    'hc_ldap_ca_ok' => 'Certificat CA valide (:days jours restants)',
    'hc_ldap_sync' => 'Synchronisation LDAP',
    'hc_ldap_sync_never' => 'La synchronisation n\'a pas encore été exécutée',
    'hc_ldap_sync_ok' => 'Dernière exécution il y a :h h',
    'hc_ldap_sync_warn' => 'Dernière exécution il y a :h h (plus de 4 h)',
    'hc_ldap_sync_stale' => 'Dernière exécution il y a :h h (plus de 24 h)',
    'bulk_selected' => 'sélectionnées',
    'bulk_set_status' => 'Définir le statut',
    'bulk_set_priority' => 'Définir la priorité',
    'bulk_set_assignees' => 'Assigner',
    'bulk_set_due_date' => 'Définir l\'échéance',
    'bulk_add_label' => 'Ajouter une étiquette',
    'bulk_remove_label' => 'Retirer l\'étiquette',
    'bulk_apply' => 'Appliquer',
    'bulk_clear' => 'Effacer la sélection',
    'bulk_delete' => 'Supprimer',
    'bulk_confirm_delete' => 'Supprimer vraiment :n tâches ?',
    'external' => 'Externe',
    'clear' => 'Effacer',
    'cmdk_placeholder' => 'Rechercher projets, tâches ou personnes…',
    'cmdk_empty' => 'Aucun résultat',
    'cmdk_type_more' => 'Saisissez au moins 2 caractères…',
    'cmdk_navigate' => 'naviguer',
    'cmdk_open' => 'ouvrir',
    'shortcuts_title' => 'Raccourcis clavier',
    'shortcuts_open_palette' => 'Ouvrir la recherche rapide',
    'shortcuts_navigate_results' => 'Naviguer dans les résultats',
    'shortcuts_open_result' => 'Ouvrir le résultat',
    'shortcuts_close' => 'Fermer la boîte de dialogue',
    'shortcuts_hint' => 'La recherche rapide trouve les projets et les tâches auxquels vous avez accès. Les raccourcis fonctionnent partout dans Plenvo.',
    'cmdk_people' => 'Personnes',
    'cmdk_open_tasks' => 'ouvertes',
    'managed_tasks_title' => 'Tâches dans vos projets',
    'managed_tasks_subtitle' => 'Tâches ouvertes de :name dans les projets où vous êtes propriétaire ou manager.',
    'managed_tasks_empty' => 'Aucune tâche ouverte dans vos projets.',
    'plugin_impersonate_desc' => 'Permet aux administrateurs d\'utiliser l\'application en tant qu\'un autre utilisateur.',
    'plugin_provider_edition_desc' => 'Isolation des utilisateurs par groupes, demandes de création de groupes et invitations par e-mail.',
    'plugin_ldap_desc' => 'Authentifie les utilisateurs de Plenvo de manière transparente contre un serveur LDAP/AD. Prend en charge LDAPS, StartTLS et (avec avertissement) texte clair. Provisionnement JIT, synchronisation cron pour les utilisateurs désactivés et groupe d\'administrateurs optionnel.',
    'plugin_oidc_desc' => 'Authentification unique via OpenID Connect. Compatible avec Keycloak, Google Workspace, Microsoft Entra ID et tout autre fournisseur OIDC en parallèle.',
    'plugin_gdpr_desc' => 'Met en œuvre le droit d\'accès prévu à l\'art. 15 du RGPD. Les administrateurs peuvent exporter une copie des données d\'un utilisateur ; en option, les utilisateurs peuvent télécharger eux-mêmes leurs données.',
    'gdpr_export_admin_btn' => 'Export RGPD',
    'gdpr_export_admin_btn_title' => 'Télécharger une archive ZIP contenant les données personnelles de cet utilisateur (art. 15 RGPD).',
    'gdpr_self_export_card_title' => 'Télécharger vos données (RGPD)',
    'gdpr_self_export_card_desc' => 'Recevez une archive ZIP contenant une copie des données personnelles que cette instance détient sur vous. Le téléchargement est généré à la volée et n\'est pas stocké sur le serveur.',
    'gdpr_self_export_btn' => 'Télécharger mes données',
    'gdpr_self_export_cooldown' => 'Disponible à nouveau dans %d heure(s).',
    'gdpr_self_export_disabled' => 'L\'export en libre-service est actuellement désactivé par l\'opérateur.',
    'gdpr_readme_heading' => 'Export de données RGPD — %s',
    'gdpr_readme_for' => 'Pour : %s <%s>',
    'gdpr_readme_generated' => 'Généré : %s',
    'gdpr_readme_trigger' => 'Déclenché : %s',
    'gdpr_readme_triggered_admin' => 'par un administrateur en votre nom',
    'gdpr_readme_triggered_self' => 'par vous-même depuis la page en libre-service',
    'gdpr_readme_contents_heading' => 'Contenu de cette archive',
    'gdpr_readme_contents' => "Chaque fichier JSON de cette archive ZIP correspond à une catégorie de données personnelles :\n\n  profile.json           Compte et préférences (sans hash de mot de passe, secret MFA, jetons de réinitialisation).\n  projects.json          Projets dont vous êtes propriétaire ou membre.\n  tasks.json             Tâches que vous avez créées ou qui vous sont assignées.\n  comments.json          Commentaires que vous avez rédigés.\n  ai_messages.json       Messages envoyés à l'assistant IA (le cas échéant).\n  notifications.json     Notifications qui vous sont adressées.\n  activity_log.json      Actions que vous avez effectuées (création, modification, changements de statut, etc.).\n  security_events.json   Événements de sécurité de votre compte (connexions, MFA, exports).\n  webauthn.json          Métadonnées des passkeys enregistrées (sans octets de clé publique).\n  invitations.json       Invitations envoyées à votre adresse e-mail.\n  attachments.json       Métadonnées des fichiers que vous avez téléversés.\n  group_memberships.json Adhésions à des groupes (uniquement en installations Provider Edition).\n  attachments/           Les fichiers téléversés eux-mêmes, uniquement si l'opérateur a activé cette option.\n\nVolontairement NON inclus : hash de mot de passe, secret TOTP, codes de récupération MFA, octets de clé publique WebAuthn, corps d'e-mails chiffrés, file d'attente d'envoi transitoire. Leur inclusion ne vous serait pas utile et affaiblirait la sécurité de votre compte.",
    'gdpr_readme_rights_heading' => 'Vos droits au titre du RGPD',
    'gdpr_readme_rights' => "Au-delà du droit d'accès (art. 15) que cet export satisfait, vous disposez également :\n\n  - Du droit de rectification (art. 16) : corriger les données inexactes dans les paramètres de votre compte.\n  - Du droit à l'effacement (art. 17) : supprimer votre compte depuis la page des paramètres.\n  - Du droit à la limitation du traitement (art. 18).\n  - Du droit à la portabilité des données (art. 20) : les fichiers JSON de cette archive sont lisibles par machine.\n  - Du droit d'opposition (art. 21).\n  - Du droit d'introduire une réclamation auprès d'une autorité de contrôle (art. 77).\n\nPour toute question sur le traitement de vos données, contactez le responsable mentionné dans l'introduction ci-dessus.",
    'oidc_or_continue_with' => 'Ou se connecter avec',
    'oidc_sign_in_with' => 'Se connecter avec',
    'inactive_cleanup_title' => 'Supprimer automatiquement les comptes inactifs',
    'nav_inactive_cleanup' => 'Comptes inactifs',
    'inactive_cleanup_excluded_label' => 'Jamais concernés',
    'inactive_cleanup_excluded_hint' => 'Les comptes administrateur et les comptes gérés via LDAP / Active Directory. Leur cycle de vie est contrôlé par l\'annuaire.',
    'scope_mine' => 'Mes tâches',
    'scope_all_my_projects' => 'Toutes dans mes projets',
    'assigned_filter_me' => 'Qui me sont assignées',
    'assigned_filter_others' => 'Autres personnes',
    'assigned_filter_externals' => 'Participants externes',
    'assigned_filter_none' => 'Non assignées',
    'assigned_filter_anyone' => 'N\'importe qui',
    'clear_filters' => 'Effacer les filtres',
    'clear_filters_hint' => 'Supprimer tous les filtres et afficher tout ce à quoi vous avez accès.',
    'inactive_cleanup_desc' => 'Les utilisateurs qui ne se sont pas connectés pendant la période configurée reçoivent d\'abord un e-mail d\'avertissement. Si l\'utilisateur ne se connecte pas pendant le délai de grâce, le compte est définitivement supprimé. Les comptes administrateur sont exclus. Les projets dont l\'utilisateur est l\'unique propriétaire sont supprimés avec le compte.',
    'inactive_cleanup_enable_label' => 'Activer',
    'inactive_cleanup_threshold_label' => 'Inactivité (mois)',
    'inactive_cleanup_threshold_hint' => 'Par défaut 12. Entre 1 et 120.',
    'inactive_cleanup_warning_label' => 'Délai de grâce (jours)',
    'inactive_cleanup_warning_hint' => 'Par défaut 14. Entre 1 et 90.',
    'inactive_cleanup_last_run' => 'Dernière exécution le :when — :warned avertis, :deleted supprimés.',
    'mail_inactive_warning_subject' => 'Votre compte sera supprimé dans :days jours',
    'mail_inactive_warning_body' => 'Votre compte est inactif depuis longtemps. Si vous ne vous connectez pas dans les :days jours, le compte et les projets dont vous êtes l\'unique propriétaire seront définitivement supprimés.',
    'mail_inactive_warning_cta' => 'Se connecter maintenant',
    'mail_inactive_warning_footer' => 'Ceci est un e-mail automatique de Plenvo. Une simple connexion réussie suffit à annuler la suppression.',
    'mail_greeting' => 'Bonjour :name,',
    'mail_open_task' => 'Ouvrir la tâche →',
    'mail_show_tasks' => 'Afficher les tâches →',
    'mail_view_task' => 'Voir la tâche',
    'mail_view_comment' => 'Voir le commentaire →',
    'mail_personal_link' => 'Ce lien est personnel et vous donne accès à vos tâches dans ce projet.',
    'mail_project_label' => 'Projet : :name',
    'mail_assigned_subject' => 'Tâche attribuée – :task',
    'mail_assigned_body' => 'La tâche :task vous a été attribuée dans le projet :project.',
    'mail_mgr_activity_subject' => 'Activité – :project',
    'mail_mgr_activity_body' => 'Activité dans le projet :project : :actor – :action. Tâche : :task',
    'mail_activity_inapp' => 'Activité : :task',
    'mail_task_done_subject' => 'Tâche terminée – :task',
    'mail_task_done_intro' => 'La tâche suivante a été terminée :',
    'mail_task_done_by' => 'Terminée par : :actor',
    'mail_task_done_inapp' => 'Par : :actor | Projet : :project',
    'mail_predec_subject' => 'La tâche peut commencer – :task',
    'mail_predec_intro' => 'Toutes les tâches précédentes de :task dans le projet :project sont terminées.',
    'mail_predec_cta' => 'Vous pouvez maintenant commencer votre tâche.',
    'mail_predec_inapp' => 'Toutes les précédentes terminées | Projet : :project',
    'mail_reminder_subject' => 'Rappel – :task',
    'mail_reminder_3days_body' => 'Rappel : La tâche :task dans le projet :project est due dans 3 jours.',
    'mail_reminder_3days_inapp' => 'Due dans 3 jours : :task',
    'mail_comment_subject' => 'Nouveau commentaire – :task',
    'mail_comment_body_internal' => ':actor a commenté la tâche :task dans le projet :project.',
    'mail_comment_body_external' => 'La tâche :task dans le projet :project a été commentée.',
    'mail_comment_inapp' => 'Par : :actor | Projet : :project',
    'mail_change_subject' => 'Tâche modifiée – :task',
    'mail_change_body' => 'La tâche :task dans le projet :project a été modifiée.',
    'mail_unassign_subject' => 'Retiré de la tâche – :task',
    'mail_unassign_body' => 'Vous avez été retiré de la tâche :task dans le projet :project.',
    'mail_attachment_subject' => 'Nouvelle pièce jointe – :task',
    'mail_attachment_body' => 'Une nouvelle pièce jointe a été ajoutée à la tâche :task dans le projet :project.',
    'mail_task_created_subject' => 'Nouvelle tâche – :task',
    'mail_task_created_intro' => 'Une nouvelle tâche a été créée dans le projet :project :',
    'mail_created_by' => 'Créée par : :actor',
    'mail_task_created_inapp' => 'Créée par : :actor | Projet : :project',
    'mail_mention_subject' => 'Vous avez été mentionné – :task',
    'mail_mention_body_internal' => ':actor vous a mentionné dans un commentaire sur la tâche :task dans le projet :project.',
    'mail_mention_body_external' => 'Vous avez été mentionné dans un commentaire sur la tâche :task dans le projet :project.',
    'mail_mention_inapp' => 'Par : :actor | Projet : :project',
    'mail_dueday_subject' => 'Dû aujourd\'hui – :task',
    'mail_dueday_body' => 'Rappel : La tâche :task dans le projet :project est due aujourd\'hui.',
    'mail_overdue_subject' => 'Tâche en retard – :task',
    'mail_overdue_intro' => 'La tâche suivante est en retard :',
    'mail_overdue_due_was' => 'Échéance : :date',
    'mail_overdue_inapp' => 'Échéance : :date | Projet : :project',
    'mail_startdate_subject' => 'La tâche peut commencer – :task',
    'mail_startdate_body' => 'La tâche :task dans le projet :project commence aujourd\'hui. Vous pouvez commencer maintenant.',
    'mail_startdate_due_info' => 'Échéance : :date.',
    'mail_task_event_body' => ':actor :action :',
    'mail_admin_group_request_subject' => 'Demande de groupe de :user',
    'mail_admin_group_request_intro' => 'Un utilisateur demande l\'autorisation de créer ses propres groupes :',
    'mail_admin_label_username' => 'Nom d\'utilisateur',
    'mail_admin_label_email' => 'E-mail',
    'mail_admin_label_time' => 'Heure',
    'mail_admin_manage_requests' => 'Gérer les demandes →',
    'mail_admin_new_reg_subject' => 'Nouvelle inscription – :user',
    'mail_admin_new_reg_intro' => 'Un nouvel utilisateur s\'est inscrit et attend la vérification par e-mail :',
    'mail_admin_open_users' => 'Ouvrir la gestion des utilisateurs →',
    'mail_admin_new_reg_inapp' => 'Nouvelle inscription : :user',
    'security_log_title' => 'Journal de sécurité',
    'security_log_desc' => 'Événements liés à la sécurité (connexions, MFA, actions d\'administrateur, opérations de plugins/mises à jour). Rétention : :days jours. Affichage des 500 dernières entrées.',
    'security_log_filter_type' => 'Type d\'événement',
    'security_log_filter_severity' => 'Gravité',
    'security_log_filter_all' => 'Tous',
    'security_log_empty' => 'Aucun événement de sécurité enregistré.',
    'security_log_col_time' => 'Heure',
    'security_log_col_severity' => 'Niveau',
    'security_log_col_type' => 'Type',
    'security_log_col_user' => 'Utilisateur',
    'security_log_col_ip' => 'IP',
    'security_log_col_details' => 'Détails',
    'security_log_filter_placeholder' => 'Filtrer…',
    'security_log_filter_no_match' => 'Aucune entrée ne correspond aux filtres actuels.',
    'security_log_max_rows' => 'Affichage limité à 500 entrées. Les entrées plus anciennes sont supprimées automatiquement selon la rétention configurée.',
    'security_log_deleted_user' => 'supprimé',
    'sec_seclog_title' => 'Journal des événements de sécurité',
    'sec_seclog_retention' => 'Rétention (jours)',
    'sec_seclog_retention_hint' => 'Jours avant suppression automatique des événements de sécurité. 0 = conserver indéfiniment.',
    'apply' => 'Appliquer',
    'reset' => 'Réinitialiser',
    'mail_footer_auto_generated' => 'Cet e-mail a été généré automatiquement',
    'update_available_notif_title' => 'Plenvo :version disponible',
    'update_available_notif_msg' => 'Une nouvelle version est disponible. Mettez à jour maintenant dans les paramètres système.',
    'plugin_activated_msg' => 'Plugin activé.',
    'plugin_deactivated_msg' => 'Plugin désactivé.',
    'preferences_saved_msg' => 'Préférences enregistrées.',
    'project_status_added' => 'Statut ajouté',
    'project_status_deleted' => 'Statut supprimé',
    'project_label_added' => 'Étiquette ajoutée',
    'project_label_deleted' => 'Étiquette supprimée',
    'ai_request_failed' => 'Échec de la requête IA. Veuillez réessayer.',
    'contact_admin_mail_title' => 'Nouvelle demande de contact',
    'contact_admin_mail_footer' => 'Envoyé depuis l\'IP :ip le :time',
    'notify_admins_new_registration_label' => 'Notifier les administrateurs des nouvelles inscriptions',
    'notify_admins_new_registration_hint' => 'Lorsqu\'activé, les administrateurs reçoivent un e-mail et une notification dans l\'application dès qu\'un utilisateur s\'inscrit (avant la vérification de l\'e-mail).',
    'unverified_user_max_hours_label' => 'Supprimer les comptes non vérifiés après (heures)',
    'unverified_user_max_hours_hint' => 'Les comptes n\'ayant pas confirmé leur e-mail dans ce délai après inscription sont automatiquement supprimés par le cron. 0 = ne jamais supprimer.',
    'timezone_label' => 'Fuseau horaire',
    'timezone_user_hint' => 'Laissez vide pour utiliser le fuseau horaire par défaut de l\'installation.',
    'timezone_inherit_default' => '— Par défaut du système —',
    'app_default_timezone_label' => 'Fuseau horaire par défaut',
    'app_default_timezone_hint' => 'Utilisé lorsqu\'un utilisateur n\'a pas défini son propre fuseau horaire. Affecte l\'affichage de la date/heure dans les e-mails et l\'interface.',
    'save_all_btn' => 'Enregistrer tous les paramètres',
    'save_all_in_progress' => 'Enregistrement…',
    'save_all_success' => 'Tous les paramètres ont été enregistrés',
    'save_all_failed' => 'Échec de l\'enregistrement — rechargez et réessayez',
    'toast_click_to_copy' => 'Cliquer pour copier',
    'toast_copied' => 'Copié dans le presse-papiers ✓',
    'toast_close' => 'Fermer',
    'hc_cron_title' => 'Health Check comme moniteur cron',
    'hc_cron_desc' => 'Lorsque activé, le cron exécute toutes les vérifications à l\'intervalle configuré. Un e-mail est envoyé lorsqu\'un état se dégrade (OK → avertissement/erreur ou avertissement → erreur). Chaque problème n\'est signalé qu\'une seule fois jusqu\'à ce qu\'il s\'améliore ou soit résolu.',
    'hc_cron_enable_label' => 'Activer le moniteur cron',
    'hc_cron_interval_label' => 'Intervalle (minutes)',
    'hc_cron_interval_hint' => 'Minimum 5, maximum 1440 minutes (24h).',
    'hc_cron_alert_email_label' => 'Adresse(s) e-mail d\'alerte',
    'hc_cron_alert_email_hint' => 'Séparées par virgules ou espaces. Vide = tous les administrateurs actifs.',
    'topbar_health_ok' => 'Système sain',
    'topbar_health_warn' => 'Système : avertissements',
    'topbar_health_error' => 'Système : erreurs',
    'topbar_health_unknown' => 'État du système inconnu — le moniteur cron n\'a pas encore tourné',
    'mail_hc_alert_subject' => 'Alerte Health Check — :n problème(s)',
    'mail_hc_alert_intro' => 'La dernière vérification cron a détecté de nouveaux problèmes :',
    'mail_hc_resolved_subject' => 'Health Check — :n problème(s) résolu(s)',
    'mail_hc_resolved_intro' => 'Les problèmes précédemment signalés sont désormais résolus :',
    'mail_hc_at' => 'Vérifié le :time',
    'hc_paths' => 'Chemins sensibles',
    'hc_paths_ok' => ':n chemins non accessibles publiquement',
    'hc_paths_exposed' => 'Accessibles publiquement : :list',
    'hc_key_perms' => 'Permissions du fichier de clé',
    'hc_key_missing' => 'data/app.key n\'existe pas encore (créé au premier chiffrement)',
    'hc_key_ok' => '0600 (propriétaire uniquement)',
    'hc_key_bad' => 'data/app.key a les permissions :perms — devrait être 0600',
    'hc_db_perms' => 'Permissions du fichier BD',
    'hc_db_missing' => 'data/database.sqlite n\'existe pas',
    'hc_db_ok' => ':perms (non lisible par tous)',
    'hc_db_world_readable' => 'data/database.sqlite est lisible par tous (:perms) — vol de données possible',
    'hc_https' => 'HTTPS imposé',
    'hc_https_not_https' => 'app_url est :url — devrait commencer par https://',
    'hc_https_http_open' => 'http:// renvoie 200 au lieu d\'une redirection/blocage — identifiants pouvant transiter en clair',
    'hc_https_ok' => 'app_url utilise https et http:// bloque/redirige',
    'hc_admin_mfa' => 'Comptes admin avec 2FA',
    'hc_admin_mfa_ok' => 'Tous les admins actifs ont au moins un second facteur',
    'hc_admin_mfa_missing' => ':n admin(s) sans TOTP/Email-MFA/WebAuthn',
    'hc_admin_mfa_check_failed' => 'Vérification échouée',
    'hc_php_config' => 'Configuration PHP',
    'hc_php_config_ok' => 'PHP :v — display_errors/expose_php désactivés, cookies de session HttpOnly',
    'hc_php_config_issues' => 'Valeurs recommandées violées : :list',
    'hc_mail_heartbeat' => 'Battement d\'envoi de mail',
    'hc_mail_heartbeat_disabled' => 'Notifications désactivées',
    'hc_mail_heartbeat_unconfigured' => 'Aucun fournisseur de mail configuré',
    'hc_mail_heartbeat_never' => 'Aucun envoi réussi enregistré',
    'hc_mail_heartbeat_ok' => 'Dernier envoi réussi il y a :h heure(s)',
    'hc_mail_heartbeat_stale' => 'Dernier envoi réussi il y a :d jours — vérifier SMTP/fournisseur',
    'hc_disk' => 'Espace disque libre',
    'hc_disk_unknown' => 'Impossible de déterminer l\'espace libre',
    'hc_disk_ok' => ':gb Go libres',
    'hc_disk_low' => 'Seulement :gb Go libres (seuil 15 Go) — téléversements/sauvegardes en danger',
    'dl_bsi_hint' => 'Rapport de sécurité et conformité BSI au niveau code :',

    // ── Sondages de dates (plugin meetingpoll) ──────────────────────────────
    'mp_plugin_desc'        => 'Sondages de disponibilité multi-options : proposez plusieurs créneaux, partagez un lien, les participants votent sans se connecter.',
    'mp_nav'                => 'Sondages de dates',
    'mp_new_poll'           => 'Nouveau sondage de dates',
    'mp_list_intro'         => 'Proposez plusieurs dates et partagez le lien : les participants votent sans compte.',
    'mp_no_polls'           => 'Vous n\'avez encore créé aucun sondage de dates.',
    'mp_col_title'          => 'Titre',
    'mp_col_options'        => 'Options',
    'mp_col_responses'      => 'Réponses',
    'mp_col_status'         => 'Statut',
    'mp_status_open'        => 'Ouvert',
    'mp_status_closed'      => 'Clos',
    'mp_status_finalized'   => 'Confirmé',
    'mp_create_title'       => 'Créer un sondage de dates',
    'mp_edit_title'         => 'Modifier le sondage de dates',
    'mp_field_title'        => 'Titre',
    'mp_field_title_ph'     => 'p. ex. Réunion d\'équipe en mai',
    'mp_field_desc'         => 'Description',
    'mp_field_desc_ph'      => 'De quoi s\'agit-il ? (facultatif)',
    'mp_field_location'     => 'Lieu',
    'mp_field_location_ph'  => 'p. ex. Salle 2 ou visioconférence (facultatif)',
    'mp_field_deadline'     => 'Date limite',
    'mp_field_deadline_hint'=> 'Passé ce délai, plus aucune réponse n\'est acceptée (facultatif).',
    'mp_field_options'      => 'Options de date/heure',
    'mp_opt_date'           => 'Date',
    'mp_opt_start'          => 'De',
    'mp_opt_end'            => 'À',
    'mp_add_option'         => 'Ajouter une option',
    'mp_opt_hint'           => 'Laissez l’heure vide pour une option « toute la journée ». Au moins une option est requise.',
    'mp_cal_hint'           => 'Cliquez dans le calendrier sur les jours à proposer comme option. Cliquez à nouveau pour retirer un jour.',
    'mp_no_dates'           => 'Aucun jour sélectionné pour l\'instant.',
    'mp_cal_nojs'           => 'JavaScript est nécessaire pour choisir des dates.',
    'mp_default_time'       => 'Heure par défaut pour les nouveaux jours :',
    'mp_duration'           => 'Durée :',
    'mp_dur_none'           => 'Sans heure de fin',
    'mp_apply_to_all'       => 'Appliquer à tous',
    'mp_edit_time'          => 'Modifier l\'heure',
    'mp_invite_title'       => 'Inviter des participants',
    'mp_invite_hint'        => 'Invitez des utilisateurs Plenvo via la recherche ou saisissez des adresses e-mail externes. Chacun reçoit le lien du sondage par e-mail.',
    'mp_invite_users_label' => 'Utilisateurs Plenvo',
    'mp_invite_search_ph'   => 'Rechercher par nom ou e-mail …',
    'mp_invite_emails_label'=> 'Adresses e-mail externes',
    'mp_invite_emails_ph'   => 'max@example.com, anna@example.com … (séparées par des virgules ou des retours à la ligne)',
    'mp_invite_send'        => 'Envoyer les invitations',
    'mp_invited_people'     => 'Invités',
    'mp_invite_pending'     => 'En attente',
    'mp_invite_responded'   => 'A répondu',
    'mp_invite_resend'      => 'Renvoyer',
    'mp_invite_remove'      => 'Retirer de la liste',
    'mp_invite_remove_confirm' => 'Retirer cette invitation de la liste ?',
    'mp_invite_sent'        => ':count invitation(s) envoyée(s).',
    'mp_invite_resent'      => 'Invitation renvoyée.',
    'mp_invite_removed'     => 'Invitation supprimée.',
    'mp_invite_recently_sent' => 'Cette invitation vient d\'être envoyée. Veuillez patienter un instant.',
    'mp_email_from_invite'  => 'Cette adresse provient de votre invitation et ne peut donc pas être modifiée.',
    'mp_field_allow_maybe'  => 'Autoriser l\'option « si nécessaire » (les participants peuvent choisir « peut-être »)',
    'mp_field_hide_results' => 'Sondage masqué : les participants ne voient pas les réponses des autres',
    'mp_field_notify_owner' => 'M\'envoyer un e-mail à chaque nouvelle réponse',
    'mp_create_submit'      => 'Créer le sondage',
    'mp_created'            => 'Sondage de dates créé.',
    'mp_saved'              => 'Modifications enregistrées.',
    'mp_deleted'            => 'Sondage de dates supprimé.',
    'mp_confirm_delete_poll'    => 'Supprimer ce sondage de dates et toutes les réponses ?',
    'mp_confirm_delete_response'=> 'Supprimer cette réponse ?',
    'mp_delete_response'    => 'Supprimer la réponse',
    'mp_response_deleted'   => 'Réponse supprimée.',
    'mp_share_link'         => 'Lien de partage',
    'mp_copy_link'          => 'Copier le lien',
    'mp_copied'             => 'Copié !',
    'mp_open_link'          => 'Ouvrir',
    'mp_share_hint'         => 'Partagez ce lien avec tous les participants : aucun compte requis.',
    'mp_manage_poll'        => 'Gérer le sondage',
    'mp_meta_responses'     => ':count réponse(s)',
    'mp_meta_deadline'      => 'Date limite : :date',
    'mp_meta_hidden'        => 'Sondage masqué',
    'mp_deadline_passed'    => 'La date limite est passée le :date — plus aucune réponse n\'est possible.',
    'mp_voting_closed'      => 'Ce sondage est clos — le vote n\'est plus possible.',
    'mp_no_options_yet'     => 'Aucune option de date/heure n\'a encore été ajoutée à ce sondage.',
    'mp_participant'        => 'Participant',
    'mp_all_day'            => 'toute la journée',
    'mp_no_responses'       => 'Pas encore de réponses.',
    'mp_total'              => 'Total',
    'mp_results'            => 'Résultats',
    'mp_finalize_title'     => 'Confirmer la date',
    'mp_finalize_hint'      => 'Choisissez la date définitive. Vous pourrez annuler ce choix plus tard.',
    'mp_finalize_choose'    => 'Choisir une date …',
    'mp_finalize_notify'    => 'Prévenir les participants par e-mail',
    'mp_finalize_submit'    => 'Confirmer la date',
    'mp_finalized'          => 'Date confirmée.',
    'mp_finalized_to'       => 'Date définitive',
    'mp_reopen'             => 'Annuler la confirmation',
    'mp_reopened'           => 'Confirmation annulée.',
    'mp_your_response'      => 'Votre réponse',
    'mp_edit_your_response' => 'Modifier votre réponse',
    'mp_voting_as'          => 'Vous votez en tant que :name.',
    'mp_your_name'          => 'Votre nom',
    'mp_your_email'         => 'E-mail',
    'mp_email_ph'           => 'pour être prévenu une fois la date fixée (facultatif)',
    'mp_yes'                => 'Oui',
    'mp_maybe'              => 'Si nécessaire',
    'mp_no'                 => 'Non',
    'mp_comment'            => 'Commentaire',
    'mp_comment_ph'         => 'facultatif',
    'mp_submit_response'    => 'Enregistrer la réponse',
    'mp_update_response'    => 'Mettre à jour la réponse',
    'mp_vote_saved'         => 'Merci ! Votre réponse a été enregistrée.',
    'mp_organized_by'       => 'Organisé par :name',
    'mp_location'           => 'Lieu',
    'mp_poll_not_found'     => 'Ce sondage de dates n\'existe plus.',
    'mp_err_title_required' => 'Veuillez saisir un titre.',
    'mp_err_title_long'     => 'Le titre est trop long.',
    'mp_err_desc_long'      => 'La description est trop longue.',
    'mp_err_loc_long'       => 'Le lieu est trop long.',
    'mp_err_no_options'     => 'Indiquez au moins une option de date/heure valide.',
    'mp_err_too_many_options'=> 'Trop d\'options de date/heure.',
    'mp_err_deadline'       => 'La date limite n\'est pas une date valide.',
    'mp_err_option'         => 'Option de date/heure invalide.',
    'mp_err_closed'         => 'Ce sondage est clos.',
    'mp_err_full'           => 'Ce sondage a atteint le nombre maximal de réponses.',
    'mp_err_no_recipients'  => 'Aucun destinataire valide indiqué.',
    'mp_err_invite_cap'     => 'Ce sondage a atteint le maximum de :max invitations.',
    'mp_err_name_required'  => 'Veuillez saisir votre nom.',
    'mp_err_email'          => 'Veuillez saisir une adresse e-mail valide.',
    'mp_err_rate_limited'   => 'Trop de réponses en peu de temps. Réessayez dans un instant.',
    'mp_wd_0'               => 'dim.',
    'mp_wd_1'               => 'lun.',
    'mp_wd_2'               => 'mar.',
    'mp_wd_3'               => 'mer.',
    'mp_wd_4'               => 'jeu.',
    'mp_wd_5'               => 'ven.',
    'mp_wd_6'               => 'sam.',
    'mp_mail_greeting'      => 'Bonjour :name,',
    'mp_mail_new_response_subject' => 'Nouvelle réponse à votre sondage de dates : :title',
    'mp_mail_new_response_body'    => ':name a répondu à votre sondage de dates « :title ».',
    'mp_mail_view_results'  => 'Voir les résultats',
    'mp_mail_finalized_subject'    => 'Date confirmée : :title',
    'mp_mail_finalized_body'       => 'La date suivante a été fixée pour « :title » :',
    'mp_mail_open_poll'     => 'Ouvrir le sondage',
    'mp_mail_invite_subject'=> 'Invitation à un sondage de dates : :title',
    'mp_mail_invite_body'   => 'Vous êtes invité(e) à voter au sondage de dates « :title ». Choisissez les dates qui vous conviennent :',
];
