{
  "nav": {
    "home": "Accueil",
    "about": "À propos",
    "tech": "Stack Technique",
    "projects": "Projets",
    "services": "Services",
    "experience": "Expérience",
    "skills": "Soft Skills",
    "contact": "Contact",
    "blog": "Blog",
    "more": "Plus",
    "login": "Connexion",
    "admin": "Admin",
    "dashboard": "Dashboard",
    "ai_tools": "IA & Outils",
    "testimonials": "Témoignages",
    "search": "Rechercher",
    "open_menu": "Ouvrir le menu",
    "back_to_top": "Retour en haut",
    "main_aria": "Navigation principale",
    "bottom_aria": "Navigation rapide"
  },
  "sidebar": {
    "collapse_menu": "Réduire le menu latéral",
    "expand_menu": "Développer le menu latéral",
    "collapse_icons": "Réduire (icônes)",
    "expand_icons": "Développer (icônes + texte)",
    "close_menu": "Fermer le menu",
    "brand_admin": "Admin",
    "brand_tools": "IA & Outils",
    "explore_lab": "Explorer le Lab",
    "items_available": "{{count}} outils disponibles",
    "lab": "Lab",
    "command_palette_placeholder": "Aller à...",
    "command_palette_aria": "Rechercher et aller à une section",
    "command_palette_no_results": "Aucun résultat",
    "groups": {
      "overview": "Aperçu",
      "content": "Contenu",
      "ai": "IA",
      "workspace": "Flux de travail",
      "tools": "Outils",
      "account": "Compte"
    },
    "items": {
      "dashboard": "Dashboard",
      "projects": "Projets",
      "blog": "Blog",
      "experiences": "Expérience",
      "about": "À propos",
      "testimonials": "Témoignages",
      "newsletter": "Newsletter",
      "notes": "Notes",
      "pdf_search": "Recherche PDF",
      "library": "Bibliothèque",
      "pdf_summary": "Résumé PDF",
      "ai_formatter": "Formateur IA",
      "pdf_translate": "Traduction PDF",
      "ai_ppt": "Générer des diapositives",
      "workspace": "Workspace",
      "pdf_editor": "Organiser le PDF",
      "viewer": "Visionneuse PDF",
      "editor": "Éditeur de texte",
      "convert": "Convertisseur de fichiers",
      "ocr": "Texte depuis image (OCR)",
      "scanner": "Scanner de documents",
      "my_files": "Mes fichiers",
      "contacts": "Contacts",
      "users": "Utilisateurs",
      "ai_assistant": "Assistant IA",
      "live_chat": "Chat en direct"
    }
  },
  "lang": {
    "label": "Langue",
    "it": "Italiano",
    "en": "English",
    "sq": "Shqip",
    "es": "Español",
    "pt": "Português",
    "fr": "Français",
    "de": "Deutsch"
  },
  "search": {
    "trigger": "Rechercher sur le site",
    "dialog_label": "Recherche sur le site",
    "placeholder": "Rechercher des articles, projets...",
    "min_chars": "Saisissez au moins {{count}} caractères",
    "loading": "Recherche en cours...",
    "tap_outside_close": "Touchez à l'extérieur pour fermer",
    "no_results": "Aucun résultat",
    "view_all": "Voir tous les résultats",
    "results_for": "Résultats pour",
    "results_count": "résultats trouvés",
    "filters": {
      "all": "Tous",
      "post": "Blog",
      "project": "Projets",
      "page": "Pages"
    }
  },
  "hero": {
    "role": "Développeur Senior Front-End & API",
    "tagline1": "Angular",
    "tagline2": "Applications Web",
    "tagline3": "UI/UX & Data Visualization 3D Web",
    "description": "Je conçois et développe des applications et interfaces scalables avec Angular, JavaScript et les principales bibliothèques frontend. J'optimise les performances en réduisant la latence et en améliorant la réactivité des systèmes. Je livre des solutions fiables et stables prêtes pour les environnements enterprise de mission critique. Je travaille comme Angular Developer et TypeScript Developer pour des équipes enterprise.",
    "kpi_years": "Années d'expérience",
    "kpi_projects": "Projets réalisés",
    "kpi_companies": "Entreprises enterprise",
    "kpi_latency": "Réduction de latence (typique)",
    "scroll": "Défiler"
  },
  "about": {
    "tag": "about",
    "title": "À propos de moi",
    "subtitle": "Développeur senior avec 8+ ans dans le web enterprise",
    "bio1": "Je suis un <strong>Développeur Senior Front-End & API</strong> doté d'une solide expérience dans le développement d'applications enterprise basées sur Angular, TypeScript et des architectures modernes. Au cours de ma carrière, j'ai collaboré avec d'importantes organisations dans les secteurs aérospatial, défense, télécommunications et bancaire, des contextes où la fiabilité et la qualité constituent des exigences incontournables.",
    "bio2": "Je m'intéresse à l'ensemble de l'écosystème du développement logiciel : de l'architecture applicative à la conception des API, de l'optimisation des performances à la construction d'expériences utilisateur efficaces. J'aime transformer des processus complexes et de grandes quantités de données en solutions simples, robustes et faciles à utiliser.",
    "bio3": "Une partie importante de ma croissance est liée à ma famille et à mes origines à Blinisht. Les années passées là-bas, ainsi que mon expérience avec les Ambassadeurs de la Paix (2000-2012), m'ont enseigné la valeur du dialogue, de la collaboration et de la sensibilité aux différences.",
    "bio4": "Je crois que la véritable valeur d'un professionnel réside dans l'union de l'expertise technique et de la sensibilité humaine. Cette approche guide chaque projet que j'entreprends, affrontant les problèmes avec responsabilité, vision et esprit constructif.",
    "bio5": "Aujourd'hui, je porte avec moi tout ce que j'ai appris : les racines de ma terre, les valeurs de ma famille, les expériences qui m'ont formé et la curiosité constante envers la technologie. De cette union de compétence et de sensibilité naissent les solutions les plus efficaces et durables.",
    "birth": "Né à Blinisht-Lezhe (Albanie) le 25/04/1988",
    "vision": {
      "title": "Vision End-to-End",
      "desc": "Une approche architecturale complète, de la planification du design system à la livraison en production. Solide expérience dans la traduction de besoins métier complexes en interfaces intuitives."
    },
    "perf": {
      "title": "Performance & Scalabilité",
      "desc": "Focus constant sur l'optimisation des performances, le lazy loading stratégique, la détection de changements optimisée et les architectures modulaires pour les contextes à fort trafic."
    },
    "lead": {
      "title": "Leadership & Mentorat",
      "desc": "Encadrement technique des équipes front-end, définition des bonnes pratiques, revues de code structurées et sessions de mentorat pour les développeurs junior et mid-level."
    },
    "card_philosophy": "Architecture",
    "card_philosophy_desc": "Modules scalables, SOLID, clean code et performance-first sur chaque projet enterprise.",
    "card_ecosystem": "Écosystème Angular",
    "card_ecosystem_desc": "Du démarrage d'apps greenfield au refactoring de legacy, je maîtrise le cycle complet.",
    "card_data": "Data Visualization",
    "card_data_desc": "Cesium.js, Chart.js, Looker Embedded, Photo Sphere Viewer pour des interfaces riches en données."
  },
  "tech": {
    "tag": "tech-stack",
    "title": "Technologies",
    "subtitle": "Stack technique utilisé en production sur des projets enterprise",
    "frontend": "Frontend",
    "dataviz": "Data Visualization",
    "backend": "Backend & API",
    "devops": "DevOps & Tools"
  },
  "projects": {
    "tag": "projects",
    "title": "Projets",
    "subtitle": "Sélection de projets enterprise livrés en production",
    "features_label": "Fonctionnalités clés",
    "geo": {
      "title": "Visualisation 3D Géospatiale",
      "desc": "Plateforme interactive pour la visualisation géospatiale 3D avec des données en temps réel sur un globe interactif.",
      "f1": "Globe 3D interactif",
      "f2": "Streaming de données en temps réel",
      "f3": "Gestion avancée des couches",
      "f4": "Performances optimisées"
    },
    "vr": {
      "title": "Visite Virtuelle 360°",
      "desc": "Application immersive pour les visites virtuelles avec une navigation fluide entre les environnements 360°.",
      "f1": "Navigation immersive 360°",
      "f2": "Hotspots interactifs",
      "f3": "Multi-appareils responsive",
      "f4": "Transitions fluides"
    },
    "dash": {
      "title": "Dashboard Analytics",
      "desc": "Suite de dashboards analytiques avec Looker Embedded et des visualisations personnalisées haute performance.",
      "f1": "Intégration Looker Embedded",
      "f2": "KPIs en temps réel",
      "f3": "Drill-down multi-niveaux",
      "f4": "Visualisations personnalisées"
    },
    "lib": {
      "title": "Libraria",
      "desc": "Plateforme numérique pour la gestion complète de bibliothèques, catalogue et prêts.",
      "f1": "Catalogue de livres centralisé",
      "f2": "Gestion des prêts et des délais",
      "f3": "Recherche avancée et filtres",
      "f4": "Dashboard en temps réel"
    },
    "ins": {
      "title": "Plateforme d'Assurance",
      "desc": "Solution web pour le secteur assurance avec gestion des polices, sinistres et workflows d'approbation.",
      "f1": "Gestion des polices end-to-end",
      "f2": "Workflow sinistres digitalisé",
      "f3": "Intégration de services externes",
      "f4": "Audit trail et sécurité"
    },
    "discover": "En savoir plus",
    "read_case_study": "Lire l'étude de cas",
    "filter_label": "Filtrer par technologie",
    "filter_all": "Tous",
    "filter_empty": "Aucun projet avec cette technologie."
  },
  "experience": {
    "tag": "experience",
    "title": "Expérience",
    "subtitle": "Parcours professionnel dans des entreprises tech italiennes et internationales"
  },
  "exp": {
    "1": {
      "title": "Architecture Angular & 3D Web Enterprise",
      "role": "Développeur Front-End Senior",
      "desc": "Direction technique sur des projets enterprise dans les secteurs aérospatial et défense. Architecture Angular avancée, visualisation 3D géospatiale avec Cesium.js et dashboards analytiques haute performance."
    },
    "2": {
      "title": "Plateformes Numériques & Data Visualization",
      "role": "Développeur Front-End · Spécialiste Data Viz",
      "desc": "Développement de plateformes numériques innovantes dans les secteurs telco et médias. Dashboards analytiques avec Looker Embedded, visites virtuelles immersives avec Photo Sphere Viewer."
    },
    "3": {
      "title": "Conseil Enterprise & Écosystème Microsoft",
      "role": "Développeur Front-End · Consultant Angular",
      "desc": "Conseil enterprise sur des projets Microsoft pour des clients bancaires. Développement de portails web complexes, intégration Azure et migration d'architectures legacy vers Angular moderne."
    },
    "4": {
      "title": "Développement Full-Stack & Architectures Logicielles",
      "role": "Développeur Full-Stack",
      "desc": "Développement full-stack avec les technologies .NET et Angular. Conception d'architectures logicielles, APIs RESTful et interfaces pour les secteurs financier et assurance."
    },
    "5": {
      "title": "Fondements Logiciels & Méthodologies Agiles",
      "role": "Développeur Junior",
      "desc": "Début du parcours professionnel. Premières expériences avec .NET et Angular, formation aux méthodologies Agiles et aux bonnes pratiques de développement logiciel."
    },
    "current": "Actuel",
    "previous": "Précédent"
  },
  "skills": {
    "tag": "skills",
    "title": "Soft Skills",
    "subtitle": "Compétences transversales qui font la différence dans les équipes enterprise",
    "leadership": "Leadership Technique",
    "leadership_desc": "Je guide les équipes de développement vers des architectures scalables et des bonnes pratiques partagées.",
    "mentoring": "Mentorat & Formation",
    "mentoring_desc": "Soutien actif aux juniors, revues de code constructives et transfert de connaissances.",
    "problem": "Résolution de Problèmes",
    "problem_desc": "Analyse rapide des problèmes complexes, débogage méthodique et solutions pragmatiques.",
    "communication": "Communication",
    "communication_desc": "Interaction efficace avec les parties prenantes techniques et non techniques, documentation claire."
  },
  "faq": {
    "tag": "faq",
    "title": "FAQ",
    "subtitle": "Questions fréquemment posées",
    "q1": "Sur quoi travaillez-vous principalement ?",
    "a1": "Je travaille sur le développement web enterprise, les interfaces Angular, les APIs REST, la visualisation de données et les applications 3D web avec Cesium.js et WebGL.",
    "q2": "Travaillez-vous également sur le backend ?",
    "a2": "Oui, j'ai également de l'expérience avec .NET, Django, Python, NestJS et l'intégration de services API REST et GraphQL.",
    "q4": "Comment puis-je vous contacter ?",
    "a4": "Vous pouvez m'envoyer un email, m'appeler ou me contacter sur LinkedIn en utilisant les coordonnées dans la section contact ci-dessus."
  },
  "contact": {
    "tag": "contact",
    "title": "Contact",
    "subtitle": "Questions, retours ou simplement un bonjour",
    "card": {
      "email": {
        "title": "Email",
        "desc": "gentsallaku@gmail.com"
      },
      "phone": {
        "title": "Téléphone",
        "desc": "+39 389 235 2291"
      },
      "pec": {
        "title": "PEC",
        "desc": "gent.sallaku@pec.it"
      },
      "linkedin": {
        "title": "LinkedIn",
        "desc": "/in/gent-sallaku"
      },
      "github": {
        "title": "GitHub",
        "desc": "/gentsallaku"
      }
    },
    "form": {
      "title": "Envoyer un message",
      "name": "Nom complet",
      "name_ph": "Jean Dupont",
      "name_err": "Le nom est obligatoire",
      "email": "Email",
      "email_ph": "jean@exemple.fr",
      "email_err": "Un email valide est requis",
      "subject": "Sujet",
      "subject_ph": "Objet du message",
      "subject_err": "Le sujet est obligatoire",
      "message": "Message",
      "message_ph": "Bonjour, j'aimerais discuter de…",
      "message_err": "Le message doit contenir au moins 10 caractères",
      "send": "Envoyer le message",
      "sending": "Envoi en cours…",
      "sent": "Message envoyé !",
      "name_placeholder": "Écrivez votre nom",
      "email_placeholder": "Écrivez votre email pour que je puisse vous contacter",
      "submit": "Envoyer le message",
      "note": "Le message est envoyé directement depuis le site web, sans ouvrir d'applications externes.",
      "privacy_checkbox": "J'ai lu et j'accepte la politique de confidentialité pour le traitement de mes données.",
      "privacy_link_text": "Politique de confidentialité",
      "privacy_err": "Vous devez accepter la politique de confidentialité pour envoyer le message",
      "disabled_notice": "Le formulaire de contact est temporairement désactivé. Tu peux m'écrire sur LinkedIn ou par email."
    },
    "info": {
      "title": "Connectons-nous",
      "desc": "Écrivez-moi pour toute question sur les projets, le blog ou les outils du site."
    },
    "form_name": "Votre nom",
    "form_email": "Votre email",
    "form_message": "Votre message",
    "form_send": "Envoyer le message",
    "form_sent": "Message envoyé ! Je vous répondrai bientôt.",
    "form_error": "Impossible d'envoyer le message maintenant. Veuillez réessayer bientôt.",
    "form_invalid": "Vérifiez le nom, l'email et le message. Le message doit contenir au moins 10 caractères.",
    "popup": {
      "title": "Message envoyé",
      "body": "La demande a été envoyée avec succès au serveur. Si les emails n'arrivent toujours pas, la prochaine étape est de vérifier les logs email du backend."
    },
    "form_name_req": "Le nom est obligatoire",
    "form_email_req": "Email invalide",
    "form_msg_req": "Le message est obligatoire (min. 10 caractères)"
  },
  "consent": {
    "title": "Préférences de cookies",
    "desc": "Nous utilisons des cookies pour les fonctionnalités nécessaires du site et des analyses et marketing optionnels. Gérez vos préférences.",
    "accept_all": "Tout accepter",
    "reject_all": "Tout refuser",
    "manage_preferences": "Gérer les préférences",
    "necessary": "Nécessaires",
    "analytics": "Analytics",
    "marketing": "Marketing",
    "preferences": "Préférences",
    "save": "Enregistrer les préférences",
    "settings_title": "Paramètres des cookies",
    "settings_desc": "Activez ou désactivez les catégories. Les cookies nécessaires sont toujours actifs.",
    "consent_saved": "Préférences enregistrées",
    "default_denied_note": "Par défaut : cookies fonctionnels uniquement (consentement requis pour analytics et marketing).",
    "necessary_desc": "Indispensables au fonctionnement du site : sécurité, connexion et mémorisation de ces choix.",
    "analytics_desc": "Nous aident à comprendre comment le site est utilisé grâce à des statistiques agrégées (Google Analytics).",
    "marketing_desc": "Servent à mesurer les campagnes publicitaires et à afficher des annonces pertinentes (Google Ads).",
    "preferences_desc": "Mémorisent vos choix, comme la langue et l'apparence, pour personnaliser votre expérience.",
    "always_active": "Toujours actifs"
  },
  "skip": {
    "link": "Aller au contenu principal"
  },
  "footer": {
    "designed": "Conçu & Développé par",
    "rights": "Tous droits réservés.",
    "privacy_link": "Politique de confidentialité",
    "cookie_link": "Politique de cookies",
    "manage_cookies": "Gérer le consentement aux cookies",
    "legal": "Légal",
    "navigation": "Navigation du pied de page",
    "guide": "Guide"
  },
  "auth": {
    "login_title": "Connexion au Dashboard",
    "login_subtitle": "Accédez à votre portfolio",
    "email": "Email",
    "password": "Mot de passe",
    "login_btn": "Se connecter",
    "logging_in": "Connexion en cours…",
    "no_account": "Pas de compte ?",
    "create_one": "En créer un",
    "register_title": "Créer un Compte",
    "register_subtitle": "Inscrivez-vous au dashboard du portfolio",
    "name": "Nom",
    "confirm_password": "Confirmer le mot de passe",
    "register_btn": "S'inscrire",
    "registering": "Inscription en cours…",
    "register_verify_sent": "Compte créé ! Vérifiez votre email — nous vous avons envoyé un code pour le confirmer.",
    "have_account": "Vous avez déjà un compte ?",
    "sign_in": "Se connecter",
    "email_required": "Email valide requis",
    "password_required": "Le mot de passe doit contenir au moins 6 caractères",
    "name_required": "Le nom est obligatoire",
    "passwords_mismatch": "Les mots de passe ne correspondent pas",
    "login_with_otp": "Se connecter avec OTP (téléphone ou email)",
    "login_with_email": "Se connecter avec email",
    "otp_subtitle": "Connexion sans mot de passe par SMS ou email",
    "phone": "Numéro de téléphone",
    "phone_required": "Entrez un numéro valide au format E.164, ex. +33XXXXXXXXX",
    "phone_or_email": "Téléphone ou adresse email",
    "phone_or_email_required": "Entrez un numéro (ex. +33XXXXXXXXX) ou une adresse email valide",
    "send_otp": "Envoyer le code",
    "sending": "Envoi en cours…",
    "otp_sent_to": "Code envoyé par SMS à",
    "otp_sent_to_email": "Code envoyé par email à",
    "otp_code": "Code de vérification",
    "otp_required": "Entrez le code à 6 chiffres",
    "otp_expires_in": "Expire dans",
    "otp_expired": "Code expiré. Demandez-en un nouveau.",
    "verify_otp": "Vérifier",
    "verifying": "Vérification en cours…",
    "resend_code": "Renvoyer le code",
    "resend_in": "Renvoyer dans",
    "change_identifier": "Changer téléphone / email",
    "change_phone": "Changer de numéro",
    "otp_resent": "Nouveau code envoyé !",
    "otp_send_failed": "Échec de l'envoi du code. Veuillez réessayer.",
    "otp_invalid": "Code invalide ou expiré.",
    "login_error": "Email ou mot de passe invalide.",
    "login_with_email_password": "Se connecter avec email et mot de passe",
    "or": "ou",
    "show_password": "Afficher le mot de passe",
    "hide_password": "Masquer le mot de passe",
    "login_chip_admin": "Accès Admin",
    "login_title_generic": "Se connecter",
    "tab_password": "Mot de passe",
    "tab_code": "Sans mot de passe",
    "code_hint": "Nous vous envoyons un code à 6 chiffres par email. S'il s'agit de votre première connexion, le compte est créé automatiquement.",
    "code_hint_sms": "Nous vous envoyons un code à 6 chiffres par SMS. S'il s'agit de votre première connexion, le compte est créé automatiquement.",
    "code_channel_label": "Recevoir le code par",
    "channel_email": "Email",
    "channel_sms": "Mobile",
    "mobile_number": "Numéro de mobile",
    "mobile_placeholder": "+33 6 12 34 56 78",
    "mobile_invalid": "Entrez un numéro de mobile valide, ex. +33 6 12 34 56 78",
    "mobile_hint": "Les numéros sans indicatif international sont considérés comme italiens (+39).",
    "err_sms_unavailable": "L'envoi par SMS n'est pas disponible pour le moment. Utilisez l'email.",
    "forgot_password": "Mot de passe oublié ?",
    "forgot_hint": "Pas de souci : recevez un code par email et connectez-vous sans mot de passe.",
    "remember_email": "Se souvenir de mon email",
    "caps_lock_on": "Verr. Maj activé",
    "email_placeholder": "nom@exemple.fr",
    "identifier_placeholder": "nom@exemple.fr ou +33…",
    "change": "Modifier",
    "code_digits_label": "Code à 6 chiffres",
    "verify_and_login": "Vérifier et se connecter",
    "success_title": "Connexion réussie",
    "success_hello": "Bonjour, {{name}} !",
    "success_redirect": "Un instant…",
    "verify_email_action": "Envoyer le code de confirmation",
    "err_email_not_verified": "Vous devez d'abord confirmer votre email.",
    "err_network": "Pas de connexion. Vérifiez votre réseau et réessayez.",
    "err_too_many": "Trop de tentatives. Patientez une minute et réessayez.",
    "err_otp_wrong": "Code incorrect. Tentatives restantes : {{count}}.",
    "err_otp_locked": "Trop de tentatives erronées. Demandez un nouveau code.",
    "err_server": "Le serveur ne répond pas. Réessayez dans un instant.",
    "registration_closed": "Les inscriptions sont temporairement fermées."
  },
  "admin": {
    "dashboard": "Dashboard",
    "welcome": "Bienvenue",
    "projects": "Projets",
    "experiences": "Expériences",
    "blog_posts": "Articles du Blog",
    "published": "Publiés",
    "drafts": "Brouillons",
    "contacts": "Contacts",
    "users": "Utilisateurs",
    "visits": "Visites",
    "visitors": "Visiteurs",
    "manage_projects": "Gérer les Projets",
    "manage_experiences": "Gérer les Expériences",
    "manage_blog": "Gérer le Blog",
    "manage_notes": "Modérer les notes",
    "edit_about": "Modifier About",
    "logout": "Déconnexion",
    "loading": "Chargement…",
    "recent_activity": "Activité récente",
    "no_activity": "Aucune activité récente",
    "recent_contacts_chart": "Graphique des contacts récents",
    "visits_chart": "Graphique des visites réelles",
    "last_7_days": "7 derniers jours",
    "content_mix": "Contenu publié vs brouillon",
    "content_status": "Statut éditorial du contenu",
    "public_traffic": "Trafic public enregistré par le backend",
    "quick_actions": "Actions rapides",
    "mark_read": "Marquer comme lu",
    "mark_unread": "Marquer comme non lu",
    "status_read": "Lu",
    "status_unread": "Non lu",
    "open_email": "Ouvrir l'email",
    "reply": "Répondre",
    "reply_placeholder": "Tapez votre réponse à ce message...",
    "reply_send": "Envoyer la réponse",
    "reply_sent": "Réponse envoyée avec succès !",
    "reply_error": "Échec de l'envoi de la réponse. Vérifiez la configuration email.",
    "message_deleted": "Message supprimé.",
    "messages_deleted": "Messages sélectionnés supprimés.",
    "marked_read": "Message marqué comme lu.",
    "marked_unread": "Message marqué comme non lu.",
    "new_badge": "NOUVEAU",
    "select_all": "Tout sélectionner",
    "selected": "sélectionnés",
    "delete_selected": "Supprimer la sélection",
    "confirm_delete_title": "Confirmer la suppression",
    "confirm_delete_message": "Voulez-vous supprimer définitivement ce message ? Cette action est irréversible.",
    "confirm_delete_bulk": "Voulez-vous supprimer définitivement {{count}} message(s) sélectionné(s) ? Cette action est irréversible.",
    "visitor_analytics": "Analyse des Visiteurs",
    "visitor_overview": "Vue d'ensemble des Visiteurs",
    "visitor_overview_desc": "Aujourd'hui, total et visiteurs uniques",
    "today_visitors": "Aujourd'hui",
    "traffic_sources": "Sources de Trafic",
    "traffic_sources_desc": "Comment les visiteurs trouvent votre site",
    "device_breakdown": "Appareils",
    "device_breakdown_desc": "Répartition Desktop, Mobile, Tablette",
    "top_locations": "Villes et Régions",
    "top_locations_desc": "Localisations des visiteurs résolues depuis l'IP publique et les en-têtes proxy",
    "geo_ip_note": "Dérivé de l'IP publique et des en-têtes proxy",
    "top_countries": "Principaux Pays",
    "top_countries_desc": "Visiteurs par pays (géolocalisation IP)",
    "browser_breakdown": "Navigateurs",
    "browser_breakdown_desc": "Répartition par navigateur",
    "os_breakdown": "Système d'Exploitation",
    "os_breakdown_desc": "Répartition par système d'exploitation",
    "monthly_vs_total_views": "Vues mensuelles vs totales",
    "monthly_views_desc": "Mois en cours comparé au total cumulé",
    "total_views_all_time": "Total (depuis toujours)",
    "monthly_views_this_month": "Ce mois-ci",
    "last_reset": "Dernière réinitialisation",
    "reset_monthly_stats": "Réinitialiser les stats mensuelles",
    "confirm_reset_monthly_stats": "Réinitialiser les vues, localisations et appareils mensuels ? Cette action est irréversible.",
    "monthly_stats_reset": "Les statistiques mensuelles ont été réinitialisées.",
    "monthly_devices": "Appareils (ce mois-ci)",
    "monthly_devices_desc": "Répartition des appareils du mois en cours",
    "total_devices": "Appareils (total)",
    "total_devices_desc": "Répartition cumulée des appareils",
    "monthly_locations": "Localisations (ce mois-ci)",
    "monthly_locations_desc": "Répartition par pays du mois en cours",
    "total_locations": "Localisations (total)",
    "total_locations_desc": "Répartition cumulée par pays",
    "kpi_section": "KPIs de Performance",
    "conversion_rate": "Taux de Conversion",
    "conversion_rate_desc": "Contacts générés par vue totale de page",
    "conversion_rate_label": "Conversion",
    "growth_velocity": "Croissance Mensuelle",
    "growth_velocity_desc": "Mois en cours vs mois précédent",
    "growth_vs_prev_month": "vs mois préc.",
    "growth_no_history": "Aucun historique disponible",
    "system_health": "État du Système",
    "system_health_desc": "Statut et version du backend",
    "system_status": "Statut",
    "system_version": "Version",
    "system_env": "Environnement",
    "monthly_trend": "Tendance des Vues Mensuelles",
    "monthly_trend_desc": "Vues historiques par mois",
    "chatbot_stats": "Chatbot",
    "chatbot_stats_desc": "Conversations avec l'assistant AI",
    "chatbot_total_sessions": "Sessions totales",
    "chatbot_total_messages": "Messages totaux",
    "consent": {
      "title": "Aperçu des Consentements",
      "desc": "Résumé du consentement aux cookies collecté auprès des visiteurs",
      "total": "Total des consentements"
    },
    "chatbot_today": "Aujourd'hui",
    "chatbot_this_month": "Ce mois-ci",
    "chatbot_fallback_today": "Fallback aujourd'hui",
    "chatbot_fallback_desc": "Réponses de secours utilisées aujourd'hui car l'IA n'a pas répondu correctement",
    "top_pages": "Pages Principales",
    "top_pages_desc": "Pages les plus visitées par vues totales",
    "seo_title": "SEO – Search Console",
    "seo_desc": "28 derniers jours · Google Search Console",
    "seo_clicks": "Clics",
    "seo_impressions": "Impressions",
    "seo_avg_position": "Position moyenne",
    "seo_avg_ctr": "CTR moyen",
    "seo_not_configured": "Search Console non configurée. Ajoutez GSC_CLIENT_EMAIL, GSC_PRIVATE_KEY et GSC_SITE_URL au .env du backend.",
    "utility_section": "Utilitaires admin",
    "utility_deployment": "Statut du déploiement",
    "utility_deployment_desc": "Informations rapides sur le backend et la version actuelle",
    "utility_security": "Statut de sécurité",
    "utility_security_desc": "Vérification rapide des messages, journal d'audit et session active",
    "utility_content": "Statut du contenu",
    "utility_content_desc": "Résumé rapide du blog, des pages et de la tendance",
    "utility_operations": "Opérations rapides",
    "utility_operations_desc": "Actions de maintenance les plus courantes",
    "utility_ops_live": "Santé en direct",
    "utility_ops_live_desc": "Indicateurs rapides pour backend, email et cron",
    "utility_uptime": "Uptime",
    "utility_memory": "Mémoire RSS",
    "utility_node": "Node",
    "utility_mail": "Fournisseur email",
    "utility_running": "Actif",
    "utility_stopped": "Arrêté",
    "utility_not_scheduled": "Non planifié",
    "utility_started_at": "Démarré le",
    "utility_admin_user": "Admin actif",
    "utility_admin_email": "Email admin",
    "unread_contacts": "Contacts non lus",
    "audit_log_section": "Activité Admin",
    "audit_log": "Journal d'Activité",
    "audit_log_desc": "10 dernières opérations d'écriture admin",
    "audit_log_empty": "Aucune action admin enregistrée.",
    "chat_sessions_section": "Chat en Direct",
    "chat_sessions_today": "Sessions de Chat d'Aujourd'hui",
    "chat_sessions_today_desc": "Conversations démarrées aujourd'hui (TTL 24 h)",
    "chat_sessions_load": "Charger les sessions",
    "chat_sessions_empty": "Pas de sessions de chat aujourd'hui, ou pas encore chargées.",
    "chat_messages_count": "messages",
    "top_posts_title": "Articles les plus vus",
    "top_posts_desc_card": "Posts classés par nombre total de vues",
    "top_posts_empty": "Aucune vue enregistrée.",
    "logout_desc": "Fermer cette session admin et revenir à la page de connexion.",
    "export_csv": "Exporter CSV",
    "no_chart_data": "Aucune donnée pour cette période.",
    "refresh_data": "Actualiser",
    "last_updated": "Mis à jour",
    "tool_conversion": "Outils IA → Leads",
    "tool_conversion_desc": "Visiteurs uniques par outil sur les 30 derniers jours, et combien sont ensuite devenus un contact ou un chat en direct",
    "tool_conversion_col_tool": "Outil",
    "tool_conversion_col_visitors": "Visiteurs",
    "tool_conversion_col_leads": "Devenus lead",
    "tool_conversion_col_rate": "Taux",
    "overview_core": "Statistiques principales",
    "overview_load_error": "Impossible de charger le tableau de bord.",
    "overview_refresh_error": "L'actualisation a échoué : vous voyez les données précédentes.",
    "overview_partial_error": "Certains panneaux n'ont pas pu être mis à jour :",
    "retry": "Réessayer"
  },
  "session": {
    "warning_title": "La session est sur le point d'expirer",
    "warning_body": "Pour votre sécurité, votre session admin se terminera bientôt si vous ne confirmez pas que vous êtes toujours actif.",
    "seconds_remaining": "secondes restantes",
    "stay_logged_in": "Rester connecté",
    "logout_now": "Se déconnecter maintenant",
    "eyebrow": "Délai de sécurité",
    "warning_body_user": "Par sécurité, votre session va bientôt se terminer si vous ne confirmez pas que vous êtes toujours actif."
  },
  "common": {
    "loading": "Chargement…",
    "error": "Erreur lors du chargement des données.",
    "save": "Enregistrer",
    "cancel": "Annuler",
    "delete": "Supprimer",
    "edit": "Modifier",
    "create": "Créer",
    "back": "Retour",
    "close": "Fermer",
    "confirm": "Confirmer",
    "yes": "Oui",
    "no": "Non",
    "unsaved_confirm": "Vous avez des modifications non enregistrées. Quitter et les perdre ?"
  },
  "services": {
    "tag": "services",
    "title": "Mes Services",
    "subtitle": "Ce que je construis et livre — des solutions enterprise du concept à la production",
    "pdf": {
      "title": "Outils PDF & IA",
      "desc": "Suite d'outils en ligne gratuite : conversion de fichiers, éditeur et visionneuse PDF, OCR, scanner de documents, traduction PDF par IA, générateur de présentations et résumés automatiques.",
      "cta": "Essayer gratuitement"
    },
    "frontend": {
      "title": "Développement Front-End",
      "desc": "Applications Angular scalables avec TypeScript, RxJS et une architecture aux bonnes pratiques. Des projets greenfield aux migrations legacy. Le service idéal si vous recherchez un Angular Developer ou TypeScript Developer pour votre équipe.",
      "cta": "En savoir plus"
    },
    "web3d": {
      "title": "Applications 3D Web",
      "desc": "Expériences géospatiales et 3D immersives avec Cesium.js, WebGL et Three.js pour les secteurs aérospatial, défense et cartographie.",
      "cta": "En savoir plus"
    },
    "dataviz": {
      "title": "Data Visualization",
      "desc": "Dashboards interactifs et graphiques avec Chart.js, Looker Embedded et D3 — transformant des données complexes en insights actionnables.",
      "cta": "En savoir plus"
    },
    "uiux": {
      "title": "Design UI/UX",
      "desc": "Interfaces pixel-perfect, accessibles et responsive alignées sur des design systems modernes et des tests d'utilisabilité réels.",
      "cta": "En savoir plus"
    },
    "perf": {
      "title": "Optimisation des Performances",
      "desc": "Lazy loading stratégique, détection de changements optimisée, réglage des Core Web Vitals et revues d'architecture pour les systèmes de mission critique.",
      "cta": "En savoir plus"
    },
    "api": {
      "title": "Intégration d'API",
      "desc": "Intégrations REST et GraphQL fluides avec NestJS, .NET et des services tiers, sur la base d'une gestion solide des erreurs.",
      "cta": "En savoir plus"
    }
  },
  "blog": {
    "readMore": "Lire la suite",
    "loadMore": "Charger plus",
    "tags_more": "Afficher tous les tags (+{{count}})",
    "tags_less": "Afficher moins de tags",
    "views_singular": "{{count}} vue",
    "views_plural": "{{count}} vues",
    "empty": {
      "title": "Aucun article trouvé",
      "message": "Essayez un autre mot-clé ou parcourez tous les articles.",
      "reset": "Effacer les filtres"
    },
    "share": {
      "title": "Partagez cet article",
      "preview_alt": "Aperçu de l'article tel qu'il apparaît quand vous le partagez",
      "facebook": "Partager sur Facebook",
      "linkedin": "Partager sur LinkedIn",
      "twitter": "Partager sur X",
      "whatsapp": "Partager sur WhatsApp",
      "telegram": "Partager sur Telegram",
      "instagram": "Partager sur Instagram",
      "copyLink": "Copier le lien",
      "linkCopied": "Lien copié !"
    },
    "reading_time": "{{count}} min de lecture",
    "toc_title": "Dans cet article",
    "related_title": "À lire aussi",
    "related_subtitle": "D'autres articles sur les mêmes sujets",
    "copy_code": "Copier",
    "copied": "Copié !",
    "copy_failed": "Échec de la copie",
    "copy_section_link": "Copier le lien de la section",
    "link_copied": "Lien de la section copié",
    "eyebrow": "Articles et guides",
    "lead": "Guides pratiques et analyses approfondies sur Angular, TypeScript, Node.js, la performance, le SEO et le développement web moderne.",
    "stats": "{{posts}} articles · {{topics}} sujets",
    "search_placeholder": "Rechercher un article…",
    "clear_search": "Effacer la recherche",
    "topics": "Sujets",
    "all_topics": "Tous",
    "results": "Résultats : {{count}}",
    "latest": "Dernier article",
    "all_posts": "Tous les articles",
    "not_found": "Article introuvable",
    "back_to_blog": "Retour au blog"
  },
  "notes": {
    "title": "Notes des lecteurs",
    "count_singular": "{{count}} note",
    "count_plural": "{{count}} notes",
    "form": {
      "title": "Écrire une note",
      "description": "Partagez votre avis, une suggestion ou un compliment",
      "name": "Nom",
      "name_ph": "Votre nom",
      "email": "Email",
      "email_ph": "Votre email",
      "content": "Note",
      "content_ph": "Écrivez votre message...",
      "optional": "(facultatif)",
      "submit": "Publier la note",
      "submitting": "Envoi en cours...",
      "success": "Votre note a été publiée avec succès !",
      "error_generic": "Une erreur est survenue. Veuillez réessayer plus tard."
    },
    "errors": {
      "required": "Ce champ est obligatoire",
      "minlength": "Minimum {{count}} caractères",
      "maxlength": "Maximum {{count}} caractères",
      "email": "Email invalide",
      "invalid": "Champ invalide"
    },
    "list": {
      "title": "Dernières notes",
      "loading": "Chargement des notes...",
      "empty": "Aucune note pour le moment. Soyez le premier à commenter !",
      "anonymous": "Anonyme"
    }
  },
  "notes_manage": {
    "title": "Modérer les notes des lecteurs",
    "status_pending": "En attente",
    "status_approved": "Approuvées",
    "status_spam": "Spam",
    "status_all": "Toutes",
    "empty": "Aucune note dans cette catégorie.",
    "load_error": "Impossible de charger les notes.",
    "action_error": "Échec de l'action. Veuillez réessayer.",
    "approve": "Approuver",
    "reject": "Rejeter",
    "mark_spam": "Marquer comme spam",
    "approved": "Note approuvée.",
    "rejected": "Note rejetée.",
    "marked_spam": "Note marquée comme spam.",
    "deleted": "Note supprimée.",
    "confirm_delete": "Supprimer définitivement cette note ?",
    "spam_score": "Score de spam",
    "spam_score_tooltip": "Score automatique de détection de spam (0-100, plus élevé = plus suspect)",
    "prev_page": "Précédent",
    "next_page": "Suivant"
  },
  "testimonials": {
    "tag": "Témoignages",
    "title": "Ce que l'on dit de moi",
    "subtitle": "Des retours réels de clients et collaborateurs sur notre collaboration : projets, résultats et expériences racontés par eux-mêmes.",
    "rating": "Note",
    "verified_badge": "Vérifiée",
    "verified_tooltip": "Identité de l'auteur vérifiée par l'administrateur du site",
    "view_linkedin": "Profil LinkedIn de {{name}}",
    "form": {
      "title": "Laisser un témoignage",
      "author_name": "Nom",
      "author_name_ph": "Votre nom complet",
      "role": "Poste / Entreprise",
      "role_ph": "ex. CTO @ Acme (facultatif)",
      "company_url": "Lien de l'entreprise ou du projet",
      "company_url_ph": "ex. acme.com (facultatif)",
      "email": "Email",
      "email_ph": "Votre email (facultatif, jamais publié)",
      "linkedin": "Profil LinkedIn (facultatif)",
      "linkedin_ph": "linkedin.com/in/votre-nom",
      "linkedin_hint": "Sert uniquement à vérifier que vous êtes bien l'auteur. Le lien n'apparaît à côté du témoignage que si l'administrateur le vérifie.",
      "rating": "Note",
      "content": "Votre témoignage",
      "content_ph": "Racontez votre expérience de travail avec moi...",
      "submit": "Envoyer le témoignage",
      "submitting": "Envoi en cours...",
      "success": "Merci ! Votre témoignage est en cours de vérification et apparaîtra bientôt.",
      "error_generic": "Une erreur est survenue. Veuillez réessayer plus tard."
    },
    "errors": {
      "required": "Ce champ est obligatoire",
      "minlength": "Minimum {{count}} caractères",
      "maxlength": "Maximum {{count}} caractères",
      "email": "Email invalide",
      "linkedin": "Saisissez le lien de votre profil personnel (linkedin.com/in/…)",
      "rating_required": "Sélectionnez une note de 1 à 5 étoiles",
      "invalid": "Champ invalide"
    },
    "list": {
      "loading": "Chargement des témoignages...",
      "empty": "Aucun témoignage publié pour le moment."
    },
    "wall": {
      "tag": "Témoignages",
      "title": "Ce que l'on dit de moi",
      "cta": "Laisser votre témoignage"
    }
  },
  "testimonials_manage": {
    "title": "Modérer les témoignages",
    "status_pending": "En attente",
    "status_approved": "Approuvés",
    "status_spam": "Spam",
    "status_all": "Tous",
    "empty": "Aucun témoignage dans cette catégorie.",
    "load_error": "Impossible de charger les témoignages.",
    "action_error": "L'action a échoué. Veuillez réessayer.",
    "approve": "Approuver",
    "reject": "Rejeter",
    "mark_spam": "Marquer comme spam",
    "toggle_featured": "Afficher/masquer sur la page d'accueil",
    "verify": "Vérifier l'identité",
    "unverify": "Retirer la vérification",
    "verify_tooltip": "Confirmez avoir vérifié que l'auteur est bien qui il prétend : le badge et le lien LinkedIn apparaissent sur le site",
    "approved": "Témoignage approuvé.",
    "rejected": "Témoignage rejeté.",
    "marked_spam": "Témoignage marqué comme spam.",
    "featured_on": "En vedette",
    "featured_off": "Retiré de la page d'accueil.",
    "verified_on": "Témoignage vérifié",
    "verified_off": "Vérification retirée",
    "verified_badge": "Vérifiée",
    "linkedin_open": "Ouvrir le profil LinkedIn indiqué par l'auteur",
    "deleted": "Témoignage supprimé.",
    "confirm_delete": "Supprimer définitivement ce témoignage ?",
    "spam_score": "Score de spam",
    "spam_score_tooltip": "Score automatique de détection de spam (0-100, plus élevé = plus suspect)",
    "prev_page": "Précédent",
    "next_page": "Suivant",
    "edit_content": "Modifier le texte",
    "content_updated": "Texte mis à jour."
  },
  "newsletter": {
    "title": "Ne manquez pas les nouveaux articles",
    "subtitle": "Un email quand je publie quelque chose de nouveau sur le blog. Pas de spam.",
    "email_placeholder": "Votre email",
    "subscribe_btn": "S'abonner",
    "subscribe_success": "Vérifiez votre email : nous vous avons envoyé un lien pour confirmer votre abonnement.",
    "subscribe_error": "L'abonnement a échoué. Réessayez.",
    "confirm_loading": "Confirmation de votre abonnement…",
    "confirm_success_title": "Abonnement confirmé !",
    "confirm_success_message": "Vous recevrez désormais un email à chaque nouvel article publié.",
    "confirm_error_title": "Lien invalide",
    "confirm_error_message": "Ce lien de confirmation est invalide ou a expiré. Essayez de vous abonner à nouveau.",
    "unsubscribe_loading": "Désabonnement en cours…",
    "unsubscribe_success_title": "Désabonnement effectué",
    "unsubscribe_success_message": "Vous ne recevrez plus d'emails de la newsletter. Vous pouvez vous réabonner à tout moment.",
    "unsubscribe_error_title": "Lien invalide",
    "unsubscribe_error_message": "Ce lien est invalide ou l'abonnement n'existe plus.",
    "back_to_blog": "Retour au blog"
  },
  "newsletter_manage": {
    "title": "Newsletter",
    "export_csv": "Exporter en CSV",
    "status_all": "Tous",
    "status_pending": "En attente",
    "status_confirmed": "Confirmés",
    "status_unsubscribed": "Désabonnés",
    "empty": "Aucun abonné dans cette catégorie.",
    "load_error": "Impossible de charger les abonnés.",
    "confirm_delete": "Supprimer définitivement {{email}} ?",
    "deleted": "Abonné supprimé.",
    "delete_error": "Échec de la suppression. Réessayez.",
    "export_error": "Échec de l'export. Réessayez.",
    "prev_page": "Précédent",
    "next_page": "Suivant"
  },
  "chatbot_ui": {
    "title": "Assistant de Gent",
    "online": "En ligne",
    "typing": "En train de taper…",
    "placeholder": "Tapez un message…",
    "welcome_title": "Bonjour ! 👋",
    "welcome_text": "Je suis l'assistant AI sur le portfolio de <strong>Gent Sallaku</strong>. Posez-moi des questions sur ses projets, compétences ou les outils du site ! Si vous voulez lui parler en direct, écrivez-moi quelques messages ici : il recevra la demande (il ne sait pas encore qui vous êtes, alors présentez-vous).",
    "info_banner": "Gent lit les messages envoyés via le chatbot. Si vous souhaitez une réponse, veuillez utiliser la section 'Envoyer un Email'.",
    "info_cta": "Aller à la section Email →",
    "close": "Fermer le chat",
    "open": "Ouvrir l'assistant AI",
    "clear": "Effacer la conversation",
    "send": "Envoyer le message",
    "back": "Retour au chat",
    "transcript_title": "Recevoir la transcription",
    "transcript_desc": "Entrez votre email et nous vous enverrons la conversation complète.",
    "transcript_email_label": "Votre adresse email",
    "transcript_send": "Envoyer la transcription",
    "transcript_sending": "Envoi en cours…",
    "transcript_success": "Transcription envoyée avec succès !",
    "transcript_error": "Échec de l'envoi. Veuillez réessayer plus tard.",
    "email_error": "Veuillez entrer une adresse email valide.",
    "server_error": "Impossible de contacter le serveur pour le moment. Veuillez réessayer dans un instant.",
    "chip_who": "👋 Qui est Gent ?",
    "chip_skills": "🛠 Quelles sont ses compétences ?",
    "chip_projects": "📁 Montrez-moi ses projets",
    "chip_contact": "📬 Comment le contacter ?",
    "live_offer_cta": "Parler à Gent maintenant",
    "unread_badge": "{{count}} messages non lus",
    "new_messages": "Nouveaux messages",
    "instant": "Répond tout de suite",
    "notice_short": "Pour une réponse personnelle, écrivez à Gent.",
    "notice_cta": "E-mail →",
    "notice_dismiss": "Masquer l'avis",
    "welcome_heading": "Bonjour ! Que voulez-vous savoir sur Gent ?",
    "card_who_title": "Qui est Gent ?",
    "card_who_desc": "Parcours et expérience",
    "card_who_ask": "Qui est Gent ?",
    "card_skills_title": "Compétences",
    "card_skills_desc": "Angular, API, Data Viz",
    "card_skills_ask": "Quelles sont ses compétences ?",
    "card_projects_title": "Projets",
    "card_projects_desc": "Ce qu'il a réalisé",
    "card_projects_ask": "Montrez-moi ses projets",
    "card_contact_title": "Contact",
    "card_contact_desc": "E-mail ou chat en direct",
    "card_contact_ask": "Comment puis-je le contacter ?",
    "link_blog": "Article",
    "link_project": "Projet",
    "copy": "Copier le message",
    "copied": "Copié",
    "live_offer_desc": "Chat en direct : il reçoit une notification",
    "input_hint": "Entrée pour envoyer · Maj+Entrée pour aller à la ligne",
    "teaser_title": "Des questions sur Gent ?",
    "teaser_text": "Demandez : projets, compétences, outils.",
    "teaser_close": "Fermer l'invitation"
  },
  "live_handoff": {
    "prompt_title": "Souhaitez-vous parler directement à Gent ?",
    "accept": "Oui, le contacter",
    "decline": "Non, continuer avec l'assistant",
    "dismiss": "Fermer",
    "pill_label": "Parler à Gent",
    "waiting": "En attente de Gent…",
    "agent_joining": "Gent est en train de rejoindre…",
    "live_subtitle": "Vous discutez avec Gent",
    "expired_notice": "Gent n'est pas disponible pour le moment, mais il a bien reçu votre demande. En attendant, vous pouvez continuer à discuter avec l'assistant.",
    "admin_title": "Chat en direct avec le visiteur",
    "admin_connecting": "Connexion en cours…",
    "admin_joining": "Entrée dans le chat…",
    "admin_live": "Chat en direct actif",
    "admin_expired": "Cette demande a expiré.",
    "admin_closed": "Cette session a été fermée.",
    "admin_visitor_typing": "Le visiteur est en train d'écrire…",
    "admin_role_visitor": "Visiteur",
    "admin_role_ai": "IA",
    "admin_error": "Connexion impossible. Vérifiez que vous êtes connecté en tant qu'administrateur.",
    "admin_send_placeholder": "Écrire en tant que Gent…",
    "admin_history_loading": "Chargement de la conversation…",
    "admin_back": "Retour au tableau de bord",
    "card_title": "Chat en direct",
    "card_badge_active": "en cours",
    "card_badge_waiting": "en attente",
    "card_waiting": "En attente d'une réponse",
    "card_open": "Rejoindre",
    "card_empty": "Aucune demande de chat en direct pour le moment.",
    "list_subtitle": "Demandes ouvertes et chats des dernières 24 heures : ils sont supprimés au bout d'un jour.",
    "list_refresh": "Actualiser",
    "list_load_error": "Impossible d'actualiser la liste. Réessayez dans un instant.",
    "list_open": "Ouvertes",
    "list_past": "Fermées ou expirées",
    "list_past_empty": "Aucun chat fermé au cours des dernières 24 heures.",
    "list_status_expired": "Expirée sans réponse",
    "list_status_closed": "Fermée",
    "list_reopen": "Rouvrir",
    "list_responded_in": "répondu en {{minutes}} min",
    "list_no_message": "Aucun message",
    "exit_ask_resolved_title": "Avez-vous résolu votre problème ?",
    "exit_ask_resolved_yes": "Oui",
    "exit_ask_resolved_no": "Non, continuer",
    "exit_ask_close_title": "Voulez-vous fermer la session avec Gent ?",
    "exit_ask_close_yes": "Oui, fermer",
    "exit_ask_close_no": "Non, retour au chat",
    "exit_ask_leave_title": "Voulez-vous fermer le chat ?",
    "closed_notice": "La conversation avec Gent est terminée. Vous pouvez continuer à discuter avec l'assistant.",
    "admin_close_chat": "Fermer le chat"
  },
  "ai_ppt": {
    "title": "Générateur de Diapositives",
    "badge": "Générateur de Diapositives IA",
    "hero_title_1": "Transformez Chaque Idée en une",
    "hero_title_2": "Présentation Professionnelle",
    "hero_subtitle": "Entrez un sujet et notre IA crée instantanément un deck complet — titres, points, notes de l'intervenant et flux logique — prêt à présenter.",
    "cta_primary": "Générer des Diapositives Gratuitement",
    "cta_demo": "Voir la Démo →",
    "stat_max_slides": "Diap. Max",
    "stat_style_themes": "Styles",
    "stat_powered": "Alimenté IA",
    "feature_ai_title": "Généré par l'IA",
    "feature_ai_desc": "Structure complète de présentation créée à partir d'un seul sujet en quelques secondes.",
    "feature_styles_title": "5 Thèmes de Style",
    "feature_styles_desc": "Styles Business, Éducation, Minimal, Moderne et Pitch Deck.",
    "feature_slides_title": "Jusqu'à 20 Diapositives",
    "feature_slides_desc": "Choisissez 5, 10, 15 ou 20 diapositives selon vos besoins.",
    "feature_export_title": "Prêt à Exporter",
    "feature_export_desc": "Téléchargez votre deck sous forme de fichier texte structuré instantanément.",
    "section_title": "Générateur de Présentations IA",
    "section_subtitle": "Décrivez votre sujet et configurez votre deck ci-dessous",
    "label_topic": "Sujet de la Présentation",
    "label_style": "Style de la Présentation",
    "label_slides_count": "Nombre de Diapositives",
    "label_context": "Fichier de Contexte",
    "label_optional": "(optionnel)",
    "context_hint": "Téléchargez un PDF ou TXT pour donner à l'IA un contexte supplémentaire de votre contenu",
    "drop_text": "Déposez PDF/TXT ou",
    "drop_browse": "parcourir",
    "btn_sample": "💡 Exemple",
    "btn_generating": "Génération de la présentation…",
    "btn_generate": "Générer {{count}} Diapositives",
    "loading_title": "L'IA construit votre présentation",
    "loading_sub": "Création des diapositives, de la structure et des notes de l'intervenant…",
    "btn_carousel": "Carrousel",
    "btn_grid": "Grille",
    "btn_export": "Exporter",
    "btn_exporting": "Exportation…",
    "btn_new": "Nouveau",
    "btn_copy_slide": "Copier la Diapositive",
    "btn_copied": "✓ Copié",
    "btn_fullscreen": "Plein Écran",
    "btn_exit_fullscreen": "Quitter",
    "notes_label": "Notes",
    "btn_generate_another": "↩ Générer une Autre Présentation",
    "style_business_label": "Business",
    "style_business_desc": "Style corporate professionnel",
    "style_education_label": "Éducation",
    "style_education_desc": "Focus académique et pédagogique",
    "style_minimal_label": "Minimal",
    "style_minimal_desc": "Mise en page épurée et simple",
    "style_modern_label": "Moderne",
    "style_modern_desc": "Design contemporain et vibrant",
    "style_pitch_deck_label": "Pitch Deck",
    "style_pitch_deck_desc": "Deck prêt pour les investisseurs startup",
    "workspace_send": "Envoyer vers Workspace",
    "workspace_sent": "Envoyé ✓",
    "err_topic_short": "Saisissez un sujet d’au moins 3 caractères.",
    "err_file_type": "Seuls les fichiers PDF, TXT ou DOCX sont pris en charge comme contexte.",
    "err_file_too_large": "Fichier trop volumineux (max {{max}}Mo) : {{name}}",
    "err_generic": "Une erreur est survenue. Veuillez réessayer.",
    "err_truncated": "Le contenu de certaines diapositives a été tronqué par manque de place lors de l’export du PDF. Essayez de raccourcir le texte et régénérez.",
    "remove_context_file": "Supprimer le fichier",
    "prev_slide": "Diapositive précédente",
    "next_slide": "Diapositive suivante",
    "seo_title": "Générateur de Présentations IA — Créez des Diapositives avec l'IA",
    "seo_description": "Générez une présentation professionnelle complète sur n'importe quel sujet en quelques secondes. Jusqu'à 20 diapositives avec titres, puces, notes et 5 styles. Gratuit en ligne."
  },
  "ai_formatter": {
    "title": "Formateur IA",
    "badge": "Alimenté par l'IA",
    "hero_title_1": "Formatez du Texte Brut en",
    "hero_title_2": "Documents Soignés",
    "hero_subtitle": "Transformez des notes brutes, des comptes rendus de réunions ou du contenu IA en documents structurés et professionnels en quelques secondes.",
    "cta_primary": "✨ Commencer à Formater Gratuitement",
    "cta_demo": "Voir la Démo →",
    "stat_faster": "Plus Rapide",
    "stat_doc_types": "Types Doc.",
    "stat_powered": "Alimenté IA",
    "feature_instant_title": "Formatage Instantané",
    "feature_instant_desc": "Transformez des notes brutes ou du contenu IA en documents structurés en quelques secondes.",
    "feature_smart_title": "Structure Intelligente",
    "feature_smart_desc": "L'IA détecte intelligemment les titres, les puces et les paragraphes du texte non formaté.",
    "feature_multiple_title": "Plusieurs Types de Documents",
    "feature_multiple_desc": "Formatez des propositions, rapports, comptes rendus, CV et articles avec un style contextuel.",
    "feature_preview_title": "Aperçu en Direct",
    "feature_preview_desc": "Basculez entre une vue formatée et la sortie Markdown brute instantanément.",
    "section_title": "Formateur de Documents IA",
    "section_subtitle": "Collez votre texte ci-dessous et laissez l'IA le structurer instantanément",
    "panel_input": "Entrée",
    "panel_output": "Sortie",
    "drop_text": "Déposez un fichier .txt ou .md ici",
    "drop_sub": "ou cliquez pour parcourir",
    "btn_sample": "📝 Utiliser un Exemple",
    "btn_clear": "✕ Effacer",
    "btn_formatting": "Formatage…",
    "btn_format": "✨ Formater le Texte",
    "view_formatted": "Formaté",
    "view_markdown": "Markdown",
    "empty_title": "Votre document formaté apparaît ici",
    "empty_sub": "Saisissez du texte à gauche et cliquez sur \"Formater le Texte\"",
    "doctype_general": "Général",
    "doctype_business_proposal": "Proposition Commerciale",
    "doctype_report": "Rapport",
    "doctype_meeting_notes": "Compte Rendu",
    "doctype_resume": "CV",
    "doctype_article": "Article",
    "draft_restored": "Votre brouillon précédent a été restauré",
    "workspace_banner_title": "Texte reçu de Workspace",
    "workspace_banner_use": "Utiliser ce texte",
    "workspace_banner_dismiss": "Ignorer",
    "workspace_send": "Envoyer vers Workspace",
    "workspace_sent": "Envoyé ✓",
    "truncated_warning": "Document très long : seule la première partie a été traitée, le reste n'est pas inclus.",
    "err_too_short": "Saisissez au moins 10 caractères de texte à formater.",
    "err_generic": "Une erreur est survenue. Veuillez réessayer.",
    "err_file_type": "Seuls les fichiers .txt ou .md sont pris en charge pour le collage rapide.",
    "dismiss_draft": "Ignorer le brouillon",
    "textarea_placeholder": "Collez ici votre texte non formaté...\n\n✦ Notes de réunion, contenu brut, sortie IA, e-mails...\n✦ Ou cliquez sur « Utiliser l'exemple » pour une démo",
    "copied": "Copié",
    "copy": "Copier",
    "seo_title": "Formateur de Texte IA — Des Notes à un Document Professionnel",
    "seo_description": "Transformez notes, texte brut ou contenu IA en documents professionnels structurés instantanément. Rapports, propositions, CV, articles et plus. Formateur IA gratuit en ligne."
  },
  "pdf_summary": {
    "title": "AI Summarizer",
    "subtitle": "Importez un PDF, Word ou TXT — l'IA le lit et génère un résumé en quelques secondes",
    "lang_label": "Langue",
    "drop_title": "Glissez votre fichier ici",
    "drop_sub": "ou cliquez pour le sélectionner",
    "drop_formats": "PDF · Word (.docx/.doc) · TXT · HTML — 20 Mo max",
    "mode_short": "Bref",
    "mode_detailed": "Détaillé",
    "mode_bullets": "Points clés",
    "mode_insights": "Insights",
    "btn_generate": "Générer le résumé",
    "btn_analysing": "Analyse en cours…",
    "section_short": "Résumé bref",
    "section_detailed": "Résumé détaillé",
    "section_bullets": "Points clés",
    "section_insights": "Mots-clés",
    "btn_copy": "Copier",
    "btn_copied": "Copié !",
    "btn_download": "Télécharger",
    "btn_regenerate": "Régénérer",
    "btn_new_file": "Nouveau fichier",
    "workspace_banner_title": "Fichier reçu de Workspace",
    "workspace_banner_use": "Utiliser ce fichier",
    "workspace_banner_dismiss": "Ignorer",
    "btn_send_workspace": "Envoyer vers Workspace",
    "btn_sent": "Envoyé ✓",
    "truncated_warning": "Document très long : seule la première partie a été traitée, le reste n'est pas inclus.",
    "err_file_type": "Format non pris en charge. PDF, Word (.docx/.doc), TXT et HTML sont autorisés.",
    "err_file_too_large": "Fichier trop volumineux (max {{max}}Mo) : {{name}}",
    "err_generic": "Une erreur est survenue lors de l'analyse du fichier.",
    "remove_file": "Supprimer le fichier",
    "seo_title": "Résumé de PDF avec l'IA — Extrayez les Points Clés de Tout Document",
    "seo_description": "Téléchargez un PDF, Word ou TXT et obtenez un résumé généré par IA instantanément. Résumé court, analyse détaillée ou points clés. Résumeur de documents IA gratuit en ligne."
  },
  "workspace": {
    "badge": "Nouveau",
    "title": "Flux de travail",
    "subtitle": "Envoyez le résultat d'un outil directement vers le suivant, sans télécharger ni re-téléverser de fichiers.",
    "empty_title": "Rien en transit pour l'instant",
    "empty_hint": "Commencez par l'un de ces outils, puis envoyez ici son résultat pour continuer avec un autre.",
    "received_from": "Reçu de {{tool}}",
    "btn_clear": "Effacer",
    "btn_download": "Télécharger",
    "next_steps": "Continuer avec",
    "history_title": "Historique de la session",
    "kind_file": "Fichier",
    "kind_text": "Texte",
    "start_here": "Outils de départ",
    "persistence_hint": "Non enregistré : perdu si vous rechargez ou fermez cet onglet.",
    "feedback_cleared": "Supprimé de Workspace",
    "feedback_downloaded": "Téléchargement commencé",
    "seo_title": "Flux de Travail — Enchaînez les Outils IA et PDF",
    "seo_description": "Envoyez un fichier ou un texte d'un outil à l'autre sans le retélécharger. Numérisez, extrayez, traduisez et résumez dans un flux connecté."
  },
  "pdf_translate": {
    "title": "Traduction de PDF",
    "badge": "Traduction PDF par IA",
    "hero_title_1": "Traduisez N'importe Quel PDF",
    "hero_title_2": "Avec la Mise en Page Préservée",
    "hero_subtitle": "Traduction IA de niveau entreprise qui conserve le nombre et le format de pages de votre document.",
    "cta_primary": "🌍 Traduire le PDF Gratuitement",
    "stat_languages": "Langues",
    "stat_scanned": "PDF Numérisés",
    "stat_quality": "Qualité",
    "stat_max_size": "Taille Max",
    "feature_layout_title": "Mise en Page Fidèle",
    "feature_layout_desc": "Conserve le même nombre de pages et le même format que l'original, page par page — pas les polices ni les images d'origine.",
    "feature_ai_title": "Traduction Qualité IA",
    "feature_ai_desc": "Traduction par IA bloc par bloc avec des invites conscientes de la structure.",
    "feature_ocr_title": "OCR pour PDF Numérisés",
    "feature_ocr_desc": "Détecte automatiquement les PDFs basés sur des images et les traite via pipeline OCR.",
    "feature_langs_title": "12 Langues",
    "feature_langs_desc": "Anglais, Italien, Albanais, Espagnol, Allemand, Français + 6 autres.",
    "feature_fast_title": "Traitement Rapide",
    "feature_fast_desc": "Performance de niveau entreprise avec préservation de la mise en page.",
    "feature_enterprise_title": "Fiabilité Entreprise",
    "feature_enterprise_desc": "Limite 50 Mo, mise à l'échelle intelligente des polices, protection contre les débordements, mode secours.",
    "section_title": "Traducteur PDF",
    "section_subtitle": "Traduction IA entreprise avec préservation de la mise en page",
    "label_mode": "Mode de Traduction",
    "mode_high_fidelity": "Haute Fidélité",
    "mode_high_fidelity_desc": "Conserve le nombre et le format de page d'origine",
    "mode_standard": "Standard",
    "mode_standard_desc": "Traitement plus rapide, sortie texte propre",
    "label_language": "Langue Cible",
    "drop_title": "Déposez votre fichier ici ou",
    "drop_browse": "parcourir",
    "drop_hint": "PDF, DOCX, TXT — max 50 Mo",
    "btn_translating": "Traduction en cours…",
    "btn_translate_to": "Traduire en",
    "badge_high_fidelity": "Haute Fidélité",
    "switch_language": "Changer de langue :",
    "pane_original": "Original",
    "pane_translated": "Traduit",
    "pill_layout_preserved": "Mise en Page Préservée",
    "pill_fallback": "Mode Secours",
    "pill_scanned": "PDF Numérisé",
    "page": "page",
    "pages": "pages",
    "download_title": "Téléchargez votre traduction",
    "dl_pdf_name": "PDF Traduit",
    "dl_pdf_sub_preserved": "Mise en page préservée",
    "dl_pdf_sub_clean": "Mise en page propre",
    "dl_txt_name": "Texte Traduit",
    "dl_txt_sub": "Fichier .txt simple",
    "dl_copy_name": "Copier le Texte",
    "dl_copied_name": "Copié !",
    "dl_copy_sub": "Dans le presse-papiers",
    "btn_translate_another": "Traduire un autre fichier",
    "step_extracting": "Extraction du texte…",
    "step_translating": "Traduction en cours…",
    "step_rebuilding": "Reconstruction du document…",
    "workspace_banner_title": "Fichier reçu de Workspace",
    "workspace_banner_use": "Utiliser ce fichier",
    "workspace_banner_dismiss": "Ignorer",
    "dl_send_workspace_name": "Envoyer vers Workspace",
    "dl_send_workspace_sub": "Transmettez le résultat à un autre outil",
    "dl_sent_name": "Envoyé ✓",
    "guide_link": "Guide : comment fonctionne la traduction de PDF par IA",
    "truncated_warning": "Document très long : seule la première partie a été traitée, le reste n'est pas inclus.",
    "pill_clean_layout": "Mise en page nette",
    "err_file_type": "Seuls les fichiers PDF, DOCX ou TXT sont pris en charge.",
    "err_file_too_large": "Fichier trop volumineux (max {{max}}Mo) : {{name}}",
    "err_no_file": "Veuillez sélectionner un fichier.",
    "err_generic": "Échec de la traduction. Veuillez réessayer.",
    "upload_aria": "Importer un fichier PDF",
    "remove_file": "Supprimer le fichier",
    "seo_title": "Traducteur de PDF avec IA — Traduction en Préservant les Pages",
    "seo_description": "Traduisez n'importe quel PDF en 12 langues en conservant le même nombre de pages et la mise en forme. Traduction IA de niveau entreprise. Gratuit en ligne, sans inscription."
  },
  "pdf_search": {
    "title": "Recherche PDF",
    "badge": "Recherche de PDF du Domaine Public",
    "hero_title_1": "Trouvez Livres et Documents",
    "hero_title_2": "En PDF, Légalement",
    "hero_subtitle": "Recherchez parmi des millions de livres du domaine public et d'œuvres en libre accès sur Internet Archive et Project Gutenberg. Sans souci de droits d'auteur.",
    "search_placeholder": "Cherchez un titre, ex. \"Le Petit Prince\"…",
    "search_button": "Rechercher",
    "searching": "Recherche en cours…",
    "empty_title": "Recherchez un livre ou un document",
    "empty_subtitle": "Les résultats proviennent uniquement d'archives du domaine public et en libre accès.",
    "no_results_title": "Aucun résultat",
    "no_results_subtitle": "Essayez un autre titre ou auteur.",
    "result_by": "de",
    "preview_close": "Fermer",
    "preview_loading": "Chargement de l'aperçu…",
    "btn_download": "Télécharger le PDF",
    "btn_source_page": "Voir la page source",
    "legal_note": "Tous les résultats proviennent d'archives du domaine public ou sous licence libre.",
    "feature_legal_title": "100% Légal",
    "feature_legal_desc": "Uniquement des œuvres du domaine public et en libre accès, jamais de contenu piraté.",
    "feature_sources_title": "Sources Vérifiées",
    "feature_sources_desc": "Internet Archive, Project Gutenberg, arXiv et PubMed Central — des millions de livres et articles catalogués.",
    "feature_preview_title": "Aperçu Instantané",
    "feature_preview_desc": "Consultez le PDF directement dans le navigateur avant de le télécharger.",
    "preview_unavailable": "Aperçu non disponible pour cette source. Téléchargez le PDF pour le lire.",
    "filter_all": "Tous",
    "filter_books": "Livres",
    "filter_papers": "Articles",
    "filter_no_results": "Aucun résultat pour ce filtre. Essayez « Tous ».",
    "sort_label": "Trier par",
    "sort_relevance": "Pertinence",
    "sort_year_desc": "Année (plus récente)",
    "sort_year_asc": "Année (plus ancienne)",
    "btn_send_workspace": "Envoyer à Workspace",
    "workspace_sent": "Envoyé",
    "recent_searches_title": "Recherches récentes",
    "recent_clear": "Effacer",
    "faq_title": "Questions fréquentes",
    "faq_q1": "Comment fonctionne ce moteur de recherche de PDF ?",
    "faq_a1": "Il recherche simultanément sur Internet Archive, Project Gutenberg, arXiv et PubMed Central et n'affiche que les résultats avec un PDF réellement disponible, avec aperçu direct dans le navigateur avant le téléchargement.",
    "faq_q2": "Est-il légal de télécharger ces PDF ?",
    "faq_a2": "Oui. Chaque source indexée ne publie que du contenu du domaine public ou en libre accès : livres dont les droits ont expiré, articles scientifiques et publications sous licence libre. Aucun contenu piraté.",
    "faq_q3": "Quelles sources couvre cette recherche de PDF sans droits d'auteur ?",
    "faq_a3": "Internet Archive et Project Gutenberg pour les livres et classiques du domaine public, arXiv et PubMed Central pour les articles scientifiques et académiques en libre accès.",
    "faq_q4": "Puis-je rechercher des livres PDF du domaine public en français ?",
    "faq_a4": "Oui, Internet Archive inclut de nombreux ouvrages du domaine public numérisés dans des dizaines de langues, en plus du catalogue majoritairement anglophone de Project Gutenberg.",
    "faq_q5": "Pourquoi certains résultats n'ont-ils pas d'aperçu ?",
    "faq_a5": "Certaines sources (par ex. PubMed Central) empêchent l'intégration directe de la page pour des raisons techniques propres à leur serveur — le téléchargement reste alors disponible.",
    "faq_q6": "Le moteur de recherche de PDF est-il gratuit ?",
    "faq_a6": "Oui, entièrement gratuit, sans inscription ni limite d'utilisation, hormis une limite technique anti-abus de 20 recherches par minute.",
    "quality_hd": "Haute résolution",
    "quality_low": "Basse résolution",
    "group_similar_label": "Regrouper les éditions similaires",
    "duplicate_count": "+{{count}} autres éditions",
    "favorites_title": "Vos favoris",
    "btn_favorite_add": "Ajouter aux favoris",
    "btn_favorite_remove": "Retirer des favoris",
    "btn_save_library": "Enregistrer dans la bibliothèque",
    "library_saved": "Dans la bibliothèque",
    "preview_timeout": "L'aperçu met trop de temps à charger. Téléchargez le PDF pour le lire.",
    "err_search": "La recherche a échoué. Veuillez réessayer.",
    "err_workspace_send": "L'envoi vers Workspace a échoué. Veuillez réessayer.",
    "err_library_save": "L'enregistrement dans la Bibliothèque a échoué. Veuillez réessayer.",
    "preview_prev_page": "Page précédente",
    "preview_next_page": "Page suivante",
    "seo_title": "Moteur de Recherche PDF du Domaine Public — Livres sans Droits d'Auteur",
    "seo_description": "Recherchez et téléchargez des livres du domaine public, des articles scientifiques et des publications en libre accès, sans problème de droits d'auteur. Recherchez sur Internet Archive, Project Gutenberg, arXiv et PubMed Central avec aperçu avant téléchargement."
  },
  "convert": {
    "title": "Convertisseur",
    "subtitle": "conversions disponibles",
    "search_placeholder": "Rechercher par format ou type…",
    "favorites": "Favoris",
    "favorites_desc": "Conversions épinglées",
    "no_results": "Aucun résultat pour \"{{ query }}\"",
    "show_all": "Tout afficher",
    "group_docs": "Documents",
    "group_docs_desc": "PDF, DOCX, TXT, HTML, Markdown",
    "group_sheets": "Tableur",
    "group_sheets_desc": "CSV, Excel, JSON",
    "group_images": "Images",
    "group_images_desc": "PNG, JPG, WebP, PDF",
    "group_structured": "Structuré",
    "group_structured_desc": "PDF, JSON, CSV",
    "group_base64": "Base64",
    "group_base64_desc": "Encoder et décoder en Base64",
    "group_utils": "Utilitaires",
    "group_utils_desc": "Fusionner et outils avancés",
    "remove_fav": "Retirer des favoris",
    "add_fav": "Ajouter aux favoris",
    "step": "Étape",
    "step_of": "sur",
    "step1_label": "Télécharger le fichier",
    "step2_label": "Convertir",
    "close": "Fermer",
    "drop_prompt": "Cliquez ou déposez le fichier ici",
    "accepted_formats": "Formats acceptés",
    "change_file": "Cliquez pour changer",
    "meta_name": "Nom",
    "meta_size": "Taille",
    "meta_type": "Type",
    "meta_pages": "Pages",
    "preview_title": "Aperçu",
    "preview_unavailable": "Aperçu non disponible pour ce type de fichier.",
    "cancel": "Annuler",
    "continue_btn": "Continuer",
    "selected_file": "Fichier sélectionné",
    "conversion_label": "Conversion",
    "format_warning": "Le fichier ne correspond pas au format attendu ({{ accept }}).",
    "in_progress": "Traitement en cours…",
    "back": "Retour",
    "converting": "Conversion en cours…",
    "convert_now": "Convertir maintenant",
    "close_confirm": "Fermer le convertisseur ? Le fichier n'a pas encore été converti.",
    "hint_invoice": "💡 Ressemble à une facture. Recommandé : PDF → JSON structuré.",
    "hint_contract": "💡 Ressemble à un contrat. Recommandé : PDF → DOCX.",
    "hint_pdf": "💡 PDF détecté. Recommandé : PDF → DOCX ou PDF → JSON.",
    "hint_image": "💡 Image détectée. Recommandé : convertir en WebP pour le web.",
    "hint_csv": "💡 Données tabulaires détectées. Recommandé : CSV → rapport PDF.",
    "hint_json": "💡 JSON détecté. Recommandé : JSON → rapport PDF.",
    "err_unauthorized": "Non autorisé.",
    "err_too_large": "Fichier trop volumineux : la limite est de {{max}}Mo.",
    "err_unsupported": "Format de fichier non supporté.",
    "err_invalid": "Requête invalide. Vérifiez le fichier.",
    "err_failed": "Conversion échouée. Réessayez.",
    "success": "✅ Conversion terminée. Téléchargement démarré.",
    "no_file": "Aucun fichier sélectionné.",
    "payload_not_downloadable": "Conversion terminée mais le résultat n'est pas téléchargeable.",
    "type_pdf_to_docx": "PDF → Word (DOCX)",
    "type_docx_to_pdf": "Word → PDF",
    "type_pdf_to_txt": "PDF → Texte",
    "type_pdf_to_html": "PDF → HTML",
    "type_html_to_pdf": "HTML → PDF",
    "type_html_to_docx": "HTML → Word",
    "type_docx_to_txt": "Word → Texte",
    "type_docx_to_html": "Word → HTML",
    "type_txt_to_pdf": "Texte → PDF",
    "type_txt_to_docx": "Texte → Word",
    "type_md_to_html": "Markdown → HTML",
    "type_md_to_pdf": "Markdown → PDF",
    "type_csv_to_excel": "CSV → Excel",
    "type_excel_to_csv": "Excel → CSV",
    "type_excel_to_json": "Excel → JSON",
    "type_excel_to_html": "Excel → HTML",
    "type_excel_to_pdf": "Excel → PDF",
    "type_csv_to_pdf": "CSV → PDF",
    "type_csv_to_json": "CSV → JSON",
    "type_json_to_csv": "JSON → CSV",
    "type_jpg_to_png": "JPG → PNG",
    "type_png_to_jpg": "PNG → JPG",
    "type_png_to_webp": "PNG/JPG → WebP",
    "type_webp_to_png": "WebP → PNG",
    "type_image_to_pdf": "Images → PDF",
    "type_pdf_to_images": "PDF → Pages (ZIP)",
    "type_pdf_to_json": "PDF → JSON structuré",
    "type_json_to_pdf": "JSON → PDF",
    "type_pdf_to_csv": "PDF → CSV",
    "type_b64_to_png": "Base64 → PNG",
    "type_b64_to_jpg": "Base64 → JPG",
    "type_b64_to_pdf": "Base64 → PDF",
    "type_file_to_b64": "Fichier → Base64",
    "type_merge_pdf": "Fusionner des PDFs",
    "drop_prompt_multi": "Cliquez ou glissez les fichiers ici",
    "remove_file": "Supprimer le fichier",
    "files_selected_count": "{{count}} fichiers sélectionnés",
    "merge_min_files": "Sélectionnez au moins 2 fichiers PDF à fusionner.",
    "selected_files": "Fichiers sélectionnés",
    "batch_combine_note": "Ces fichiers seront combinés en un seul fichier de sortie.",
    "batch_pending": "En attente",
    "batch_done": "Inclus",
    "batch_error": "Échec",
    "workspace_banner_title": "Fichier reçu de Workspace",
    "workspace_banner_use": "Utiliser ce fichier",
    "workspace_banner_dismiss": "Ignorer",
    "workspace_send": "Envoyer vers Workspace",
    "workspace_sent": "Envoyé ✓",
    "blog_link": "Guide : comment convertir un PDF en Word sans perdre la mise en forme",
    "seo_title": "Convertisseur de Fichiers Gratuit — PDF, Word, Excel, Images",
    "seo_description": "Convertissez entre PDF, DOCX, TXT, HTML, XLSX, CSV, JSON, PNG, JPG et plus — {{count}} types de conversion, gratuit, dans le navigateur. Sans inscription."
  },
  "ocr": {
    "title": "OCR — Reconnaissance de texte",
    "subtitle": "Extrayez le texte d'images et de PDF scannés",
    "drop_prompt": "Déposez le fichier ici ou cliquez pour le sélectionner",
    "accepted": "PNG, JPG, WEBP, BMP, TIFF, PDF",
    "change_file": "Cliquez pour changer de fichier",
    "lang_label": "Langue du document",
    "clear": "Effacer",
    "start": "Démarrer l'OCR",
    "processing": "Traitement…",
    "preparing": "Préparation de la page",
    "recognizing": "Reconnaissance du texte…",
    "results_title": "Résultat",
    "copy": "Copier",
    "copied": "Copié !",
    "download_txt": "Télécharger .txt",
    "no_text": "Aucun texte détecté",
    "page": "Page",
    "text_layer": "couche de texte du PDF",
    "success": "Texte extrait avec succès",
    "err_failed": "Le traitement OCR a échoué",
    "err_rate_limit": "Trop de requêtes, veuillez patienter puis réessayer",
    "err_too_large": "Fichier trop volumineux",
    "pages_truncated": "Seules les {{max}} premières pages ont été traitées",
    "files_selected": "{{count}} fichier(s) sélectionné(s)",
    "add_more": "Cliquez pour ajouter d'autres fichiers",
    "remove_file": "Supprimer le fichier",
    "err_too_many_files": "Trop de fichiers sélectionnés (max {{max}})",
    "err_file_too_large": "Fichier trop volumineux (max {{max}}Mo) : {{names}}",
    "err_too_many_pages": "Trop de pages nécessitent l'OCR ({{count}}, max {{max}}). Supprimez des fichiers et réessayez.",
    "low_confidence_hint": "Confiance faible — envisagez de rescanner cette page ou d'utiliser une image de meilleure qualité",
    "workspace_banner_title": "Fichier reçu de Workspace",
    "workspace_banner_use": "Utiliser ce fichier",
    "workspace_banner_dismiss": "Ignorer",
    "send_workspace": "Envoyer vers Workspace",
    "sent": "Envoyé ✓",
    "save_library": "Enregistrer dans la bibliothèque",
    "saved_library": "Enregistré dans la bibliothèque",
    "seo_title": "OCR en Ligne Gratuit — Extrayez le Texte d'Images et de PDF Scannés",
    "seo_description": "Extrayez le texte de photos, documents scannés et PDF en 7 langues. OCR en ligne gratuit, sans inscription."
  },
  "tools": {
    "badge": "AI & PDF Tools",
    "heading": "Votre suite de productivité",
    "subtitle": "Des outils documentaires basés sur l'IA et des utilitaires PDF, tout au même endroit.",
    "section_ai": "Outils IA",
    "section_tools": "Outils PDF",
    "pdf_summary_title": "Résumé PDF",
    "pdf_summary_desc": "Importez un PDF, Word ou TXT et obtenez un résumé généré par IA en quelques secondes.",
    "ai_formatter_title": "AI Formatter",
    "ai_formatter_desc": "Transformez des notes brutes et du texte non formaté en documents soignés.",
    "pdf_translate_title": "Traduire un PDF",
    "pdf_translate_desc": "Traduisez n'importe quel PDF ou document en 12 langues avec une qualité IA.",
    "ai_slides_title": "AI Slides",
    "ai_slides_desc": "Transformez n'importe quel sujet en présentation complète avec notes de l'orateur.",
    "pdf_editor_title": "Éditeur PDF",
    "pdf_editor_desc": "Fusionnez, divisez, pivotez et supprimez des pages, ajoutez des filigranes à tout PDF.",
    "viewer_title": "Visionneuse",
    "viewer_desc": "Visualisez, naviguez et recherchez dans des documents PDF depuis le navigateur.",
    "editor_title": "Éditeur",
    "editor_desc": "Éditeur de texte enrichi avec export PDF et DOCX.",
    "convert_title": "Convertir",
    "convert_desc": "Convertissez entre PDF, Word, Excel, images et plus encore.",
    "ocr_title": "OCR",
    "ocr_desc": "Extrayez le texte de PDF et d'images scannés avec l'OCR.",
    "scanner_title": "Scanner",
    "scanner_desc": "Numérisez des documents physiques avec votre caméra et convertissez-les en PDF.",
    "pdf_search_title": "Recherche PDF",
    "pdf_search_desc": "Recherchez des livres et documents PDF du domaine public, avec aperçu avant téléchargement.",
    "library_title": "Ma bibliothèque",
    "library_desc": "Gardez vos PDF dans le navigateur, cherchez dans leur contenu, annotez-les et interrogez vos documents.",
    "my_files_title": "Mes fichiers",
    "my_files_desc": "Retrouve les résultats que tu as enregistrés depuis les outils IA",
    "seo_title": "Outils PDF et IA Gratuits — Traduction, Résumé, Présentations",
    "seo_description": "Outils en ligne gratuits basés sur l'IA : traducteur PDF, générateur de présentations, formateur de texte et résumeur de PDF. Outils professionnels pour vos documents. Sans inscription."
  },
  "about_manage": {
    "title": "Section À propos",
    "saving": "Enregistrement…",
    "headline_label": "Titre",
    "headline_placeholder": "Full-Stack Developer & Open Source Enthusiast",
    "bio_label": "Biographie",
    "location_label": "Localisation",
    "location_placeholder": "Remote / New York",
    "avatar_label": "URL de l'avatar",
    "resume_label": "URL du CV",
    "skills_label": "Compétences (appuyez sur Entrée)",
    "social_links_title": "Réseaux sociaux",
    "github_label": "URL GitHub",
    "linkedin_label": "URL LinkedIn",
    "twitter_label": "URL Twitter",
    "email_label": "Email de contact",
    "update_success": "Section À propos mise à jour !",
    "update_error": "Échec de la mise à jour."
  },
  "experiences_manage": {
    "title": "Expériences",
    "new": "Nouvelle Expérience",
    "entity": "Expérience",
    "required": "Obligatoire",
    "company_label": "Entreprise",
    "role_label": "Poste",
    "start_date_label": "Date de début (ex. 2022-01)",
    "end_date_label": "Date de fin",
    "current_label": "Je travaille encore ici",
    "description_label": "Description",
    "location_label": "Localisation",
    "location_placeholder": "Télétravail",
    "order_label": "Ordre",
    "tech_label": "Technologies (appuyez sur Entrée)",
    "empty": "Aucune expérience pour le moment.",
    "present": "Présent",
    "saved": "Expérience enregistrée !",
    "save_error": "Échec de l'enregistrement.",
    "confirm_delete": "Supprimer cette expérience ?",
    "deleted": "Supprimée."
  },
  "projects_manage": {
    "title": "Projets",
    "new": "Nouveau Projet",
    "entity": "Projet",
    "required": "Obligatoire",
    "title_label": "Titre",
    "order_label": "Ordre",
    "description_label": "Description",
    "live_url_label": "URL en ligne",
    "repo_url_label": "URL du dépôt",
    "tech_label": "Technologies (appuyez sur Entrée)",
    "images_label": "URLs des images (appuyez sur Entrée)",
    "featured_label": "Projet mis en avant",
    "save_project": "Enregistrer le Projet",
    "empty": "Aucun projet pour le moment. Créez le premier !",
    "featured_badge": "En vedette",
    "saved": "Projet enregistré !",
    "save_error": "Échec de l'enregistrement du projet.",
    "confirm_delete": "Supprimer ce projet ?",
    "deleted": "Projet supprimé.",
    "case_study": "Étude de cas",
    "case_study_hint": "En remplissant au moins un champ, le projet obtient sa propre page /projects/<slug>.",
    "problem_label": "Problème du client",
    "solution_label": "Solution réalisée",
    "results_label": "Résultats (mesurables)",
    "reorder_hint": "Faites glisser les lignes ou utilisez les flèches pour changer l'ordre : il est enregistré aussitôt.",
    "move_up": "Monter",
    "move_down": "Descendre",
    "reorder_error": "Ordre non enregistré, le précédent a été rétabli."
  },
  "editor": {
    "title": "Éditeur de Documents",
    "subtitle": "Rédigez et formatez des documents dans votre navigateur, exportez en PDF, DOCX ou HTML",
    "doc_name_placeholder": "Nom du document",
    "import": "Importer",
    "exporting": "Export en cours…",
    "style": "Style",
    "paragraph": "Paragraphe",
    "code": "Code",
    "link": "Lien",
    "words": "mots",
    "placeholder": "Commencez à écrire…",
    "link_prompt": "Entrez l'URL du lien",
    "bold": "Gras",
    "italic": "Italique",
    "underline": "Souligné",
    "strike": "Barré",
    "ul": "Liste à puces",
    "ol": "Liste numérotée",
    "quote": "Citation",
    "align_left": "Aligner à gauche",
    "align_center": "Centrer",
    "align_right": "Aligner à droite",
    "undo": "Annuler",
    "redo": "Rétablir",
    "clear_format": "Effacer la mise en forme",
    "err_format": "Format de fichier non pris en charge",
    "err_import": "Échec de l'importation",
    "err_empty": "Le document est vide",
    "err_export": "Échec de l'exportation",
    "err_timeout": "Cela prend trop de temps. Essayez un fichier plus petit ou vérifiez votre connexion.",
    "success": "Document exporté avec succès",
    "workspace_banner_title": "Texte reçu de Workspace",
    "workspace_banner_use": "Utiliser ce texte",
    "workspace_banner_dismiss": "Ignorer",
    "workspace_send": "Envoyer vers Workspace",
    "workspace_sent": "Envoyé ✓",
    "err_file_too_large": "Fichier trop volumineux (max {{max}}Mo) : {{name}}",
    "seo_title": "Éditeur de Documents en Ligne Gratuit — Exportez en PDF et DOCX",
    "seo_description": "Rédigez et mettez en forme des documents dans le navigateur, importez des fichiers Word et exportez en PDF, DOCX ou HTML. Gratuit, sans inscription."
  },
  "pdf_editor": {
    "title": "Éditeur PDF",
    "subtitle": "Fusionnez, divisez, pivotez et supprimez des pages, ajoutez des filigranes",
    "drop_prompt": "Déposez les PDF ici ou cliquez pour les sélectionner",
    "drop_hint": "Vous pouvez sélectionner plusieurs fichiers pour les fusionner",
    "add_more": "Ajouter d'autres PDF",
    "pages_title": "Pages",
    "pages_hint": "Glissez pour réorganiser, pivotez ou supprimez des pages individuelles",
    "watermark_label": "Filigrane",
    "watermark_placeholder": "Texte du filigrane (facultatif)",
    "range_label": "Plage de pages",
    "range_placeholder": "ex. 1-3,5",
    "clear": "Effacer",
    "exporting": "Export en cours…",
    "export": "Exporter en PDF",
    "err_range": "Plage de pages invalide",
    "success": "PDF exporté avec succès",
    "err_failed": "Échec de l'exportation",
    "err_open": "Impossible d'ouvrir le PDF",
    "workspace_banner_title": "Fichier reçu de Workspace",
    "workspace_banner_use": "Utiliser ce fichier",
    "workspace_banner_dismiss": "Ignorer",
    "workspace_send": "Envoyer vers Workspace",
    "workspace_sent": "Envoyé ✓",
    "page_moved": "Page déplacée à la position {{position}}",
    "err_no_valid_pdf": "Aucun PDF valide trouvé parmi les fichiers déposés.",
    "drag_to_reorder": "Glisser pour réorganiser",
    "rotate": "Pivoter",
    "move_left": "Déplacer à gauche",
    "move_right": "Déplacer à droite",
    "delete": "Supprimer",
    "persistence_hint": "Les modifications ne sont pas enregistrées : elles sont perdues si vous rechargez ou fermez cet onglet.",
    "seo_title": "Éditeur PDF Gratuit — Fusionner, Diviser, Pivoter et Filigraner",
    "seo_description": "Fusionnez des PDF, divisez et extrayez des pages, pivotez ou supprimez des pages et ajoutez des filigranes — entièrement dans le navigateur, vos fichiers ne quittent jamais votre appareil."
  },
  "viewer": {
    "title": "Visionneuse PDF",
    "subtitle": "Visualisez, naviguez et recherchez dans des documents PDF",
    "drop_prompt": "Déposez votre PDF ici ou cliquez pour le sélectionner",
    "fit_width": "Ajuster à la largeur",
    "search_placeholder": "Rechercher dans le document…",
    "no_matches": "Aucun résultat",
    "close_file": "Fermer le fichier",
    "err_open": "Impossible d'ouvrir le PDF",
    "ocr_hint": "Ce document ne semble pas contenir de texte extractible : il s'agit peut-être d'un PDF scanné.",
    "ocr_hint_cta": "Essayer l'OCR",
    "trust_badge": "Les fichiers sont traités entièrement dans votre navigateur — jamais envoyés",
    "annotations_title": "Annotations",
    "annotate_on": "Surligner",
    "annotate_off": "Terminer le surlignage",
    "annotate_hint": "Glissez sur la page pour surligner.",
    "annotations_empty": "Aucune annotation. Activez Surligner et glissez sur le texte.",
    "note_placeholder": "Ajouter une note…",
    "delete_annotation": "Supprimer l'annotation",
    "export_annotations": "Exporter les notes",
    "from_library": "De la bibliothèque",
    "err_load_doc": "Impossible d'ouvrir le document de votre bibliothèque.",
    "save_to_library": "Enregistrer dans la bibliothèque",
    "workspace_banner_title": "Fichier reçu de Workspace",
    "workspace_banner_use": "Utiliser ce fichier",
    "workspace_banner_dismiss": "Ignorer",
    "opening": "Ouverture du document…",
    "prev_page": "Page précédente",
    "next_page": "Page suivante",
    "zoom_out": "Zoom arrière",
    "zoom_in": "Zoom avant",
    "prev_match": "Résultat précédent",
    "next_match": "Résultat suivant",
    "seo_title": "Visionneuse PDF en Ligne Gratuite — Zoom, Recherche et Miniatures",
    "seo_description": "Consultez des documents PDF dans votre navigateur : navigation par page, zoom, recherche en texte intégral et aperçu des miniatures. Gratuit, privé, sans envoi de fichier."
  },
  "scanner": {
    "title": "Scanner de Documents",
    "subtitle": "Numérisez des documents avec votre caméra et convertissez-les en PDF",
    "capture": "Capturer",
    "start_camera": "Démarrer la caméra",
    "stop_camera": "Arrêter la caméra",
    "upload_image": "Importer une image",
    "placeholder": "Démarrez la caméra ou importez une image pour commencer",
    "drop_hint": "Déposez une image ici, ou utilisez la caméra ou importez un fichier",
    "limits_hint": "PNG, JPG, WEBP · max {{size}}Mo par image · jusqu'à {{max}} pages",
    "filter": "Filtre",
    "filter_none": "Aucun",
    "filter_grayscale": "Niveaux de gris",
    "filter_bw": "Noir et blanc",
    "filter_enhance": "Améliorer",
    "rotate": "Pivoter",
    "reset_crop": "Réinitialiser le recadrage",
    "cancel": "Annuler",
    "add_page": "Ajouter une page",
    "crop_hint": "Faites glisser sur l'image pour recadrer",
    "edit_canvas_label": "Zone de recadrage. Faites glisser pour sélectionner, ou utilisez le clavier : Entrée pour sélectionner, flèches pour déplacer, Maj+flèches pour redimensionner, Échap pour annuler.",
    "pages_title": "Pages capturées",
    "clear": "Effacer",
    "confirm_clear": "Supprimer les {{count}} pages capturées ? Action irréversible.",
    "confirm_delete_page": "Supprimer la page {{n}} ?",
    "exporting": "Export en cours…",
    "uploading": "Envoi en cours… {{pct}}%",
    "processing_pdf": "Génération du PDF…",
    "export_pdf": "Exporter en PDF",
    "err_camera": "Impossible d'accéder à la caméra",
    "err_camera_denied": "Autorisation de la caméra refusée. Activez-la dans les paramètres du navigateur et réessayez.",
    "err_camera_notfound": "Aucune caméra trouvée sur cet appareil.",
    "err_camera_inuse": "La caméra est déjà utilisée par une autre application.",
    "success": "PDF exporté avec succès",
    "err_failed": "L'opération a échoué",
    "err_file_type": "Format non pris en charge : {{name}}",
    "err_file_too_large": "Fichier trop volumineux (max {{max}}Mo) : {{name}}",
    "err_offline": "Vous êtes hors ligne. Vérifiez votre connexion et réessayez.",
    "err_too_many_pages": "Vous pouvez avoir au maximum {{max}} pages : certains fichiers n'ont pas été ajoutés.",
    "run_ocr": "Lancer l'OCR",
    "ocr_results_title": "Texte extrait (OCR)",
    "trust_badge": "Capture, recadrage et filtres restent dans votre navigateur — seuls l'OCR et l'export PDF sont envoyés au serveur",
    "workspace_send_pdf": "Envoyer le PDF vers Workspace",
    "workspace_send_text": "Envoyer le texte vers Workspace",
    "workspace_sent": "Envoyé ✓",
    "move_left": "Déplacer à gauche",
    "move_right": "Déplacer à droite",
    "delete": "Supprimer",
    "page_alt": "page {{n}}",
    "err_camera_unsupported": "Caméra indisponible dans ce navigateur ou connexion non sécurisée (HTTPS requis). Vous pouvez toujours importer une image.",
    "persistence_hint": "Les pages capturées ne sont pas enregistrées : elles sont perdues si vous rechargez ou fermez cet onglet.",
    "seo_title": "Scanner de Documents Gratuit — De la Caméra au PDF en Ligne",
    "seo_description": "Numérisez des documents avec votre webcam ou l'appareil photo de votre téléphone, recadrez-les et améliorez-les, exportez-les en PDF. Gratuit, sans inscription."
  },
  "library": {
    "badge": "Nouveau",
    "title": "Ma bibliothèque",
    "subtitle": "Les PDF que vous enregistrez restent dans votre navigateur : cherchez dans leur contenu, annotez-les et posez des questions à vos documents.",
    "search_placeholder": "Chercher dans vos documents…",
    "search_clear": "Effacer la recherche",
    "search_btn": "Chercher",
    "searching": "Recherche…",
    "chat_all": "Interroger la bibliothèque",
    "hint_index_first": "Indexez au moins un document pour chercher dans son contenu ou poser des questions.",
    "hits_title": "{{count}} résultats dans le contenu",
    "hits_empty": "Aucune page ne contient ces termes.",
    "page_n": "p. {{n}}",
    "pages_n": "{{n}} pages",
    "stat_docs": "{{count}} documents",
    "stat_indexed": "{{count}} indexés",
    "index_all": "Indexer les {{count}} restants",
    "import": "Téléverser un PDF",
    "importing": "Téléversement…",
    "sort": "Trier par",
    "sort_recent": "Plus récents",
    "sort_title": "Titre",
    "sort_size": "Taille",
    "tag_all": "Tous",
    "tag_placeholder": "étiquettes séparées par des virgules",
    "empty_title": "Votre bibliothèque est vide",
    "empty_hint": "Enregistrez ici les PDF trouvés avec la Recherche PDF, ou téléversez les vôtres.",
    "empty_cta_search": "Chercher un PDF",
    "indexing": "Indexation {{pct}} %",
    "not_indexed": "Non indexé",
    "indexed": "Indexé",
    "scanned": "Numérisation",
    "scanned_hint": "Ce PDF n'a pas de texte sélectionnable : envoyez-le à l'OCR pour le rendre cherchable.",
    "open": "Ouvrir",
    "chat_doc": "Interroger ce document",
    "send_to": "Envoyer vers",
    "edit_tags": "Modifier les étiquettes",
    "download": "Télécharger",
    "remove": "Supprimer",
    "source_upload": "Téléversé",
    "err_import": "Le téléversement a échoué. Réessayez.",
    "err_index": "L'extraction du texte a échoué.",
    "chat_title": "Interrogez vos documents",
    "chat_scope_all": "Toute la bibliothèque",
    "chat_close": "Fermer",
    "chat_intro": "Posez une question : je cherche les passages pertinents dans vos documents et je réponds en citant les pages.",
    "chat_privacy": "Vos documents restent dans votre navigateur. Seuls les quelques passages pertinents parviennent au serveur.",
    "chat_ungrounded": "Réponse introuvable dans vos documents.",
    "chat_sources": "Sources :",
    "chat_clear": "Vider la conversation",
    "chat_placeholder": "Posez une question…",
    "chat_send": "Envoyer",
    "chat_no_context": "Je n'ai rien trouvé de pertinent dans les documents indexés.",
    "chat_error": "La réponse a échoué. Réessayez.",
    "import_skipped": "{{count}} fichier(s) ignoré(s) : seuls les PDF peuvent être importés dans la Bibliothèque.",
    "seo_title": "Ma Bibliothèque PDF — Archive Personnelle avec Recherche et Chat IA",
    "seo_description": "Enregistrez les PDF que vous trouvez, recherchez-les page par page, annotez-les et posez des questions sur vos documents. Tout reste dans votre navigateur, rien n'est envoyé."
  },
  "blog_manage": {
    "title": "Articles du blog",
    "new_post": "Nouvel article",
    "form_title_edit": "Modifier l'article",
    "form_title_new": "Nouvel article",
    "helper_copy": "Le contenu en italien est obligatoire. Les traductions sont optionnelles — utilisez le bouton Traduire pour les remplir automatiquement.",
    "autosave_saving": "Enregistrement du brouillon…",
    "autosave_saved": "Enregistré",
    "autosave_error": "Échec de l'enregistrement automatique",
    "hide_preview": "Masquer l'aperçu",
    "show_preview": "Afficher l'aperçu",
    "pdf_import_label": "Importer depuis un PDF",
    "pdf_import_hint": "Extrayez le texte, relisez-le, puis traduisez-le",
    "upload_pdf": "Importer un PDF",
    "extracting_text": "Extraction du texte…",
    "remove_pdf_preview": "Supprimer l'aperçu du PDF",
    "pages_words": "{{pages}} pages · {{words}} mots",
    "use_as_italian": "Utiliser comme contenu italien",
    "translating": "Traduction en cours…",
    "translate_all": "Traduire IT → TOUTES",
    "title_label": "Titre",
    "title_placeholder": "Titre de l'article…",
    "title_required_error": "Le titre est obligatoire (min. 3 caractères)",
    "toolbar_aria_label": "Options de mise en forme",
    "toolbar_bold": "Gras",
    "toolbar_italic": "Italique",
    "toolbar_h2": "Titre 2",
    "toolbar_h3": "Titre 3",
    "toolbar_bullet_list": "Liste à puces",
    "toolbar_numbered_list": "Liste numérotée",
    "toolbar_inline_code": "Code en ligne",
    "toolbar_code_block": "Bloc de code",
    "toolbar_blockquote": "Citation",
    "toolbar_link": "Lien",
    "toolbar_divider": "Séparateur",
    "content_label": "Contenu",
    "content_placeholder": "<p>Commencez à écrire…</p>",
    "content_required_error": "Le contenu est obligatoire (min. 10 caractères)",
    "content_hint": "Contenu HTML — utilisez la barre d'outils ci-dessus pour la mise en forme",
    "preview_label": "Aperçu",
    "close_preview": "Fermer l'aperçu",
    "cover_image_alt": "Image de couverture",
    "excerpt_label": "Extrait",
    "excerpt_placeholder": "Généré automatiquement à partir du contenu si laissé vide",
    "advanced_options": "Options avancées",
    "advanced_hint": "facultatives, remplies automatiquement si vides",
    "tags_label": "Tags",
    "tags_placeholder": "ex. typescript, nestjs… (Entrée ou virgule)",
    "tags_hint": "Appuyez sur Entrée ou virgule pour ajouter un tag",
    "cover_image_label": "URL de l'image de couverture",
    "cover_image_placeholder": "https://exemple.com/couverture.jpg",
    "subtitle_label": "Sous-titre",
    "subtitle_placeholder": "Sous-titre facultatif",
    "slug_label": "Slug de l'URL",
    "slug_placeholder": "genere-automatiquement-depuis-le-titre",
    "slug_hint": "Généré automatiquement à partir du titre",
    "meta_title_label": "Meta Title (SEO)",
    "meta_title_placeholder": "Par défaut : titre de l'article",
    "meta_description_label": "Meta Description (SEO)",
    "meta_description_placeholder": "Par défaut : extrait",
    "image_suggestion_label": "Suggestion d'image :",
    "saving": "Enregistrement…",
    "save_draft": "Enregistrer le brouillon",
    "publishing": "Publication…",
    "publish": "Publier",
    "empty": "Aucun article pour l'instant. Écrivez le premier !",
    "published": "Publié",
    "draft": "Brouillon",
    "action_preview": "Aperçu",
    "err_it_required": "Le titre et le contenu en italien sont obligatoires.",
    "err_fields_too_long": "Extrait/sous-titre/champs meta trop longs (max {{max}} caractères pour l'extrait).",
    "published_msg": "Article publié !",
    "draft_saved_msg": "Brouillon enregistré !",
    "confirm_delete": "Supprimer cet article ?",
    "deleted_msg": "Article supprimé.",
    "draft_generated": "Brouillon généré à partir du PDF.",
    "generate_failed_default": "Échec du traitement du PDF.",
    "only_pdf_allowed": "Seuls les fichiers PDF sont autorisés.",
    "pdf_too_large": "Le PDF doit faire moins de 10 Mo.",
    "extract_failed_default": "Impossible d'extraire le texte de ce PDF.",
    "content_applied": "Contenu appliqué. Relisez et traduisez quand vous êtes prêt.",
    "add_it_title_first": "Ajoutez d'abord le titre en italien.",
    "translated_success": "Traduit en EN, SQ, PT, ES, FR, DE. Relisez avant de publier.",
    "translation_failed": "Échec de la traduction. Vérifiez votre connexion et réessayez.",
    "cover_data_url_unsupported": "Utilisez une URL d'image pour la couverture. Le téléversement direct de fichier n'est pas pris en charge.",
    "err_payload_too_large": "Contenu trop volumineux. Retirez les images intégrées et utilisez des URL d'image.",
    "err_session_expired": "Session expirée. Veuillez vous reconnecter.",
    "err_save_failed_default": "Échec de l'enregistrement. Vérifiez le titre, le contenu et le slug.",
    "action_unpublish": "Repasser en brouillon",
    "unpublished_msg": "Article remis en brouillon (vues conservées)",
    "filter_label": "Filtrer par statut",
    "filter_all": "Tous",
    "empty_drafts": "Aucun brouillon.",
    "empty_published": "Aucun article publié.",
    "schedule_label": "Publication programmée",
    "schedule_hint": "À l'heure prévue, l'article devient public tout seul (vérification chaque minute). Vide = pas de programmation.",
    "schedule_btn": "Programmer",
    "schedule_clear": "Retirer la programmation",
    "notify_label": "À sa sortie, envoyer une newsletter aux abonnés",
    "scheduled_badge": "Programmé",
    "scheduled_msg": "Article programmé.",
    "schedule_past": "Choisis une date et une heure dans le futur."
  },
  "privacy": {
    "title": "Politique de confidentialité",
    "meta_description": "Politique de confidentialité et de traitement des données personnelles de gentsallaku.it.",
    "updated_label": "Dernière mise à jour",
    "updated_date": "23/08/2026",
    "intro": "Cette notice décrit comment les données personnelles des utilisateurs de gentsallaku.it sont traitées, conformément au Règlement (UE) 2016/679 (RGPD).",
    "see_cookie_policy": "Voir la Politique de cookies →",
    "s1_title": "Responsable du traitement",
    "s1_body": "Le responsable du traitement des données collectées via ce site est Gent Sallaku, joignable à l'adresse gentsallaku@gmail.com. Ce site n'étant pas lié à une activité d'entreprise enregistrée, aucune donnée fiscale ni siège social n'est indiqué.",
    "s2_title": "Données collectées via le formulaire de contact",
    "s2_body": "Si vous utilisez le formulaire « Contact », nous recueillons votre nom, votre adresse e-mail, l'objet et le texte du message. Ces données sont traitées uniquement pour répondre à votre demande et ne sont jamais utilisées à des fins marketing sans votre consentement explicite. L'envoi du formulaire est protégé par Cloudflare Turnstile, un service anti-spam qui analyse automatiquement l'interaction avec la page.",
    "s3_title": "Chatbot et assistant basé sur l'intelligence artificielle",
    "s3_body": "Les messages que vous envoyez au chatbot du site sont traités par un modèle d'intelligence artificielle fourni par Google (API Gemini) dans le seul but de générer une réponse pertinente. Le texte du message est donc transmis aux serveurs de Google, qui agit comme sous-traitant pour cette finalité spécifique. Merci d'éviter de partager dans le chat des données sensibles ou non nécessaires.",
    "s4_title": "Chat en direct avec l'opérateur",
    "s4_body": "Si vous demandez une conversation en direct, votre adresse e-mail (si fournie) et les messages échangés sont enregistrés dans notre base de données afin de permettre la poursuite de la conversation et à des fins d'assistance. Ces données ne sont pas cédées à des tiers.",
    "s5_title": "Cookies et technologies similaires",
    "s5_body": "Le site utilise des cookies techniques nécessaires à son fonctionnement et, sous réserve de votre consentement, des cookies analytiques. Pour la liste complète des cookies utilisés, leur finalité et leur durée, consultez notre Politique de cookies.",
    "s6_title": "Google Analytics",
    "s6_body": "Si vous consentez à la catégorie « analytics » dans la bannière cookies, le site charge Google Analytics 4 afin de collecter des statistiques de navigation agrégées et anonymes (pages visitées, origine du trafic, appareil). Ce service est fourni par Google Ireland Limited/Google LLC et les données peuvent être transférées vers des serveurs situés aux États-Unis, dans le cadre des garanties prévues par les clauses contractuelles types de la Commission européenne. Vous pouvez retirer votre consentement à tout moment.",
    "s7_title": "Outils « Lab » (PDF, traduction, OCR et autres outils basés sur l'IA)",
    "s7_body": "Les outils disponibles dans la section « Lab » traitent les fichiers que vous téléversez (PDF, images, texte) uniquement pour vous fournir le résultat demandé (résumé, traduction, conversion, etc.). Les fichiers sont traités sur nos serveurs et/ou transmis à des fournisseurs d'IA tiers (Google Gemini) pour traitement, et ne sont pas conservés au-delà du temps nécessaire à l'opération, sauf si vous choisissez de les enregistrer dans un espace personnel du site.",
    "s8_title": "Destinataires et transfert de données",
    "s8_body": "Les données collectées peuvent être traitées par les prestataires tiers suivants, en qualité de sous-traitants : Railway (hébergement du backend et de la base de données, infrastructure cloud), Google LLC (Gemini AI, Analytics, envoi d'e-mails via Gmail SMTP), Cloudflare Inc. (protection anti-spam Turnstile). Certains de ces prestataires peuvent traiter des données en dehors de l'Espace économique européen ; dans ce cas, le transfert repose sur des clauses contractuelles types ou d'autres garanties adéquates prévues par la réglementation.",
    "s9_title": "Durée de conservation",
    "s9_body": "Les données du formulaire de contact et des conversations en chat en direct sont conservées le temps nécessaire au traitement de votre demande, et en tout état de cause pas plus de 24 mois, sauf durée différente exigée par la loi. Les préférences de cookies sont conservées jusqu'à leur révocation par l'utilisateur.",
    "s10_title": "Vos droits",
    "s10_body": "En tant que personne concernée, vous disposez d'un droit d'accès, de rectification, d'effacement, de limitation du traitement, de portabilité et d'opposition, conformément aux articles 15 à 22 du Règlement (UE) 2016/679 (RGPD). Vous pouvez exercer ces droits en écrivant à gentsallaku@gmail.com. Vous avez également le droit d'introduire une réclamation auprès de l'autorité de protection des données compétente.",
    "s11_title": "Sécurité des données",
    "s11_body": "Nous mettons en œuvre des mesures techniques et organisationnelles appropriées (connexions chiffrées HTTPS, authentification, accès restreint aux données) pour protéger vos données contre tout accès non autorisé, perte ou divulgation.",
    "s12_title": "Modifications de la présente politique",
    "s12_body": "Cette politique peut être mise à jour au fil du temps pour refléter des évolutions réglementaires ou du site. La date de dernière mise à jour figure en haut de la page."
  },
  "cookie_policy": {
    "title": "Politique de cookies",
    "meta_description": "Liste des cookies utilisés par gentsallaku.it, leur finalité et comment gérer vos préférences.",
    "updated_label": "Dernière mise à jour",
    "updated_date": "23/08/2026",
    "intro": "Cette page décrit les cookies et technologies similaires utilisés par gentsallaku.it, conformément au Règlement (UE) 2016/679 (RGPD) et aux lignes directrices applicables en matière de cookies.",
    "what_title": "Qu'est-ce qu'un cookie",
    "what_body": "Les cookies sont de petits fichiers texte que les sites visités envoient à votre appareil, où ils sont stockés avant d'être renvoyés à ces mêmes sites lors de votre prochaine visite.",
    "categories_title": "Catégories de cookies utilisées",
    "necessary_title": "Cookies nécessaires",
    "necessary_body": "Indispensables au fonctionnement du site (p. ex. mémorisation de la langue choisie, de l'état de la barre latérale, de la session d'authentification dans l'espace réservé, et de votre choix de consentement aux cookies). Ils ne nécessitent pas de consentement et ne peuvent pas être désactivés.",
    "analytics_title": "Cookies analytiques",
    "analytics_body": "Utilisés, uniquement avec votre consentement, par Google Analytics 4 (_ga, _ga_*) pour collecter des statistiques de navigation agrégées et anonymes. Durée : jusqu'à 13 mois. Chargés uniquement après acceptation de cette catégorie dans la bannière.",
    "marketing_title": "Cookies marketing",
    "marketing_body": "Nous n'utilisons actuellement aucun cookie marketing/publicitaire : Google Tag Manager et Google AdSense sont présents dans le code mais désactivés. En cas d'activation future, un nouveau consentement spécifique sera demandé.",
    "preferences_title": "Cookies de préférences",
    "preferences_body": "Utilisés pour mémoriser certaines de vos préférences d'affichage (p. ex. thème clair/sombre), sous réserve de votre consentement.",
    "third_party_title": "Services tiers",
    "third_party_body": "Cloudflare Turnstile est chargé sur les formulaires du site pour prévenir le spam automatisé et est considéré comme techniquement nécessaire à la sécurité du service ; Cloudflare peut déposer ses propres cookies techniques conformément à sa politique.",
    "manage_title": "Comment gérer vos préférences",
    "manage_body": "Vous pouvez modifier ou retirer votre consentement à tout moment via le lien « Gérer le consentement aux cookies » dans le pied de page du site, ou en supprimant les cookies depuis votre navigateur.",
    "browser_title": "Paramètres du navigateur",
    "browser_body": "Vous pouvez également gérer ou supprimer les cookies directement depuis les paramètres de votre navigateur (Chrome, Firefox, Safari, Edge)."
  },
  "saved_results": {
    "save_cta": "Enregistrer dans ton compte",
    "save_cta_short": "Enregistrer",
    "saving_cta": "Enregistrement...",
    "saved_cta": "Enregistré ✓",
    "save_sub": "Retrouve-le dans « Mes fichiers »",
    "save_error": "Échec de l'enregistrement. Réessaie.",
    "login_prompt_title": "Connecte-toi pour enregistrer tes résultats",
    "login_prompt_body": "Crée un compte gratuit pour retrouver tes fichiers générés quand tu veux.",
    "page_title": "Mes fichiers",
    "page_subtitle": "Résultats que tu as enregistrés depuis les outils IA",
    "empty_title": "Aucun fichier enregistré",
    "empty_body": "Les résultats que tu enregistres depuis les outils IA apparaîtront ici.",
    "login_required_title": "Connecte-toi pour voir tes fichiers",
    "login_required_body": "Les fichiers enregistrés restent liés à ton compte.",
    "login_button": "Se connecter",
    "open": "Ouvrir",
    "delete": "Supprimer",
    "confirm_delete": "Supprimer ce fichier enregistré ?",
    "seo_title": "Mes Fichiers — Résultats Enregistrés des Outils IA",
    "seo_description": "Retrouvez les fichiers et résultats que vous avez enregistrés depuis les outils IA de gentsallaku.it."
  },
  "account_modal": {
    "badge_admin": "Admin",
    "status_label": "Statut",
    "status_active": "Session active",
    "role_label": "Rôle",
    "role_admin": "Administrateur",
    "role_user": "Utilisateur"
  },
  "ai_assistant": {
    "clear_chat": "Effacer la conversation",
    "messages_log": "Messages",
    "suggested_prompts": "Questions suggérées",
    "copy": "Copier",
    "copied": "Copié !",
    "copy_message": "Copier le message",
    "typing": "L'IA est en train d'écrire",
    "message_input": "Champ de message",
    "send_message": "Envoyer le message"
  },
  "request": {
    "uploading": "Envoi du fichier…",
    "processing": "Traitement en cours…",
    "cancel": "Annuler",
    "retry": "Réessayer",
    "cancelled": "Opération annulée."
  },
  "project_detail": {
    "not_found": "Projet introuvable",
    "load_error": "Impossible de charger le projet.",
    "back": "Tous les projets",
    "stack": "Technologies utilisées",
    "live": "Voir en ligne",
    "repo": "Code source",
    "problem": "Le problème",
    "solution": "La solution",
    "results": "Les résultats",
    "related_title": "Autres études de cas"
  },
  "translations_editor": {
    "title": "Traductions",
    "hint": "Les champs vides affichent le texte italien sur le site.",
    "auto": "Traduire les champs vides depuis l'italien",
    "translating": "Traduction en cours…",
    "error": "La traduction automatique a échoué : réessayez ou remplissez à la main."
  },
  "contacts_inbox": {
    "title": "Messages de contact",
    "total": "{{count}} messages",
    "search_placeholder": "Rechercher par nom, e-mail, objet ou texte…",
    "filter_label": "Filtrer les messages",
    "filter_all": "Tous",
    "load_error": "Impossible de charger les messages.",
    "empty": "Aucun message reçu.",
    "empty_filtered": "Aucun message ne correspond aux filtres.",
    "select_all": "Tout sélectionner sur la page",
    "select": "Sélectionner",
    "pagination": "Pagination",
    "replied_at": "Répondu le {{date}}",
    "action_error": "L'opération a échoué, réessayez.",
    "filter_status": "Statut",
    "filter_followups": "Relances à faire",
    "lead_box": "Suivi du prospect",
    "status_label": "Statut",
    "followup_label": "Me le rappeler le",
    "note_label": "Note interne",
    "note_placeholder": "Rien que pour toi : budget, prochaines étapes…",
    "save_lead": "Enregistrer",
    "lead_saved": "Prospect mis à jour."
  },
  "users_manage": {
    "title": "Utilisateurs inscrits",
    "total": "{{count}} utilisateurs",
    "search_placeholder": "Rechercher par nom, e-mail ou téléphone…",
    "role_filter": "Filtrer par rôle",
    "all_roles": "Tous les rôles",
    "load_error": "Impossible de charger les utilisateurs.",
    "empty": "Aucun utilisateur trouvé.",
    "col_name": "Nom",
    "col_contact": "E-mail / téléphone",
    "col_role": "Rôle",
    "col_created": "Inscrit le",
    "col_actions": "Actions",
    "you": "vous",
    "verified": "E-mail vérifié",
    "confirm_role": "Changer le rôle de {{name}} en « {{role}} » ?",
    "confirm_delete": "Supprimer définitivement l'utilisateur {{name}} ?",
    "action_error": "L'opération a échoué.",
    "new": "Nouvel utilisateur",
    "edit_title": "Modifier l'utilisateur",
    "phone": "Téléphone (facultatif)",
    "password_optional": "Mot de passe (facultatif)",
    "password_hint": "Au moins 8 caractères avec majuscule, minuscule, chiffre et symbole. Sans mot de passe, l'utilisateur se connecte avec un code par e-mail.",
    "save": "Enregistrer",
    "created": "Utilisateur créé.",
    "updated": "Utilisateur mis à jour.",
    "password_title": "Nouveau mot de passe pour {{name}}",
    "password_effect": "L'utilisateur sera déconnecté de tous ses appareils.",
    "new_password": "Nouveau mot de passe",
    "set_password": "Définir le mot de passe",
    "password_short": "Mot de passe",
    "password_set": "Mot de passe de {{name}} mis à jour.",
    "revoke": "Déconnecter",
    "confirm_revoke": "Déconnecter {{name}} de tous ses appareils ?",
    "sessions_revoked": "{{name}} a été déconnecté.",
    "err_name": "Le nom est obligatoire.",
    "err_email": "Saisissez un e-mail valide.",
    "err_phone": "Téléphone au format international, ex. +393331234567.",
    "err_password": "Le mot de passe ne respecte pas les exigences."
  },
  "notifications": {
    "label": "Notifications",
    "recent": "Événements récents",
    "empty": "Rien en attente.",
    "offline": "Mises à jour en direct indisponibles : les compteurs se rafraîchissent à l'ouverture.",
    "live_waiting": "Chats en direct en attente",
    "contacts_unread": "Messages non lus",
    "testimonials_pending": "Témoignages à modérer",
    "notes_pending": "Notes à modérer",
    "type_contact": "Nouveau message",
    "type_testimonial": "Nouveau témoignage",
    "type_note": "Nouvelle note",
    "type_live_handoff": "Chat en direct demandé",
    "followups_due": "Relances à faire"
  },
  "newsletter_campaigns": {
    "title": "Campagnes",
    "new": "Nouvelle campagne",
    "subject": "Objet",
    "body": "Contenu (HTML)",
    "body_placeholder": "<h1>Titre</h1><p>Texte…</p>",
    "body_hint": "Les scripts et formulaires sont supprimés. Le lien de désinscription est ajouté automatiquement.",
    "preview": "Aperçu",
    "save_draft": "Enregistrer le brouillon",
    "saved": "Brouillon enregistré.",
    "err_incomplete": "Un objet (3 caractères min.) et un contenu (10 min.) sont requis.",
    "err_schedule_past": "Choisissez une date future pour la programmation.",
    "send_test": "Envoyer un test",
    "test_email": "E-mail de test",
    "test_sent": "Test envoyé à {{email}}.",
    "test_failed": "L'envoi de test a échoué : vérifiez la configuration e-mail.",
    "test_done": "test envoyé",
    "send_now": "Envoyer maintenant",
    "schedule": "Programmer",
    "schedule_at": "Date et heure d'envoi",
    "confirm_send": "Envoyer maintenant « {{subject}} » à tous les abonnés confirmés ?",
    "confirm_schedule": "Programmer « {{subject}} » pour tous les abonnés confirmés ?",
    "confirm_cancel": "Annuler la campagne « {{subject}} » ? Les e-mails déjà envoyés ne peuvent pas être rappelés.",
    "confirm_delete": "Supprimer le brouillon « {{subject}} » ?",
    "queued": "Campagne en file d'attente pour {{count}} abonnés.",
    "cancelled": "Campagne annulée.",
    "cancel": "Annuler l'envoi",
    "load_error": "Impossible de charger les campagnes.",
    "empty": "Aucune campagne. Créez-en une pour écrire à vos abonnés.",
    "action_error": "L'opération a échoué.",
    "progress": "Progression de l'envoi",
    "stats": "{{sent}} envoyés, {{failed}} échoués sur {{total}}",
    "scheduled_for": "Programmée pour le {{date}}",
    "sent_at": "Envoyée le {{date}}",
    "status_draft": "Brouillon",
    "status_scheduled": "Programmée",
    "status_sending": "Envoi en cours",
    "status_sent": "Envoyée",
    "status_cancelled": "Annulée"
  },
  "palette": {
    "placeholder": "Rechercher pages, articles, actions…",
    "section_actions": "Actions",
    "section_pages": "Pages",
    "section_content": "Contenus",
    "section_admin": "Tableau de bord",
    "action_theme": "Basculer thème clair/sombre",
    "action_contact": "Me contacter",
    "action_lab": "Ouvrir le Lab (outils IA et PDF)",
    "action_new_post": "Nouvel article",
    "action_new_project": "Nouveau projet",
    "action_inbox": "Ouvrir les messages de contact",
    "action_logout": "Se déconnecter",
    "footer_hint": "↑↓ pour choisir · Entrée pour ouvrir · Ctrl+K ou / pour rappeler",
    "action_copy_link": "Copier le lien de cette page",
    "action_install": "Installer le site comme une app",
    "action_language": "Langue : {{lang}}",
    "action_language_detail": "Changer de langue · language",
    "link_copied": "Lien copié",
    "copy_failed": "Échec de la copie"
  },
  "theme": {
    "name_light": "thème clair",
    "name_dark": "thème sombre",
    "name_system": "thème du système",
    "current_light": "Thème clair actif. Passer au {{next}}",
    "current_dark": "Thème sombre actif. Passer au {{next}}",
    "current_system": "Thème du système actif. Passer au {{next}}"
  },
  "onboarding": {
    "progress": "{{current}} sur {{total}}",
    "next": "Suivant",
    "back": "Retour",
    "skip": "Passer le tutoriel",
    "done": "Terminer",
    "steps": {
      "welcome": {
        "title": "Bienvenue !",
        "body": "En quelques étapes, je vous montre comment naviguer sur le site : menu, contenus et assistant. Vous pouvez passer le guide à tout moment."
      },
      "navigation": {
        "title": "Navigation",
        "body": "Ce menu vous mène à toutes les sections du site et à tous les outils gratuits du Lab."
      },
      "group_ai": {
        "title": "Outils IA",
        "body": "Recherche PDF, Bibliothèque, Résumé, Mise en forme, Traduction et Générateur de diapositives : l'intelligence artificielle au service de vos documents."
      },
      "group_workspace": {
        "title": "Workspace",
        "body": "Transmettez le résultat d'un outil directement au suivant, sans télécharger ni réimporter de fichiers."
      },
      "group_account": {
        "title": "Mes fichiers",
        "body": "Retrouvez ici les résultats enregistrés depuis les outils, liés à votre compte."
      },
      "group_tools": {
        "title": "Outils PDF et documents",
        "body": "Organisez et visualisez des PDF, écrivez dans l'éditeur, convertissez des formats, extrayez du texte par OCR et numérisez des documents avec l'appareil photo."
      },
      "main": {
        "title": "Contenu principal",
        "body": "Au centre s'affiche le contenu de la page où vous êtes : projets, services et articles sur l'accueil ; l'espace de travail de l'outil choisi dans le Lab."
      },
      "chatbot": {
        "title": "Assistant virtuel",
        "body": "Une question ? Touchez ici pour discuter avec l'assistant des services, projets et outils. Si besoin, vous pouvez demander à parler directement à Gent."
      },
      "finish": {
        "title": "C'est prêt !",
        "body": "Vous pouvez revoir ce guide à tout moment grâce au lien « Guide » en bas de page."
      }
    }
  },
  "offline": {
    "banner": "Vous êtes hors ligne. Les articles déjà lus restent disponibles.",
    "see_articles": "Voir les articles",
    "back_online": "De nouveau en ligne",
    "tool_needs_connection": "Cet outil traite les fichiers sur le serveur : une connexion est nécessaire. Réessayez une fois de nouveau en ligne.",
    "list_unavailable": "Vous êtes hors ligne : la liste des articles n'est pas disponible",
    "load_error": "Impossible de charger les articles",
    "recent_title": "Vous les avez déjà lus et pouvez les ouvrir sans connexion :",
    "no_recent": "Les articles que vous ouvrez sont enregistrés pour une lecture hors ligne.",
    "retry": "Réessayer"
  },
  "install": {
    "title": "Installez le Lab comme une app",
    "text": "Ouvrez les outils PDF et IA en un geste, en plein écran, et hors ligne pour les pages déjà visitées.",
    "ios_text_before": "Touchez",
    "ios_share": "Partager",
    "ios_text_after": "puis « Sur l'écran d'accueil ».",
    "cta": "Installer",
    "later": "Plus tard"
  },
  "lab_next": {
    "ready": "« {{name}} » est prêt.",
    "continue_with": "Continuer avec :",
    "close": "Fermer les suggestions",
    "resume_title": "Reprenez là où vous en étiez",
    "pending": "« {{name}} » est prêt dans l'espace de travail. Ouvrez-le dans :"
  },
  "lab_drop": {
    "hint": "Déposez un fichier n'importe où sur la page et je vous suggère les bons outils. Il reste dans votre navigateur.",
    "pick": "Choisir un fichier",
    "release": "Déposez le fichier pour voir ce que vous pouvez en faire",
    "only_first": "Seul le premier fichier est utilisé ({{count}} ignorés)."
  },
  "feature_flags": {
    "title": "Fonctionnalités du site",
    "desc": "Active et désactive des parties du site sans déploiement",
    "maintenanceMode": "Mode maintenance",
    "maintenanceMode_desc": "Les visiteurs voient un avis en pleine page ; toi, tu continues à voir le site.",
    "aiEnabled": "Outils IA",
    "aiEnabled_desc": "Les outils IA du Lab. Désactivés, le chatbot répond avec ses messages par défaut.",
    "chatbotEnabled": "Chatbot",
    "chatbotEnabled_desc": "La bulle de chat en bas à droite.",
    "liveHandoffEnabled": "Chat en direct",
    "liveHandoffEnabled_desc": "La proposition « Tu veux parler à Gent ? » dans le chatbot.",
    "contactFormEnabled": "Formulaire de contact",
    "contactFormEnabled_desc": "Utile pendant une vague de spam.",
    "newsletterSignupEnabled": "Inscriptions à la newsletter",
    "newsletterSignupEnabled_desc": "Le formulaire d'inscription en bas du blog.",
    "registrationEnabled": "Inscription des utilisateurs",
    "registrationEnabled_desc": "Création de nouveaux comptes depuis la page d'inscription.",
    "maintenance_message": "Message de maintenance",
    "save_message": "Enregistrer le message",
    "save_error": "Enregistrement impossible, réessaie."
  },
  "maintenance": {
    "title": "Site en maintenance",
    "default_message": "Je fais quelques travaux sur le site. Reviens dans un instant !",
    "admin_login": "Accès administrateur",
    "admin_notice": "Maintenance active : les visiteurs voient l'avis"
  },
  "ops_health": {
    "section": "Santé opérationnelle"
  },
  "ai_usage": {
    "title": "Consommation IA",
    "desc": "Aujourd'hui (UTC) et les 7 derniers jours",
    "switch_on": "Outils IA actifs",
    "switch_off": "Outils IA coupés (interrupteur d'urgence)",
    "tokens_today": "Jetons utilisés aujourd'hui",
    "calls_today": "Requêtes aux outils",
    "chatbot_tokens": "Jetons du chatbot",
    "rejected_ip": "Bloquées par IP (plus de {{cap}} par jour)",
    "rejected_budget": "Bloquées, budget épuisé",
    "capped_ips": "{{n}} IP différentes ont atteint la limite aujourd'hui.",
    "last_7_days": "Jetons, 7 derniers jours",
    "by_tool": "Requêtes par outil",
    "no_calls": "Aucune requête aujourd'hui."
  },
  "server_errors": {
    "title": "Erreurs du serveur",
    "desc": "Erreurs 5xx regroupées, 30 derniers jours",
    "open": "Groupes ouverts",
    "today": "Occurrences aujourd'hui",
    "week": "7 derniers jours",
    "total": "Occurrences totales",
    "last_seen": "Dernière fois :",
    "today_count": "{{n}} aujourd'hui",
    "show_stack": "Afficher la pile",
    "hide_stack": "Masquer la pile",
    "resolve": "Marquer comme résolu",
    "resolve_all": "Tout marquer comme résolu",
    "none": "Aucune erreur ouverte. Une erreur résolue revient ici si elle se reproduit."
  },
  "server_health": {
    "title": "Serveur et sauvegardes",
    "desc": "Dumps MongoDB, ressources du serveur, contrôles externes",
    "all_ok": "Tout va bien.",
    "warn_backup_stale": "Le dernier dump de la base date de plus de 26 heures (ou manque) : vérifie le cron de 03:30.",
    "warn_memory_low": "RAM presque épuisée : le serveur n'a pas de swap, un processus pourrait être arrêté.",
    "warn_disk_low": "Espace disque sous les 10 %.",
    "warn_offsite_backup_failed": "La dernière sauvegarde externe chiffrée (GitHub Actions) a échoué.",
    "warn_uptime_failed": "Le dernier contrôle externe de disponibilité a échoué.",
    "backup_age": "Âge du dernier dump ({{size}})",
    "backup_none": "Aucun dump trouvé",
    "backup_not_configured": "Dossier des sauvegardes absent (normal en développement)",
    "ram_free": "RAM disponible sur {{total}} Mo",
    "disk_free": "Disque libre (utilisé à {{pct}} %)",
    "mongo_ram": "RAM de MongoDB",
    "ram_used": "RAM utilisée",
    "external": "Contrôles externes (GitHub Actions)",
    "offsite_backup": "Sauvegarde externe chiffrée",
    "running": "en cours",
    "uptime": "Disponibilité",
    "uptime_checks": "sur {{n}} contrôles (environ 25 heures)",
    "github_unavailable": "GitHub n'est pas joignable pour le moment.",
    "load": "Charge moyenne (1, 5, 15 min)"
  },
  "translation_health": {
    "title": "Traductions du blog",
    "desc": "Les 6 langues comparées à l'italien",
    "missing": "Manquantes",
    "stale": "Pas à jour",
    "structure": "Structure différente",
    "legend": "✕ manquante · ⟳ traduite avant la dernière modification du texte italien · ≠ blocs (titres, code, tableaux, listes) ou longueur différents de l'italien. Survole une étiquette pour les détails.",
    "all_ok": "Les {{n}} articles sont traduits et alignés sur l'italien."
  },
  "content_health": {
    "section": "Contenus"
  },
  "scheduled_posts": {
    "title": "Publications programmées",
    "desc": "Articles qui sortent seuls à l'heure prévue",
    "none": "Aucun article programmé.",
    "notify": "+ newsletter",
    "new_post": "Programmer un article"
  },
  "leads": {
    "title": "Prospects",
    "desc": "Les messages de contact comme opportunités",
    "status_new": "Nouveau",
    "status_in_progress": "En négociation",
    "status_won": "Conclu, gagné",
    "status_lost": "Conclu, perdu",
    "avg_response": "Première réponse, en moyenne",
    "avg_response_hint": "90 derniers jours",
    "no_replies": "Aucune réponse ces 90 derniers jours",
    "win_rate": "Taux de conclusion gagnée",
    "followups_due": "Relances à faire",
    "followups_none": "Aucune relance à faire.",
    "overdue": "en retard",
    "due_today": "aujourd'hui",
    "open_followups": "Voir toutes les relances"
  },
  "not_found": {
    "title": "Liens cassés (404)",
    "desc": "Pages et articles inexistants vus par les visiteurs, 90 derniers jours",
    "open": "Chemins à corriger",
    "kind_route": "page",
    "kind_blog": "article",
    "kind_project": "projet",
    "from": "depuis",
    "dismiss": "Ignorer",
    "none": "Aucun lien cassé enregistré."
  },
  "security_panel": {
    "title": "Sécurité et sessions",
    "desc": "Connexions échouées, réutilisation de jetons et qui est connecté en ce moment",
    "failed_logins": "Connexions échouées (24 h)",
    "otp_failed": "Codes OTP erronés (24 h)",
    "token_reuse": "Jetons réutilisés (3 j)",
    "active_sessions": "Sessions actives",
    "suspicious_ips": "IP suspectes",
    "suspicious_hint": "5 tentatives échouées ou plus au cours des dernières 24 heures",
    "reuse_hint": "Un jeton déjà utilisé a été présenté à nouveau : cela peut indiquer un vol de session.",
    "sessions": "Sessions actives",
    "events": "Derniers événements",
    "no_sessions": "Aucune session active.",
    "no_events": "Aucun événement enregistré.",
    "events_retention": "L'historique est supprimé automatiquement après {{days}} jours.",
    "you": "Vous",
    "started": "commencée",
    "last_active": "dernière activité",
    "close_session": "Fermer la session",
    "this_device": "Cet appareil",
    "close_confirm": "Fermer la session de {{name}} ? Cette personne devra se reconnecter (dans les 15 minutes).",
    "close_error": "Impossible de fermer la session.",
    "ev_login_success": "Connexion",
    "ev_login_failed": "Connexion échouée",
    "ev_otp_failed": "Code OTP erroné",
    "ev_refresh_reuse": "Jeton réutilisé",
    "ev_session_revoked": "Session fermée"
  }
}
