fr.yml
1028 lignes · 51066 octets
# Traductions françaises — rustwarden-ui # Sections : login, pages utilisateur, admin, navigation # Connexion login: title: "Connexion" page_title: "Connexion" page_description: "Connexion à votre compte" subtitle: "Connectez-vous à votre compte" username: "Nom d'utilisateur ou email" password: "Mot de passe" submit: "Se connecter" remember_me: "Se souvenir de moi" tab_login: "Connexion" tab_register: "Inscription" register_title: "Créer un compte" register_submit: "Créer mon compte" username_placeholder: "Nom d'utilisateur ou email" password_placeholder: "Votre mot de passe" username_placeholder_register: "Votre nom d'utilisateur (min. 3 caractères)" username_pattern_register: "Minuscules, chiffres et tirets uniquement, 3 à 39 caractères" password_placeholder_register: "Votre mot de passe (min. 8 caractères)" email_placeholder: "votre@email.com" forgot_password: "Mot de passe oublié ?" email_not_verified: "Email non vérifié ?" resend_verification: "Renvoyer l'email de validation" already_have_account: "Déjà un compte ?" sign_in_link: "Se connecter" success_message: "Connexion réussie ! Redirection..." error_message: "Erreur de connexion. Vérifiez vos identifiants." email_unverified_message: "Votre email n'est pas vérifié. Cliquez ci-dessous pour renvoyer le lien." resend_button: "Renvoyer l'email de validation" resend_success: "Email de validation renvoyé si le compte existe." resend_error: "Impossible d'envoyer la demande pour l'instant." resend_prompt: "Veuillez renseigner votre email avant de renvoyer." register_success: "Compte créé avec succès ! Veuillez vérifier votre email." register_error: "Erreur lors de l'inscription" email_label: "Email" footer_text: "Comptes et authentification" # Demande de lien de réinitialisation forgot_password: page_title: "Mot de passe oublié" title: "Mot de passe oublié" subtitle: "Entrez votre adresse email. Si un compte existe, un lien de réinitialisation vous sera envoyé." email_label: "Adresse email" email_placeholder: "vous@example.com" submit: "Envoyer le lien" back_to_login: "Revenir à la connexion" error_default: "Impossible d'envoyer la demande." success_default: "Si un compte existe pour cette adresse, un email de réinitialisation a été envoyé." error_missing_email: "Veuillez renseigner votre email." error_cannot_send: "Impossible d'envoyer la demande pour l'instant." # Renvoyer l'email de validation resend_verification: page_title: "Renvoyer l'email de validation - RustWarden" title: "Renvoyer l'email de validation" subtitle: "Entrez votre adresse email pour recevoir un nouveau lien de validation." email_label: "Adresse email" email_placeholder: "vous@example.com" submit: "Envoyer le lien de validation" back_to_login: "Revenir à la connexion" error_default: "Impossible d'envoyer la demande." success_default: "Si le compte existe et n'est pas vérifié, un email a été envoyé." error_missing_email: "Veuillez renseigner votre email." error_cannot_send: "Impossible d'envoyer la demande pour l'instant." # Réinitialisation de mot de passe (via lien email) password_reset: page_title: "Réinitialiser le mot de passe" title: "Réinitialiser le mot de passe" subtitle: "Entrez votre nouveau mot de passe ci-dessous." new_password_label: "Nouveau mot de passe" new_password_placeholder: "Nouveau mot de passe sécurisé" requirements: "⚠️ Doit contenir : 8+ caractères, majuscule, minuscule, chiffre, caractère spécial" confirm_password_label: "Confirmer le mot de passe" confirm_password_placeholder: "Confirmez votre nouveau mot de passe" missing_token_url: "Token de réinitialisation manquant dans l'URL." missing_token: "Token de réinitialisation manquant." missing_new_password: "Veuillez entrer un nouveau mot de passe." passwords_not_match: "Les mots de passe ne correspondent pas." success_message: "Votre mot de passe a été réinitialisé avec succès. Vous pouvez maintenant vous connecter." error_link_invalid: "Impossible de réinitialiser le mot de passe. Le lien peut être expiré ou invalide." error_generic: "Impossible de réinitialiser le mot de passe pour l'instant." # Page 2FA login login_2fa: page_title: "Vérification 2FA" title: "Vérification en deux étapes" subtitle: "Entrez le code de votre application d'authentification" code_label: "Code d'authentification" backup_code_label: "Code de secours" verify_button: "Vérifier" use_backup_code: "Utiliser un code de secours" use_totp_code: "Utiliser le code de l'application" back_to_login: "Retour à la connexion" error_invalid_code: "Code invalide. Veuillez réessayer." error_network: "Erreur réseau. Veuillez réessayer." # Sécurité 2FA settings_security: page_title: "Sécurité - RustWarden" title: "Authentification à deux facteurs" subtitle: "Protégez votre compte avec une couche de sécurité supplémentaire" totp_title: "Authentification TOTP" status_enabled: "Activé" status_disabled: "Désactivé" enabled_message: "Votre compte est protégé par l'authentification à deux facteurs." disabled_message: "Ajoutez une couche de sécurité supplémentaire à votre compte en activant l'authentification à deux facteurs via une application comme Google Authenticator ou Authy." enable_button: "Activer le 2FA" disable_button: "Désactiver le 2FA" scan_qr: "Scannez ce QR code avec votre application d'authentification" manual_entry: "Ou entrez ce code manuellement" enter_code: "Entrez le code à 6 chiffres de votre application" verify_button: "Vérifier et activer" backup_codes_title: "Codes de secours" backup_codes_warning: "Conservez ces codes dans un endroit sûr. Chaque code ne peut être utilisé qu'une seule fois." backup_codes_remaining: "Codes de secours restants" regenerate_button: "Régénérer les codes" regenerate_confirm: "Êtes-vous sûr ? Les anciens codes seront remplacés." confirm_disable: "Entrez votre mot de passe pour désactiver le 2FA" password_label: "Mot de passe actuel" copy_button: "Copier" saved_codes_button: "J'ai sauvegardé mes codes" breadcrumb: "Sécurité" force_2fa_message: "L'administrateur exige l'activation de l'authentification à deux facteurs. Vous devez configurer le 2FA avant de pouvoir accéder au reste de l'application." force_2fa_logout: "Se déconnecter" # Paramètres settings: title: "Paramètres" page_title: "Paramètres - RustWarden" subtitle: "Gérez vos préférences et paramètres de compte" profile_title: "Mon Profil" profile_desc: "Modifiez vos informations personnelles (nom d'utilisateur, email)" password_title: "Mot de passe" password_desc: "Changez votre mot de passe pour sécuriser votre compte" sessions_title: "Sessions actives" sessions_desc: "Gérez vos sessions actives et révoquez l'accès depuis d'autres appareils" preferences_title: "Préférences" preferences_desc: "Personnalisez votre expérience (thème, langue)" access: "Accéder" info_title: "Informations" info_desc: "Utilisez les sections ci-dessus pour gérer différents aspects de votre compte. Toutes les modifications sont sécurisées et nécessitent votre authentification." language: "Langue" language_description: "Choisissez votre langue préférée" save: "Enregistrer" saved: "Paramètres enregistrés" # Page d'accueil home: welcome: "Bienvenue, {username} !" subtitle: "Bienvenue sur votre espace personnel" my_account: "Mon Compte" stat_username: "Nom d'utilisateur" stat_email: "Email" stat_member_since: "Membre depuis" stat_roles: "Rôles" # Préférences preferences: title: "Préférences d'affichage" page_title: "Préférences d'affichage" subtitle: "Personnalisez l'apparence de l'interface" theme: "Thème" theme_light: "Clair" theme_light_desc: "Interface lumineuse et épurée" theme_dark: "Sombre" theme_dark_desc: "Réduit la fatigue oculaire" theme_auto: "Automatique" theme_auto_desc: "S'adapte à l'heure de la journée" theme_preview: "Le thème sera appliqué immédiatement après l'enregistrement" language: "Langue" language_fr: "Français" language_fr_desc: "Interface en français" language_en: "English" language_en_desc: "English interface" language_de: "Deutsch" language_de_desc: "Deutsche Benutzeroberfläche" language_es: "Español" language_es_desc: "Interfaz en español" language_it: "Italiano" language_it_desc: "Interface en italien" language_pt: "Português" language_pt_desc: "Interface en portugais" translation_warning: "La traduction complète de l'interface est en cours de développement. Certains éléments peuvent rester en français." modified: "Préférences modifiées" modified_desc: "Enregistrez vos changements pour les appliquer" save: "Enregistrer les préférences" saving: "Enregistrement..." cancel: "Annuler" saved_success: "Préférences enregistrées avec succès !" saved_reload: "Préférences enregistrées avec succès !\n\nLa langue a été modifiée. Voulez-vous recharger la page maintenant pour appliquer les changements ?" error: "Erreur : {message}" network_error: "Erreur réseau. Veuillez réessayer." sync_title: "Vos préférences sont synchronisées" sync_desc: "Vos préférences d'affichage sont enregistrées et s'appliquent automatiquement sur tous vos appareils connectés à votre compte." preview_dark: "Aperçu : Thème sombre sera appliqué" preview_light: "Aperçu : Thème clair sera appliqué" preview_auto: "Aperçu : Thème automatique sera appliqué" # Profil profile: title: "Mon Profil" page_title: "Mon Profil" subtitle: "Modifiez vos informations personnelles" account_info: "Informations du compte" username: "Nom d'utilisateur" username_public: "Visible publiquement" username_placeholder: "Votre nom d'utilisateur" username_pattern: "Minuscules, chiffres et tirets uniquement, 3 à 39 caractères" email: "Email" email_placeholder: "votre@email.com" save: "Enregistrer les modifications" saving: "Enregistrement..." saved: "Profil mis à jour avec succès" error: "Erreur lors de la mise à jour du profil" email_label: "Adresse email" email_used_for: "Utilisée pour la connexion" email_warning: "L'adresse actuelle ne se modifie pas ici." email_change_info: "Un lien de confirmation est envoyé à la nouvelle adresse. L'adresse actuelle reçoit un avis. Le compte ne change qu'après confirmation." email_change_title: "Changer l'adresse email" new_email_label: "Nouvelle adresse" current_password_label: "Mot de passe actuel" request_button: "Demander le changement" email_change_error: "Impossible d'envoyer la demande." network_error: "Erreur réseau. Veuillez réessayer." username_help: "3 à 39 caractères (a-z, 0-9, -)" additional_info: "Informations supplémentaires" account_created: "Compte créé le" roles: "Rôles" linked_accounts_title: "Comptes liés" no_linked_accounts: "Aucun compte externe lié." linked_since: "Lié depuis" unlink_button: "Délier" unlink_confirm: "Êtes-vous sûr de vouloir délier ce compte ?" unlink_error: "Impossible de délier ce compte." cannot_unlink_last: "Impossible de supprimer votre dernier moyen d'authentification." # Breadcrumb breadcrumb: home: "Accueil" settings: "Paramètres" admin: "Administration" preferences: "Préférences" profile: "Profil" password: "Mot de passe" users: "Utilisateurs" sessions: "Sessions" # Admin admin: dashboard: title: "Administration" heading: "Tableau de bord Administrateur" users_card_title: "Utilisateurs" users_card_subtitle: "Total utilisateurs" access_button: "Accéder" sessions_card_title: "Sessions actives" sessions_card_subtitle: "Sessions en cours" admins_card_title: "Administrateurs" admins_card_subtitle: "Comptes admin" last_activity_card_title: "Dernière activité" last_activity_card_subtitle: "Dernière connexion" audit_section_title: "Statistiques des logs d'audit" audit_total_logs: "Total des logs" audit_last_24h: "Dernières 24h" audit_by_level: "Par niveau" chart_label: "Logs par niveau" view_logs: "Voir les logs" logs_card_title: "Logs d'audit" logs_card_desc: "Dernières actions enregistrées : changements d'email, connexions bloquées." roles_card_title: "Gestion des Rôles" roles_card_desc: "Gérer les rôles et les permissions granulaires" roles_stat_title: "Rôles" settings_card_title: "Paramètres Application" settings_card_desc: "Configurer les paramètres globaux de l'application" apps_card_title: "Gestion des Applications" apps_card_desc: "Activer ou désactiver les applications modulaires" fediverse_card_title: "Fédération ActivityPub" fediverse_card_desc: "Réglages, liste de confiance, file d'envoi, sessions distantes, NodeInfo" orgs_card_title: "Gestion des Organisations" orgs_card_desc: "Créer et gérer les organisations et leurs membres" orgs_stat_title: "Organisations" orgs_members_stat_title: "Membres totaux" logs: page_title: "Logs d'audit" heading: "Logs d'audit" empty: "Aucune entrée pour le moment." col_date: "Date" col_level: "Niveau" col_action: "Action" col_message: "Message" roles_list: page_title: "Gestion des rôles" breadcrumb_roles: "Rôles" title: "Rôles" create_role: "Créer un rôle" table_name: "Nom" table_description: "Description" table_users: "Utilisateurs" table_permissions: "Permissions" table_actions: "Actions" edit: "Modifier" delete: "Supprimer" no_roles: "Aucun rôle trouvé." protected_hint: "Protégé" delete_confirm_title: "Confirmer la suppression" delete_confirm_message: "Êtes-vous sûr de vouloir supprimer le rôle" delete_button: "Supprimer" role_form: title_create: "Créer un rôle" title_edit: "Modifier le rôle" breadcrumb_create: "Créer" breadcrumb_edit: "Modifier" back_to_list: "Retour à la liste" name_label: "Nom du rôle" name_placeholder: "ex: moderator" description_label: "Description" description_placeholder: "Description du rôle..." permissions_label: "Permissions" protected_name_hint: "Le nom de ce rôle ne peut pas être modifié." cancel: "Annuler" submit_create: "Créer le rôle" submit_edit: "Enregistrer les modifications" errors: title: "Codes d'Erreur" description: "Documentation des codes d'erreur de l'application. Chaque code d'erreur est associé à un middleware et fournit des informations de contexte pour le débogage." breadcrumb_errors: "Codes d'Erreur" table_code: "Code" table_description: "Description" table_category: "Catégorie" table_middleware: "Middleware" table_context: "Contexte" table_example: "Exemple" legend_title: "Légende" legend_code: "Identifiant unique de l'erreur (format: CATEGORY_NUMBER)" legend_description: "Description en français de l'erreur" legend_category: "Type d'erreur (Authentification, CSRF, Rate Limiting, etc.)" legend_middleware: "Middleware responsable de générer cette erreur" legend_context: "Explication détaillée de quand cette erreur se produit" legend_example: "Exemple concret de situation générant cette erreur" error_auth001_desc: "Identifiants invalides" error_auth001_category: "Authentification" error_auth001_context: "L'utilisateur a fourni des identifiants incorrects lors de la connexion" error_auth001_example: "Tentative de connexion avec un mot de passe incorrect" error_auth002_desc: "Token invalide" error_auth002_category: "Authentification" error_auth002_context: "Le token JWT fourni est invalide ou malformé" error_auth002_example: "Token JWT corrompu ou signé avec une clé différente" error_auth003_desc: "Token expiré" error_auth003_category: "Authentification" error_auth003_context: "Le token JWT a expiré et doit être renouvelé" error_auth003_example: "Tentative d'accès avec un token expiré après la durée de validité" error_csrf001_desc: "Token CSRF manquant" error_csrf001_category: "CSRF Protection" error_csrf001_context: "La requête POST/PUT/DELETE ne contient pas de token CSRF" error_csrf001_example: "Formulaire soumis sans token CSRF dans le header ou le body" error_csrf002_desc: "Token CSRF invalide" error_csrf002_category: "CSRF Protection" error_csrf002_context: "Le token CSRF fourni ne correspond pas au token de la session" error_csrf002_example: "Token CSRF modifié ou volé" error_rate001_desc: "Limite de taux dépassée" error_rate001_category: "Rate Limiting" error_rate001_context: "Le nombre de requêtes par minute a été dépassé" error_rate001_example: "Plus de 100 requêtes/min sur les endpoints admin" error_valid001_desc: "Données d'entrée invalides" error_valid001_category: "Validation" error_valid001_context: "Les données fournies ne respectent pas les règles de validation" error_valid001_example: "Email au format invalide ou champ requis manquant" error_valid002_desc: "Complexité du mot de passe non respectée" error_valid002_category: "Validation" error_valid002_context: "Le mot de passe ne respecte pas les règles de complexité configurées" error_valid002_example: "Mot de passe trop court ou ne contenant pas les caractères requis" error_rbac001_desc: "Permissions insuffisantes" error_rbac001_category: "Autorisation" error_rbac001_context: "L'utilisateur n'a pas les permissions nécessaires pour cette action" error_rbac001_example: "Utilisateur non-admin tentant d'accéder à /admin/users" error_rbac002_desc: "Rôle administrateur requis" error_rbac002_category: "Autorisation" error_rbac002_context: "L'action nécessite le rôle administrateur" error_rbac002_example: "Tentative de suppression d'utilisateur sans rôle admin" error_db001_desc: "Erreur d'opération de base de données" error_db001_category: "Base de données" error_db001_context: "Une opération de base de données a échoué" error_db001_example: "Contrainte de clé étrangère violée ou connexion DB perdue" error_db002_desc: "Ressource non trouvée" error_db002_category: "Base de données" error_db002_context: "La ressource demandée n'existe pas dans la base de données" error_db002_example: "Utilisateur avec ID inexistant" user_form: breadcrumb_create: "Créer" breadcrumb_edit: "Modifier" title_create: "Créer un utilisateur" title_edit: "Modifier un utilisateur" back_to_list: "Retour à la liste" username_label: "Nom d'utilisateur" username_placeholder: "nom-utilisateur" username_pattern: "Minuscules, chiffres et tirets uniquement, 3 à 39 caractères" username_readonly_hint: "Le nom d'utilisateur ne peut pas être modifié après création" email_label: "Email" email_placeholder: "utilisateur@example.com" email_change_hint: "Changer l'adresse l'écrit tout de suite, marque l'email comme vérifié et ferme les sessions de cet utilisateur." password_label: "Mot de passe" password_optional: "Optionnel" password_placeholder: "Laisser vide pour générer un mot de passe aléatoire" password_hint: "Si laissé vide, un mot de passe sécurisé sera généré automatiquement" roles_label: "Rôles" roles_hint: "Sélectionnez au moins un rôle" must_change_password_label: "Forcer le changement de mot de passe" must_change_password_desc: "L'utilisateur devra changer son mot de passe à la prochaine connexion" cancel: "Annuler" submit_create: "Créer l'utilisateur" submit_edit: "Enregistrer les modifications" settings: title: "Paramètres de l'Application" page_title: "Paramètres de l'Application - Admin" subtitle: "Configuration globale de l'application" general: "Général" app_name: "Nom de l'application" app_domain: "Domaine" app_domain_placeholder: "example.com" app_description: "Description" allow_registration: "Permettre l'enregistrement" allow_registration_desc: "Les utilisateurs peuvent créer des comptes depuis la page d'accueil" email_validation_required: "Validation email requise" email_validation_required_desc: "Les utilisateurs doivent valider leur email avant de pouvoir se connecter" save: "Enregistrer les paramètres" cancel: "Annuler" saved: "Paramètres enregistrés avec succès" error: "Erreur lors de l'enregistrement" network_error: "Erreur réseau. Veuillez réessayer." password_security: "Sécurité des Mots de Passe" password_min_length: "Longueur minimale" password_min_length_hint: "Entre 6 et 128 caractères" password_complexity: "Exigences de complexité" require_uppercase: "Majuscule requise" require_lowercase: "Minuscule requise" require_digits: "Chiffre requis" require_special: "Caractère spécial requis" password_change_require_email: "Confirmation par email du changement de mot de passe" password_change_require_email_desc: "Lorsqu'activé, un email de confirmation est envoyé pour valider tout changement de mot de passe. Sinon, le changement est appliqué immédiatement." password_expiration: "Expiration des mots de passe" password_expiration_desc: "Forcer le changement périodique" expiration_days: "Expiration après (jours)" expiration_alert: "Alerte email avant expiration" expiration_alert_days: "Alerte (jours avant)" audit_logging: "Journalisation des Audits" log_level: "Niveau de log" log_level_debug: "DEBUG - Tous les détails" log_level_info: "INFO - Informations normales" log_level_warn: "WARN - Avertissements uniquement" log_level_error: "ERROR - Erreurs uniquement" log_level_hint: "Contrôle la verbosité des logs d'audit" log_retention: "Rétention des logs (jours)" log_retention_hint: "Durée de conservation des logs (1-365 jours)" audit_info_message: "Les logs d'audit enregistrent toutes les actions administratives (création, modification, suppression d'utilisateurs)." save_changes: "Sauvegarder les modifications" save_changes_desc: "Les paramètres seront appliqués immédiatement" saving: "Enregistrement..." save_success: "Paramètres enregistrés avec succès !" save_error_prefix: "Erreur" oauth_sso_title: "OAuth / SSO" oauth_enabled_label: "Activer OAuth" oauth_enabled_desc: "Autorise la connexion via des fournisseurs externes (Google, GitHub, etc.)" oauth_redirect_url_label: "URL de redirection de base" oauth_redirect_url_desc: "URL de base pour les callbacks OAuth (ex: https://monapp.example.com)" oauth_auto_register_label: "Auto-inscription" oauth_auto_register_desc: "Créer automatiquement un compte si l'email n'existe pas" oauth_link_existing_label: "Lier les comptes existants" oauth_link_existing_desc: "Lier automatiquement un compte OAuth si l'email vérifié correspond" oauth_client_id: "Client ID" oauth_client_secret: "Client Secret" oauth_tenant: "Tenant ID" oauth_redirect_uri: "URI de redirection" oauth_copy_uri: "Copier" oauth_secret_configured: "Configuré" oauth_secret_not_configured: "Non configuré" oauth_secret_change: "Modifier" oauth_restart_warning: "Les modifications de credentials nécessitent un redémarrage de l'application." oauth_env_info: "Les credentials peuvent aussi être configurées via variables d'environnement (OAUTH_*_CLIENT_ID, etc.)." oauth_google_label: "Google" oauth_google_desc: "OpenID Connect" oauth_github_label: "GitHub" oauth_github_desc: "OAuth2" oauth_discord_label: "Discord" oauth_discord_desc: "OAuth2" oauth_microsoft_label: "Microsoft" oauth_microsoft_desc: "OpenID Connect" # Audience measurement. The script URL is read-only here: it feeds # the CSP, which is frozen at startup (see config::analytics). analytics_title: 'Mesure d''audience' analytics_desc: 'Script de suivi tiers injecté dans les pages. L''adresse du script se configure par variable d''environnement ; les réglages ci-dessous s''appliquent sans redémarrage.' analytics_enabled_label: 'Activer la mesure d''audience' analytics_enabled_desc: 'Lorsque désactivé, aucun script de suivi n''est envoyé aux visiteurs.' analytics_site_id_label: 'Identifiant du site' analytics_site_id_desc: 'Fourni par votre service de mesure d''audience.' analytics_attributes_label: 'Attributs supplémentaires' analytics_attributes_desc: 'Objet JSON d''attributs data-*, par exemple une paire data-consent / opt-in.' analytics_script_url_label: 'Adresse du script' analytics_script_url_desc: 'Lecture seule : cette adresse alimente la politique de sécurité du contenu, figée au démarrage. Elle se configure via ANALYTICS_SCRIPT_URL.' analytics_not_configured: 'Aucun script de mesure d''audience n''est configuré. Définissez ANALYTICS_SCRIPT_URL puis redémarrez l''application pour activer cette section.' users_list: page_title: "Gestion des Utilisateurs - Admin" title: "Gestion des Utilisateurs" breadcrumb_users: "Utilisateurs" create_user: "Créer un utilisateur" search_label: "Rechercher" search_placeholder: "Nom d'utilisateur ou email..." role_filter_label: "Rôle" all_roles: "Tous les rôles" per_page_label: "Par page" search_button: "Rechercher" results_summary: "Affichage de {count} utilisateur(s) sur {total} total" page_info: "Page {page} sur {total_pages}" table_username: "Nom d'utilisateur" table_email: "Email" table_roles: "Rôles" table_created_at: "Créé le" table_last_login: "Dernière connexion" table_actions: "Actions" never: "Jamais" edit: "Modifier" delete: "Supprimer" reset_password: "Réinitialiser le mot de passe" no_users: "Aucun utilisateur trouvé" reset_password_title: "Réinitialiser le mot de passe" reset_generate: "Générer un mot de passe aléatoire" reset_custom: "Définir un mot de passe personnalisé" reset_email: "Réinitialiser par email" reset_new_password_label: "Nouveau mot de passe" reset_new_password_placeholder: "Minimum 8 caractères, majuscule, minuscule, chiffre, caractère spécial" reset_password_requirements: "⚠️ Doit contenir : 8+ caractères, majuscule, minuscule, chiffre, caractère spécial" reset_invalidate_sessions: "Invalider toutes les sessions actives de cet utilisateur" reset_invalidate_sessions_desc: "L'utilisateur devra se reconnecter après le changement" reset_button: "Réinitialiser" delete_confirm_title: "⚠️ Confirmer la suppression" delete_confirm_message: "Êtes-vous sûr de vouloir supprimer cet utilisateur ?" delete_confirm_username: "Nom d'utilisateur :" delete_confirm_email: "Email :" delete_irreversible: "Cette action est irréversible !" delete_button: "Supprimer définitivement" edit_user_title: "Modifier l'utilisateur" delete_error: "Erreur lors de la suppression de l'utilisateur" network_error: "Erreur réseau" resetting: "Réinitialisation..." reset_by_email_title: "Réinitialisation par email" close: "Fermer" password_reset_success_title: "Mot de passe réinitialisé" password_warning_once: "Ce mot de passe ne sera affiché qu'une seule fois. Copiez-le maintenant !" new_password_label: "Nouveau mot de passe" copy: "Copier" password_copied: "Mot de passe copié dans le presse-papiers" password_set_success: "Mot de passe réinitialisé avec succès" reset_error: "Erreur lors de la réinitialisation du mot de passe" # Password Change password: title: "Changer mon mot de passe" page_title: "Changer mon mot de passe" subtitle: "Modifiez votre mot de passe pour sécuriser votre compte. Un email de confirmation vous sera envoyé pour valider le changement." subtitle_no_email: "Modifiez votre mot de passe pour sécuriser votre compte." must_change_message: "⚠️ Vous devez changer votre mot de passe avant de continuer." new_password: "Nouveau mot de passe" current_password: "Mot de passe actuel" current_password_placeholder: "Votre mot de passe actuel" new_password_placeholder: "Nouveau mot de passe sécurisé" required: "Requis" requirements: "📌 Respectez les exigences de complexité indiquées ci-dessous." strength: "Force du mot de passe :" strength_weak: "Faible" strength_medium: "Moyen" strength_strong: "Fort ✓" strength_too_short: "trop court" strength_missing_lowercase: "minuscule manquante" strength_missing_uppercase: "majuscule manquante" strength_missing_digit: "chiffre manquant" strength_missing_special: "caractère spécial manquant" confirm_password: "Confirmer le nouveau mot de passe" confirm_password_placeholder: "Répétez le nouveau mot de passe" passwords_match: "✓ Les mots de passe correspondent" passwords_not_match: "✗ Les mots de passe ne correspondent pas" change_button: "Changer le mot de passe" changing: "Changement en cours..." logout_warning_title: "Déconnexion des autres sessions" logout_warning_desc: "Toutes vos autres sessions actives seront automatiquement déconnectées après le changement de mot de passe. Seule votre session actuelle restera active." save: "Enregistrer le nouveau mot de passe" saving: "Enregistrement..." saved: "Un email de confirmation a été envoyé à votre adresse. Cliquez sur le lien dans l'email pour valider le changement de mot de passe." saved_direct: "Mot de passe changé avec succès ! Vos autres sessions ont été déconnectées." error: "Erreur lors de la modification du mot de passe" error_all_fields_required: "Tous les champs sont requis." error_empty_data: "Les données à envoyer sont vides." error_invalid_data: "Données invalides. Vérifiez que tous les champs sont remplis." error_incorrect_current: "Mot de passe actuel incorrect." error_reading_response: "Erreur lors de la lecture de la réponse du serveur" error_415: "Erreur 415 : Le serveur n'a pas reçu les données au format JSON attendu. Veuillez réessayer." network_error: "Erreur réseau. Veuillez réessayer." security_tips_title: "Conseils de sécurité" security_tip_unique: "Utilisez un mot de passe unique que vous n'utilisez pas ailleurs" security_tip_share: "Ne partagez jamais votre mot de passe avec qui que ce soit" security_tip_regular: "Changez votre mot de passe régulièrement (tous les 3-6 mois)" security_tip_2fa: "Activez l'authentification à deux facteurs si disponible" security_tip_manager: "Utilisez un gestionnaire de mots de passe pour plus de sécurité" pending_request_message: "⚠️ Une demande de changement de mot de passe est en attente de confirmation par email." pending_request_info: "Un email de confirmation a été envoyé à votre adresse. Cliquez sur le lien dans l'email pour confirmer le changement." pending_request_cancel: "Annuler la demande en attente" pending_request_canceled: "Demande annulée avec succès" pending_request_cancel_error: "Erreur lors de l'annulation de la demande" confirmation_sent: "Email de confirmation envoyé ! Vérifiez votre boîte de réception." confirmation_error: "Erreur lors de l'envoi de l'email de confirmation" # Sessions sessions: title: "Sessions actives" page_title: "Sessions actives" subtitle: "Gérez les appareils connectés à votre compte" current_session: "Session actuelle" current_badge: "Actuelle" unknown_device: "Appareil inconnu" ip_address: "Adresse IP :" created_at: "Créée le :" last_activity: "Dernière activité :" session_id: "ID Session :" revoke: "Révoquer" revoke_confirm: "Êtes-vous sûr de vouloir révoquer la session pour \"{device}\" ?\n\nCet appareil sera déconnecté immédiatement." revoke_success: "Session révoquée avec succès !" revoke_error: "Erreur lors de la révocation de la session" no_sessions: "Aucune session active" no_sessions_desc: "Vous n'avez actuellement aucune session active" danger_zone: "Zone de danger" danger_zone_desc: "Déconnectez tous les autres appareils en une seule action (votre session actuelle restera active)." revoke_all: "Révoquer toutes les autres sessions" revoke_all_confirm: "⚠️ ATTENTION\n\nÊtes-vous sûr de vouloir révoquer TOUTES vos autres sessions ?\n\nTous vos autres appareils seront déconnectés. Seule votre session actuelle restera active." revoke_all_success: "Toutes les autres sessions ont été révoquées !" revoke_all_error: "Erreur lors de la révocation. Certaines sessions n'ont peut-être pas été révoquées." about_title: "À propos des sessions" about_desc: "Une session est créée à chaque connexion depuis un appareil ou navigateur différent. Révoquer une session déconnecte immédiatement cet appareil. Votre session actuelle ne peut pas être révoquée depuis cette page (déconnectez-vous pour cela)." back_to_settings: "Retour aux paramètres" # Navigation menu (navbar) nav: home: "Accueil" settings: "Paramètres" admin: "Administration" # User menu user_menu: profile: "Profil" logout: "Déconnexion" settings: "Paramètres" # Organisations organisations: list: title: "Gestion des Organisations" create: "Créer une organisation" search: "Rechercher" search_placeholder: "Nom ou description..." no_organisations: "Aucune organisation trouvée" results_summary: "Résultats" manage_members: "Gérer les membres" table: name: "Nom" description: "Description" members: "Membres" created_at: "Créée le" actions: "Actions" create: title: "Créer une organisation" submit: "Créer" success: "Organisation créée avec succès" error: already_exists: "L'organisation '{gid}' existe déjà" invalid_gid: "Format de gid invalide: {gid}" generic: "Une erreur est survenue lors de la création de l'organisation" edit: title: "Modifier l'organisation" submit: "Enregistrer" update: success: "Organisation mise à jour avec succès" delete: success: "Organisation supprimée avec succès" confirm: "Êtes-vous sûr de vouloir supprimer cette organisation ? Cette action est irréversible." form: name_label: "Nom" name_placeholder: "Nom de l'organisation" description_label: "Description" description_placeholder: "Description de l'organisation (optionnel)" gid_label: "Identifiant (GID)" gid_placeholder: "identifiant-unique" gid_help: "Identifiant unique (lettres, chiffres, underscores uniquement, max 64 caractères)" members: title: "Membres de l'organisation" add_member: "Ajouter un membre" search_user_label: "Rechercher un utilisateur" search_user_placeholder: "Nom d'utilisateur ou email..." no_members: "Aucun membre dans cette organisation" back_to_list: "Retour à la liste" table: username: "Nom d'utilisateur" role: "Rôle" joined_at: "Rejoint le" actions: "Actions" add_success: "Membre ajouté avec succès" remove_success: "Membre retiré avec succès" add_error: "Erreur lors de l'ajout du membre" remove_error: "Erreur lors du retrait du membre" user_not_found: "Utilisateur '{search}' non trouvé" error: organisation_not_found: "Organisation '{gid}' non trouvée" already_member: "Cet utilisateur est déjà membre de l'organisation" # Sharing sharing: modal: title: "Partager une ressource" resource_label: "Ressource" resource_type_label: "Type" expiration_label: "Date d'expiration (optionnel)" expiration_help: "Le partage expirera automatiquement à cette date" cancel_button: "Annuler" submit_button: "Partager" close_button: "Fermer" success_message: "Partage créé avec succès" error_message: "Erreur lors de la création du partage" error: already_exists: "Ce partage existe déjà pour cette ressource et cette organisation" components: share_button_label: "Partager" permissions_label: "Permissions" permissions_help: "Choisissez les permissions accordées pour ce partage" share_with_label: "Partager avec" user_tab_label: "Utilisateur" organisation_tab_label: "Organisation" select_user_label: "Sélectionner un utilisateur" search_user_placeholder: "Rechercher un utilisateur..." select_organisation_label: "Sélectionner une organisation" select_organisation_placeholder: "Choisir une organisation..." no_organisations_message: "Aucune organisation disponible" permissions: read_only: "Lecture seule" read_only_value: "1" read_only_description: "Peut uniquement consulter la ressource" read_write: "Lecture + Écriture" read_write_value: "3" read_write_description: "Peut consulter et modifier la ressource" all: "Toutes les permissions" all_value: "15" all_description: "Peut consulter, modifier, supprimer et partager" # Fédération ActivityPub - RFC 0021 admin foundations fediverse: settings: title: "Réglages fédération" breadcrumb: "Fédération" heading: "Réglages de la fédération ActivityPub" subtitle: "Activez et configurez la fédération avec les autres instances Rustwarden et compatibles ActivityPub. Fonctionnalité expérimentale." card_activation: "Activation" card_trust: "Confiance" card_interop: "Interopérabilité" card_security: "Sécurité avancée" enabled_label: "Activer la fédération ActivityPub (expérimental)" enabled_desc: "Quand désactivé, les routes /admin/fediverse/* hors cette page renvoient 404." trust_mode_label: "Mode de confiance" trust_mode_allowlist: "Liste blanche (zero-trust, recommandé)" trust_mode_open: "Ouvert avec liste de blocage (style Mastodon)" interop_scope_label: "Périmètre d'interopérabilité" interop_scope_rustwarden_only: "Rustwarden uniquement (refus poli des autres instances)" interop_scope_rustwarden_plus: "Rustwarden + lecture universelle" interop_scope_open: "Ouvert (toute instance ActivityPub)" authorized_fetch_label: "Authorized-fetch" authorized_fetch_desc: "Exiger une signature HTTP pour récupérer un acteur distant. À activer après audit." save_button: "Enregistrer" saved_toast: "Réglages enregistrés." trust: title: "Domaines de confiance" breadcrumb: "Confiance" heading: "Liste de confiance fédération" subtitle: "Gère les domaines acceptés ou bloqués pour la fédération ActivityPub. Le mode actif (liste blanche ou liste de blocage) est défini sur la page Réglages fédération." mode_allowlist: "Mode liste blanche (zero-trust)" mode_blocklist: "Mode liste de blocage (style Mastodon)" add_legend: "Ajouter un domaine" domain_label: "Domaine" domain_placeholder: "exemple.tld" note_label: "Note (optionnelle)" reason_label: "Raison du blocage (optionnelle)" severity_label: "Sévérité" severity_suspend: "Suspension (rejet total)" severity_silence: "Silence (filtrage discret)" severity_reject_auth: "Refus d'authentification uniquement" add_button: "Ajouter" table_domain: "Domaine" table_note_or_reason: "Note / Raison" table_severity: "Sévérité" table_created_at: "Ajouté le" table_actions: "Actions" delete_button: "Supprimer" delete_confirm_title: "Confirmer la suppression" delete_confirm_body: "Cette action est irréversible. Le domaine ci-dessous sera retiré de la liste active." modal_cancel: "Annuler" modal_confirm: "Confirmer la suppression" empty_title: "Liste vide" empty_body: "Aucun domaine n'est configuré. Ajoute un domaine pour commencer à fédérer." saved_toast: "Liste mise à jour." auth: error: page_title: "Erreur d'authentification fédérée" subtitle: "Une erreur est survenue lors de l'authentification ActivityPub." back_to_login: "Retour à la connexion" timeout: title: "Délai dépassé" body: "Votre instance d'origine n'a pas répondu dans le temps imparti. Vérifie qu'elle est joignable et réessaie dans quelques instants." rejected: title: "Demande refusée" body: "Votre instance d'origine a refusé la demande d'authentification. Si tu n'es pas à l'origine de cette tentative, ignore-la." untrusted: title: "Domaine non autorisé" body: "Le domaine de votre identité n'est pas dans la liste de confiance de cette instance. Contacte l'administrateur si tu penses que c'est une erreur." invalid_signature: title: "Signature invalide" body: "La signature de votre instance d'origine n'a pas pu être vérifiée. Cela peut indiquer une mauvaise configuration ou une tentative malveillante." unknown: title: "Erreur inconnue" body: "Une erreur inattendue est survenue. Réessaie ou contacte l'administrateur si le problème persiste." login: page_title: "Connexion ActivityPub" subtitle: "Connecte-toi avec une identité hébergée sur une autre instance fédérée." heading: "Se connecter avec une identité ActivityPub" field_label: "Identité" field_placeholder: "@user@instance.tld" field_help: "Format Mastodon : @ suivi du nom d'utilisateur, puis @, puis le domaine de l'instance." submit: "Continuer" back_to_login: "Retour à la connexion classique" waiting: page_title: "Authentification en cours" subtitle: "Patiente pendant que ton instance d'origine valide la demande." heading: "Authentification en cours…" explainer: "Ton instance d'origine doit confirmer ton identité. Cette page se mettra à jour automatiquement dès qu'une réponse arrive (jusqu'à 5 minutes)." cancel: "Annuler" consent: page_title: "Confirmer une connexion fédérée" heading: "Une instance demande une authentification" explainer: "Une instance fédérée veut t'authentifier auprès d'elle en ton nom. Vérifie le domaine et l'identité ci-dessous avant d'approuver." label_requester: "Domaine demandeur" label_handle: "Identité concernée" approve: "Approuver" reject: "Refuser" already_decided: "Cette demande a déjà été traitée." queue: title: "File outbound fédération" breadcrumb: "File outbound" heading: "Livraisons sortantes" subtitle: "Tableau de bord des activités ActivityPub à distribuer aux instances distantes. 100 dernières lignes affichées." stats_pending: "En attente" stats_delivered: "Livrées" stats_failed: "Échouées" stats_dead: "Mortes" table_activity: "Activité" table_target: "Cible" table_status: "Statut" table_attempts: "Tentatives" table_last_error: "Dernière erreur" table_next_retry: "Prochain essai" table_created_at: "Créée le" empty_title: "File vide" empty_body: "Aucune activité sortante. Le worker est sain ou la fédération n'a pas encore d'activité." sessions_remote: title: "Sessions distantes" breadcrumb: "Sessions distantes" heading: "Sessions distantes actives" subtitle: "Identités fédérées qui ont contacté cette instance et ne sont pas désactivées. Action de révocation = mise en disabled (les sessions JWT remote correspondantes seront rejetées)." kill_switch_legend: "Kill switch par domaine" kill_switch_label: "Désactiver toutes les identités d'un domaine" kill_switch_button: "Désactiver le domaine" kill_switch_confirm_title: "Confirmer le kill switch" kill_switch_confirm_body: "Toutes les identités fédérées du domaine ci-dessous seront mises en disabled. Cette action est irréversible côté UI (un nouveau login fédéré recréera la row)." table_handle: "Handle" table_display_name: "Nom affiché" table_domain: "Domaine" table_last_seen: "Vu pour la dernière fois" table_actions: "Actions" revoke_button: "Révoquer" revoke_confirm_title: "Confirmer la révocation" revoke_confirm_body: "Cette identité sera mise en disabled. La prochaine vérification JWT remote la rejettera." modal_cancel: "Annuler" modal_confirm: "Confirmer" empty_title: "Aucune session distante" empty_body: "Aucune identité fédérée n'a encore contacté cette instance, ou toutes ont été désactivées." saved_toast: "Action effectuée." admin: tabs: settings: "Réglages" trust_list: "Liste de confiance" queue: "File d'envoi" sessions_remote: "Sessions distantes" nodeinfo: "NodeInfo" invites: "Invitations" hub: title: "Fédération ActivityPub" subtitle: "Tableau de bord centralisé pour piloter la fédération avec d'autres instances Rustwarden et compatibles ActivityPub." card: settings: title: "Réglages" desc: "Activer la fédération, choisir le mode de confiance, le périmètre d'interopérabilité et l'authorized-fetch." trust_list: title: "Liste de confiance" desc: "Gérer les domaines acceptés (allowlist) ou bloqués (blocklist)." queue: title: "File d'envoi" desc: "Tableau de bord opérateur pour la file de livraison sortante (RFC 0011 + RFC 0019)." sessions_remote: title: "Sessions distantes" desc: "Identités fédérées actives, kill switch par identité ou par domaine." nodeinfo: title: "NodeInfo" desc: "Statistiques humaines de l'instance fédérée (NodeInfo 2.1)." invites: title: "Invitations" desc: "Inviter un compte distant à rejoindre une équipe (vue par équipe)." teams_for_invites: title: "Choisir une équipe pour gérer ses invitations" breadcrumb: "Invitations" heading: "Invitations fédérées par équipe" subtitle: "Sélectionnez une équipe pour voir et créer des invitations vers des comptes distants." empty_title: "Aucune équipe" empty_body: "Créez d'abord une équipe pour pouvoir y inviter des comptes fédérés." # Communs (RFC 0024 Slice C iter. 3) common: yes: "Oui" no: "Non" # Stats NodeInfo (RFC 0024 Slice C iter. 3). Gardé en namespace # top-level dédié pour ne pas re-ouvrir `fediverse:` (qui écraserait # settings/trust/auth/queue/sessions_remote sous yaml-rust2). fediverse_nodeinfo: title: "NodeInfo - Stats fédération" breadcrumb: "NodeInfo" heading: "NodeInfo - Stats humanisées" subtitle: "Vue d'ensemble de la configuration runtime + stats utilisateurs locaux et identités distantes." card_software: "Logiciel" card_runtime: "Configuration runtime" card_users: "Utilisateurs locaux" card_remotes: "Identités distantes" label_name: "Nom" label_version: "Version" label_domain: "Domaine" label_enabled: "Fédération activée" label_trust_mode: "Mode de confiance" label_interop_scope: "Périmètre interop" label_authorized_fetch: "Authorized-fetch" label_users_total: "Total" label_users_active_month: "Actifs 30j" label_users_active_halfyear: "Actifs 180j" label_remote_identities_active: "Actives" label_remote_distinct_domains: "Domaines distincts" # Invitations cross-instance team (RFC 0024 Slice C iter. 4) — namespace # top-level dédié pour ne pas re-ouvrir `fediverse:`. fediverse_invites: title: "Invitations équipe fédérée" breadcrumb: "Invitations" heading: "Invitations cross-instance" subtitle: "Inviter une identité ActivityPub à rejoindre l'équipe :" add_legend: "Inviter par handle" handle_label: "Handle de l'utilisateur" handle_placeholder: "@user@instance.tld" role_label: "Rôle" role_member: "Membre" role_admin: "Administrateur" role_owner: "Propriétaire" add_button: "Envoyer l'invitation" table_handle: "Handle invité" table_role: "Rôle" table_status: "Statut" table_created_at: "Envoyée le" table_actions: "Actions" revoke_button: "Révoquer" revoke_confirm_title: "Confirmer la révocation" revoke_confirm_body: "L'invitation sera annulée. Si elle a déjà été acceptée, l'identité sera retirée de l'équipe par le signal Revoke{Membership} (RFC 0010)." modal_cancel: "Annuler" modal_confirm: "Confirmer" empty_title: "Aucune invitation" empty_body: "Aucune invitation n'a encore été envoyée pour cette équipe." saved_toast: "Action effectuée." # Apps fédérées connectées (RFC 0024 Slice C iter. 5). fediverse_connected_apps: page_title: "Apps fédérées connectées" heading: "Mes apps fédérées connectées" subtitle: "Instances ActivityPub où tu t'es authentifié·e avec ton identité de cette instance." table_domain: "Instance" table_count: "Sessions" table_last_seen: "Dernière activité" empty_title: "Aucune app fédérée" empty_body: "Tu n'as pas encore approuvé d'authentification fédérée vers une autre instance." revoke_note: "Note: la révocation manuelle d'une session distante depuis cette page sera disponible avec RFC 0006 Phase 2 (blacklist JWT remote). En attendant, demande à l'admin via /admin/fediverse/sessions_remote ou attend l'expiration naturelle du JWT." back_to_profile: "Retour au profil" # Page d'acceptation invitation team cross-instance (RFC 0024 Slice C iter. 6). fediverse_invite_landing: page_title: "Invitation à rejoindre une équipe" heading: "Tu as reçu une invitation" explainer: "Une équipe d'une autre instance fédérée t'invite à la rejoindre. Vérifie les détails ci-dessous avant de répondre." team_label: "Équipe" role_label: "Rôle proposé" status_label: "Statut" accept_button: "Accepter" reject_button: "Refuser" already_decided: "Cette invitation a déjà été traitée." cannot_accept_note: "Pour accepter, tu dois être connecté·e via une identité fédérée (login depuis ton instance d'origine). Tu peux refuser depuis ce compte local, mais l'acceptation passe par le flow AP-native." # Page 404 (route inconnue) http_errors: not_found_title: "Page introuvable" not_found_message: "Cette adresse ne correspond à aucune page." code_label: "Erreur 404" home: "Retour à l'accueil" login: "Se connecter" analytics: opt_out: hint: 'Vous pouvez vous opposer à tout moment à la mesure d''audience. Votre choix est enregistré dans votre navigateur et prend effet au prochain chargement de page.' opt_out_label: 'M''opposer à la mesure d''audience' opt_in_label: 'Réactiver la mesure d''audience' opted_out_badge: 'Vous êtes opposé au suivi'
GitRust