{
  "projectHistory": {
    "title": "Historique du projet",
    "description": "Parcourir les instantanés enregistrés automatiquement sur cet appareil.",
    "empty": "Aucun instantané enregistré automatiquement pour l'instant.",
    "summary": "Couches : {{count}} · zoom {{zoom}}",
    "restore": "Restaurer",
    "discard": "Abandonner",
    "restoreError": "Impossible de restaurer cet instantané. Il est peut-être endommagé ou incompatible avec cette version de GeoLibre.",
    "recoveryTitle": "Récupérer le travail non enregistré ?",
    "recoveryDescription": "GeoLibre ne s'est pas fermé correctement. Un enregistrement automatique plus récent de « {{name}} » est disponible."
  },
  "browser": {
    "title": "Explorateur",
    "services": "Services",
    "recent": "Récents",
    "databases": "Bases de données",
    "newDatabaseConnection": "Nouvelle connexion à une base de données",
    "searchPlaceholder": "Rechercher des sources de données",
    "empty": "Aucun service enregistré ni projet récent pour le moment.",
    "emptyGroup": "Vide",
    "noMatches": "Aucun résultat.",
    "addFailed": "Impossible d'ajouter cette source de données.",
    "builtinBadge": "intégré",
    "newConnection": "Nouvelle connexion {{kind}}",
    "loadingTables": "Chargement des tables…",
    "files": "Fichiers",
    "addFolder": "Ajouter un dossier",
    "addFolderFailed": "Impossible d'ajouter ce dossier.",
    "addFileFailed": "Impossible d'ajouter ce fichier.",
    "loadFolderFailed": "Impossible de lire ce dossier.",
    "unpinFolder": "Retirer « {{name}} » de la liste",
    "loadingFolder": "Chargement…",
    "folderTruncated": "Affichage des {{shown}} premiers sur {{total}}",
    "favorites": "Favoris",
    "favorite": "Ajouter « {{name}} » aux favoris",
    "unfavorite": "Retirer « {{name}} » des favoris",
    "favoriteMissing": "Cette source de données n'existe plus — retirée des Favoris.",
    "myData": "Mes données",
    "renameLibraryLayer": "Renommer « {{name}} »",
    "deleteLibraryLayer": "Retirer « {{name}} » de Mes données",
    "desktopOnlyBadge": "bureau",
    "importLibrary": "Importer les couches enregistrées",
    "exportLibrary": "Exporter les couches enregistrées",
    "libraryFilterName": "JSON de bibliothèque de couches",
    "libraryImportFailed": "Impossible de lire ce fichier de bibliothèque de couches.",
    "libraryExportFailed": "Impossible d'exporter la bibliothèque de couches.",
    "libraryLayerMissing": "Cette couche enregistrée n'existe plus.",
    "libraryLayerNeedsDesktop": "Cette couche enregistrée lit un fichier sur le disque et nécessite donc GeoLibre Desktop. Ajoutez à nouveau le fichier pour enregistrer une nouvelle entrée.",
    "libraryLayerConfigNotApplied": "Le fichier « {{name}} » a été ajouté, mais son style enregistré n'a pas pu être associé à une seule couche et n'a donc pas été réappliqué.",
    "libraryLayerJoinsUnresolved_one": "La couche a été ajoutée, mais 1 jointure enregistrée n'a pas pu être réappliquée : la couche à laquelle elle se joint n'est pas dans ce projet.",
    "libraryLayerJoinsUnresolved_other": "La couche a été ajoutée, mais {{count}} jointures enregistrées n'ont pas pu être réappliquées : les couches auxquelles elles se joignent ne sont pas dans ce projet."
  },
  "about": {
    "trigger": "À propos",
    "title": "À propos de GeoLibre",
    "description": "GeoLibre est une plateforme SIG cloud-native légère.",
    "version": "Version",
    "checkForUpdates": "Vérifier les mises à jour",
    "tryAgain": "Réessayer",
    "checking": "Vérification des mises à jour",
    "upToDate": "Vous êtes à jour ({{version}}).",
    "upToDateNoVersion": "Vous êtes à jour.",
    "generalSectionTitle": "Général",
    "homePage": "Page d'accueil",
    "githubRepository": "Dépôt GitHub"
  },
  "updates": {
    "changelogTitle": "Nouveautés",
    "noChangelog": "Les notes de version ne sont pas disponibles. Consultez la page de téléchargements pour plus de détails.",
    "stepsTitle": "Comment mettre à jour",
    "download": "Télécharger la mise à jour",
    "steps": {
      "download": "Téléchargez l'installateur pour votre plateforme depuis la page de téléchargements.",
      "install": "Exécutez l'installateur. Vos projets locaux, paramètres et clés API sont conservés.",
      "reopen": "Rouvrez GeoLibre pour terminer la mise à jour."
    },
    "severity": {
      "major": "Version majeure",
      "minor": "Mise à jour de fonctionnalités",
      "patch": "Mise à jour corrective"
    },
    "available": {
      "title": "{{version}} est disponible",
      "fallback": "Une nouvelle version",
      "summary": "Vous utilisez actuellement {{current}}."
    },
    "error": {
      "message": "Impossible de vérifier les mises à jour.",
      "rateLimit": "Limite de taux GitHub dépassée. Veuillez réessayer plus tard.",
      "http": "GitHub a renvoyé {{status}}.",
      "noTag": "La dernière version ne comporte pas de tag de version.",
      "network": "Impossible de joindre GitHub. Vérifiez votre connexion et réessayez.",
      "viewDownloads": "Voir les téléchargements",
      "viewDownloadsHint": "Ouvre la page de téléchargements de GeoLibre dans votre navigateur afin que vous puissiez vérifier manuellement la dernière version."
    },
    "startup": {
      "title": "Mise à jour disponible",
      "currentVersion": "Votre version actuelle",
      "latestVersion": "Dernière version disponible",
      "download": "Télécharger le paquet de mise à jour",
      "remindLater": "Me le rappeler plus tard",
      "skipVersion": "Ignorer cette version",
      "settingsHint": "Vous pouvez modifier la vérification des mises à jour dans Paramètres → Mises à jour."
    }
  },
  "masBuild": {
    "unavailable": "Cette fonctionnalité n'est pas disponible dans la version Mac App Store de GeoLibre Desktop."
  },
  "bookmark": {
    "captureStateLabel": "Inclure l'état complet des couches (actives, inactives et ordre des couches)",
    "captureStateTooltip": "S'applique au prochain signet que vous enregistrez, pas comme un paramètre global. Laissez-le activé pour restaurer exactement cette disposition de couches plus tard.",
    "export": "Exporter",
    "exportSelected": "Exporter la sélection",
    "exportAll": "Tout exporter",
    "newFolder": "Nouveau dossier",
    "defaultFolderName": "Dossier"
  },
  "managePlugins": {
    "failed": "Échec",
    "failedToLoad": "Échec du chargement : {{message}}",
    "trust": {
      "title": "Charger les extensions de ce projet ?",
      "description_one": "Ce projet veut charger 1 extension externe depuis une URL que vous n'avez pas installée. Les extensions exécutent du code avec un accès complet à l'application.",
      "description_other": "Ce projet veut charger {{count}} extensions externes depuis des URLs que vous n'avez pas installées. Les extensions exécutent du code avec un accès complet à l'application.",
      "warning": "Ne chargez des extensions que depuis des sources auxquelles vous faites confiance. Les extensions chargées s'exécutent avec les mêmes privilèges que GeoLibre lui-même.",
      "trustButton": "Faire confiance et charger",
      "dismissButton": "Ne pas charger"
    },
    "title": "Gérer les extensions",
    "searchAria": "Rechercher des extensions",
    "searchPlaceholder": "Rechercher des extensions",
    "refresh": "Actualiser",
    "loadingRegistry": "Chargement du registre…",
    "registryEmpty": "Aucune extension n'est répertoriée dans le registre.",
    "noPluginsHere": "Aucune extension ici.",
    "sectionAll": "Toutes ({{total}})",
    "sectionInstalled": "Installées ({{total}})",
    "sectionNotInstalled": "Non installées ({{total}})",
    "sectionUpgradeable": "Actualisables ({{total}})",
    "sectionSettings": "Paramètres",
    "openHomepageAria": "Ouvrir la page d'accueil de {{name}}",
    "byAuthor": "par {{author}}",
    "updateAvailable": "mise à jour disponible",
    "requiresVersion": "nécessite GeoLibre {{version}}+",
    "install": "Installer",
    "installAria": "Installer {{name}}",
    "removeConfirm": "Supprimer ?",
    "uninstall": "Désinstaller",
    "uninstallAria": "Désinstaller {{name}}",
    "confirmUninstallAria": "Confirmer la désinstallation de {{name}}",
    "update": "Mettre à jour",
    "updateAria": "Mettre à jour {{name}}",
    "loading": "Chargement…",
    "installed": "Installée",
    "settingsIntro": "GeoLibre analyse toujours son répertoire d'extensions dans les données de l'application. Installez une extension empaquetée (.zip) depuis un fichier, ou ajoutez des répertoires locaux supplémentaires (bureau uniquement). Les URL de manifeste (y compris les installations depuis la place de marché) sont chargées via le réseau ; les changements ici s'appliquent immédiatement.",
    "installFromFile": "Installer depuis un fichier",
    "chooseZip": "Choisir un .zip…",
    "installFromFileHintDesktop": "Copie une archive d'extension empaquetée dans le répertoire des extensions de GeoLibre.",
    "installFromFileHintWeb": "Charge une archive d'extension empaquetée ; elle est stockée dans votre navigateur et rechargée à votre prochaine visite.",
    "localDirectories": "Répertoires locaux",
    "directoryAria": "Répertoire d'extensions",
    "browseDirectoryAria": "Parcourir le répertoire d'extensions",
    "noDirectories": "Aucun répertoire d'extensions supplémentaire configuré.",
    "manifestUrls": "URL de manifeste",
    "manifestUrlAria": "URL du manifeste de l'extension",
    "noManifestUrls": "Aucune URL de manifeste d'extension configurée.",
    "removeAria": "Supprimer {{name}}",
    "errorLoadRegistry": "Impossible de charger le registre des extensions.",
    "errorUpdate": "Impossible de mettre à jour l'extension.",
    "errorDirectoryPicker": "Impossible d'ouvrir le sélecteur de répertoire.",
    "errorInstall": "Impossible d'installer l'extension.",
    "errorUninstall": "Impossible de désinstaller l'extension.",
    "description": "Parcourez, installez, mettez à jour et supprimez des extensions GeoLibre externes. Les extensions sont répertoriées dans le <registryLink>registre des extensions GeoLibre</registryLink>."
  },
  "viewState": {
    "panelTitle": "Info"
  },
  "terrainMeasure": {
    "title": "Terrain (3D)",
    "surfaceDistance": "Distance de surface",
    "surfaceArea": "Superficie de surface",
    "elevationGainLoss": "Gain / perte",
    "elevationRange": "Altitude min / max",
    "meanSlope": "Pente moyenne",
    "computing": "Calcul du terrain…",
    "partialData": "Certains échantillons n'avaient pas de données de terrain"
  },
  "fileNamePrompt": {
    "title": "Enregistrer le fichier sous",
    "description": "Entrez un nom de fichier. Le fichier est téléchargé dans le dossier de téléchargements de votre navigateur.",
    "label": "Nom du fichier"
  },
  "newProject": {
    "basemapDescription": "Choisissez un fond de carte OpenFreeMap ou Protomaps, un arrière-plan vierge, ou une URL de style MapLibre.",
    "basemapDescriptionNoProtomaps": "Choisissez un fond de carte OpenFreeMap, un arrière-plan vierge, ou une URL de style MapLibre.",
    "sectionOpenFreeMap": "OpenFreeMap",
    "sectionProtomaps": "Protomaps",
    "sectionOther": "Autre",
    "customUrlButton": "URL personnalisée",
    "invalidCustomUrl": "Entrez une URL style.json ou .pmtiles valide.",
    "savePromptTitle": "Enregistrer le projet actuel ?",
    "savePromptDescription": "Le projet actuel contient des modifications non enregistrées. Les enregistrer avant de créer un nouveau projet ?",
    "doNotSave": "Ne pas enregistrer",
    "saving": "Enregistrement...",
    "title": "Nouveau projet",
    "projectName": "Nom du projet",
    "savedTemplates": "Modèles enregistrés",
    "deleteTemplate": "Supprimer le modèle",
    "basemapLabel": "Fond de carte",
    "create": "Créer"
  },
  "basemapPicker": {
    "title": "Changer de fond de carte",
    "applyCustom": "Appliquer",
    "invalidUrl": "Entrez une URL de style HTTP ou HTTPS valide.",
    "sectionMoon": "La Lune",
    "sectionMars": "Mars",
    "sectionOther": "Autres corps célestes"
  },
  "planetSwitcher": {
    "label": "Corps céleste",
    "earth": "Terre",
    "mercury": "Mercure",
    "venus": "Vénus",
    "moon": "Lune",
    "mars": "Mars",
    "io": "Io",
    "europa": "Europe",
    "ganymede": "Ganymède",
    "callisto": "Callisto",
    "titan": "Titan",
    "pluto": "Pluton",
    "charon": "Charon"
  },
  "common": {
    "pickColorFromScreen": "Choisir une couleur à l'écran",
    "save": "Enregistrer",
    "cancel": "Annuler",
    "close": "Fermer",
    "retry": "Réessayer",
    "reset": "Réinitialiser",
    "remove": "Supprimer",
    "add": "Ajouter",
    "ok": "OK",
    "done": "Terminé",
    "openWebApp": "Ouvrir l'application web GeoLibre"
  },
  "addData": {
    "title": "Ajouter des données",
    "kind": {
      "xyz": {
        "label": "Ajouter une couche XYZ",
        "description": "Ajouter un modèle de tuile raster utilisant les paramètres x, y et z."
      },
      "wms": {
        "label": "Ajouter une couche WMS",
        "description": "Ajouter un service WMS GetMap comme couche raster en tuiles."
      },
      "wfs": {
        "label": "Ajouter une couche WFS",
        "description": "Ajouter des entités WFS en demandant du GeoJSON à un service GetFeature."
      },
      "wmts": {
        "label": "Ajouter une couche WMTS",
        "description": "Ajouter un modèle d'URL de tuile WMTS comme couche raster."
      },
      "ogcVectorTiles": {
        "label": "Ajouter des tuiles vectorielles OGC",
        "description": "Ajouter un service OGC API - Tiles (vecteur) à partir d'un TileJSON ou d'un modèle de tuile, en lisant éventuellement ses couches source depuis une URL de style."
      },
      "gpx": {
        "label": "Ajouter une couche GPX",
        "description": "Ajouter des points de cheminement, itinéraires et traces GPX comme une ou plusieurs couches vectorielles."
      },
      "georss": {
        "label": "Ajouter une couche GeoRSS",
        "description": "Ajouter un flux GeoRSS (RSS, Atom ou RDF) depuis une URL ou un fichier comme couche vectorielle."
      },
      "delimitedText": {
        "label": "Ajouter une couche de texte délimité",
        "description": "Ajouter un fichier ou une URL de texte délimité comme couche de points en utilisant des champs de longitude et de latitude, ou comme table d'attributs non spatiale si aucune coordonnée n'est disponible."
      },
      "cad": {
        "label": "Ajouter une couche CAO (DXF/DWG)",
        "description": "Ajouter un dessin AutoCAD DXF ou DWG comme couche vectorielle, en choisissant la couche à charger et le système de référence de coordonnées depuis lequel la projeter."
      },
      "gdb": {
        "label": "Ajouter une couche File Geodatabase",
        "description": "Ajouter une couche depuis une géodatabase fichier Esri (dossier .gdb). La couche est lue par le serveur GeoLibre local et reprojetée en WGS84."
      },
      "photos": {
        "label": "Ajouter des photos géotaguées",
        "description": "Importer des photos JPEG/HEIC comme couche de points, en plaçant chacune à partir de sa position GPS EXIF."
      },
      "mbtiles": {
        "label": "Ajouter une couche MBTiles",
        "description": "Ajouter un fichier MBTiles local comme couche de tuiles raster ou vectorielle."
      },
      "arcgis": {
        "label": "Ajouter une couche ArcGIS",
        "description": "Ajouter une couche ArcGIS FeatureServer, VectorTileServer, MapServer ou ImageServer, ou un élément de portail."
      },
      "postgres": {
        "label": "Ajouter une couche PostgreSQL",
        "description": "Démarrer Martin localement, découvrir les sources PostGIS et ajouter une source en tuiles vectorielles."
      },
      "deckglViz": {
        "label": "Ajouter une couche Deck.gl",
        "description": "Choisissez un type de couche deck.gl, puis chargez les données d'exemple ou téléversez un fichier ou une URL CSV/JSON/GeoJSON."
      },
      "video": {
        "label": "Ajouter une couche vidéo",
        "description": "Ajouter une superposition vidéo géoréférencée en fournissant une URL MP4 et quatre coordonnées d'angle."
      },
      "ogcFeatures": {
        "label": "Ajouter une couche OGC API - Features",
        "description": "Ajouter les entités d'une collection OGC API - Features comme couche vectorielle, en suivant les liens de pagination du service jusqu'à ce que le nombre d'entités demandé soit chargé."
      }
    },
    "shared": {
      "layerName": "Nom de la couche",
      "insertBelow": "Insérer en dessous",
      "insertTop": "Haut de la liste des couches (par défaut)",
      "layersGroup": "Couches",
      "basemapLayersGroup": "Couches de fond de carte",
      "showBasemapLayers": "Afficher les couches de fond de carte (avancé)",
      "addLayer": "Ajouter la couche",
      "adding": "Ajout en cours…",
      "addError": "Impossible d'ajouter la couche.",
      "sampleData": "Données d'exemple",
      "loadSampleData": "Charger des données d'exemple…"
    },
    "common": {
      "serviceUrl": "URL du service",
      "tileSize": "Taille des tuiles",
      "tileUrlTemplate": "Modèle d'URL de tuile",
      "sourceType": "Type de source",
      "layerType": "Type de couche",
      "format": "Format",
      "optional": "Facultatif",
      "chooseFile": "Choisir un fichier",
      "noFileSelected": "Aucun fichier sélectionné",
      "loading": "Chargement...",
      "workspaceLayerPlaceholder": "espace_de_travail:couche",
      "requestFailed": "Échec de la requête avec le statut {{status}}",
      "networkFailure": "Impossible de joindre le service. Vérifiez que l'hôte est accessible et que son certificat TLS, son pare-feu et ses paramètres de proxy autorisent la requête ; dans le navigateur, elle peut aussi être bloquée par CORS — essayez l'application de bureau.",
      "requestTimedOut": "La requête a expiré. L'hôte est peut-être lent, inaccessible ou bloqué par un pare-feu ou un proxy."
    },
    "serviceLibrary": {
      "title": "Services enregistrés",
      "saveCurrent": "Enregistrer l'actuel",
      "importLibrary": "Importer la bibliothèque depuis JSON",
      "exportLibrary": "Exporter la bibliothèque vers JSON",
      "loadAria": "Charger un service enregistré",
      "loadPlaceholder": "Charger un service enregistré…",
      "builtin": "{{name}} (intégré)",
      "deleteAria": "Supprimer le service enregistré",
      "empty": "Aucun service enregistré pour le moment — remplissez le formulaire et choisissez « Enregistrer l'actuel ».",
      "name": "Nom",
      "category": "Catégorie",
      "categoryPlaceholder": "Facultatif (p. ex. pays, thème)",
      "uncategorized": "Non catégorisé",
      "errorName": "Entrez un nom pour le service enregistré.",
      "saved": "« {{name}} » enregistré dans la bibliothèque de services.",
      "removed": "« {{name}} » supprimé.",
      "errorExport": "Impossible d'exporter la bibliothèque.",
      "errorTooLarge": "Le fichier est trop volumineux pour être importé (5 Mo max).",
      "errorNoServices": "Aucun service valide n'a été trouvé dans ce fichier.",
      "errorRead": "Impossible de lire ce fichier comme bibliothèque de services.",
      "imported_one": "{{count}} service importé.",
      "imported_other": "{{count}} services importés.",
      "importedWithDropped_one": "{{count}} service importé ({{dropped}} ignoré — bibliothèque pleine).",
      "importedWithDropped_other": "{{count}} services importés ({{dropped}} ignorés — bibliothèque pleine)."
    },
    "xyz": {
      "defaultName": "Couche XYZ",
      "sampleLabel": "Imagerie USGS",
      "errorUrl": "Entrez un modèle d'URL de tuile XYZ.",
      "urlPlaceholder": "https://example.com/{z}/{x}/{y}.png",
      "shortUrlPlaceholder": "https://go.example.com/layer",
      "shortUrl": "URL courte"
    },
    "wms": {
      "defaultName": "Couche WMS",
      "sampleLabel": "Imagerie USGS NAIP",
      "sampleLabelGebco": "Bathymétrie océanique GEBCO",
      "errorUrl": "Entrez une URL de service WMS.",
      "errorLayers": "Entrez un ou plusieurs noms de couches WMS.",
      "urlPlaceholder": "https://example.com/geoserver/wms",
      "layers": "Couches",
      "styles": "Styles",
      "transparent": "Arrière-plan transparent",
      "retrieveLayers": "Récupérer les couches",
      "retrieving": "Récupération...",
      "retrievedLayers": "Couches récupérées",
      "selectLayer_one": "Sélectionner parmi {{count}} couche",
      "selectLayer_other": "Sélectionner parmi {{count}} couches",
      "noLayersFound": "Aucune couche n'a été trouvée pour ce service.",
      "retrieveError": "Impossible de récupérer les couches de ce service.",
      "version": "Version WMS"
    },
    "wfs": {
      "defaultName": "Couche WFS",
      "sampleLabel": "États américains (GeoServer)",
      "errorUrl": "Entrez une URL de service WFS.",
      "errorTypeName": "Entrez un nom de type d'entité WFS.",
      "errorOutputFormat": "Entrez un format de sortie WFS.",
      "urlPlaceholder": "https://example.com/geoserver/wfs",
      "featureType": "Type d'entité",
      "version": "Version",
      "outputFormat": "Format de sortie",
      "srsName": "Nom du SRS",
      "maxFeatures": "Nombre maximal d'entités",
      "errorMaxFeaturesNumeric": "Entrez une valeur numérique pour le nombre maximal d'entités.",
      "retrieveTypes": "Récupérer les types",
      "retrieving": "Récupération...",
      "retrievedTypes": "Types d'entités récupérés",
      "selectType_one": "Sélectionner parmi {{count}} type d'entité",
      "selectType_other": "Sélectionner parmi {{count}} types d'entités",
      "noTypesFound": "Aucun type d'entité n'a été trouvé pour ce service.",
      "retrieveError": "Impossible de récupérer les types d'entités de ce service."
    },
    "wmts": {
      "defaultName": "Couche WMTS",
      "sampleLabel": "EOX Imagerie mondiale (Sentinel-2)",
      "errorUrl": "Entrez un modèle d'URL de tuile WMTS.",
      "urlPlaceholder": "https://example.com/wmts/{z}/{y}/{x}.png"
    },
    "ogcVectorTiles": {
      "defaultName": "Couche de tuiles vectorielles OGC",
      "tilesUrl": "URL des tuiles",
      "tilesUrlPlaceholder": "https://example.com/tiles/WebMercatorQuad?f=tilejson",
      "tilesUrlHint": "Une URL de métadonnées TileJSON ou un modèle de tuile MVT {z}/{y}/{x}.",
      "styleUrl": "URL du style",
      "styleUrlPlaceholder": "https://example.com/styles/default?f=mapbox",
      "styleUrlHint": "JSON de style Mapbox/MapLibre facultatif. Utilisé pour découvrir les couches source du jeu de tuiles lorsque le TileJSON les omet.",
      "sourceLayers": "Couches source",
      "sourceLayersPlaceholder": "couche_a, couche_b",
      "sourceLayersHint": "Noms de couches source facultatifs séparés par des virgules. Remplace les couches trouvées dans le TileJSON ou le style.",
      "sampleLabel": "PDOK BGT (Pays-Bas)",
      "errorUrl": "Entrez une URL de tuiles ou une URL de style.",
      "errorNoTiles": "Impossible de déterminer le point de terminaison des tuiles vectorielles. Entrez une URL TileJSON, un modèle de tuile ou une URL de style.",
      "errorNoLayers": "Impossible de déterminer les couches source des tuiles vectorielles. Ajoutez une URL de style ou entrez les noms des couches source."
    },
    "arcgis": {
      "defaultName": "Couche ArcGIS",
      "sampleFeatureLabel": "Grandes villes américaines (entités)",
      "sampleVectorTileLabel": "Parcelles de Santa Monica (tuiles vectorielles)",
      "sampleMapServiceLabel": "Limites administratives des États-Unis (service de carte)",
      "sampleImageServiceLabel": "Ombrage USGS 3DEP (service d'imagerie)",
      "featureLayer": "Couche d'entités",
      "vectorTileLayer": "Couche de tuiles vectorielles",
      "mapServiceLayer": "Service de carte",
      "imageServiceLayer": "Service d'imagerie",
      "portalItemId": "ID de l'élément du portail",
      "featureUrlPlaceholder": "https://services.arcgis.com/.../FeatureServer/0",
      "vectorTileUrlPlaceholder": "https://.../arcgis/rest/services/.../VectorTileServer",
      "mapServiceUrlPlaceholder": "https://.../arcgis/rest/services/.../MapServer",
      "imageServiceUrlPlaceholder": "https://.../arcgis/rest/services/.../ImageServer",
      "sublayers": "Sous-couches",
      "sublayersPlaceholder": "Toutes les sous-couches visibles",
      "sublayersHint": "Identifiants de sous-couches facultatifs séparés par des virgules, par exemple 0,2,5. Sélectionner des sous-couches dessine le service dynamiquement au lieu d'utiliser ses tuiles en cache.",
      "renderingRule": "Règle de rendu",
      "renderingRulePlaceholder": "{\"rasterFunction\":\"Hillshade\"}",
      "renderingRuleHint": "JSON facultatif d'une fonction raster appliquée par le service. Une règle de rendu dessine le service dynamiquement au lieu d'utiliser ses tuiles en cache.",
      "portalUrl": "URL du portail",
      "portalUrlPlaceholder": "https://www.arcgis.com/sharing/rest",
      "accessToken": "Jeton d'accès"
    },
    "gpx": {
      "defaultName": "Couche GPX",
      "sampleLabel": "Sentier Fells Loop",
      "errorFileMissing": "Les données du fichier GPX sont manquantes.",
      "readError": "Impossible de lire le fichier GPX.",
      "errorChooseFile": "Choisissez un fichier GPX.",
      "errorUrl": "Entrez une URL GPX.",
      "errorSelectType": "Sélectionnez au moins un type de couche GPX.",
      "errorNotFound": "Les types de couches GPX sélectionnés sont introuvables.",
      "waypoints": "Points de cheminement",
      "tracks": "Traces",
      "trackPoints": "Points de trace",
      "routes": "Itinéraires",
      "routePoints": "Points d'itinéraire",
      "url": "URL GPX",
      "file": "Fichier GPX",
      "urlPlaceholder": "https://example.com/route.gpx",
      "layerTypes": "Types de couches"
    },
    "georss": {
      "defaultName": "Couche GeoRSS",
      "sampleLabel": "Séismes USGS (dernier jour)",
      "errorFileMissing": "Les données du fichier GeoRSS sont manquantes.",
      "readError": "Impossible de lire le fichier GeoRSS.",
      "errorChooseFile": "Choisissez un fichier GeoRSS.",
      "errorUrl": "Entrez une URL GeoRSS.",
      "url": "URL GeoRSS",
      "file": "Fichier GeoRSS",
      "urlPlaceholder": "https://example.com/feed.atom"
    },
    "cad": {
      "defaultName": "Couche CAO",
      "fileFilter": "CAO (DXF/DWG)",
      "layer": "Couche CAO",
      "layerPlaceholder": "Choisissez d'abord un fichier CAO",
      "readingLayers": "Lecture des couches...",
      "layerOption": "{{name}} ({{type}}, {{count}} entités)",
      "crs": "SRC source",
      "crsPlaceholder": "p. ex. EPSG:26915",
      "crsPresetLabel": "Systèmes de coordonnées courants...",
      "crsHelp": "Laissez vide si le dessin est déjà en longitude/latitude (WGS84). Sinon, entrez le code EPSG du système de coordonnées du dessin pour le reprojeter.",
      "readError": "Impossible de lire ce fichier CAO.",
      "errorNoLayers": "Aucune couche n'a été trouvée dans ce fichier CAO.",
      "errorChooseFile": "Choisissez d'abord un fichier CAO (DXF/DWG).",
      "errorNoLayer": "Sélectionnez une couche CAO à charger.",
      "errorUnsupportedGeometry": "Cette couche CAO contient une géométrie mixte ou une collection qui ne peut pas être affichée. Essayez une autre couche."
    },
    "gdb": {
      "defaultName": "Couche de géodatabase",
      "chooseFolder": "Choisir un dossier .gdb...",
      "noFolderSelected": "Aucune géodatabase sélectionnée",
      "layer": "Classe d'entités",
      "layerPlaceholder": "Choisissez d'abord une géodatabase",
      "readingLayers": "Lecture des couches...",
      "layerOption": "{{name}} ({{type}}, {{count}} entités)",
      "help": "Les tables sans géométrie ne sont pas listées. La classe d'entités sélectionnée est chargée via le serveur GeoLibre local et reprojetée en WGS84.",
      "desktopOnly": "Les couches File Geodatabase ne sont disponibles que dans GeoLibre Desktop. Cette fonctionnalité lit un dossier .gdb local via le serveur GeoLibre local, auquel l'application web n'a pas accès.",
      "readError": "Impossible de lire cette File Geodatabase.",
      "convertError": "Impossible de charger cette classe d'entités.",
      "errorNotGdb": "Choisissez un dossier se terminant par .gdb (une géodatabase fichier Esri).",
      "errorNoLayers": "Aucune classe d'entités avec géométrie n'a été trouvée dans cette géodatabase.",
      "errorChooseFolder": "Choisissez d'abord un dossier .gdb.",
      "errorNoLayer": "Sélectionnez une classe d'entités à charger.",
      "errorTimeout": "La lecture de la géodatabase a expiré.",
      "crs": "CRS source",
      "crsPlaceholder": "p. ex. EPSG:26915",
      "crsHelp": "Le système de coordonnées de cette classe d'entités n'a pas pu être détecté. Entrez le code EPSG (ou ESRI) dans lequel elle a été enregistrée afin de la reprojeter en WGS84.",
      "errorMissingCrs": "Le système de coordonnées de cette classe d'entités n'a pas pu être détecté. Entrez son CRS source pour l'ajouter."
    },
    "delimitedText": {
      "defaultName": "Couche de texte délimité",
      "sampleLabel": "Villes américaines",
      "errorChooseFile": "Choisissez un fichier de texte délimité.",
      "errorUrl": "Entrez une URL de texte délimité.",
      "errorFileMissing": "Les données du fichier de texte délimité sont manquantes.",
      "readError": "Impossible de lire le fichier de texte délimité.",
      "errorDataMissing": "Les données du texte délimité sont manquantes.",
      "retrievedColumns_one": "{{count}} colonne récupérée.",
      "retrievedColumns_other": "{{count}} colonnes récupérées.",
      "retrievedColumnsTable_one": "{{count}} colonne récupérée. Aucune colonne de coordonnées détectée ; elle sera ajoutée comme table d'attributs.",
      "retrievedColumnsTable_other": "{{count}} colonnes récupérées. Aucune colonne de coordonnées détectée ; elle sera ajoutée comme table d'attributs.",
      "errorRetrieveColumns": "Impossible de récupérer les noms de colonnes.",
      "url": "URL du texte délimité",
      "file": "Fichier de texte délimité",
      "urlPlaceholder": "https://example.com/data.csv",
      "retrieving": "Récupération...",
      "retrieveColumns": "Récupérer les colonnes",
      "delimiter": "Délimiteur",
      "delimiterComma": "Virgule",
      "delimiterTab": "Tabulation",
      "delimiterSemicolon": "Point-virgule",
      "delimiterPipe": "Barre verticale",
      "delimiterCustom": "Personnalisé",
      "customDelimiter": "Délimiteur personnalisé",
      "longitudeField": "Champ de longitude",
      "latitudeField": "Champ de latitude",
      "noneField": "Aucun (table d'attributs)",
      "tableHint": "Laissez les deux champs de coordonnées sur Aucun pour ajouter le fichier comme table d'attributs non spatiale (pour une jointure attributaire).",
      "crs": "Système de coordonnées",
      "crsPlaceholder": "p. ex. EPSG:32643",
      "crsPresetLabel": "Systèmes de coordonnées courants...",
      "crsHelp": "Laissez vide si les coordonnées sont déjà en longitude/latitude (WGS84). Sinon, entrez le code EPSG des colonnes de coordonnées et les points seront reprojetés en WGS84. Pour un SRC projeté, les champs longitude et latitude sélectionnent les colonnes X (abscisse) et Y (ordonnée).",
      "importMode": "Importer en tant que",
      "modeCoordinates": "Coordonnées",
      "modeAddresses": "Adresses (géocodage)",
      "addressColumns": "Colonnes d'adresse",
      "addressColumnsEmptyHint": "Récupérez d'abord les colonnes pour sélectionner les colonnes d'adresse.",
      "addressColumnsHint": "Sélectionnez une ou plusieurs colonnes à concaténer dans l'adresse envoyée au géocodeur (p. ex. rue, ville, région).",
      "errorNoAddressColumns": "Sélectionnez au moins une colonne d'adresse.",
      "errorNoAddressesFound": "Aucune ligne n'avait de valeur dans les colonnes d'adresse sélectionnées."
    },
    "photos": {
      "defaultName": "Photos",
      "chooseLabel": "Photos",
      "choosePhotos": "Choisir des photos",
      "hint": "Sélectionnez des photos JPEG, PNG, TIFF ou HEIC. Chacune est placée à partir de sa position GPS EXIF. Les photos HEIC sont localisées mais affichées sans vignette.",
      "readError": "Impossible de lire les photos sélectionnées.",
      "errorChooseFiles": "Choisissez une ou plusieurs photos.",
      "selectedCount_one": "{{count}} photo sélectionnée",
      "selectedCount_other": "{{count}} photos sélectionnées",
      "errorNoGps_one": "Aucune position GPS n'a été trouvée dans la photo sélectionnée.",
      "errorNoGps_other": "Aucune position GPS n'a été trouvée dans les {{count}} photos sélectionnées.",
      "addedSummary_one": "{{count}} photo géotaguée ajoutée.",
      "addedSummary_other": "{{count}} photos géotaguées ajoutées.",
      "skippedNote_one": "{{count}} photo a été ignorée (pas de position GPS).",
      "skippedNote_other": "{{count}} photos ont été ignorées (pas de position GPS).",
      "noThumbnailNote_one": "{{count}} photo n'a pas de vignette (HEIC ou format non pris en charge).",
      "noThumbnailNote_other": "{{count}} photos n'ont pas de vignette (HEIC ou format non pris en charge).",
      "manualPromptTitle": "Aucune position GPS n'a été trouvée dans cette photo.",
      "manualPromptBody": "Placez-la au centre de la carte actuel et faites-la glisser jusqu'à sa position sur la carte.",
      "manualPromptCenter": "Centre de la carte : {{lng}}, {{lat}}",
      "manualPlace": "Placer au centre de la carte",
      "manualHint": "Faites glisser cette épingle pour positionner la photo, puis cliquez sur Terminé."
    },
    "mbtiles": {
      "defaultName": "Couche MBTiles",
      "readError": "Impossible de lire le fichier MBTiles.",
      "errorChooseFile": "Choisissez un fichier MBTiles.",
      "errorSourceLayers": "Entrez au moins une couche source vectorielle.",
      "tileType": "Type de tuile",
      "sourceLayers": "Couches source",
      "sourceLayersPlaceholder": "bâtiment, lieu, eau"
    },
    "postgres": {
      "defaultName": "Couche PostgreSQL",
      "errorDesktopOnly": "Les couches PostgreSQL nécessitent GeoLibre Desktop.",
      "errorConnectionString": "Entrez une chaîne de connexion PostgreSQL.",
      "statusCheckingBinary": "Vérification du binaire Martin...",
      "statusDownloaded": "Martin téléchargé. Démarrage du serveur local...",
      "statusStarting": "Démarrage du serveur Martin local...",
      "statusReadingCatalog": "Lecture du catalogue Martin...",
      "statusFound_one": "{{count}} source trouvée.",
      "statusFound_other": "{{count}} sources trouvées.",
      "statusNoSources": "Martin est en cours d'exécution, mais aucune source PostGIS compatible n'a été trouvée.",
      "errorConnect": "Impossible de se connecter à PostgreSQL.",
      "statusStopped": "Martin arrêté.",
      "errorStop": "Impossible d'arrêter Martin.",
      "errorConnectFirst": "Connectez-vous d'abord à PostgreSQL.",
      "errorNoVectorLayers": "La source Martin sélectionnée n'a pas de couches vectorielles.",
      "errorSelectSource": "Sélectionnez une source Martin à ajouter.",
      "desktopOnlyNotice": "Les couches PostgreSQL ne sont disponibles que dans GeoLibre Desktop. Cette fonctionnalité exécute un serveur de tuiles Martin local, que l'application web ne peut pas lancer.",
      "savedConnection": "Connexion enregistrée",
      "selectSavedConnection": "Sélectionner une connexion enregistrée",
      "connectionString": "Chaîne de connexion PostgreSQL",
      "connectionStringPlaceholder": "postgres://utilisateur:motdepasse@hôte:5432/base",
      "defaultSrid": "SRID par défaut",
      "connect": "Connecter",
      "stop": "Arrêter",
      "martinSource": "Source Martin",
      "runningOnPort": "Martin est en cours d'exécution sur le port {{port}}.",
      "loadMode": "Charger comme",
      "loadModeTiles": "Tuiles vectorielles (Martin, lecture seule)",
      "loadModeEditable": "Couche modifiable (charge toutes les entités)",
      "editableNotice": "Charge les entités de la table via le serveur de traitement local afin qu'elles puissent être modifiées. Enregistrez les modifications avec l'action « Enregistrer les modifications dans la table PostGIS » de la couche.",
      "statusListingTables": "Lecture des tables spatiales...",
      "statusTablesFound_one": "{{count}} table spatiale trouvée.",
      "statusTablesFound_other": "{{count}} tables spatiales trouvées.",
      "statusNoTables": "Aucune table spatiale n'a été trouvée dans cette base de données.",
      "editableTable": "Table",
      "tableReadOnly": "{{table}} (lecture seule : pas de clé primaire)",
      "errorSelectTable": "Sélectionnez une table à charger.",
      "errorRuntimeMissing": "Le serveur de traitement ne dispose pas de l'environnement d'exécution PostGIS (psycopg). Installez l'extra « postgis » de geolibre-server pour charger des couches modifiables."
    },
    "video": {
      "defaultName": "Couche vidéo",
      "sampleLabel": "Vagues côtières près de San Francisco",
      "errorUrl": "Entrez une URL vidéo.",
      "errorHttps": "Les URL vidéo doivent commencer par https://.",
      "cornerTopLeft": "haut-gauche",
      "cornerTopRight": "haut-droite",
      "cornerBottomRight": "bas-droite",
      "cornerBottomLeft": "bas-gauche",
      "errorCornerFormat": "Entrez le coin {{corner}} sous la forme « longitude, latitude ».",
      "errorCornerNumber": "Entrez une longitude et une latitude numériques pour le coin {{corner}}.",
      "errorCornerLng": "La longitude du coin {{corner}} doit être comprise entre -180 et 180.",
      "errorCornerLat": "La latitude du coin {{corner}} doit être comprise entre -90 et 90.",
      "primaryUrl": "URL vidéo principale",
      "primaryUrlPlaceholder": "https://example.com/clip.mp4",
      "fallbackUrl": "URL vidéo de secours (facultatif)",
      "fallbackUrlPlaceholder": "https://example.com/clip.webm",
      "topLeft": "Haut-gauche (lng, lat)",
      "topRight": "Haut-droite (lng, lat)",
      "bottomRight": "Bas-droite (lng, lat)",
      "bottomLeft": "Bas-gauche (lng, lat)",
      "cornersNote": "Les quatre coins géoréférencent la vidéo sur la carte. La vidéo doit être servie en HTTPS et l'hôte doit autoriser les requêtes cross-origin (CORS) pour que les images s'affichent."
    },
    "netcdf": {
      "sampleLabel": "Température de l'air",
      "title": "Ajouter NetCDF / HDF",
      "description": "Afficher un jeu de données NetCDF ou HDF5 : un fichier Cloud-Optimized distant via une référence kerchunk (lu via des requêtes HTTP par plage), ou un fichier NetCDF ou HDF5 local lu dans votre navigateur.",
      "sourceLabel": "Source",
      "sourceCloud": "Cloud-Optimized (URL kerchunk)",
      "sourceLocal": "Fichier local (NetCDF / HDF5)",
      "localFileLabel": "Fichier local",
      "chooseDifferentFile": "Choisir un autre fichier",
      "readingFile": "Lecture...",
      "readingRemote": "Lecture des métadonnées du fichier via HTTP...",
      "localFileHelp": "Sélectionnez un fichier NetCDF ou HDF5 local (.nc, .nc4, .cdf, .h5 ou .hdf5) ; le NetCDF-3 classique et le NetCDF-4/HDF5 sont tous deux pris en charge. Il est décodé dans votre navigateur ; les fichiers volumineux utilisent plus de mémoire.",
      "errorNoVariables": "Aucune variable affichable (2D ou plus) trouvée dans le fichier.",
      "errorNoFile": "Aucun fichier chargé.",
      "kerchunkUrlLabel": "URL de référence kerchunk",
      "kerchunkUrlHelp": "Choisissez un jeu de données d'exemple ci-dessus, ou collez votre propre URL de référence kerchunk, puis cliquez sur Charger les variables.",
      "loading": "Chargement...",
      "loadVariables": "Charger les variables",
      "variableLabel": "Variable",
      "dimIndexLabel": "Index {{dim}}",
      "colormapLabel": "Palette de couleurs",
      "bandCombinationLabel": "Combinaison de bandes",
      "bandCombinationHelp": "Une bande unique est représentée par une palette de couleurs ; une composition RVB dessine trois bandes de cette variable comme les canaux rouge, vert et bleu, chacun étiré sur sa propre plage 2-98 %.",
      "modeSingleBand": "Bande unique (avec palette)",
      "modeRgb": "Composition RVB (trois bandes)",
      "colorMin": "Couleur minimale (facultatif)",
      "colorMax": "Couleur maximale (facultatif)",
      "adding": "Ajout en cours...",
      "addLayer": "Ajouter la couche",
      "channel": {
        "red": "Bande rouge",
        "green": "Bande verte",
        "blue": "Bande bleue"
      }
    },
    "deckViz": {
      "defaultName": "Couche Deck.gl",
      "errorChooseFile": "Choisissez un fichier CSV, JSON ou GeoJSON.",
      "errorUrl": "Entrez une URL de données.",
      "errorUnknownType": "Type de couche inconnu.",
      "needsGeojson": "{{label}} nécessite un fichier GeoJSON.",
      "needsTabular": "{{label}} nécessite des données tabulaires CSV/JSON, pas du GeoJSON.",
      "mapRequiredFields_one": "Associez le champ requis : {{fields}}.",
      "mapRequiredFields_other": "Associez les champs requis : {{fields}}.",
      "errorExample": "Impossible de charger les données d'exemple.",
      "loadedFeatures_one": "{{count}} entité chargée.",
      "loadedFeatures_other": "{{count}} entités chargées.",
      "loadedRows_one": "{{count}} ligne",
      "loadedRows_other": "{{count}} lignes",
      "loadedColumns_one": "{{count}} colonne",
      "loadedColumns_other": "{{count}} colonnes",
      "loadedTabular": "{{rows}} · {{columns}} chargées.",
      "errorLoad": "Impossible de charger les données.",
      "errorLoadFirst": "Chargez d'abord les données d'exemple, ou un fichier/une URL.",
      "useExample": "Utiliser les données d'exemple",
      "loadYourOwn": "Ou charger vos propres données",
      "dataUrl": "URL des données",
      "localFile": "Fichier local",
      "urlPlaceholder": "https://example.com/data.csv",
      "chooseFileLoad": "Choisir un fichier et charger",
      "loadData": "Charger les données",
      "selectRole": "— sélectionner —",
      "roleNone": "(aucun)",
      "closeAfterAdd": "Fermer la boîte de dialogue après l'ajout de la couche",
      "color": "Couleur",
      "pointSize": "Taille des points",
      "cellSize": "Taille des cellules",
      "lineWidth": "Épaisseur de ligne",
      "extrusion": "Extrusion 3D",
      "modelUrlPlaceholder": "https://example.com/model.glb"
    },
    "ogcFeatures": {
      "defaultName": "Couche OGC API - Features",
      "sampleLabel": "Lacs mondiaux (démo pygeoapi)",
      "urlPlaceholder": "https://example.com/ogcapi",
      "urlHint": "La page d'accueil du service, ou toute URL copiée depuis celle-ci (une URL /collections ou /collections/{id}/items fonctionne aussi).",
      "retrieveCollections": "Récupérer les collections",
      "retrieving": "Récupération...",
      "retrievedCollections": "Collections récupérées",
      "selectCollection_one": "Choisir parmi {{count}} collection",
      "selectCollection_other": "Choisir parmi {{count}} collections",
      "noCollectionsFound": "Aucune collection d'entités n'a été trouvée pour ce service.",
      "retrieveError": "Impossible de récupérer les collections de ce service.",
      "collection": "Collection",
      "collectionPlaceholder": "collection-id",
      "maxFeatures": "Nombre maximal d'entités",
      "bbox": "Boîte englobante",
      "datetime": "Date et heure",
      "errorCollection": "Saisissez un identifiant de collection OGC API - Features.",
      "errorMaxFeatures": "Saisissez un nombre maximal d'entités égal ou supérieur à 1.",
      "errorBbox": "Saisissez la boîte englobante sous la forme « ouest,sud,est,nord ».",
      "errorNoFeatures": "Cette collection n'a renvoyé aucune entité."
    },
    "nonGeographicCoordinates": "Les coordonnées de {{names}} ne sont pas des longitudes/latitudes : rien ne sera dessiné sur la carte. Le SCR est mal déclaré — reprojetez les données (ou corrigez le .prj) puis rechargez-les."
  },
  "offline": {
    "title": "Télécharger une zone hors ligne",
    "description": "Enregistrez les tuiles du fond de carte de la vue actuelle pour que cette zone continue de fonctionner sans connexion réseau.",
    "noServiceWorker": "La mise en cache hors ligne nécessite l'application web installée. Les tuiles téléchargées ici ne seront pas sauvegardées pour une utilisation hors ligne dans cette version.",
    "uncacheable": "Les sources de fond de carte suivantes ne prennent pas en charge le téléchargement hors ligne et seront absentes de votre carte hors ligne : {{hosts}}.",
    "cacheable": "Les sources de fond de carte suivantes seront téléchargées et disponibles hors ligne : {{hosts}}.",
    "includeExtra": "Inclure des niveaux de détail supplémentaires pour le zoom",
    "currentViewOnly": "Vue actuelle uniquement · Zoom {{zoom}}",
    "detailLevels": "Niveaux de détail supplémentaires",
    "relativeLevels_one": "+{{count}} niveau · Zoom {{min}}–{{max}}",
    "relativeLevels_other": "+{{count}} niveaux · Zoom {{min}}–{{max}}",
    "tiles": "Ressources à télécharger",
    "tooManyTiles": "Cette zone dépasse la limite du cache hors ligne ({{max}} ressources) ; les tuiles mises en cache les plus anciennes peuvent être évincées à mesure que de nouvelles ressources sont téléchargées. Réduisez les niveaux de détail ou choisissez une zone plus petite.",
    "acknowledgeEviction": "Télécharger quand même, en évinçant les anciennes tuiles si nécessaire",
    "download": "Télécharger",
    "cancel": "Annuler",
    "progress": "Téléchargement {{done}} / {{total}}…",
    "complete_one": "Zone hors ligne enregistrée. {{count}} ressource mise en cache pour une utilisation hors ligne.",
    "complete_other": "Zone hors ligne enregistrée. {{count}} ressources mises en cache pour une utilisation hors ligne.",
    "completeWithFailures": "{{done}} sur {{total}} ressources enregistrées ({{failed}} échouées).",
    "retryFailed_one": "Réessayer {{count}} ressource échouée",
    "retryFailed_other": "Réessayer {{count}} ressources échouées",
    "retryAll": "Réessayer toutes les ressources",
    "advanced": "Options avancées",
    "concurrency": "Requêtes simultanées",
    "concurrencyHint": "Réduisez cette valeur pour soulager les serveurs qui limitent les requêtes de tuiles rapides.",
    "timeout": "Délai d'expiration de la requête (secondes)",
    "timeoutHint": "Chaque requête de tuile dispose de {{seconds}} s avant d'être considérée comme échouée.",
    "timeoutDisabled": "Aucun délai d'expiration — les requêtes utilisent le comportement par défaut du navigateur. Augmentez-le pour les connexions lentes."
  },
  "offlineManager": {
    "title": "Gérer les zones hors ligne",
    "description": "Consultez les zones de fond de carte que vous avez téléchargées pour une utilisation hors ligne, actualisez-les ou supprimez-les pour libérer de l'espace de stockage.",
    "noServiceWorker": "La mise en cache hors ligne nécessite l'application web installée. L'actualisation des zones ne sauvegardera pas les tuiles pour une utilisation hors ligne dans cette version.",
    "empty": "Pas encore de zones hors ligne. Utilisez « Télécharger une zone hors ligne » pour enregistrer la vue actuelle de la carte pour une utilisation hors ligne.",
    "zoomRange": "Zoom {{min}}–{{max}}",
    "tilesCount_one": "{{count}} tuile",
    "tilesCount_other": "{{count}} tuiles",
    "savedOn": "Enregistrée le {{date}}",
    "rename": "Renommer cette zone",
    "nameLabel": "Nom de la zone",
    "update": "Actualiser cette zone",
    "delete": "Supprimer cette zone",
    "confirmDelete": "Supprimer",
    "updateAll": "Tout actualiser",
    "updating": "Actualisation {{done}} / {{total}}…",
    "totalFootprint_one": "{{size}} sur {{count}} zone",
    "totalFootprint_other": "{{size}} sur {{count}} zones",
    "deviceUsage": "{{usage}} sur {{quota}} utilisés"
  },
  "recordTour": {
    "title": "Enregistrer une visite de la carte",
    "hint": "Déplacez et zoomez la carte, puis capturez chaque vue. La carte reste interactive tant que ce panneau est ouvert.",
    "unsupported": "Ce navigateur ne peut pas enregistrer le canevas de la carte. Essayez une version récente de Chrome, Edge ou Firefox.",
    "addView": "Ajouter la vue actuelle",
    "pathTitle": "Générer depuis un tracé",
    "pathNoLayers": "Ajoutez une couche LineString pour générer des images clés depuis un tracé.",
    "pathLayer": "Couche de tracé",
    "pathLayerOption": "{{name}} ({{count}} points)",
    "pathKeyframes": "Images clés",
    "pathZoom": "Zoom",
    "pathPitch": "Inclinaison",
    "pathHold": "Maintien",
    "pathTransition": "Déplacement",
    "pathGenerate": "Générer",
    "pathConfirmReplace": "Remplacer les images clés actuelles par celles générées depuis ce tracé ?",
    "pathGenerated_one": "{{count}} image clé générée depuis le tracé.",
    "pathGenerated_other": "{{count}} images clés générées depuis le tracé.",
    "pathGenerateError": "Impossible de générer des images clés depuis ce tracé.",
    "loadConfig": "Charger une configuration",
    "saveConfig": "Enregistrer la configuration",
    "confirmLoad": "Remplacer les images clés actuelles par la configuration chargée ?",
    "configFileType": "Configuration de visite",
    "configSaved": "Configuration enregistrée sous {{name}}",
    "configLoaded_one": "Configuration chargée avec {{count}} image clé.",
    "configLoaded_other": "Configuration chargée avec {{count}} images clés.",
    "configSaveError": "Impossible d'enregistrer la configuration de la visite. Veuillez réessayer.",
    "configLoadError": "Impossible de charger la configuration de la visite. Le fichier est peut-être invalide.",
    "keyframeCount_one": "{{count}} image clé",
    "keyframeCount_other": "{{count}} images clés",
    "empty": "Déplacez et zoomez la carte jusqu'à une vue de départ, puis ajoutez-la comme première image clé. Ajoutez au moins deux images clés pour enregistrer une visite.",
    "flyToKeyframe": "Aller à cette vue",
    "hold": "Maintenir",
    "transition": "Transition",
    "secondsShort": "s",
    "holdSeconds": "Secondes à maintenir sur cette vue",
    "segmentSeconds": "Secondes pour passer à la vue suivante",
    "resizeLeft": "Redimensionner le panneau depuis le coin inférieur gauche",
    "resizeRight": "Redimensionner le panneau depuis le coin inférieur droit",
    "recapture": "Mettre à jour avec la vue actuelle de la carte",
    "moveUp": "Déplacer l'image clé vers le haut",
    "moveDown": "Déplacer l'image clé vers le bas",
    "removeKeyframe": "Supprimer l'image clé",
    "fps": "Images par seconde",
    "estimatedLength": "Environ {{seconds}} s",
    "record": "Enregistrer",
    "videoFileType": "Vidéo WebM",
    "recordingStatus": "Enregistrement… {{percent}} %",
    "savingStatus": "Enregistrement de la vidéo…",
    "stop": "Arrêter",
    "recordingReady": "Enregistrement prêt. Nommez-le et enregistrez, ou annulez pour recommencer.",
    "fileNameLabel": "Nom du fichier",
    "saveVideo": "Enregistrer la vidéo…",
    "discard": "Annuler",
    "saved": "{{name}} enregistré",
    "saveCancelled": "Enregistrement annulé.",
    "recordError": "Impossible d'enregistrer la visite. Veuillez réessayer.",
    "saveError": "Impossible d'enregistrer la vidéo. Veuillez réessayer."
  },
  "recordVideo": {
    "title": "Enregistrer une vidéo",
    "hint": "Enregistrez la carte en direct sous forme de vidéo. Déplacez et zoomez pendant l'enregistrement — chaque mouvement est capturé. Ce panneau et le cadre de sélection ne font pas partie de la vidéo.",
    "unsupported": "Ce navigateur ne peut pas enregistrer le canevas de la carte. Essayez une version récente de Chrome, Edge ou Firefox.",
    "area": "Zone de capture",
    "wholeMap": "Toute la carte",
    "selectArea": "Sélectionner une zone…",
    "redrawArea": "Redessiner la zone…",
    "drawHint": "Faites glisser un rectangle sur la carte pour définir la zone d'enregistrement, ou appuyez sur Échap pour annuler.",
    "regionChosen": "Zone d'enregistrement : {{width}} × {{height}} px. Le cadre reste fixe pendant que la carte se déplace en dessous.",
    "noRegion": "Dessinez un rectangle sur la carte pour choisir la zone d'enregistrement.",
    "needRegion": "Sélectionnez d'abord une zone sur la carte.",
    "fps": "Images par seconde",
    "caption": "Légende (incrustée dans la vidéo)",
    "captionTitlePlaceholder": "Titre (facultatif)",
    "captionTextLabel": "Sous-titre ou source des données",
    "captionTextPlaceholder": "Sous-titre ou source des données (facultatif)",
    "captionPosition": "Position de la légende",
    "captionPos": {
      "top-left": "En haut à gauche",
      "top-center": "En haut au centre",
      "top-right": "En haut à droite",
      "bottom-left": "En bas à gauche",
      "bottom-center": "En bas au centre",
      "bottom-right": "En bas à droite"
    },
    "includePanels": "Inclure les panneaux de la carte (légende, barre de couleurs, HTML) dans la vidéo",
    "record": "Enregistrer",
    "preparing": "Préparation…",
    "stop": "Arrêter",
    "savingStatus": "Enregistrement de la vidéo…",
    "recordingReady": "Enregistrement prêt. Nommez-le et enregistrez, ou annulez pour recommencer.",
    "fileNameLabel": "Nom du fichier",
    "saveVideo": "Enregistrer la vidéo…",
    "discard": "Annuler",
    "videoFileType": "Vidéo",
    "saved": "{{name}} enregistré",
    "saveCancelled": "Enregistrement annulé.",
    "recordError": "Impossible d'enregistrer la vidéo. Veuillez réessayer.",
    "saveError": "Impossible d'enregistrer la vidéo. Veuillez réessayer."
  },
  "fieldCollection": {
    "title": "Collecte de terrain",
    "description": "Capturez des observations de points, lignes ou polygones à l'aide d'un formulaire personnalisé. Placez un point par GPS ou en touchant la carte, et dessinez des lignes et des polygones sommet par sommet.",
    "captureDescription": "Capturez un emplacement par GPS ou sur la carte, puis remplissez le formulaire pour l'enregistrer.",
    "captureReviewDescription": "Vérifiez l'emplacement capturé, complétez le formulaire et enregistrez-le dans la couche.",
    "reopen": "Ouvrir la collecte de terrain",
    "targetLayer": "Couche de collecte",
    "newLayer": "Nouvelle couche de collecte…",
    "layerName": "Nom de la couche",
    "layerNamePlaceholder": "Observations de terrain",
    "geometry": "Géométrie",
    "geom": {
      "point": "Point",
      "line": "Ligne",
      "polygon": "Polygone"
    },
    "fields": "Champs du formulaire",
    "addField": "Ajouter un champ",
    "fieldLabel": "Étiquette",
    "fieldType": "Type",
    "options": "Options (séparées par des virgules)",
    "required": "Obligatoire",
    "noFields": "Pas encore de champs. Ajoutez des champs pour capturer des attributs, ou créez la couche pour capturer uniquement des points de localisation.",
    "type": {
      "text": "Texte",
      "number": "Nombre",
      "date": "Date",
      "choice": "Choix"
    },
    "createLayer": "Créer la couche",
    "captureHint": "Utilisez le GPS ou choisissez un point sur la carte pour démarrer une capture.",
    "drawHint": "Dessinez la forme sur la carte pour démarrer une capture.",
    "useGps": "Utiliser le GPS",
    "pickOnMap": "Choisir sur la carte",
    "reposition": "Repositionner le point",
    "drawOnMap": "Dessiner sur la carte",
    "pickBannerTitle": "Mode de placement actif",
    "pickBannerHint": "Cliquez n'importe où sur la carte pour choisir un point, ou appuyez sur Échap pour annuler.",
    "addGpsVertex": "Ajouter un sommet GPS",
    "undo": "Annuler",
    "finish": "Terminer",
    "vertices_one": "{{count}} sommet",
    "vertices_other": "{{count}} sommets",
    "needMore": "Ajoutez au moins {{min}} sommets",
    "dblClickHint": "Touchez pour ajouter des sommets ; double-cliquez pour terminer.",
    "locating": "Localisation…",
    "photo": "Photo",
    "photoOptional": "Photo (facultatif)",
    "choosePhoto": "Choisir une photo…",
    "removePhoto": "Supprimer",
    "save": {
      "point": "Enregistrer le point",
      "line": "Enregistrer la ligne",
      "polygon": "Enregistrer le polygone"
    },
    "saved": {
      "point_one": "{{count}} point enregistré dans {{layer}}.",
      "point_other": "{{count}} points enregistrés dans {{layer}}.",
      "line_one": "{{count}} ligne enregistrée dans {{layer}}.",
      "line_other": "{{count}} lignes enregistrées dans {{layer}}.",
      "polygon_one": "{{count}} polygone enregistré dans {{layer}}.",
      "polygon_other": "{{count}} polygones enregistrés dans {{layer}}."
    },
    "layerGone": "La couche de collecte n'est plus disponible.",
    "noGeolocation": "La géolocalisation n'est pas disponible sur cet appareil.",
    "geolocationDenied": "Impossible d'obtenir votre position. Vérifiez les autorisations de localisation et réessayez.",
    "photoTooLarge": "Cette photo est trop volumineuse ({{max}} max). Choisissez une image plus petite.",
    "photoReadError": "Impossible de lire cette image. Essayez un autre fichier.",
    "errorRequired": "Ce champ est obligatoire.",
    "errorNumber": "Entrez un nombre valide.",
    "errorChoice": "Choisissez l'une des options de la liste."
  },
  "gps": {
    "title": "Suivi GPS",
    "description": "Affichez la position de votre appareil sur la carte, enregistrez un journal de trace et capturez des points à votre position actuelle.",
    "start": "Démarrer le GPS",
    "stop": "Arrêter le GPS",
    "follow": "Garder la carte centrée sur ma position",
    "waitingForFix": "En attente d'un signal GPS…",
    "noGeolocation": "La géolocalisation n'est pas disponible sur cet appareil.",
    "permissionDenied": "L'autorisation de localisation a été refusée. Activez-la dans les paramètres de votre navigateur ou de votre système, puis réessayez.",
    "trackLog": "Journal de trace",
    "record": "Enregistrer la trace",
    "pause": "Pause",
    "resume": "Reprendre",
    "discard": "Abandonner",
    "saveTrack": "Enregistrer comme couche",
    "exportGpx": "Exporter en GPX",
    "exportGeojson": "Exporter en GeoJSON",
    "points_one": "{{count}} point",
    "points_other": "{{count}} points",
    "trackLayerName": "Trace GPS",
    "trackSaved": "{{name}} enregistré comme couche.",
    "trackExported": "Trace exportée.",
    "exportCancelled": "Export annulé.",
    "exportFailed": "Impossible d'exporter la trace. Veuillez réessayer.",
    "capture": "Numériser",
    "capturePoint": "Capturer un point",
    "captureLayerName": "Points GPS",
    "captured_one": "{{count}} point capturé pendant cette session.",
    "captured_other": "{{count}} points capturés pendant cette session.",
    "pointCaptured": "Point enregistré dans {{layer}}.",
    "captureBlocked": "La précision du signal est de ±{{accuracy}}, moins bonne que le seuil de {{max}} m. Point non enregistré.",
    "satellites": "Satellites",
    "satellitesShort": "Sat",
    "satellitesValue": "Satellites : {{value}}",
    "satellitesShortValue": "Sat : {{value}}",
    "notAvailable": "—",
    "settings": "Filtres de journalisation",
    "minDistance": "Distance min (m)",
    "minTime": "Temps min (s)",
    "maxAccuracy": "Précision max (m)",
    "settingsHint": "Les positions plus rapprochées que la distance ou le temps minimum sont ignorées dans la trace. Les positions moins précises que le seuil de précision ne sont pas journalisées, et la capture de points est bloquée. 0 désactive un filtre.",
    "openDialog": "Ouvrir le suivi GPS",
    "altitudeValue": "Alt : {{value}} m",
    "speedValue": "{{value}} km/h",
    "headingValue": "{{value}}°",
    "source": "Source de position",
    "sourceDevice": "Cet appareil",
    "sourceNmea": "Récepteur NMEA (série ou Bluetooth)",
    "nmeaBaudRate": "Débit en bauds",
    "nmeaConnectSerial": "Connexion série",
    "nmeaConnectBluetooth": "Connexion Bluetooth",
    "nmeaConnecting": "Connexion…",
    "nmeaConnected": "Connecté à {{device}}.",
    "nmeaDisconnect": "Déconnecter",
    "nmeaNotConnected": "Connectez un récepteur NMEA ci-dessus pour commencer à diffuser les positions.",
    "nmeaWaiting": "En attente de trames…",
    "nmeaStats": "Trames : {{parsed}} · fixes : {{fixes}}",
    "nmeaConnectFailed": "Impossible de se connecter au récepteur.",
    "nmeaDisconnected": "Le récepteur s'est déconnecté.",
    "nmeaUnsupportedDevice": "Aucun service NMEA n'a été trouvé sur cet appareil. Il s'agit peut-être d'un récepteur Bluetooth classique, qui doit être appairé dans les réglages du système puis connecté ici comme port série.",
    "nmeaUnsupported": "La lecture d'un récepteur NMEA nécessite les API Web Serial ou Web Bluetooth, que ce navigateur ne fournit pas. Ouvrez GeoLibre dans un navigateur Chromium tel que Chrome ou Edge.",
    "nmeaSerialUnsupported": "Web Serial n'est pas disponible ici, les récepteurs série ne peuvent donc pas être ouverts.",
    "nmeaBluetoothUnsupported": "Web Bluetooth n'est pas disponible ici, les récepteurs Bluetooth Low Energy ne peuvent donc pas être ouverts.",
    "nmeaBluetoothHint": "La plupart des récepteurs GPS Bluetooth utilisent le Bluetooth classique : appairez-en un dans les réglages du système et il apparaîtra ici comme port série. N'utilisez « Connexion Bluetooth » que pour les récepteurs Bluetooth Low Energy.",
    "fixQuality": {
      "invalid": "Aucun fix",
      "gps": "Fix GPS",
      "dgps": "GPS différentiel",
      "pps": "Fix PPS",
      "rtk-fixed": "RTK fixe",
      "rtk-float": "RTK flottant",
      "estimated": "Navigation à l'estime",
      "manual": "Saisie manuelle",
      "simulation": "Simulé"
    }
  },
  "georeferencer": {
    "title": "Géoréférencer une image",
    "description": "Épinglez une image sur la carte : chargez-la, associez des points de l'image à des emplacements sur la carte, puis ajoutez-la comme superposition géoréférencée.",
    "loadImage": "Cliquez pour charger une image (PNG, JPG, TIFF)",
    "imageTooLarge": "Cette image est trop volumineuse ({{max}} max). Choisissez une image plus petite.",
    "imageReadError": "Impossible de lire cette image. Essayez un autre fichier.",
    "imageNoDimensions": "Impossible de déterminer la taille de l'image. Utilisez une image raster (PNG, JPG, TIFF).",
    "sourceImage": "Image source ({{w}} × {{h}} px)",
    "clickImageHint": "Cliquez sur un point de l'image, puis associez-le sur la carte.",
    "pixelPicked": "Point de l'image : {{x}}, {{y}}",
    "linkOnMap": "Associer sur la carte",
    "zoomIn": "Zoomer",
    "zoomOut": "Dézoomer",
    "zoomReset": "Réinitialiser le zoom",
    "importGcps": "Importer",
    "exportGcps": "Exporter",
    "gcpsImported": "{{count}} point(s) de contrôle importé(s).",
    "gcpsReadError": "Impossible de lire les points de contrôle de ce fichier.",
    "gcpsOutsideImage": "Certains points de contrôle se trouvent en dehors de l'image chargée — ils proviennent peut-être d'une autre image.",
    "transformNeedsMore": "Cette transformation nécessite au moins {{min}} points de contrôle.",
    "gcps": "Points de contrôle ({{count}})",
    "needGcps": "Ajoutez au moins {{min}} points de contrôle pour géoréférencer.",
    "collinear": "Les points de contrôle sont colinéaires ou coïncidents — déplacez-en un hors de la ligne.",
    "cornersOutOfRange": "Cet ajustement place l'image en dehors des limites de carte valides. Ajustez les points de contrôle.",
    "residual": "Résidu",
    "rms": "RMS {{rms}} m",
    "opacity": "Opacité de la superposition",
    "addToMap": "Ajouter à la carte",
    "clear": "Effacer",
    "defaultName": "Image géoréférencée",
    "exportTiff": "Exporter en GeoTIFF",
    "exportTiffButton": "Exporter",
    "exportTiffHint": "Déforme l'image en GeoTIFF Cloud-Optimized dans votre navigateur (GDAL/WASM). Le moteur se télécharge à la première utilisation.",
    "transform": {
      "affine": "Affine (linéaire)",
      "polynomial": "Polynomiale (ordre 2)",
      "tps": "Spline à plaque mince"
    },
    "exporting": "Exportation du GeoTIFF… (chargement de GDAL à la première utilisation)",
    "exported": "GeoTIFF exporté.",
    "exportFailed": "Échec de l'exportation du GeoTIFF. Consultez la console pour plus de détails."
  },
  "collaborate": {
    "title": "Collaboration en direct",
    "description": "Partagez une session en direct afin que d'autres personnes puissent voir et modifier cette carte avec vous en temps réel.",
    "displayName": "Votre nom",
    "displayNamePlaceholder": "p. ex. Alex",
    "color": "Votre couleur",
    "startHeading": "Démarrer une session",
    "joinHeading": "Rejoindre une session",
    "mode": "Qui peut modifier",
    "modeCoEdit": "Tout le monde peut modifier",
    "modeViewOnly": "Vous seul pouvez modifier (les autres regardent)",
    "start": "Démarrer la session",
    "join": "Rejoindre",
    "joinSession": "Rejoindre la session",
    "invitedHeading": "Vous avez été invité(e)",
    "invitedDescription": "Choisissez votre nom et votre couleur, puis rejoignez la session en direct de l'hôte.",
    "startInstead": "Démarrer une nouvelle session à la place",
    "sessionCode": "Code de session",
    "sessionCodePlaceholder": "Entrez un code",
    "shareLink": "Lien de partage",
    "scanToJoin": "Scanner pour rejoindre",
    "copyLink": "Copier le lien",
    "copyCode": "Copier le code",
    "copied": "Copié",
    "participants": "Participants ({{count}})",
    "host": "Hôte",
    "you": "vous",
    "guest": "Invité",
    "connectFailed": "Impossible de se connecter au serveur de collaboration.",
    "copyFailed": "Impossible de copier dans le presse-papiers.",
    "connecting": "Connexion…",
    "reconnecting": "Reconnexion…",
    "connected": "Session en direct active",
    "followHost": "Suivre la vue de l'hôte",
    "goToMap": "Aller à la carte et collaborer",
    "goToMapViewOnly": "Aller à la carte et regarder",
    "collapseRoster": "Réduire la liste des participants",
    "manageSession": "Gérer la session",
    "sessionStatusTooltip": "Session de collaboration en direct. Cliquez pour voir qui est connecté.",
    "announcements": "Annonces de session",
    "participantJoined": "{{name}} a rejoint la session",
    "participantLeft": "{{name}} a quitté la session",
    "leave": "Quitter la session",
    "switchToCoEdit": "Autoriser tout le monde à modifier",
    "switchToViewOnly": "Passer en lecture seule",
    "nameRequired": "Entrez votre nom pour continuer.",
    "codeRequired": "Entrez un code de session pour rejoindre.",
    "canEdit": "Peut modifier",
    "viewOnly": "Lecture seule",
    "allowEdit": "Autoriser cette personne à modifier",
    "setViewOnly": "Passer cette personne en lecture seule",
    "chatLog": "Discussion de session",
    "chatCompose": "Saisir un message",
    "chatEmpty": "Pas encore de messages.",
    "chatPlaceholder": "Envoyer un message…",
    "chatSend": "Envoyer le message",
    "chatAttachLocation": "Joindre l'emplacement actuel de la carte",
    "chatLocationAttached": "Emplacement joint (cliquez pour retirer)",
    "chatGoToLocation": "Aller à cet emplacement",
    "sessionStatusUnread_one": "Session de collaboration en direct, {{count}} message non lu. Cliquez pour voir qui est connecté et discuter.",
    "sessionStatusUnread_other": "Session de collaboration en direct, {{count}} messages non lus. Cliquez pour voir qui est connecté et discuter."
  },
  "share": {
    "title": "Partager le projet",
    "description": "Téléversez le projet actuel vers {{shareHost}} et obtenez un lien partageable.",
    "setupIntro": "Connectez votre compte {{shareHost}} avant de téléverser.",
    "step1Title": "1. Obtenir un jeton API",
    "step1Description": "Connectez-vous à {{shareHost}}, puis créez un jeton sous Paramètres → Jetons API.",
    "getToken": "Obtenir un jeton API",
    "step2Title": "2. Ajouter le jeton à GeoLibre",
    "step2Description": "Collez le jeton dans Paramètres → Variables d'environnement sur cet appareil.",
    "configureToken": "Configurer le jeton local",
    "liveAt": "Votre projet est en ligne à l'adresse :",
    "copyLink": "Copier le lien",
    "open": "Ouvrir",
    "done": "Terminé",
    "projectTitle": "Titre du projet",
    "titlePlaceholder": "Nommez votre projet",
    "titleRequired": "Entrez un titre de projet avant de partager.",
    "visibility": "Visibilité",
    "visibilityUnlisted": "Non répertorié (toute personne ayant le lien)",
    "visibilityPublic": "Public (répertorié dans la galerie)",
    "visibilityPrivate": "Privé (vous seul)",
    "shareButton": "Partager",
    "sharing": "Partage en cours…",
    "errorFallback": "Impossible de partager le projet.",
    "usernameRequired": "Définissez un nom d'utilisateur sur votre compte {{shareHost}} avant de partager. Ouvrez les paramètres de votre compte pour en choisir un, puis réessayez.",
    "openAccountSettings": "Ouvrir les paramètres du compte",
    "credentialsRemoved": "{{count}} champ(s) d’identifiants n’ont pas été inclus. Les destinataires doivent fournir leurs propres identifiants ou utiliser une référence gérée par un courtier."
  },
  "gallery": {
    "title": "Galerie de projets",
    "description": "Parcourez les projets publics partagés sur {{shareHost}} et ouvrez-en un dans GeoLibre.",
    "searchPlaceholder": "Filtrer les projets chargés par titre, auteur ou étiquette",
    "loading": "Chargement des projets…",
    "loadingMore": "Chargement supplémentaire…",
    "loadMore": "Charger plus",
    "empty": "Aucun projet public à afficher pour le moment.",
    "noMatches": "Aucun projet chargé ne correspond à votre filtre.",
    "errorFallback": "Impossible de charger la galerie de projets.",
    "errorTimeout": "La galerie de projets a expiré. Veuillez réessayer.",
    "errorNetwork": "Impossible de joindre {{shareHost}}. Vérifiez votre connexion internet.",
    "errorHttp": "Impossible de charger la galerie (HTTP {{status}}).",
    "errorInvalidResponse": "Impossible de charger la galerie (réponse du serveur invalide).",
    "errorUnauthorized": "Votre jeton API {{shareHost}} est invalide ou expiré. Mettez-le à jour dans Paramètres.",
    "errorUsernameRequired": "Définissez un nom d'utilisateur sur votre compte {{shareHost}} avant de charger vos projets.",
    "errorNotConfigured": "Aucun serveur de partage de projets n'est configuré pour ce déploiement.",
    "retry": "Réessayer",
    "open": "Ouvrir",
    "openCopy": "Ouvrir une copie",
    "opening": "Ouverture…",
    "openingCopy": "Ouverture de la copie…",
    "openOnWeb": "Voir sur le web",
    "openError": "Impossible d'ouvrir ce projet.",
    "byAuthor": "par {{author}}",
    "views_one": "{{count}} vue",
    "views_other": "{{count}} vues",
    "untitled": "Projet sans titre",
    "noThumbnail": "Aucun aperçu",
    "resizeDialog": "Redimensionner la galerie",
    "scopeFeatured": "En vedette",
    "scopeAll": "Tous les projets",
    "scopeMine": "Mes projets",
    "signedOutHint": "Ajoutez un jeton API {{shareHost}} dans Paramètres pour voir vos propres projets non répertoriés et privés.",
    "emptyFeatured": "Pas encore de projets en vedette.",
    "emptyMine": "Vous n'avez encore partagé aucun projet.",
    "visibilityUnlisted": "Non répertorié",
    "visibilityPrivate": "Privé"
  },
  "template": {
    "saveTitle": "Enregistrer comme modèle",
    "saveDescription": "Enregistrez ce projet préconfiguré comme modèle réutilisable dans votre bibliothèque personnelle.",
    "defaultName": "Modèle sans titre",
    "nameLabel": "Nom du modèle",
    "namePlaceholder": "p. ex. Carte standard de l'organisation",
    "descriptionLabel": "Description (facultatif)",
    "descriptionPlaceholder": "p. ex. Fond de carte, styles et disposition de tableau de bord préconfigurés pour les cartes d'équipe",
    "stripDataLayersLabel": "Supprimer le contenu des couches",
    "stripDataLayersDesc": "Conserver le fond de carte, les groupes de couches, les styles, la légende, les widgets et la disposition, mais supprimer le contenu des couches de données.",
    "saveAction": "Enregistrer dans la bibliothèque de modèles"
  },
  "language": {
    "label": "Langue",
    "description": "Choisissez la langue utilisée pour l'interface."
  },
  "printLayout": {
    "title": "Mise en page d'impression",
    "description": "Composez une carte prête à imprimer avec un titre, une légende, une échelle et une flèche du nord, puis exportez-la en PNG ou en PDF.",
    "preview": "Aperçu",
    "resizeControls": "Redimensionner le panneau de contrôles",
    "resizeDialog": "Redimensionner la boîte de dialogue",
    "recapture": "Recapturer la carte",
    "copyToClipboard": "Copier dans le presse-papiers",
    "copied": "Copié",
    "exportPng": "Exporter en PNG",
    "exportPdf": "Exporter en PDF",
    "titleLabel": "Titre",
    "titlePlaceholder": "Titre de la carte",
    "subtitleLabel": "Sous-titre",
    "subtitlePlaceholder": "Sous-titre facultatif",
    "size": "Taille",
    "sizeGroup": {
      "paper": "Papier",
      "screen": "Écran / numérique"
    },
    "sizeCustom": "Personnalisé…",
    "orientation": "Orientation",
    "portrait": "Portrait",
    "landscape": "Paysage",
    "width": "Largeur",
    "height": "Hauteur",
    "unit": "Unité",
    "titlePlacement": "Placement du titre",
    "placement": {
      "outside": "Hors du cadre",
      "inside": "Dans le cadre"
    },
    "alignment": "Alignement",
    "align": {
      "left": "Gauche",
      "center": "Centre",
      "right": "Droite"
    },
    "mapElements": "Éléments de carte",
    "element": {
      "title": "Titre",
      "subtitle": "Sous-titre",
      "legend": "Légende",
      "scaleBar": "Échelle",
      "northArrow": "Flèche du nord",
      "groupNavigation": "Grouper la flèche du nord et l'échelle",
      "footer": "Texte de pied de page",
      "date": "Date",
      "attribution": "Inclure l'attribution GeoLibre",
      "pageBorder": "Bordure de page",
      "infoBlock": "Bloc d'information (cartouche)",
      "colorbar": "Barre de couleur",
      "customLegend": "Légende personnalisée",
      "dataTable": "Table d'attributs",
      "dataChart": "Graphique"
    },
    "dataBlocks": {
      "layer": "Couche",
      "titleLabel": "En-tête",
      "position": "Position",
      "filterToPage": "Seulement les entités dans l'emprise de la page",
      "filterToPageHint": "S'applique aux pages d'atlas et à une emprise d'impression dessinée ; sinon, la couche entière est utilisée.",
      "filterToAtlasFeature": "Seulement l’entité courante de l’atlas",
      "filterToAtlasFeatureHint": "Disponible lorsque la table utilise la couche de couverture de l’atlas. Ce filtre est prioritaire sur l’emprise de la page."
    },
    "dataTable": {
      "columns": "Colonnes",
      "columnsHint": "Les {{count}} premiers champs sont sélectionnés par défaut. Cochez des colonnes pour personnaliser.",
      "maxRows": "Lignes max",
      "moreRows_one": "+{{count}} de plus",
      "moreRows_other": "+{{count}} de plus",
      "noRows": "Aucune ligne à afficher avec les paramètres actuels."
    },
    "dataChart": {
      "type": "Type de graphique",
      "typeBar": "Barres",
      "typePie": "Secteurs",
      "typeLine": "Courbe",
      "categoryField": "Champ de catégorie",
      "aggregation": "Agrégation",
      "aggCount": "Nombre",
      "aggSum": "Somme",
      "aggMean": "Moyenne",
      "valueField": "Champ de valeur",
      "noNumericFields": "Cette couche n'a aucun champ numérique à agréger.",
      "noData": "Aucune donnée de graphique avec les paramètres actuels."
    },
    "customLegend": {
      "title": "Titre de la légende",
      "color": "Couleur",
      "itemLabel": "Étiquette",
      "position": "Position",
      "addItem": "Ajouter un élément",
      "removeItem": "Supprimer l'élément",
      "importFromDict": "Importer depuis un dictionnaire",
      "import": "Importer",
      "importError": "Entrez un dictionnaire {\"étiquette\": \"couleur\"} valide."
    },
    "colorbar": {
      "colormap": "Palette de couleurs",
      "min": "Valeur min",
      "max": "Valeur max",
      "label": "Étiquette",
      "labelPlaceholder": "p. ex. Altitude (m)",
      "orientation": "Orientation",
      "vertical": "Verticale",
      "horizontal": "Horizontale",
      "position": "Position",
      "length": "Longueur"
    },
    "position": {
      "topLeft": "Haut gauche",
      "topRight": "Haut droite",
      "bottomLeft": "Bas gauche",
      "bottomRight": "Bas droite"
    },
    "footerTextLabel": "Texte de pied de page",
    "footerPlaceholder": "Texte de pied de page personnalisé",
    "margin": "Marge",
    "marginOption": {
      "normal": "Normale",
      "narrow": "Étroite",
      "none": "Aucune (sans bordure)"
    },
    "mapBackground": "Arrière-plan de la carte",
    "scaleLabel": "Échelle (1:N)",
    "scalePlaceholder": "p. ex. 25000",
    "scalePresets": "Préréglages…",
    "scalePresetsAria": "Préréglage d'échelle",
    "extent": {
      "label": "Étendue d'impression",
      "draw": "Dessiner l'étendue sur la carte",
      "redraw": "Redessiner l'étendue sur la carte",
      "useViewport": "Utiliser la fenêtre active",
      "useCustom": "Rogner à l'étendue personnalisée",
      "clear": "Effacer l'étendue",
      "hint": "Faites glisser un cadre sur la carte pour définir la zone d'impression exacte. Maintenez Maj pour respecter les proportions de la page."
    },
    "info": {
      "author": "Auteur",
      "authorPlaceholder": "Auteur ou organisation",
      "project": "N° de projet",
      "projectPlaceholder": "Numéro de référence",
      "crs": "SRC",
      "crsPlaceholder": "p. ex. EPSG:4326",
      "scale": "Échelle",
      "revision": "Révision",
      "revisionPlaceholder": "p. ex. Rév 01"
    },
    "borderColor": "Couleur de bordure",
    "borderWidth": "Épaisseur de bordure",
    "mapBorderColor": "Couleur du cadre de carte",
    "mapBorderWidth": "Épaisseur du cadre de carte",
    "errors": {
      "mapNotReady": "La carte n'est pas encore prête. Réessayez dans un instant.",
      "captureFailed": "Impossible de capturer l'image de la carte.",
      "captureFirst": "Capturez la carte avant d'exporter.",
      "exportFailed": "Échec de l'exportation en {{format}}.",
      "clipboardFailed": "Impossible de copier la mise en page dans le presse-papiers.",
      "scaleOutOfRange": "Cette échelle est en dehors de la plage accessible par la vue actuelle ; affichage de l'échelle disponible la plus proche."
    },
    "legend": {
      "section": "Légende",
      "titleLabel": "Titre de la légende",
      "defaultTitle": "Légende",
      "groupByLayer": "Grouper les classes par couche",
      "empty": "Aucune couche visible à inclure dans la légende.",
      "labelPlaceholder": "Étiquette",
      "moveUp": "Déplacer l'entrée vers le haut",
      "moveDown": "Déplacer l'entrée vers le bas",
      "showEntry": "Afficher l'entrée",
      "hideEntry": "Masquer l'entrée",
      "moreItems_one": "+{{count}} de plus",
      "moreItems_other": "+{{count}} de plus"
    },
    "atlas": {
      "section": "Atlas (série de cartes)",
      "enable": "Générer une série de cartes multipage",
      "coverageLayer": "Couche de couverture",
      "coverage": "Couverture",
      "coveragePerFeature": "Une page par entité",
      "coverageAlongLine": "Pages le long d'une ligne",
      "segmentLength": "Longueur de segment (km)",
      "segmentRequired": "Entrez une longueur de segment d'au moins 0,1 km.",
      "segmentTruncated": "Série plafonnée à {{count}} pages. Augmentez la longueur de segment.",
      "noLineFeatures": "La couche de couverture n'a aucune entité linéaire.",
      "noLayers": "Aucune couche vectorielle avec des entités chargées. Ajoutez d'abord une couche GeoJSON ou une autre couche vectorielle locale.",
      "nameField": "Champ du nom de page",
      "nameFieldNone": "Numéro d'entité",
      "extentMode": "Emprise de la page",
      "extentMargin": "Marge autour de l'entité",
      "extentScale": "Échelle fixe",
      "marginLabel": "Marge (%)",
      "maskOutside": "Masquer la zone hors de l’entité courante",
      "maskOutsideHint": "Applique un remplissage inversé translucide pour mettre en évidence l’entité courante de l’atlas.",
      "scaleLabel": "Échelle",
      "scaleRequired": "Entrez une échelle supérieure à zéro.",
      "sortField": "Trier par",
      "sortNone": "Ordre des couches",
      "sortOrder": "Ordre",
      "sortAsc": "Croissant",
      "sortDesc": "Décroissant",
      "filterLabel": "Filtre",
      "filterPlaceholder": "p. ex. POP2000 > 100000 and ST = \"CA\"",
      "filterError": "Impossible d'analyser le filtre. Utilisez des comparaisons champ-opérateur-valeur (=, !=, >, >=, <, <=, contains) reliées par « and ».",
      "filenamePattern": "Nom de fichier de page (export ZIP)",
      "pages_one": "{{count}} page",
      "pages_other": "{{count}} pages",
      "noPages": "Aucune entité ne correspond au filtre actuel.",
      "pageOf": "Page {{current}} sur {{total}}",
      "prevPage": "Page d'atlas précédente",
      "nextPage": "Page d'atlas suivante",
      "exportZip": "Exporter un ZIP de PNG",
      "exportPdfPages_one": "Exporter en PDF ({{count}} page)",
      "exportPdfPages_other": "Exporter en PDF ({{count}} pages)",
      "exporting": "Export de la page {{current}} sur {{total}}...",
      "tokensHint": "Les jetons {atlas.name}, {atlas.pagenumber}, {atlas.total} et {atlas.attr:FIELD} sont remplacés pour chaque page dans le titre, le sous-titre, le pied de page et le nom de fichier de page.",
      "alongLineHint": "Les pages suivent chaque ligne dans l'ordre ; km_start, km_end, segment et segments sont disponibles comme jetons {atlas.attr:FIELD}."
    }
  },
  "kml": {
    "importFailed": "Impossible d’importer le KML/KMZ.",
    "timeOverlayGroup": "Animation de superposition temporelle"
  },
  "map": {
    "boundsRestricted": "Limites verrouillées",
    "boundsRestrictedTooltip": "Les limites de la carte sont restreintes. Vous pouvez modifier cela dans Paramètres.",
    "directionsMode": {
      "title": "Mode itinéraire actif",
      "hint": "Cliquez sur la carte pour ajouter des points de cheminement. Faites glisser un point pour le déplacer, ou cliquez dessus pour le supprimer. Les itinéraires se mettent à jour automatiquement.",
      "removeLast": "Supprimer le dernier",
      "clear": "Effacer",
      "exit": "Quitter",
      "calculating": "Calcul de l'itinéraire...",
      "totalDistance": "Distance",
      "estimatedTime": "Temps estimé",
      "segment": "Segment {{index}}",
      "metricsUnavailable": "Métriques d'itinéraire indisponibles",
      "distanceKilometers": "{{value}} km",
      "distanceMeters": "{{value}} m",
      "durationLessThanMinute": "< 1 min",
      "durationMinutes": "{{value}} min",
      "durationHours": "{{value}} h",
      "durationHoursMinutes": "{{hours}} h {{minutes}} min",
      "waypointCount_zero": "Aucun point de cheminement placé pour le moment",
      "waypointCount_one": "{{count}} point de cheminement placé",
      "waypointCount_other": "{{count}} points de cheminement placés"
    },
    "reverseGeocodeMode": {
      "title": "Mode géocodage inverse actif",
      "hint": "Cliquez n'importe où sur la carte pour rechercher l'adresse à ce point.",
      "exit": "Quitter"
    },
    "pixelTimeSeriesMode": {
      "start": "Série temporelle de pixels"
    }
  },
  "terrainSettings": {
    "title": "Exagération du relief",
    "description": "Ajustez l'exagération verticale du relief 3D. Des valeurs plus élevées rendent les collines et les montagnes plus abruptes.",
    "label": "Exagération verticale",
    "controlLabel": "Basculer le relief (double-cliquez pour l'exagération)",
    "reset": "Réinitialiser",
    "done": "Terminé"
  },
  "pixelTimeSeries": {
    "title": "Série temporelle de pixels",
    "empty": "Cliquez sur un pixel de la carte pour tracer sa valeur dans le temps. Ajoutez d'autres pixels pour comparer.",
    "band": "Bande",
    "bandOption": "Bande {{index}}",
    "pointLabel": "Point {{number}}",
    "pickPoints": "Choisir des points",
    "stopPicking": "Arrêter la sélection",
    "clearAll": "Tout effacer",
    "removePoint": "Supprimer {{label}}",
    "close": "Fermer",
    "erroredExcluded": "L'export exclut {{n}} lecture(s) échouée(s).",
    "querying": "Lecture des valeurs de pixels sur la chronologie...",
    "progress": "Lecture {{done}} sur {{total}}...",
    "noValues": "Aucune valeur pour la bande sélectionnée à ces emplacements (en dehors du raster ou toutes les étapes sont nodata).",
    "truncated": "Affichage de {{kept}} sur {{total}} étapes de la chronologie (sous-échantillonné pour limiter les lectures).",
    "chartAria": "Graphique linéaire de la valeur de pixel dans le temps",
    "yAxis": "Axe Y",
    "yMin": "Min",
    "yMax": "Max",
    "axisAuto": "auto",
    "gapNote": "Les segments en pointillés couvrent des dates sans valeur (nodata ou hors de la couverture).",
    "exportCsv": "Exporter en CSV",
    "exportGeoParquet": "Exporter en GeoParquet"
  },
  "basemapExtract": {
    "title": "Extraire un fond de carte hors ligne",
    "url": "URL du fond de carte",
    "urlPlaceholder": "https://data.source.coop/…/planet.pmtiles",
    "useView": "Utiliser la vue de la carte",
    "drawBbox": "Dessiner sur la carte",
    "drawing": "Dessin…",
    "drawHint": "Faites glisser un cadre sur la carte pour définir la zone d'extraction.",
    "clearBbox": "Effacer la zone dessinée",
    "north": "Nord",
    "south": "Sud",
    "west": "Ouest",
    "east": "Est",
    "bboxHint": "Entrez une boîte englobante valide : ouest < est et sud < nord, dans [-180, 180] et [-90, 90].",
    "minZoom": "Zoom minimum",
    "maxZoom": "Zoom maximum",
    "zoomHint": "Les niveaux de zoom doivent être des nombres entiers avec min ≤ max (0–30). Les niveaux supérieurs au maximum de l'archive sont ignorés.",
    "errorNoSourceLayers": "Cette archive vectorielle n'a pas de métadonnées de couche, elle ne peut donc pas être affichée. Essayez une autre archive.",
    "savedTitle": "Fonds de carte enregistrés",
    "openFile": "Ouvrir un fichier…",
    "savedEmpty": "Aucun fond de carte enregistré pour le moment. Extrayez-en un ci-dessus, ou ouvrez un fichier .pmtiles.",
    "errorNotBasemap": "Ce fichier n'est pas un fond de carte vectoriel Protomaps, il ne peut donc pas être stylisé.",
    "apply": "Utiliser comme fond de carte",
    "rename": "Renommer",
    "delete": "Supprimer",
    "confirmDelete": "Supprimer ?",
    "style": "Style du fond de carte",
    "flavor": {
      "light": "Clair",
      "dark": "Sombre",
      "white": "Blanc",
      "grayscale": "Niveaux de gris",
      "black": "Noir"
    },
    "flavorOverlay": "Aucun (couche de superposition)",
    "styleHintBasemap": "Affiche l'extrait comme un fond de carte Protomaps stylisé (routes, eau, étiquettes), hors ligne.",
    "styleHintOverlay": "Ajoute l'extrait comme simple couche de superposition au lieu d'un fond de carte stylisé.",
    "phaseDirectories": "Lecture des répertoires de l'archive…",
    "phaseData": "Téléchargement des tuiles…",
    "resize": "Redimensionner le panneau",
    "estimatedSize": "≈ {{size}} · {{tiles}} tuiles",
    "estimatedSizeLarge": "Téléchargement volumineux : ≈ {{size}} · {{tiles}} tuiles",
    "planWarning": "Cet extrait représente environ {{size}} sur {{tiles}} tuiles et est assemblé en mémoire. Continuer ?",
    "planContinue": "Continuer",
    "extract": "Extraire",
    "extracting": "Extraction…",
    "successSaved": "Enregistré dans {{path}} et ajouté à la carte.",
    "successAdded": "Ajouté à la carte (le fichier n'a pas été enregistré).",
    "successAddedSaveFailed": "Ajouté à la carte, mais l'enregistrement sur le disque a échoué : {{error}}",
    "successBasemapSaved": "Enregistré dans {{path}} et défini comme fond de carte.",
    "successBasemapApplied": "Défini comme fond de carte (le fichier n'a pas été enregistré).",
    "successBasemapSaveFailed": "Défini comme fond de carte, mais l'enregistrement sur le disque a échoué : {{error}}"
  },
  "rasterSubset": {
    "title": "Extraire un sous-ensemble",
    "drawBbox": "Dessiner un rectangle d'emprise",
    "drawing": "Dessin en cours…",
    "drawHint": "Cliquez et faites glisser sur la carte pour dessiner la zone à extraire. Appuyez sur Échap pour annuler.",
    "useView": "Utiliser la vue",
    "north": "Nord",
    "south": "Sud",
    "west": "Ouest",
    "east": "Est",
    "bboxHint": "Entrez une zone valide : ouest/est entre -180 et 180, sud/nord entre -90 et 90, avec ouest < est et sud < nord.",
    "bboxAntimeridianHint": "L'ouest doit être inférieur à l'est. Les zones traversant le méridien 180° ne sont pas prises en charge ; divisez-les en deux extractions.",
    "zoom": "Niveau de zoom",
    "zoomHint": "Entrez un niveau de zoom entier entre 0 et 30.",
    "resolution": "Résolution",
    "resolutionPlaceholder": "Native",
    "resolutionHint": "Taille de pixel en sortie, dans les unités du CRS de sortie. Laissez vide pour conserver la résolution source.",
    "advanced": "Options avancées",
    "outputCrs": "CRS de sortie (EPSG)",
    "outputCrsPlaceholder": "Identique à l'entrée",
    "nodata": "Valeur nodata",
    "nodataPlaceholder": "Aucune",
    "additionalArgs": "Options supplémentaires",
    "additionalArgsPlaceholder": "level=2\nwidth=512",
    "additionalArgsHint": "Une paire clé=valeur par ligne, p. ex. level, width, height.",
    "errorResolution": "La résolution doit être un nombre positif.",
    "errorOutputCrs": "Le CRS de sortie doit être un code EPSG positif.",
    "errorNodata": "Nodata doit être un nombre.",
    "errorAdditionalArgs": "Les options supplémentaires doivent être une paire clé=valeur par ligne.",
    "extract": "Extraire et enregistrer",
    "extracting": "Extraction…",
    "success": "Sous-ensemble enregistré."
  },
  "mapGrid": {
    "layers": "Couches",
    "layersLabel": "Visibilité des couches pour la carte {{number}}",
    "noLayers": "Pas encore de couches",
    "labelPlaceholder": "Étiquette",
    "labelLabel": "Étiquette pour la carte {{number}}",
    "removePane": "Supprimer la carte {{number}}",
    "show3d": "Afficher la carte {{number}} en globe 3D",
    "show2d": "Afficher la carte {{number}} en carte 2D",
    "only2d": "2D uniquement"
  },
  "mapContextMenu": {
    "copyCoordinatesHint": "Copier les coordonnées dans le presse-papiers",
    "quickActions": "Actions rapides",
    "whatsHere": "Qu'y a-t-il ici ?",
    "copyGeoJson": "Copier en tant que GeoJSON",
    "centerHere": "Centrer la carte ici",
    "zoomInHere": "Zoomer ici",
    "viewInGoogleMaps": "Voir dans Google Maps",
    "viewInGoogleEarth": "Voir dans Google Earth"
  },
  "quickAnalysis": {
    "menu": "Analyse rapide",
    "bufferHere": "Zone tampon de {{distance}} ici",
    "bufferFeatures": "Zone tampon de {{distance}} sur toutes les entités",
    "driveTimeHere": "Temps de trajet en voiture depuis ici ({{contours}} min)",
    "walkTimeHere": "Temps de marche depuis ici ({{contours}} min)",
    "centroids": "Centroïdes",
    "convexHull": "Enveloppe convexe",
    "boundingBox": "Boîte englobante",
    "openInProcessing": "Ouvrir dans Traitement…",
    "bufferLayerName": "Zone tampon {{distance}}",
    "bufferOfLayerName": "{{name}} zone tampon {{distance}}",
    "driveTimeLayerName": "Temps de trajet en voiture",
    "walkTimeLayerName": "Temps de marche",
    "centroidsLayerName": "{{name}} centroïdes",
    "convexHullLayerName": "{{name}} enveloppe convexe",
    "boundingBoxLayerName": "{{name}} boîte englobante",
    "running": "Exécution de {{tool}}…",
    "failed": "Échec de {{tool}}",
    "viewDetails": "Voir les détails",
    "unit": {
      "meters": "m",
      "kilometers": "km",
      "miles": "mi"
    }
  },
  "knowledgeCard": {
    "title": "Infos sur le lieu",
    "loading": "Recherche de ce lieu…",
    "empty": "Aucun article Wikipédia trouvé près de ce lieu.",
    "error": "Impossible de charger les infos du lieu. Veuillez réessayer.",
    "readMore": "En lire plus sur Wikipédia",
    "nearby": "Lieux à proximité",
    "attribution": "Contenu issu de Wikipédia, sous licence CC BY-SA.",
    "noticeTitle": "Les fiches de connaissances utilisent Wikipédia",
    "noticeDesc": "Ouvrir une fiche de connaissances envoie les coordonnées du lieu cliqué (et le titre de tout article à proximité que vous ouvrez) à l'API publique de Wikipédia pour récupérer un résumé et une photo — vos coordonnées quittent votre appareil pour ces requêtes."
  },
  "onboarding": {
    "title": "Bienvenue dans GeoLibre",
    "description": "Choisissez votre niveau d'expérience pour adapter l'interface. Vous pouvez modifier cela à tout moment dans Paramètres → Interface.",
    "level": {
      "beginner": {
        "title": "Débutant",
        "description": "Afficher uniquement les sources de données et outils essentiels."
      },
      "intermediate": {
        "title": "Intermédiaire",
        "description": "Afficher les sources de données, services et extensions courants."
      },
      "advanced": {
        "title": "Avancé",
        "description": "Afficher tout ce que GeoLibre a à offrir."
      }
    },
    "showEverything": "Ignorer — tout afficher"
  },
  "settings": {
    "title": "Paramètres",
    "description": "Configurez les préférences du projet et les paramètres d'exécution.",
    "saveButton": "Enregistrer les paramètres",
    "section": {
      "map": "Carte",
      "layout": "Disposition",
      "appearance": "Apparence",
      "interface": "Interface",
      "geocoding": "Géocodage",
      "ai": "Fournisseurs d'IA",
      "environment": "Environnement",
      "updates": "Mises à jour"
    },
    "menu": {
      "mapPreferences": "Préférences de carte",
      "layoutSettings": "Paramètres de disposition",
      "appearanceSettings": "Paramètres d'apparence",
      "interfaceSettings": "Paramètres d'interface",
      "geocoding": "Géocodage",
      "ai": "Fournisseurs d'IA",
      "environmentVariables": "Variables d'environnement",
      "updates": "Paramètres de mise à jour",
      "managePlugins": "Gérer les extensions",
      "styleManager": "Gestionnaire de styles",
      "urlOverrideNote": "Les paramètres de disposition dans l'URL remplacent les paramètres enregistrés."
    },
    "updates": {
      "title": "Mises à jour du logiciel",
      "description": "Contrôlez la manière dont GeoLibre vérifie les nouvelles versions au démarrage de l'application de bureau.",
      "checkOnStartup": "Vérifier les mises à jour au démarrage",
      "checkOnStartupHint": "Lorsque cette option est activée, GeoLibre vérifie la présence d'une nouvelle version à chaque démarrage de l'application. Désactivez-la pour un flux de travail entièrement hors ligne.",
      "notificationLevel": "M'informer des",
      "notificationLevelHint": "Choisissez les types de versions qui déclenchent une notification au démarrage.",
      "level": {
        "all": "Toutes les versions (majeures, mineures et correctifs)",
        "minor": "Versions majeures et mineures uniquement",
        "major": "Versions majeures uniquement"
      }
    },
    "map": {
      "constraintsTitle": "Contraintes de carte",
      "restrictBounds": "Restreindre l'étendue de la carte",
      "west": "Ouest",
      "south": "Sud",
      "east": "Est",
      "north": "Nord",
      "useCurrentView": "Utiliser la vue actuelle",
      "useCurrentViewHint": "Capture l'étendue actuelle de la carte et active la restriction de l'étendue.",
      "useCurrentViewGlobeHint": "Passez à la projection de Mercator avant d'utiliser ceci. Dans la projection Globe, la carte peut encore se déplacer légèrement au-delà des limites capturées.",
      "minZoom": "Zoom minimum",
      "maxZoom": "Zoom maximum",
      "maxPitch": "Inclinaison maximale",
      "renderWorldCopies": "Afficher les copies du monde",
      "ellipsoid": "Corps céleste",
      "ellipsoidHint": "Définit le rayon utilisé pour les mesures de distance, de surface et d'échelle. Choisissez un fond de carte planétaire correspondant dans Ajouter des données.",
      "scaleUnit": "Unités de la barre d'échelle",
      "scaleUnitMetric": "Métrique (m / km)",
      "scaleUnitImperial": "Impérial (ft / mi)",
      "scaleUnitNautical": "Nautique (nmi)",
      "scaleUnitHint": "Choisissez les unités affichées sur la barre d'échelle en bas de la carte.",
      "errorBoundsUnavailable": "L'étendue de la carte n'est pas encore disponible."
    },
    "layout": {
      "title": "Disposition",
      "description": "Visibilité de l'espace de travail et présentation de la barre d'outils.",
      "toolbar": "Barre d'outils",
      "panels": "Panneaux",
      "showToolbarLabels": "Afficher les étiquettes de la barre d'outils",
      "showProjectInfo": "Afficher les infos du projet",
      "showProjectInfoToolbar": "Afficher les infos du projet dans la barre d'outils",
      "showLayersPanel": "Afficher le panneau Couches",
      "showStylePanel": "Afficher le panneau Style",
      "showBrowserPanel": "Afficher le panneau Explorateur",
      "showCommentsPanel": "Afficher le panneau Commentaires",
      "showAttributePanel": "Afficher le panneau Attributs",
      "urlParamsNote": "Les paramètres de disposition dans l'URL s'appliquent toujours lorsqu'ils sont présents dans les liens de visualisation partagés."
    },
    "appearance": {
      "title": "Apparence",
      "description": "Choisissez un mode clair ou sombre et une couleur d'accentuation qui s'applique par-dessus.",
      "themeMode": "Mode",
      "mode": {
        "light": "Clair",
        "dark": "Sombre"
      },
      "accentColor": "Couleur d'accentuation",
      "custom": "Personnalisé",
      "customColor": "Couleur personnalisée",
      "customColorHex": "Code hexadécimal de la couleur personnalisée",
      "scheme": {
        "blue": "Bleu",
        "violet": "Violet",
        "emerald": "Émeraude",
        "rose": "Rose",
        "amber": "Ambre"
      }
    },
    "interface": {
      "title": "Profil d'interface",
      "description": "Choisissez un niveau d'expérience pour simplifier l'interface. Rien n'est supprimé, vous pouvez donc changer de niveau ou réactiver des éléments ici à tout moment.",
      "presets": "Niveau d'expérience",
      "presetsHint": "Débutant, Intermédiaire et Avancé appliquent instantanément une disposition organisée. Modifier un élément ci-dessous bascule vers Personnalisé, ou cliquez sur Personnalisé pour conserver la configuration actuelle en mode personnalisé.",
      "level": {
        "beginner": "Débutant",
        "intermediate": "Intermédiaire",
        "advanced": "Avancé",
        "custom": "Personnalisé"
      },
      "dataSources": "Sources de données",
      "plugins": "Extensions",
      "menus": "Menus",
      "lockedNote": "Ce profil d'interface est géré par votre administrateur et ne peut pas être modifié."
    },
    "env": {
      "tokenTitle": "Jeton API Share.GeoLibre",
      "tokenDescription": "Projet > Partager utilise ce jeton pour téléverser vos cartes vers {{shareHost}}. Ouvrez <tokenLink>{{shareHost}}/settings</tokenLink>, créez un jeton sous Paramètres > Jetons API, puis collez-le dans le champ ci-dessous.",
      "tokenStorageNote": "Stocké localement sur cet appareil et envoyé uniquement à {{shareHost}} pour authentifier les téléversements. Dans la version web, il partage le même stockage de navigateur que les autres données du site, alors révoquez-le sur {{shareHost}} si votre machine est compromise.",
      "tokenUnavailable": "Aucun serveur de partage de projets n'est configuré pour ce déploiement, aucun jeton API n'est donc nécessaire.",
      "tokenHostInvalid": "L'adresse du serveur de partage de projets de ce déploiement n'est pas valide, ce jeton ne peut donc pas être utilisé.",
      "tokenPlaceholder": "glb_…",
      "cesiumTokenTitle": "Jeton Cesium Ion",
      "cesiumTokenDescription": "Le globe 3D (un volet en vue partagée) utilise l'imagerie mondiale et le relief de Cesium Ion, qui nécessitent un jeton d'accès. Créez un compte gratuit sur <tokenLink>ion.cesium.com/tokens</tokenLink>, copiez votre jeton d'accès par défaut, puis collez-le ci-dessous. Sans jeton, le bouton du globe 3D est masqué.",
      "cesiumTokenStorageNote": "Stocké localement sur cet appareil (pas dans le fichier de projet, il n'est donc jamais partagé) et envoyé uniquement à Cesium Ion. Dans la version web, il partage le même stockage de navigateur que les autres données du site.",
      "cesiumTokenPlaceholder": "eyJhbGciOi…",
      "variablesTitle": "Variables d'environnement",
      "variablesCount_one": "{{count}} variable d'exécution activée.",
      "variablesCount_other": "{{count}} variables d'exécution activées.",
      "secretsWarning": "Les valeurs sont stockées en texte brut dans le fichier de projet et peuvent être exposées lorsque le projet est partagé. Évitez d'y mettre des secrets, sauf si le fichier de projet reste privé.",
      "empty": "Aucune variable d'environnement configurée.",
      "variableFallback": "variable",
      "enableAria": "Activer {{name}}",
      "nameAria": "Nom de la variable",
      "namePlaceholder": "VITE_EXAMPLE_KEY",
      "valueAria": "Valeur de la variable",
      "valuePlaceholder": "Valeur",
      "showValueAria": "Afficher la valeur de {{name}}",
      "hideValueAria": "Masquer la valeur de {{name}}",
      "removeAria": "Supprimer {{name}}",
      "errorNamePattern": "Les noms de variables d'environnement doivent commencer par une lettre ou un tiret bas et ne contenir que des lettres, des chiffres et des tirets bas.",
      "errorDuplicate": "La variable d'environnement « {{name}} » est en double.",
      "stripPromptTitle": "Retirer les identifiants ?",
      "stripPromptDesc": "Ce projet contient {{count}} champ(s) pouvant contenir des identifiants, comme des clés API, des en-têtes de requête ou des paramètres de plugins. Les retirer du fichier enregistré ? L’espace de travail actuel les conserve dans tous les cas.",
      "stripButton": "Retirer les identifiants",
      "keepButton": "Conserver dans le fichier"
    },
    "geocoding": {
      "title": "Géocodage",
      "description": "Choisissez le moteur de géocodage utilisé par Géocoder des adresses et Géocodage inverse. Nominatim est la valeur par défaut et ne nécessite aucune clé.",
      "provider": "Fournisseur",
      "requiresKey": "Ce fournisseur nécessite une clé API ou un jeton d'accès.",
      "optionalKey": "Le service hébergé nécessite une clé API ; une instance auto-hébergée n'en nécessite pas.",
      "noKey": "Ce fournisseur fonctionne sans clé API.",
      "apiKey": "Clé API",
      "apiKeyPlaceholder": "Collez la clé ou le jeton API du fournisseur",
      "toggleApiKey": "Basculer la visibilité de la clé API",
      "forwardEndpoint": "Point de terminaison direct (facultatif)",
      "reverseEndpoint": "Point de terminaison inverse (facultatif)",
      "email": "E-mail de contact (facultatif)",
      "emailPlaceholder": "vous@exemple.org",
      "emailHint": "Utilisé uniquement par Nominatim, qui recommande de le fournir pour aider à identifier votre application — envoyé uniquement s'il est renseigné.",
      "secretsWarning": "Les clés sont stockées en texte brut dans le fichier de projet et peuvent être exposées lorsque le projet est partagé. Elles sont également envoyées comme paramètres de requête, donc elles apparaissent dans les URL des requêtes de géocodage visibles dans les outils de développement du navigateur et tout journal de proxy.",
      "corsNote": "Google n'autorise pas officiellement les requêtes de navigateur vers son API de géocodage, donc les requêtes peuvent être bloquées sauf si elles passent par un proxy de même origine."
    },
    "ai": {
      "title": "Fournisseurs de l'assistant IA",
      "description": "Configurez les identifiants de l'assistant IA. Choisissez un fournisseur, remplissez les champs requis, puis Enregistrer. Un seul fournisseur configuré suffit pour commencer à discuter.",
      "providerLabel": "Fournisseur",
      "providerHint": "Choisissez un fournisseur pour afficher les champs exacts dont il a besoin.",
      "configuredMark": "(configuré)",
      "optionalMark": "(facultatif)",
      "statusReady": "{{provider}} est configuré et prêt à l'emploi.",
      "statusIncomplete": "Remplissez les champs requis ci-dessous pour activer {{provider}}.",
      "secretsNote": "Les identifiants sont enregistrés localement sur cet appareil, pas dans le fichier de projet que vous partagez, et persistent donc entre les redémarrages. Toute personne ayant accès à cet appareil pourrait les lire.",
      "getCredentials": "Où obtenir les identifiants {{provider}}",
      "showValue": "Afficher {{name}}",
      "hideValue": "Masquer {{name}}",
      "osEnvNote": "L'application de bureau lit aussi les clés API correspondantes depuis vos variables d'environnement système. Elles sont utilisées automatiquement et ne sont jamais enregistrées dans le fichier de projet — laissez un champ vide pour continuer à utiliser la valeur de l'environnement.",
      "osEnvField": "Lue depuis votre variable d'environnement système {{name}}.",
      "osEnvPlaceholder": "Définie dans votre environnement système",
      "newProfile": "Nouveau profil",
      "cancel": "Annuler",
      "addProfile": "Ajouter un profil",
      "profileName": "Nom du profil",
      "profileNamePlaceholder": "p. ex. Gemini pro, Ollama local",
      "profileCount_one": "{{count}} profil",
      "profileCount_other": "{{count}} profils",
      "noProfiles": "Aucun profil pour l'instant. Ajoutez-en un ci-dessous pour configurer l'assistant IA.",
      "setDefault": "Définir par défaut",
      "defaultProfile": "Par défaut",
      "edit": "Modifier",
      "deleteProfile": "Supprimer le profil",
      "backToProfiles": "← Retour aux profils",
      "saveProfile": "Enregistrer le profil",
      "profileEditSaveHint": "Enregistrez ou annulez vos modifications de profil ci-dessus, puis cliquez sur « Enregistrer les paramètres » pour valider toutes les modifications.",
      "field": {
        "apiKey": "Clé API",
        "baseUrl": "URL de base",
        "model": "Modèle",
        "region": "Région",
        "accessKeyId": "ID de clé d'accès",
        "secretAccessKey": "Clé d'accès secrète",
        "sessionToken": "Jeton de session"
      },
      "placeholder": {
        "geminiKey": "AIza…",
        "anthropicKey": "sk-ant-…",
        "openaiKey": "sk-…",
        "ollamaBaseUrl": "http://localhost:11434",
        "ollamaModel": "llama3.2",
        "awsAccessKey": "AKIA…",
        "awsSecretKey": "wJalrXUtnFEMI…",
        "awsRegion": "us-east-1",
        "awsSessionToken": "FwoGZXIvYXdz… (si des identifiants temporaires sont utilisés)",
        "customBaseUrl": "https://api.example.com/v1",
        "customModel": "model-id",
        "customApiKey": "sk-… (si requis)"
      }
    }
  },
  "toolbar": {
    "menu": {
      "project": "Projet",
      "import": "Importer",
      "edit": "Édition",
      "view": "Affichage",
      "addData": "Ajouter des données",
      "processing": "Traitement",
      "controls": "Contrôles",
      "plugins": "Extensions",
      "help": "Aide",
      "settings": "Paramètres"
    },
    "atmosphere": {
      "haloColor": "Couleur du halo",
      "haloExtent": "Étendue du halo",
      "haloExtentHint": "Distance à laquelle la lueur atmosphérique s'étend au-delà du globe. Une valeur plus basse garde les données proches de la surface ; une valeur plus haute donne un halo large et aérien.",
      "haloOpacity": "Intensité du halo",
      "spaceColor": "Couleur de l'espace",
      "reset": "Réinitialiser les valeurs par défaut",
      "globeOnly": "Les effets atmosphériques ne sont disponibles que lorsque la vue Globe est activée."
    },
    "sun": {
      "title": "Soleil",
      "date": "Date",
      "time": "Heure",
      "timeOfDay": "Heure de la journée",
      "play": "Lecture",
      "pause": "Pause",
      "stepBack": "Reculer d'une heure",
      "stepForward": "Avancer d'une heure",
      "speed": "Vitesse d'animation",
      "loop": "Boucler l'animation",
      "now": "Maintenant",
      "shade": "Ombrage nocturne",
      "close": "Fermer",
      "localTimeNote": "Heures affichées dans le fuseau horaire de votre ordinateur."
    },
    "routeAnimation": {
      "title": "Animation d'itinéraire",
      "layer": "Couche d'itinéraire",
      "selectLayer": "Sélectionner une couche de lignes…",
      "noLineLayers": "Aucune couche de lignes dans le projet",
      "play": "Lecture",
      "pause": "Pause",
      "loop": "Lire en boucle",
      "progress": "Progression",
      "speed": "Vitesse",
      "followCamera": "Suivre",
      "followPitch": "Inclinaison de la caméra",
      "followZoom": "Zoom de la caméra",
      "followRotate": "Pivoter selon le cap",
      "color": "Couleur du tracé",
      "marker": "Marqueur",
      "markerStyle": {
        "arrow": "Flèche (cap)",
        "point": "Point",
        "none": "Aucun"
      },
      "trail": "Trace",
      "saveVideoMp4": "Enregistrer en MP4",
      "saveVideoWebm": "Enregistrer en WebM",
      "estimatedLength": "≈ {{seconds}} s",
      "recordingStatus": "Enregistrement… {{percent}} %",
      "savingVideo": "Enregistrement de la vidéo…",
      "stop": "Arrêter",
      "videoSaved": "{{name}} enregistré",
      "videoError": "Impossible d'enregistrer l'animation. Veuillez réessayer.",
      "videoUnsupported": "L'enregistrement vidéo n'est pas pris en charge dans ce navigateur.",
      "videoFileTypeMp4": "Vidéo MP4",
      "videoFileTypeWebm": "Vidéo WebM",
      "collapse": "Réduire",
      "expand": "Développer",
      "close": "Fermer"
    },
    "flightSim": {
      "title": "Simulateur de vol",
      "start": "Démarrer le vol",
      "stop": "Arrêter le vol",
      "collapse": "Réduire",
      "expand": "Développer",
      "close": "Fermer",
      "speed": "Vitesse",
      "altitude": "Altitude",
      "heading": "Cap",
      "agl": "Hauteur/sol",
      "throttle": "Manette des gaz",
      "maxSpeed": "Vitesse maximale",
      "minAgl": "Garde au sol",
      "units": "Unités",
      "imperial": "Nœuds / pieds",
      "metric": "km/h / mètres",
      "bankCamera": "Incliner l'horizon dans les virages",
      "invertPitch": "Inverser l'axe de tangage",
      "knots": "kt",
      "kph": "km/h",
      "feet": "ft",
      "meters": "m",
      "terrainWarning": "Relief — remontez",
      "help": "Flèches ou A/D pour virer · W/S ou Pg. préc/suiv pour les gaz · Espace remet les ailes à plat · Échap quitte."
    },
    "setView": {
      "title": "Définir la vue",
      "description": "Déplacer la carte vers une caméra précise.",
      "sectionCoordinates": "Coordonnées",
      "smartPaste": "Coller des coordonnées",
      "smartPasteInputLabel": "Chaîne de coordonnées",
      "smartPastePlaceholder": "p. ex. 51.5074, -0.1278 ou 51°30'26\"N, 0°07'39\"O",
      "smartPasteInfo": "Saisissez ou collez une chaîne de coordonnées complète en DD, DMS ou DDM, puis exécutez Traiter la saisie. GeoLibre détecte le format et remplit les champs de longitude et de latitude ci-dessous. Ajustez le zoom, l'inclinaison et l'orientation séparément avant de valider.",
      "smartPasteInfoLabel": "À propos du collage de coordonnées",
      "smartPasteInvalid": "Impossible de lire ces coordonnées. Entrez une longitude et une latitude complètes en DD, DMS ou DDM, par exemple 51.5074, -0.1278. Une chaîne partielle ou incomplète ne peut pas être analysée.",
      "processInput": "Traiter la saisie",
      "processed": "Champs de longitude et de latitude ci-dessous remplis.",
      "sectionZoom": "Zoom de la caméra",
      "sectionOrientation": "Orientation de la caméra",
      "orientationHint": "L'inclinaison et l'orientation sont à 0 par défaut si laissées vides.",
      "format": "Format de saisie manuelle",
      "formatInfo": "Ces boutons ne choisissent que la manière dont vous saisissez le centre manuellement. La zone de collage ci-dessus accepte déjà n'importe quel format.\nDD : 51.5074, -0.1278\nDMS : 51°30'26\"N, 0°07'39\"O\nDDM : 51°30.44'N, 0°07.65'O",
      "formatInfoLabel": "À propos des formats de coordonnées",
      "formatDd": "Degrés décimaux (DD)",
      "formatDms": "Degrés, minutes, secondes (DMS)",
      "formatDdm": "Degrés et minutes décimales (DDM)",
      "formatDdShort": "DD",
      "formatDmsShort": "DMS",
      "formatDdmShort": "DDM",
      "longitude": "Longitude",
      "latitude": "Latitude",
      "degrees": "Degrés",
      "minutes": "Minutes",
      "seconds": "Secondes",
      "hemisphere": "Hémisphère",
      "zoom": "Zoom",
      "pitch": "Inclinaison",
      "bearing": "Orientation",
      "go": "Aller",
      "invalid": "Entrez une longitude valide (−180 à 180), une latitude valide (−90 à 90), et un zoom.",
      "invalidDms": "Entrez des degrés, minutes (0 à 59), secondes (0 à 59) et un zoom valides.",
      "invalidDdm": "Entrez des degrés, minutes décimales (0 à < 60) et un zoom valides."
    },
    "commandGroup": {
      "project": "Projet",
      "addData": "Ajouter des données",
      "processing": "Traitement",
      "controls": "Contrôles",
      "view": "Affichage",
      "help": "Aide",
      "plugins": "Extensions",
      "settings": "Paramètres"
    },
    "command": {
      "projectNew": "Nouveau projet",
      "projectOpenFile": "Ouvrir le projet depuis un fichier",
      "projectOpenUrl": "Ouvrir le projet depuis une URL",
      "projectSave": "Enregistrer le projet",
      "projectSaveAs": "Enregistrer le projet sous…",
      "projectShare": "Partager le projet…",
      "projectCollaborate": "Collaborer…",
      "projectPrint": "Imprimer…",
      "addVectorLayer": "Ajouter une couche vectorielle",
      "addRasterLayer": "Ajouter une couche raster",
      "addOsmPbfLayer": "Ajouter une couche OSM PBF",
      "addLayer": "Ajouter {{name}}",
      "addStacLayer": "Ajouter une couche STAC",
      "addGeoparquetLayer": "Ajouter une couche GeoParquet",
      "addFlatgeobufLayer": "Ajouter une couche FlatGeobuf",
      "addPmtilesLayer": "Ajouter une couche PMTiles",
      "addZarrLayer": "Ajouter une couche Zarr",
      "addNetcdfLayer": "Ajouter une couche NetCDF / HDF",
      "addLidarLayer": "Ajouter une couche LiDAR",
      "addSplattingLayer": "Ajouter Gaussian Splatting",
      "add3dTilesLayer": "Ajouter une couche 3D Tiles",
      "addDuckdbLayer": "Ajouter une couche DuckDB",
      "whiteboxTools": "Outils Whitebox",
      "sqlWorkspace": "Espace de travail SQL",
      "pythonConsole": "Console Python",
      "notebook": "Notebook Jupyter",
      "dashboard": "Tableau de bord",
      "assistant": "Assistant IA",
      "geocode": "Géocoder des adresses",
      "modelBuilder": "Lots et modèles",
      "planetaryComputer": "Planetary Computer",
      "earthEngine": "Earth Engine",
      "segmentation": "Segmentation IA",
      "objectDetection": "Détection d'objets",
      "segmentEverything": "Tout segmenter",
      "toggleControl": "Basculer le contrôle {{name}}",
      "toggleAtmosphereEffects": "Basculer les effets atmosphériques",
      "toggleDirections": "Basculer les itinéraires",
      "toggleSearch": "Basculer la recherche",
      "toggleColorbar": "Basculer la barre de couleur",
      "toggleLegend": "Basculer la légende",
      "toggleHtmlPanel": "Basculer le panneau HTML",
      "toggleMeasure": "Basculer la mesure",
      "toggleBookmark": "Basculer les signets",
      "toggleMinimap": "Basculer la mini-carte",
      "toggleViewState": "Basculer l'état de la vue",
      "previousView": "Vue précédente",
      "nextView": "Vue suivante",
      "resetNorth": "Réinitialiser l'orientation",
      "resetPitch": "Réinitialiser l'inclinaison",
      "resetPitchBearing": "Réinitialiser l'inclinaison et l'orientation",
      "setView": "Définir la vue",
      "viewComments": "Afficher les commentaires",
      "zoomIn": "Zoomer",
      "zoomOut": "Dézoomer",
      "switchToLight": "Passer en mode clair",
      "switchToDark": "Passer en mode sombre",
      "keyboardShortcuts": "Raccourcis clavier",
      "website": "Site web",
      "githubRepository": "Dépôt GitHub",
      "diagnostics": "Diagnostics",
      "giveFeedback": "Donner un avis",
      "checkForUpdates": "Vérifier les mises à jour",
      "about": "À propos",
      "togglePlugin": "Basculer {{name}}",
      "managePlugins": "Gérer les extensions",
      "styleManager": "Gestionnaire de styles…"
    },
    "layerType": {
      "delimitedText": "Couche de texte délimité",
      "photos": "Photos géotaguées",
      "gpx": "Couche GPX",
      "mbtiles": "Couche MBTiles",
      "xyz": "Couche XYZ",
      "wms": "Couche WMS",
      "wfs": "Couche WFS",
      "wmts": "Couche WMTS",
      "ogcFeatures": "OGC API - Features",
      "ogcVectorTiles": "Tuiles vectorielles OGC",
      "arcgis": "Couche ArcGIS",
      "georss": "Couche GeoRSS",
      "video": "Couche vidéo",
      "deckglViz": "Couche Deck.gl",
      "gltfModel": "Modèle 3D (glTF)",
      "postgres": "Couche PostgreSQL"
    },
    "conversion": {
      "vectorToVector": "Vecteur vers vecteur",
      "zipInputBrowserError": "Les Shapefiles compressés ne peuvent être convertis que dans l'application de bureau GeoLibre. Dans le navigateur, sélectionnez le .shp décompressé avec ses fichiers .dbf, .shx et .prj.",
      "browserOutputUnsupported": "Dans le navigateur, la sortie peut être GeoJSON, CSV, GeoParquet, GeoPackage ou Shapefile (.zip). La sortie « .{{extension}} » nécessite l'application de bureau GeoLibre.",
      "outputExtensionRequired": "Ajoutez une extension de fichier au nom de sortie pour choisir le format.",
      "readingWithDuckDb": "Lecture de {{name}} avec DuckDB-WASM",
      "readFeatures": "{{features}} entités lues depuis {{name}}",
      "savedFile": "{{name}} enregistré",
      "saveCanceled": "Conversion terminée ; l'enregistrement a été annulé.",
      "vectorToGeoparquet": "Vecteur vers GeoParquet",
      "vectorToFlatgeobuf": "Vecteur vers FlatGeobuf",
      "vectorToShapefile": "Vecteur vers Shapefile",
      "vectorToGeopackage": "Vecteur vers GeoPackage",
      "csvToGeoparquet": "CSV vers GeoParquet",
      "vectorToPmtiles": "Vecteur vers PMTiles",
      "rasterToCog": "Raster vers COG",
      "rasterToPmtiles": "Raster vers PMTiles",
      "needsDesktop": "Cette conversion nécessite l'application de bureau GeoLibre ou un sidecar en cours d'exécution.",
      "runsInBrowserDuckDb": "La conversion s'exécute dans votre navigateur avec DuckDB-WASM.",
      "runsInBrowserWriters": "La conversion s'exécute dans votre navigateur avec DuckDB-WASM et les modules d'écriture intégrés.",
      "runsInBrowserWasm": "La conversion s'exécute dans votre navigateur avec geolibre-wasm. Aucun sidecar requis.",
      "convertingWithWasm": "Conversion de {{name}} avec geolibre-wasm",
      "rasterShape": "Raster de {{width}}×{{height}} lu avec {{bands}} bande(s)",
      "wroteCog": "COG tuilé avec aperçus écrit ({{compression}})",
      "notAGeoTiff": "Ce fichier n'est pas un GeoTIFF lisible. Dans le navigateur, Raster vers COG ne lit que le GeoTIFF ; les autres formats nécessitent l'application de bureau.",
      "zoomRangeError": "Les niveaux de zoom doivent satisfaire 0 ≤ min ≤ max ≤ {{max}}.",
      "colormap": "Palette de couleurs",
      "resampling": "Rééchantillonnage",
      "colormapDefault": "Par défaut (viridis)",
      "zoomNative": "natif",
      "rasterToPmtilesDesc": "Rend un raster en une seule archive PMTiles de tuiles PNG Web Mercator, prête pour une diffusion cloud-native. Une seule bande est rendue via une palette de couleurs, l'imagerie multibande n'est donc pas dessinée en vraies couleurs. S'exécute entièrement en WebAssembly, donc aucun sidecar n'est requis, ni sur le web ni sur l'application de bureau.",
      "cogBrowserNote": "Dans le navigateur, les rasters 8 bits conservent leur type et tout le reste (MNT Int16, Float64, …) est écrit en Float32. L'application de bureau préserve le type d'origine.",
      "noSidecarConversion": "{{kind}} n'a pas de conversion via le sidecar.",
      "minZoom": "Zoom min",
      "maxZoom": "Zoom max",
      "convertFailed": "Impossible de convertir ce fichier.",
      "notAGeoTiffRasterOnly": "Ce fichier n'est pas un GeoTIFF lisible. Raster vers PMTiles ne lit que le GeoTIFF, sur le web comme sur l'application de bureau.",
      "band": "Bande",
      "bandError": "La bande doit être un nombre entier positif.",
      "bandOutOfRange": "La bande {{band}} n'existe pas ; ce raster a {{bands}} bande(s).",
      "runsInBrowserVectorEngines": "La conversion s'exécute dans votre navigateur avec DuckDB-WASM, ou geolibre-wasm pour la sortie FlatGeobuf.",
      "vectorToVectorDesc": "Convertit entre tous les formats vecteur pris en charge par l'extension spatial de DuckDB. Les formats d'entrée et de sortie sont détectés à partir des extensions de fichier. L'application de bureau écrit tous les formats (FlatGeobuf, GeoPackage, Shapefile, KML, GML, …) ; le navigateur écrit GeoJSON, CSV, GeoParquet, GeoPackage, FlatGeobuf et Shapefile.",
      "vectorToVectorInputLabel": "Fichier vecteur d'entrée",
      "vectorToVectorOutputLabel": "Fichier vecteur de sortie",
      "vectorToGeoparquetDesc": "Convertit un jeu de données vecteur en un fichier GeoParquet compressé et trié selon la courbe de Hilbert, optimisé pour les requêtes de plage cloud-native.",
      "vectorToGeoparquetInputLabel": "Fichier vecteur d'entrée",
      "vectorToGeoparquetOutputLabel": "Fichier GeoParquet de sortie",
      "vectorToFlatgeobufDesc": "Convertit un jeu de données vecteur en un FlatGeobuf trié selon la courbe de Hilbert avec un index spatial compact pour un accès cloud-native rapide.",
      "vectorToFlatgeobufInputLabel": "Fichier vecteur d'entrée",
      "vectorToFlatgeobufOutputLabel": "Fichier FlatGeobuf de sortie",
      "vectorToShapefileDesc": "Convertit un jeu de données vecteur en un Shapefile ESRI compressé en zip (.shp/.shx/.dbf/.prj). Les noms de champs sont tronqués à 10 caractères.",
      "vectorToShapefileInputLabel": "Fichier vecteur d'entrée",
      "vectorToShapefileOutputLabel": "Shapefile compressé de sortie",
      "vectorToGeopackageDesc": "Convertit un jeu de données vecteur en un GeoPackage (.gpkg) à partager avec QGIS, ArcGIS et d'autres outils SIG.",
      "vectorToGeopackageInputLabel": "Fichier vecteur d'entrée",
      "vectorToGeopackageOutputLabel": "Fichier GeoPackage de sortie",
      "csvToGeoparquetDesc": "Construit des géométries ponctuelles à partir de colonnes de longitude/latitude et écrit un GeoParquet compressé et trié selon la courbe de Hilbert.",
      "csvToGeoparquetInputLabel": "Fichier CSV d'entrée",
      "csvToGeoparquetOutputLabel": "Fichier GeoParquet de sortie",
      "vectorToPmtilesDesc": "Découpe un jeu de données vecteur en une seule archive PMTiles de tuiles vectorielles, prête pour une diffusion cloud-native.",
      "vectorToPmtilesInputLabel": "Fichier vecteur d'entrée",
      "vectorToPmtilesOutputLabel": "Fichier PMTiles de sortie",
      "rasterToPmtilesInputLabel": "Fichier raster d'entrée",
      "rasterToPmtilesOutputLabel": "Fichier PMTiles de sortie",
      "rasterToCogDesc": "Convertit un jeu de données raster en un GeoTIFF Cloud Optimized valide et compressé, avec tuilage interne et aperçus.",
      "rasterToCogInputLabel": "Fichier raster d'entrée",
      "rasterToCogOutputLabel": "Fichier COG de sortie",
      "outputFileName": "Nom du fichier de sortie",
      "shapefileSidecarHint": "Pour les Shapefiles, sélectionnez le .shp avec ses fichiers .dbf, .shx et .prj.",
      "longitudeColumn": "Colonne de longitude",
      "latitudeColumn": "Colonne de latitude",
      "compression": "Compression",
      "rowGroupSize": "Taille du groupe de lignes",
      "layerName": "Nom de la couche",
      "noOutput": "Pas encore de sortie.",
      "fallbackTitle": "Conversion"
    },
    "vectorTool": {
      "buffer": "Zone tampon",
      "centroids": "Centroïdes",
      "convexHull": "Enveloppe convexe",
      "dissolve": "Fusionner",
      "boundingBox": "Boîte englobante",
      "simplify": "Simplifier",
      "clip": "Découper",
      "intersection": "Intersection",
      "difference": "Différence",
      "union": "Union",
      "spatialJoin": "Jointure spatiale",
      "attributeJoin": "Jointure attributaire",
      "selectByValue": "Sélectionner par valeur",
      "selectByLocation": "Sélectionner par emplacement",
      "randomExtract": "Extraction aléatoire",
      "reproject": "Reprojeter",
      "explode": "Décomposer",
      "aggregate": "Agréger par attribut",
      "smooth": "Lisser",
      "grid": "Grille régulière",
      "voronoi": "Voronoï / Delaunay",
      "cellSectors": "Couverture de site cellulaire",
      "dggsGenerator": "Générateur DGGS",
      "dggsBinning": "Regroupement DGGS",
      "dggsCompact": "Compactage DGGS",
      "trajectorySpeed": "Vitesse de trajectoire",
      "detectStops": "Détecter les arrêts",
      "spaceTimeProximity": "Proximité spatio-temporelle",
      "checkValidity": "Vérifier la validité",
      "fixGeometries": "Corriger les géométries",
      "checkTopologyRules": "Vérifier les règles de topologie",
      "fixTopology": "Corriger la topologie"
    },
    "networkTool": {
      "isochrone": "Isochrone / zone de desserte",
      "odMatrix": "Matrice de coûts OD",
      "sequentialRoute": "Itinéraire séquentiel (directions)"
    },
    "statisticsTool": {
      "globalMoransI": "I de Moran global",
      "localMoransI": "I de Moran local (LISA)",
      "getisOrd": "Points chauds Getis-Ord Gi*",
      "averageNearestNeighbor": "Plus proche voisin moyen",
      "kernelDensity": "Densité de noyau (carte de chaleur)",
      "emergingHotSpot": "Points chauds émergents (cube espace-temps)"
    },
    "rasterTool": {
      "hillshade": "Ombrage du relief",
      "slope": "Pente",
      "aspect": "Orientation",
      "reproject": "Reprojeter",
      "resample": "Rééchantillonner",
      "clipExtent": "Découper par étendue",
      "clipMask": "Découper par couche de masque",
      "polygonize": "Polygoniser",
      "contour": "Courbes de niveau",
      "interpolate": "Interpolation (IDW / Krigeage)",
      "zonal": "Statistiques zonales",
      "rasterCalc": "Calculatrice raster",
      "spectralIndex": "Indice spectral",
      "invalidSpectralIndex": "Indice spectral invalide.",
      "reclassify": "Reclasser",
      "mosaic": "Mosaïque / fusion",
      "focal": "Statistiques focales",
      "inputRaster": "Raster d'entrée",
      "inputRasterA": "Raster d'entrée A",
      "inputRaster1": "Premier raster",
      "inputPoints": "Points d'entrée (GeoJSON)",
      "engine": "Moteur",
      "engineClient": "Client (navigateur)",
      "engineSidecar": "Sidecar (rasterio/GDAL)",
      "clientHint": "Calcule dans votre navigateur et ajoute le résultat à la carte. Pour les rasters volumineux ou un relief en SRC géographique, privilégiez le sidecar.",
      "switchToClientHint": "Ou basculez le moteur vers Client pour exécuter cet outil dans votre navigateur.",
      "chooseGeoTiff": "Choisir un GeoTIFF",
      "downloadGeoTiff": "Télécharger le GeoTIFF",
      "chooseInputRaster": "Choisissez un raster d'entrée.",
      "useAddedLayer": "Utiliser une couche de la carte",
      "useAddedLayerPlaceholder": "Choisir une couche…",
      "loadingLayer": "Chargement de la couche…",
      "layerLoadError": "Impossible de charger la couche sélectionnée.",
      "runningInBrowser": "Exécution de « {{tool}} » dans votre navigateur...",
      "loadedRaster": "Raster chargé : {{width}}×{{height}}, {{bands}} bande(s).",
      "computedInBrowser": "« {{tool}} » calculé dans le navigateur.",
      "addedToMap": "« {{name}} » ajouté à la carte.",
      "largeRasterWarning": "Raster volumineux ({{mp}} M pixels) ; le navigateur peut ne pas répondre pendant le calcul.",
      "mapAddFailed": "Échec de l'ajout à la carte (le résultat reste disponible au téléchargement) : {{message}}",
      "mapAddError": "Impossible d'ajouter le résultat à la carte.",
      "runError": "Impossible d'exécuter l'outil raster.",
      "saveError": "Impossible d'enregistrer le résultat.",
      "dialogTitle": "Outils raster",
      "dialogDescription": "Exécutez des opérations raster courantes sur le sidecar Python (rasterio/GDAL), ou dans votre navigateur quand aucun sidecar n'est disponible.",
      "outputFile": "Fichier de sortie",
      "noOutput": "Pas encore de sortie.",
      "errorConnect": "Impossible de se connecter au sidecar.",
      "needsDesktopSidecar": "Les outils raster nécessitent l'application GeoLibre Desktop avec un sidecar en cours d'exécution.",
      "errorPoll": "Impossible d'interroger la tâche.",
      "errorStartSidecar": "Impossible de démarrer le sidecar GeoLibre.",
      "errorStartTool": "Impossible de démarrer l'outil raster."
    },
    "mapControl": {
      "navigation": "Navigation",
      "fullscreen": "Plein écran",
      "compass": "Boussole",
      "geolocate": "Géolocaliser",
      "globe": "Globe",
      "terrain": "Relief",
      "scale": "Échelle",
      "attribution": "Attribution",
      "logos": "Logos",
      "logo": "Logo MapLibre",
      "maptoolkitLogo": "Logo Maptoolkit",
      "maptoolkitLogoHint": "Ajoutez un fond de carte Maptoolkit pour afficher son logo."
    },
    "position": {
      "topLeft": "Haut gauche",
      "topRight": "Haut droite",
      "bottomLeft": "Bas gauche",
      "bottomRight": "Bas droite"
    },
    "item": {
      "newEllipsis": "Nouveau...",
      "openFrom": "Ouvrir depuis",
      "fileEllipsis": "Fichier...",
      "urlEllipsis": "URL...",
      "galleryEllipsis": "Galerie...",
      "openRecent": "Ouvrir un projet récent",
      "projectHistoryEllipsis": "Historique...",
      "noRecentProjects": "Aucun projet récent",
      "removeFromRecent": "Retirer {{name}} des projets récents",
      "clearRecentProjects": "Effacer les projets récents",
      "duplicate": "Dupliquer le projet",
      "saveAsEllipsis": "Enregistrer sous...",
      "saveAsTemplateEllipsis": "Enregistrer comme modèle...",
      "shareEllipsis": "Partager...",
      "shareHostUnavailable": "Indisponible : l'adresse du serveur de partage de ce déploiement n'est pas valide.",
      "exportHtmlEllipsis": "Exporter en HTML...",
      "htmlFile": "HTML",
      "collaborateEllipsis": "Collaborer...",
      "printEllipsis": "Imprimer...",
      "printLayoutEllipsis": "Mise en page d'impression...",
      "offlineBasemapEllipsis": "Fond de carte hors ligne...",
      "undo": "Annuler",
      "redo": "Rétablir",
      "selectByExpressionEllipsis": "Sélectionner par expression...",
      "selectByLocationEllipsis": "Sélectionner par localisation...",
      "zoomToSelection": "Zoomer sur la sélection",
      "invertSelection": "Inverser la sélection",
      "clearSelection": "Effacer la sélection",
      "exportSelection": "Exporter les entités sélectionnées comme couche",
      "previousView": "Vue précédente",
      "nextView": "Vue suivante",
      "resetOrientation": "Réinitialiser l'orientation",
      "resetPitch": "Réinitialiser l'inclinaison",
      "resetBearing": "Réinitialiser l'orientation",
      "resetPitchBearing": "Réinitialiser l'inclinaison et l'orientation",
      "setView": "Définir la vue…",
      "splitView": "Vue partagée",
      "splitViewSingle": "Carte unique",
      "splitViewTwoColumns": "Deux colonnes",
      "splitViewTwoRows": "Deux lignes",
      "splitViewGrid2x2": "Grille 2 × 2",
      "splitViewGrid2x3": "Grille 2 × 3",
      "splitViewGrid3x3": "Grille 3 × 3",
      "splitViewSync": "Synchroniser les vues",
      "viewInGoogleMaps": "Voir dans Google Maps",
      "viewInGoogleEarth": "Voir dans Google Earth",
      "zoomIn": "Zoomer",
      "zoomOut": "Dézoomer",
      "sectionFiles": "Fichiers",
      "sectionWebServices": "Services web",
      "sectionCloudFormats": "Formats cloud",
      "section3dLayers": "Couches 3D",
      "sectionDatabases": "Bases de données",
      "georeferencing": "Géoréférencement",
      "vectorLayer": "Couche vectorielle",
      "cadLayer": "Couche CAO (DXF/DWG)",
      "gdbLayer": "File Geodatabase (GDB)",
      "rasterLayer": "Couche raster",
      "osmPbfLayer": "Couche OSM PBF",
      "stacLayer": "Couche STAC",
      "geoparquetLayer": "Couche GeoParquet",
      "flatgeobufLayer": "Couche FlatGeobuf",
      "pmtilesLayer": "Couche PMTiles",
      "basemapExtract": "Extraction de fond de carte hors ligne",
      "zarrLayer": "Couche Zarr",
      "netcdfHdf": "NetCDF / HDF",
      "lidarLayer": "Couche LiDAR",
      "splattingLayer": "Gaussian Splatting",
      "threeDTilesLayer": "Couche 3D Tiles",
      "duckdbLayer": "Couche DuckDB",
      "whitebox": "Whitebox",
      "geocode": "Géocoder des adresses",
      "modelBuilder": "Lots et modèles",
      "processingHistory": "Historique",
      "conversion": "Conversion",
      "vector": "Vecteur",
      "network": "Réseau",
      "statistics": "Statistiques spatiales",
      "raster": "Raster",
      "hydrology": "Hydrologie",
      "lidar": "LiDAR",
      "terrain": "Relief",
      "remoteSensing": "Télédétection",
      "projection": "Projection",
      "geolibre": "GeoLibre",
      "subGroupGeometry": "Géométrie",
      "subGroupOverlay": "Superposition",
      "subGroupJoin": "Jointure",
      "subGroupSelect": "Sélection",
      "subGroupDggs": "DGGS",
      "subGroupH3": "H3",
      "subGroupMovement": "Mouvement et temps",
      "subGroupDataQuality": "Qualité des données",
      "subGroupTerrain": "Relief",
      "subGroupReproject": "Reprojeter",
      "subGroupClip": "Découper",
      "subGroupRasterToVector": "Raster vers vecteur",
      "subGroupVectorToRaster": "Vecteur vers raster",
      "subGroupAnalysis": "Analyse",
      "mapControls": "Contrôles de la carte",
      "fieldCollection": "Collecte de terrain...",
      "gpsTracking": "Suivi GPS...",
      "recordTour": "Enregistrer une visite de la carte...",
      "recordVideo": "Enregistrer une vidéo...",
      "atmosphereEffects": "Effets atmosphériques",
      "atmosphereEnabled": "Activé",
      "spinGlobe": "Globe rotatif",
      "graticule": "Quadrillage",
      "weather": "Météo",
      "weatherTooltip": "Superposez des couches météo en quasi-temps réel que vous pouvez animer.",
      "weatherPlay": "Lire l'animation",
      "weatherPause": "Mettre l'animation en pause",
      "clouds": "Nuages",
      "cloudsShow": "Afficher les nuages",
      "cloudsTooltip": "Superposer les nuages satellite NASA quasi en temps réel, comme Google Earth. Ajoute une couche que vous pouvez animer jour par jour.",
      "cloudsDate": "Date",
      "precipitation": "Précipitations",
      "precipitationShow": "Afficher les précipitations",
      "precipitationTooltip": "Radar météo RainViewer en quasi-temps réel. Animez les ~2 dernières heures.",
      "precipitationTime": "Heure",
      "sun": "Soleil",
      "sunTooltip": "Simuler la position du soleil et le terminateur jour/nuit pour n'importe quelle date et heure.",
      "routeAnimation": "Animation d'itinéraire",
      "routeAnimationTooltip": "Anime un marqueur le long d'une couche de lignes, avec lecture/pause, vitesse, une trace et suivi de la caméra.",
      "flightSimulator": "Simulateur de vol",
      "flightSimulatorTooltip": "Survolez le relief au clavier, comme dans un simulateur de vol.",
      "spinGlobeBoundsTitle": "Les limites sont verrouillées",
      "spinGlobeBoundsDesc": "Le globe ne peut pas tourner tant que les limites de la carte sont verrouillées.",
      "spinGlobeBoundsHint": "Déverrouiller les limites permet au globe de tourner librement. Vous pouvez les reverrouiller à tout moment dans Paramètres.",
      "spinGlobeBoundsUnlock": "Déverrouiller les limites et faire tourner",
      "directions": "Itinéraires",
      "directionsTooltip": "Le calcul d'itinéraire envoie vos points de cheminement au serveur de démonstration OSRM public (router.project-osrm.org).",
      "search": "Recherche",
      "colorbar": "Barre de couleur",
      "legend": "Légende",
      "html": "HTML",
      "measure": "Mesure",
      "bookmark": "Signet",
      "minimap": "Mini-carte",
      "viewState": "État de la vue",
      "activatePlugin": "Activer l'extension",
      "deactivate": "Désactiver",
      "activate": "Activer",
      "position": "Position",
      "webServices": "Services web",
      "dggs": "DGGS",
      "commandPalette": "Palette de commandes",
      "openProjectFromUrl": "Ouvrir un projet depuis une URL",
      "importQgisProjectEllipsis": "Importer un projet QGIS…",
      "importArcgisProjectEllipsis": "Importer un projet ArcGIS Pro…",
      "arcgisImportComplete": "Projet ArcGIS Pro importé",
      "arcgisImportWarnings_one": "Le projet a été importé, mais {{count}} couche n'a pas pu être chargée.",
      "arcgisImportWarnings_other": "Le projet a été importé, mais {{count}} couches n'ont pas pu être chargées.",
      "arcgisUnknownLayerType": "inconnu",
      "qgisImportComplete": "Projet QGIS importé",
      "qgisImportWarnings_one": "Le projet a été importé, mais {{count}} couche n'a pas pu être chargée.",
      "qgisImportWarnings_other": "Le projet a été importé, mais {{count}} couches n'ont pas pu être chargées.",
      "qgisUnknownProvider": "inconnu",
      "qgisImportReason": {
        "non-vector": "Seules les couches vectorielles basées sur des fichiers sont prises en charge dans cette première version.",
        "provider": "Le fournisseur de données {{provider}} n'est pas pris en charge.",
        "missing-source": "La couche n'a pas de source de données lisible.",
        "format": "Le format de fichier de la couche n'est pas pris en charge.",
        "remote-file": "Les sources de fichiers QGIS distantes ne sont pas encore prises en charge.",
        "network-path": "Les chemins de partage réseau ne sont pas chargés pour des raisons de sécurité.",
        "browser-local-file": "Le fichier local est référencé, mais les navigateurs ne peuvent pas rouvrir les chemins de données QGIS. Utilisez GeoLibre Desktop pour le charger.",
        "browser-local-raster": "Le raster est référencé par un chemin local. Utilisez GeoLibre Desktop pour le charger."
      },
      "openProjectFromUrlDesc": "Charger un projet `.geolibre.json` et l'ajouter aux projets récents.",
      "projectUrl": "URL du projet",
      "opening": "Ouverture...",
      "open": "Ouvrir",
      "somethingWentWrong": "Un problème est survenu",
      "dismiss": "Ignorer",
      "saveProjectAsTitle": "Enregistrer le projet sous",
      "saveProjectAsDesc": "Entrez un nom de fichier. Le projet sera téléchargé dans le dossier de téléchargements de votre navigateur lorsque vous cliquerez sur Enregistrer.",
      "embedVectorTitle": "Intégrer les données vectorielles locales ?",
      "embedVectorDesc": "Ce projet contient {{count}} couche(s) vectorielle(s) locale(s) chargée(s) depuis votre ordinateur. Le navigateur ne peut pas les relire lorsque le projet est rouvert, leurs données doivent donc être intégrées dans le fichier de projet pour être restaurées. L'intégration ajoute environ {{size}} au fichier.",
      "embedVectorDescDesktop": "Ce projet contient {{count}} couche(s) vectorielle(s) locale(s) chargée(s) depuis votre ordinateur. Intégrez leurs données pour rendre le projet autonome (ajoute environ {{size}}), ou enregistrez des références de fichiers qui se rechargent depuis le disque lorsque le projet est rouvert. Les références gardent le fichier léger mais se rompent si un fichier source est ensuite déplacé ou supprimé.",
      "embedVectorEmbedButton": "Intégrer les données",
      "embedVectorReferenceButton": "Enregistrer les références de fichiers",
      "embedVectorSkipButton": "Enregistrer sans les données",
      "saveProjectFileName": "Nom du fichier",
      "saveProjectFileNamePlaceholder": "mon-projet.geolibre.json",
      "exportHtmlAsTitle": "Exporter en HTML interactif",
      "exportHtmlAsDesc": "Entrez un nom de fichier. La page HTML sera téléchargée dans le dossier de téléchargements de votre navigateur lorsque vous cliquerez sur Enregistrer.",
      "exportHtmlFileName": "Nom du fichier",
      "exportHtmlFileNamePlaceholder": "ma-carte.html",
      "vectorDataFilter": "Données vectorielles",
      "directionsNoticeTitle": "Itinéraires utilise un serveur de calcul d'itinéraire public",
      "directionsNoticeDesc": "Activer les Itinéraires envoie les points de cheminement que vous placez au serveur de démonstration OSRM public (router.project-osrm.org) pour calculer les itinéraires — vos coordonnées quittent votre appareil pour ces requêtes. Le serveur de démonstration est limité en débit et ne prend en charge que la conduite.",
      "reverseGeocode": "Géocodage inverse",
      "reverseGeocodeTooltip": "Cliquez sur la carte pour rechercher une adresse. Les coordonnées cliquées sont envoyées au fournisseur de géocodage configuré (Nominatim public par défaut ; modifiable dans Paramètres → Géocodage).",
      "reverseGeocodeNoticeTitle": "Géocodage inverse utilise un service externe",
      "reverseGeocodeNoticeDesc": "Activer le Géocodage inverse envoie les coordonnées de chaque point que vous cliquez au fournisseur de géocodage configuré (le service Nominatim public par défaut) pour résoudre une adresse — vos coordonnées quittent votre appareil pour ces requêtes. Vous pouvez choisir un fournisseur différent dans Paramètres → Géocodage.",
      "networkNoticeTitle": "L'analyse de réseau utilise un serveur de calcul d'itinéraire externe",
      "networkNoticeDesc": "Exécuter un outil d'analyse Réseau envoie les coordonnées de vos points d'entrée à un serveur de calcul d'itinéraire pour calculer des isochrones, des matrices de coûts et des itinéraires.",
      "networkNoticePrivacyHeading": "Confidentialité des données",
      "networkNoticePrivacy": "Vos coordonnées d'entrée quittent cet appareil et sont envoyées au serveur Valhalla public sur valhalla1.openstreetmap.de. Appuyez sur Annuler si votre projet est soumis à des règles de confidentialité ou de souveraineté des données.",
      "networkNoticePrivacyCustom": "Vos coordonnées d'entrée quittent cet appareil et sont envoyées au serveur de calcul d'itinéraire configuré ({{endpoint}}). Appuyez sur Annuler si votre projet est soumis à des règles de confidentialité ou de souveraineté des données.",
      "networkNoticePerformanceHeading": "Performance et limites",
      "networkNoticePerformance": "Le serveur public est gratuit mais limité en débit, donc les lots importants de points peuvent être ralentis ou échouer. Pour un usage intensif, exécutez votre propre serveur Valhalla et entrez son URL dans le champ « Serveur de calcul d'itinéraire (Valhalla) » de l'outil (ou définissez VITE_ROUTING_ENDPOINT dans Paramètres → Variables d'environnement pour en faire la valeur par défaut).",
      "continue": "Continuer",
      "largeOsmPbfTitle": "Fichier OSM PBF volumineux",
      "largeOsmPbfDesc": "Ce fichier fait environ {{sizeMb}} Mo. L'analyser convertit chaque entité en GeoJSON en mémoire, ce qui peut être lent et utiliser beaucoup de mémoire dans le navigateur. Continuer ?",
      "largeVectorDesc": "{{name}} contient environ {{count}} entités. Le charger convertit chaque entité en GeoJSON en mémoire et peut ralentir ou bloquer l'application. Continuer ?",
      "addOsmPbfLayerTitle": "Ajouter une couche OSM PBF",
      "addOsmPbfLayerDesc": "Charger un fichier OpenStreetMap .osm.pbf. Il est analysé dans votre navigateur et divisé en couches de points, lignes et polygones distinctes.",
      "urlLabel": "URL",
      "osmPbfUrlPlaceholder": "https://example.com/region.osm.pbf",
      "osmPbfSampleLabel": "Las Vegas",
      "osmPbfUrlHint": "Les URL distantes se chargent dans l'application de bureau ; dans le navigateur, le serveur doit autoriser les requêtes cross-origin (CORS).",
      "chooseLocalFile": "Choisir un fichier local…",
      "loadFromUrl": "Charger depuis une URL",
      "loadingOsmPbf": "Chargement OSM PBF…",
      "loadingOsmPbfDesc": "Analyse du fichier et conversion des entités en GeoJSON. Cela s'exécute en arrière-plan et peut prendre un moment pour les grands extraits.",
      "loadingOsmPbfProgress": "Conversion des entités en GeoJSON… {{processed}} sur {{total}} entités OSM traitées.",
      "projectName": "Nom du projet",
      "storymapEllipsis": "Story Map...",
      "arcgisImportReason": {
        "layer-type": "Le type de couche {{layerType}} n'est pas pris en charge.",
        "missing-source": "La couche n'a pas de source de données locale lisible.",
        "format": "Le format de données de la couche n'est pas pris en charge.",
        "network-path": "Les chemins de partage réseau ne sont pas chargés pour des raisons de sécurité.",
        "service": "Les couches de service ArcGIS présentes dans les projets ne sont pas encore prises en charge.",
        "browser-local-file": "Le fichier local est référencé, mais les navigateurs ne peuvent pas rouvrir les chemins de données ArcGIS Pro. Utilisez GeoLibre Desktop pour le charger.",
        "map-extent": "L'emprise de carte enregistrée utilise un système de coordonnées que GeoLibre ne peut pas convertir ; la carte s'est donc ouverte sur une vue par défaut.",
        "nesting": "Le groupe est imbriqué trop profondément, ou le projet renvoie à un groupe qui le contient déjà."
      }
    },
    "plugin": {
      "maplibre-gl-annotations": "Annotations",
      "maplibre-gl-streetview": "Vue de rue",
      "maplibre-gl-time-slider": "Curseur temporel",
      "geolibre-timelapse": "Timelapse",
      "maplibre-gl-esri-wayback": "Imagerie historique",
      "maplibre-gl-openaerialmap": "OpenAerialMap",
      "maplibre-gl-arcgis-hub": "ArcGIS Hub",
      "geolibre-stac-catalogs": "Catalogues STAC",
      "maplibre-gl-source-coop": "Source Cooperative",
      "maplibre-gl-natural-earth": "Natural Earth",
      "maplibre-gl-swipe": "Comparateur de couches",
      "geolibre-elevation-profile": "Profil d'élévation",
      "maplibre-gl-basemap-control": "Fonds de carte",
      "maplibre-layer-control": "Contrôle des couches",
      "maplibre-gl-huggingface": "Hugging Face",
      "carto-light": "Fond de carte Carto Light",
      "geolibre-flight-simulator": "Simulateur de vol",
      "geolibre-route-animation": "Animation d'itinéraire",
      "geolibre-sun": "Simulation solaire",
      "maplibre-atmosphere-effects": "Effets atmosphériques",
      "maplibre-deckgl-viz": "Couche Deck.gl",
      "maplibre-gl-clouds": "Nuages",
      "maplibre-gl-components": "Composants",
      "maplibre-gl-directions": "Itinéraires",
      "maplibre-gl-earthdata-gis": "Earthdata GIS",
      "maplibre-gl-enviroatlas": "US EPA EnviroAtlas",
      "maplibre-gl-fema-wms": "FEMA NFHL",
      "maplibre-gl-geo-editor": "GeoEditor",
      "maplibre-gl-geoagent": "GeoAgent",
      "maplibre-gl-geolens": "GeoLens",
      "maplibre-gl-graticule": "Quadrillage",
      "maplibre-gl-mapillary": "Mapillary",
      "maplibre-gl-nasa-earthdata": "NASA Earthdata",
      "maplibre-gl-national-map": "USGS National Map",
      "maplibre-gl-overture-maps": "Overture Maps",
      "maplibre-gl-precipitation": "Précipitations",
      "maplibre-gl-usgs-lidar": "USGS LiDAR",
      "maplibre-h3-grid": "Grille H3",
      "maplibre-s2-grid": "S2",
      "maplibre-a5-grid": "A5",
      "maplibre-dggrid": "DGGRID",
      "maplibre-dggal": "DGGAL",
      "maplibre-olc": "OLC",
      "maplibre-geohash": "Geohash",
      "maplibre-tilecode": "Tilecode",
      "maplibre-reverse-geocode": "Géocodage inverse",
      "osm-basemap": "Fond de carte OpenStreetMap"
    },
    "fileDrop": {
      "overlayTitle": "Déposez des fichiers vectoriels ou raster ici pour ajouter des couches",
      "overlaySubtext": "Vos données sont ajoutées instantanément au panneau Couches.",
      "addedLayer": "« {{name}} » ajouté au panneau Couches.",
      "addedVectorLayers_one": "{{count}} couche vectorielle ajoutée au panneau Couches.",
      "addedVectorLayers_other": "{{count}} couches vectorielles ajoutées au panneau Couches.",
      "addedRasterLayers_one": "{{count}} couche raster ajoutée au panneau Couches.",
      "addedRasterLayers_other": "{{count}} couches raster ajoutées au panneau Couches.",
      "addedBoth": "{{vector}} et {{raster}} ajoutés au panneau Couches.",
      "bothVectorLayers_one": "{{count}} couche vectorielle",
      "bothVectorLayers_other": "{{count}} couches vectorielles",
      "bothRasterLayers_one": "{{count}} couche raster",
      "bothRasterLayers_other": "{{count}} couches raster"
    },
    "error": {
      "couldNotOpenProject": "Impossible d'ouvrir le projet.",
      "couldNotImportQgisProject": "Impossible d'importer le projet QGIS.",
      "couldNotImportArcgisProject": "Impossible d'importer le projet ArcGIS Pro.",
      "invalidProjectUrl": "Entrez une URL de projet HTTP ou HTTPS valide.",
      "couldNotOpenProjectUrl": "Impossible d'ouvrir l'URL du projet.",
      "couldNotOpenRecentProject": "Impossible d'ouvrir le projet récent.",
      "couldNotLoadRecentProject": "Impossible de charger le projet récent.",
      "couldNotSaveProject": "Impossible d'enregistrer le projet.",
      "couldNotExportHtml": "Impossible d'exporter le projet en HTML.",
      "osmPbfNoFeatures": "Aucune entité de point, ligne ou polygone n'a été trouvée dans ce fichier OSM PBF.",
      "couldNotLoadOsmPbf": "Impossible de charger le fichier OSM PBF.",
      "osmPbfLoadFailedWithHint": "{{message}} S'il s'agit d'une tuile vectorielle Mapbox (.pbf), elle ne peut pas être chargée comme extrait OSM.",
      "osmPbfTooLarge": "Cet extrait OSM est trop volumineux à charger et a manqué de mémoire ou de temps. Essayez une région plus petite, ou pré-filtrez le fichier d'abord (par exemple avec osmium-tool ou QGIS) avant de le charger.",
      "couldNotOpenOsmPbf": "Impossible d'ouvrir le fichier OSM PBF.",
      "invalidOsmPbfUrl": "Entrez une URL http(s) valide vers un fichier .osm.pbf.",
      "couldNotDownloadOsmPbf": "Impossible de télécharger le fichier OSM PBF.",
      "scenegraphModelUrlRequired": "Entrez une URL de modèle glTF/GLB.",
      "scenegraphInvalidLngLat": "Entrez une longitude et une latitude valides.",
      "scenegraphOutOfRange": "La longitude doit être comprise entre -180 et 180, et la latitude entre -90 et 90.",
      "scenegraphNoPointFeatures": "Le GeoJSON n'a pas d'entités ponctuelles où placer des modèles."
    },
    "scenegraph": {
      "modelUrl": "URL du modèle glTF / GLB",
      "placement": "Placement",
      "placementSingle": "Emplacement unique",
      "placementData": "Depuis des données de points",
      "longitude": "Longitude",
      "latitude": "Latitude",
      "scale": "Échelle",
      "bearing": "Orientation°",
      "altitude": "Altitude m"
    },
    "sqlWorkspace": {
      "description": {
        "postgis": "Exécutez du SQL PostGIS sur les couches chargées. L'extension PostGIS est chargée, donc les fonctions ST_* sont disponibles. La première exécution charge un moteur de base de données d'environ 19 Mo.",
        "duckdb": "Exécutez du SQL DuckDB sur les couches, fichiers et URLs chargés. L'extension spatiale est chargée, donc les fonctions ST_* sont disponibles. Les URLs cloud (s3://, gs://, az://) sont prises en charge pour les données publiques.",
        "sedona": "Exécutez du SQL spatial Apache Sedona sur les couches chargées. S'exécute dans le navigateur via CereusDB (une compilation WebAssembly de SedonaDB) ; sur le bureau, il utilise le sidecar SedonaDB lorsque l'extra sedona optionnel est installé. Les fonctions ST_* sont disponibles."
      },
      "title": "Espace de travail SQL",
      "engine": "Moteur SQL",
      "resize": "Redimensionner l'espace de travail SQL",
      "resizeEditor": "Redimensionner les volets éditeur et résultats",
      "collapse": "Réduire l'espace de travail SQL",
      "expand": "Développer l'espace de travail SQL",
      "close": "Fermer l'espace de travail SQL",
      "run": "Exécuter",
      "runHint": "Exécuter (Ctrl/Cmd+Entrée)",
      "clear": "Effacer",
      "completions": "Complétions",
      "placeholder": "SQL ici · Ctrl/Cmd+Entrée pour exécuter · Tab ou Ctrl+Espace pour l'autocomplétion",
      "resultsPlaceholder": "Exécutez une requête pour voir les résultats ici.",
      "queryableHint": "Couches interrogeables : {{names}}",
      "queryableLayers": "Couches interrogeables :",
      "queryLabel": "Requête SQL",
      "engineOption": "Moteur : {{name}}",
      "sampleQueries": "Requêtes d'exemple…",
      "sampleQueriesLabel": "Insérer une requête d'exemple",
      "history": "Historique…",
      "historyLabel": "Réutiliser une requête de l'historique",
      "sampleForLayer": "Requête d'exemple pour la couche…",
      "sampleForLayerLabel": "Insérer une requête d'exemple pour une couche",
      "noLayersEngine": "Aucune couche vectorielle n'est encore chargée comme table. Chargez une couche vectorielle pour l'interroger avec {{engine}}.",
      "noLayersReaders": "Aucune couche vectorielle n'est encore chargée comme table. Vous pouvez toujours lire des fichiers et des URLs avec read_parquet(), read_csv_auto() ou ST_Read().",
      "layerName": "Nom de la couche",
      "layerNamePlaceholder": "Nom de la couche (facultatif)",
      "addAsLayer": "Ajouter comme couche",
      "exportCsv": "Exporter en CSV",
      "exportGeoParquet": "Exporter en GeoParquet",
      "addedAsLayer_one": "{{count}} entité ajoutée à la carte sous « {{name}} ».",
      "addedAsLayer_other": "{{count}} entités ajoutées à la carte sous « {{name}} ».",
      "addAsQueryLayer": "Ajouter comme couche de requête",
      "addAsQueryLayerHint": "Ajouter le résultat comme couche dynamique qui réexécute ce SQL à chaque actualisation",
      "addedAsQueryLayer_one": "{{count}} entité ajoutée à la carte comme couche de requête « {{name}} ». Actualisez-la depuis le panneau Couches pour réexécuter le SQL.",
      "addedAsQueryLayer_other": "{{count}} entités ajoutées à la carte comme couche de requête « {{name}} ». Actualisez-la depuis le panneau Couches pour réexécuter le SQL.",
      "savedAs": "{{label}} enregistré sous {{name}}.",
      "noRows": "Instruction exécutée. Aucune ligne renvoyée.",
      "showingRows": "Affichage des {{shown}} premières lignes sur {{total}}. Exportez pour toutes les voir.",
      "rowsCount_one": "{{count}} ligne",
      "rowsCount_other": "{{count}} lignes",
      "columnsCount_one": "{{count}} colonne",
      "columnsCount_other": "{{count}} colonnes",
      "samples": {
        "countriesGeom": "Pays avec géométrie",
        "attributesOnly": "Attributs uniquement (sans géométrie)",
        "populationByContinent": "Population par continent (agrégat)",
        "mostPopulous": "Pays les plus peuplés (géométrie)",
        "countryCentroids": "Centroïdes des pays (spatial)",
        "largestByArea": "Plus grands pays par superficie (spatial)",
        "postgisVersion": "Version de PostGIS",
        "makePoint": "Créer un point (géométrie)",
        "firstRows": "Premières lignes d'une couche",
        "featureCount": "Nombre d'entités",
        "layerCentroids": "Centroïdes d'une couche (spatial)",
        "bufferFeatures": "Zone tampon de 0,01 deg sur les entités (spatial)",
        "boundingBox": "Boîte englobante d'une couche (spatial)",
        "bufferPoint": "Zone tampon sur un point (spatial)",
        "areaPerFeature": "Superficie de chaque entité (spatial)"
      }
    }
  },
  "selection": {
    "byExpressionTitle": "Sélectionner par expression",
    "byExpressionDescription": "Sélectionnez les entités dont les attributs correspondent à une expression booléenne. Les correspondances deviennent la sélection active, surlignée sur la carte et dans la table d'attributs.",
    "byLocationTitle": "Sélectionner par localisation",
    "byLocationDescription": "Sélectionnez des entités selon leur relation spatiale avec les entités d'une autre couche.",
    "targetLayer": "Sélectionner les entités de",
    "referenceLayer": "En les comparant aux entités de",
    "predicate": "Où l'entité",
    "predicateIntersects": "Intersecte",
    "predicateWithin": "Est à l'intérieur de",
    "predicateContains": "Contient",
    "predicateDisjoint": "Est disjointe (aucune intersection)",
    "mode": "Modifier la sélection actuelle en",
    "modeNew": "Créant une nouvelle sélection",
    "modeAdd": "Ajoutant à la sélection actuelle",
    "modeRemove": "Retirant de la sélection actuelle",
    "modeIntersect": "Sélectionnant au sein de la sélection actuelle",
    "expression": "Expression",
    "expressionPlaceholder": "[\">=\", [\"get\", \"population\"], 100000]",
    "expressionTarget": "Filtre de sélection",
    "openBuilder": "Constructeur d'expressions...",
    "invalidExpression": "Entrez une expression booléenne valide.",
    "select": "Sélectionner les entités",
    "noLayers": "Ajoutez une couche vectorielle avec des entités pour effectuer une sélection.",
    "needTwoLayers": "La sélection par localisation nécessite deux couches vectorielles avec des entités.",
    "summary": "{{selected}} entité(s) sur {{total}} sélectionnée(s) ({{matched}} correspondante(s)).",
    "evaluationErrors": "{{count}} entité(s) n'ont pas pu être évaluées et n'ont pas été retenues.",
    "unevaluableDisjoint": "{{count}} entité(s) ont été exclues car leur géométrie n'a pas pu être évaluée.",
    "tooManyPairs": "Cette comparaison nécessite {{pairs}} tests de paires d'entités (limite {{limit}}). Utilisez plutôt Traitement → GeoLibre → Vecteur → Sélection par localisation avec le moteur Sidecar.",
    "exportedLayerName": "{{name}} (sélection)"
  },
  "loadEditorFeatures": {
    "menuItem": "Charger des entités dans l'éditeur…",
    "title": "Charger des entités dans l'éditeur",
    "collapse": "Réduire le panneau",
    "expand": "Développer le panneau",
    "description": "Chargez les entités vectorielles visibles dans la vue actuelle de la carte dans le GeoEditor pour les modifier, puis enregistrez toutes les entités ou seulement vos modifications en GeoJSON.",
    "vectorLayer": "Couche vectorielle",
    "selectPlaceholder": "Sélectionner une couche…",
    "refresh": "Actualiser la liste des couches",
    "noLayers": "Aucune couche vectorielle n'est dans la vue actuelle. Ajoutez une couche vectorielle ou déplacez-vous vers une zone du fond de carte avec des entités vectorielles, puis actualisez.",
    "editSessionActive": "Terminez la modification de géométrie sur place (panneau Couches → Terminer la modification de la géométrie) avant de charger ou d'enregistrer des entités ici.",
    "editorName": "Nom de l'éditeur",
    "editorNamePlaceholder": "Votre nom (facultatif)",
    "loadFeatures": "Charger les entités",
    "loading": "Chargement des entités…",
    "selectLayer": "Veuillez d'abord sélectionner une couche.",
    "noneInView": "Aucune entité trouvée dans la vue actuelle pour cette couche.",
    "editorUnavailable": "Impossible d'activer le GeoEditor. Réessayez une fois la carte entièrement chargée.",
    "noEditable": "Aucune entité modifiable n'a été trouvée dans la vue actuelle pour cette couche.",
    "loaded": "{{count}} entité(s) chargée(s) depuis « {{layer}} ».",
    "appended": "{{count}} entité(s) ajoutée(s) depuis « {{layer}} ».",
    "loadedWithDropped": "{{message}} ({{dropped}} invalide(s) ignorée(s))",
    "loadFailed": "Échec du chargement des entités dans l'éditeur.",
    "confirmExisting": "L'éditeur contient déjà {{count}} entité(s). Les ajouter à celles-ci, ou tout écraser ?",
    "tooMany": "Charger {{count}} entités peut rendre l'éditeur lent à répondre. Les charger quand même ?",
    "loadAnyway": "Charger quand même",
    "append": "Ajouter",
    "appendHint": "Ajouter les nouvelles entités à celles existantes.",
    "discard": "Écraser",
    "discardHint": "Supprimer les entités existantes et charger les nouvelles.",
    "noChanges": "Aucune modification à enregistrer pour le moment.",
    "nothingToSave": "Aucune entité à enregistrer.",
    "saved": "{{count}} entité(s) enregistrée(s).",
    "savedChanges": "Modifications enregistrées : {{added}} ajoutée(s), {{modified}} modifiée(s), {{deleted}} supprimée(s).",
    "saveFailed": "Échec de l'enregistrement des entités.",
    "saveChanges": "Enregistrer les modifications",
    "saveChangesHint": "Enregistrer uniquement les entités que vous avez ajoutées, modifiées ou supprimées.",
    "saveAll": "Tout enregistrer"
  },
  "geocode": {
    "title": "Géocoder des adresses",
    "description": "Géocodez un CSV d'adresses en une couche de points. Chaque ligne appariée devient un point portant les colonnes d'origine plus les coordonnées résolues et le score de correspondance.",
    "chooseFile": "Choisir un fichier CSV",
    "noFile": "Aucun fichier CSV sélectionné.",
    "fileLoaded": "{{name}} ({{count}} lignes)",
    "provider": "Fournisseur de géocodage",
    "providerHint": "Les clés API et les points de terminaison sont gérés dans Paramètres.",
    "apiKeyRequired": "{{provider}} nécessite une clé API. Ajoutez-en une dans Paramètres pour obtenir des résultats.",
    "corsNote": "Google n'autorise pas officiellement les requêtes de navigateur vers son API de géocodage ; les requêtes peuvent être bloquées sauf si elles passent par un proxy de même origine.",
    "addressColumn": "Colonne d'adresse",
    "run": "Démarrer le géocodage",
    "cancel": "Annuler",
    "outputPlaceholder": "La progression apparaîtra ici.",
    "usingEndpoint": "Utilisation de {{endpoint}}",
    "usingProvider": "Utilisation de {{provider}} ({{endpoint}})",
    "rowCapWarning": "Seules les {{cap}} premières lignes seront géocodées pour respecter la politique d'utilisation publique de Nominatim. Configurez un point de terminaison auto-hébergé pour des lots plus importants.",
    "skippedEmpty": "{{count}} ligne(s) avec une adresse vide ignorée(s).",
    "progress": "Géocodage ligne {{current}} sur {{total}} : {{address}}",
    "summary": "{{matched}} sur {{total}} ligne(s) géocodée(s) ; {{failed}} sans correspondance.",
    "failedRows": "Lignes sans correspondance : {{rows}}",
    "noMatches": "Aucune ligne n'a pu être géocodée.",
    "cancelledNoRows": "Annulé avant le géocodage de toute ligne.",
    "cancelled": "Annulé. {{matched}} ligne(s) appariée(s) ajoutée(s).",
    "error": "Erreur : {{message}}",
    "reverseLookingUp": "Recherche de l'adresse...",
    "reverseNoAddress": "Aucune adresse trouvée.",
    "reverseCopyAddress": "Copier l'adresse",
    "reverseFailed": "Échec du géocodage inverse."
  },
  "graticule": {
    "title": "Quadrillage",
    "controlTitle": "Paramètres du quadrillage",
    "gridType": "Type de grille",
    "typeGeographic": "Géographique (lat/long)",
    "typeUtm": "UTM (est/nord)",
    "spacing": "Espacement",
    "spacingAuto": "Auto (selon le zoom)",
    "spacingFixed": "Intervalle fixe",
    "interval": "Intervalle (°)",
    "intervalMeters": "Intervalle (m)",
    "lineColor": "Couleur de ligne",
    "lineWidth": "Épaisseur de ligne",
    "lineOpacity": "Opacité de ligne",
    "dashedLines": "Lignes en pointillés",
    "showLabels": "Afficher les étiquettes",
    "labelFormat": "Format des étiquettes",
    "formatDecimal": "Degrés décimaux",
    "formatDms": "Deg/Min/Sec",
    "labelEdges": "Bords étiquetés",
    "edgesLeftBottom": "Gauche + bas",
    "edgesAll": "Tous les côtés",
    "labelColor": "Couleur des étiquettes",
    "labelSize": "Taille des étiquettes"
  },
  "h3Plugin": {
    "title": "Grille H3",
    "controlTitle": "Paramètres de la grille H3",
    "autoResolution": "Résolution automatique",
    "resolution": "Résolution",
    "cellCount": "Cellules dans la vue : {{count}}",
    "tooManyCells": "Cette vue dépasse la limite de {{limit}} cellules. Zoomez ou réduisez la résolution.",
    "fillColor": "Couleur de remplissage",
    "fillOpacity": "Opacité du remplissage",
    "lineColor": "Couleur du contour",
    "lineWidth": "Épaisseur du contour",
    "showLabels": "Afficher les identifiants de cellule",
    "identifyHint": "Cliquez sur la carte pour identifier une cellule H3.",
    "selectedCell": "Cellule sélectionnée",
    "noSelection": "Aucune cellule sélectionnée",
    "copyId": "Copier l'identifiant",
    "copied": "Copié",
    "parent": "Cellule parente",
    "children": "Cellules enfants",
    "neighbors": "Voisines",
    "baseCell": "Cellule de base",
    "center": "Centre",
    "pentagon": "Pentagone",
    "yes": "Oui",
    "no": "Non",
    "zoomToCell": "Zoomer sur la cellule",
    "addAsLayer": "Ajouter la grille comme couche",
    "exportGeoJson": "Exporter en GeoJSON",
    "exportCsv": "Exporter en CSV",
    "includeNeighbors": "Inclure les cellules voisines de la cellule sélectionnée",
    "includeParents": "Inclure les cellules parentes de la cellule sélectionnée",
    "showIcosahedron": "Afficher l'icosaèdre"
  },
  "timelapse": {
    "title": "Timelapse",
    "provider": "Source d'imagerie",
    "legend": "Légende",
    "yearSlider": "Année du timelapse",
    "play": "Lecture",
    "pause": "Pause",
    "speed": "Vitesse",
    "secondsPerYear": "Secondes par année",
    "secondsPerYearSuffix": "s/an",
    "loop": "Boucle",
    "record": "Enregistrer une vidéo",
    "stopRecording": "Arrêter l'enregistrement",
    "recording": "Enregistrement",
    "recordingFailed": "Échec de l'enregistrement.",
    "recordingUnsupported": "L'enregistrement du canevas n'est pas pris en charge par ce navigateur.",
    "loadingTiles": "Chargement des tuiles…"
  },
  "mapillary": {
    "title": "Mapillary",
    "hint": "Cliquez sur un point de couverture sur la carte pour voir l'imagerie au niveau de la rue.",
    "noToken": "Un jeton d'accès Mapillary est requis pour charger la couverture et l'imagerie. Collez-en un ci-dessous pour commencer.",
    "tokenPlaceholder": "MLY|…",
    "tokenSave": "Enregistrer le jeton",
    "tokenHelp": "Obtenir un jeton",
    "tokenLabel": "Jeton d'accès Mapillary",
    "loading": "Chargement de l'imagerie…",
    "loadError": "Impossible de charger cette image.",
    "coverageLines": "Séquences Mapillary",
    "coveragePoints": "Images Mapillary"
  },
  "openAerialMap": {
    "hint": "Recherchez des images OpenAerialMap par vue cartographique, zone dessinée ou coordonnées.",
    "search": "Rechercher dans cette vue",
    "loadMore": "Charger plus",
    "searching": "Recherche…",
    "loadingMore": "Chargement…",
    "noResults": "Aucune image trouvée dans cette zone.",
    "showing": "Affichage de {{shown}} images sur {{total}}.",
    "searchError": "Impossible de joindre OpenAerialMap : {{message}}. Veuillez réessayer.",
    "add": "Ajouter",
    "remove": "Retirer",
    "zoom": "Zoom",
    "download": "Télécharger",
    "metadata": "Métadonnées",
    "addTitle": "Ajouter cette image à la carte",
    "removeTitle": "Retirer cette image de la carte",
    "addUnavailableTitle": "Aucun service de tuiles disponible pour cette image",
    "zoomTitle": "Zoomer sur cette image",
    "downloadTitle": "Télécharger le GeoTIFF source",
    "metadataTitle": "Voir les métadonnées de cette image",
    "modeView": "Vue cartographique",
    "modeDraw": "Dessiner une zone",
    "modeBbox": "Coordonnées",
    "drawHint": "Cliquez et faites glisser sur la carte pour dessiner une zone de recherche.",
    "drawStart": "Dessiner une zone sur la carte",
    "drawCancel": "Annuler le dessin",
    "drawnBox": "Zone de recherche : {{box}}",
    "coordWest": "Ouest",
    "coordSouth": "Sud",
    "coordEast": "Est",
    "coordNorth": "Nord",
    "coordSearch": "Rechercher dans cette zone",
    "bboxInvalid": "Entrez quatre coordonnées valides avec ouest < est et sud < nord.",
    "footprintsLayer": "Emprises OpenAerialMap",
    "footprintUnavailable": "Aucun service de tuiles disponible pour cette image.",
    "metadataHeading": "Métadonnées de l'image",
    "close": "Fermer",
    "metaTitle": "Titre",
    "metaProvider": "Fournisseur",
    "metaPlatform": "Plateforme",
    "metaResolution": "Résolution",
    "metaAcquired": "Acquise le",
    "metaBounds": "Limites (O, S, E, N)",
    "metaSource": "GeoTIFF source",
    "metaRaw": "Métadonnées brutes"
  },
  "arcgisHub": {
    "hint": "Recherchez des jeux de données publics d'ArcGIS Hub. Ajoutez les couches prises en charge à la carte ou téléchargez les données.",
    "searchPlaceholder": "Rechercher des jeux de données ArcGIS Hub",
    "search": "Rechercher",
    "searchCurrentView": "Rechercher dans la zone actuelle de la carte",
    "enterKeyword": "Saisissez un mot-clé pour commencer.",
    "loadMore": "Charger plus",
    "searching": "Recherche…",
    "loadingMore": "Chargement d'autres jeux de données…",
    "noResults": "Aucun jeu de données public trouvé.",
    "searchError": "Impossible d'effectuer la recherche sur ArcGIS Hub.",
    "showing": "Jeux de données affichés : {{shown}} / {{total}}.",
    "noDescription": "Aucune description fournie.",
    "add": "Ajouter à la carte",
    "adding": "Ajout de {{title}}…",
    "added": "{{title}} ajouté.",
    "addError": "Impossible d'ajouter ce jeu de données.",
    "zoom": "Zoom",
    "download": "Télécharger",
    "preparing": "Préparation de {{title}}…",
    "downloading": "Téléchargement de {{title}} : {{completed}} / {{total}} entités…",
    "downloadStarted": "Téléchargement démarré pour {{title}}.",
    "downloadFirstLayer": "{{title}} comporte {{layerCount}} couches ; seule la première a été téléchargée.",
    "downloadError": "Impossible de télécharger ce jeu de données.",
    "details": "Détails"
  },
  "openDataCatalogs": {
    "socrataHint": "Recherchez dans les catalogues publics de données ouvertes Socrata et ajoutez des jeux de données GeoJSON.",
    "ckanHint": "Recherchez dans le catalogue CKAN de l'Humanitarian Data Exchange et ajoutez les ressources GeoJSON disponibles.",
    "searchPlaceholder": "Rechercher dans {{name}}",
    "search": "Rechercher",
    "enterKeyword": "Saisissez un mot-clé pour commencer.",
    "loadMore": "Charger plus",
    "searching": "Recherche…",
    "noResults": "Aucun jeu de données trouvé.",
    "showing": "Jeux de données affichés : {{shown}} / {{total}}.",
    "noDescription": "Aucune description fournie.",
    "add": "Ajouter à la carte",
    "details": "Détails",
    "adding": "Ajout de {{title}}…",
    "added": "{{title}} ajouté.",
    "addError": "Impossible d'ajouter le jeu de données.",
    "searchError": "Échec de la recherche."
  },
  "earthdataGis": {
    "hint": "Recherchez dans NASA Earthdata GIS des services d'imagerie, de cartes et d'entités.",
    "searchPlaceholder": "Rechercher dans Earthdata GIS…",
    "search": "Rechercher",
    "searching": "Recherche…",
    "loadingMore": "Chargement supplémentaire…",
    "loadMore": "Charger plus",
    "noResults": "Aucun service ne correspond à cette recherche.",
    "showing": "Services affichés : {{shown}} sur {{total}}.",
    "searchError": "Impossible de joindre Earthdata GIS : {{message}}. Veuillez réessayer.",
    "limitToView": "Limiter à la vue de la carte",
    "limitToViewTitle": "Ne renvoyer que les services qui intersectent la vue actuelle de la carte",
    "filterAll": "Tous",
    "filterImage": "Imagerie",
    "filterMap": "Cartes",
    "filterFeature": "Entités",
    "kindImage": "Service d'imagerie",
    "kindMap": "Service de carte",
    "kindFeature": "Service d'entités",
    "kindWebMap": "Carte web",
    "filterWebMap": "Cartes web",
    "webMapAdded_one": "{{count}} couche ajoutée depuis cette carte web.",
    "webMapAdded_other": "{{count}} couches ajoutées depuis cette carte web.",
    "webMapAddedPartial": "Couches ajoutées : {{added}} sur {{total}} depuis cette carte web ; les autres n'ont pas pu être jointes.",
    "webMapEmpty": "cette carte web ne contient aucune couche que GeoLibre puisse afficher.",
    "add": "Ajouter",
    "adding": "Ajout…",
    "remove": "Retirer",
    "zoom": "Zoom",
    "details": "Détails",
    "portal": "Portail",
    "portalTitle": "Ouvrir cet élément sur le portail Earthdata GIS",
    "cog": "COG",
    "cogTitle": "Télécharger ce service au format Cloud Optimized GeoTIFF",
    "cogHeading": "Télécharger en COG",
    "cogAreaView": "Vue actuelle",
    "cogAreaExtent": "Emprise complète",
    "cogSize": "Taille d'export : {{width}} x {{height}} px",
    "cogResolution": "Résolution au sol : {{metres}} m/px",
    "cogNote": "Le service est réexporté à cette taille puis réencodé en COG : il s'agit donc d'une vue rééchantillonnée de la zone, et non du raster source à sa résolution native.",
    "cogDownload": "Télécharger",
    "cogDownloading": "Export et conversion en cours…",
    "cogRetrying": "Le service a refusé cette taille ; nouvel essai en {{width}} x {{height}} px…",
    "cogConverting": "Conversion en COG…",
    "cogDone": "COG enregistré en {{width}} x {{height}} px.",
    "cogFailed": "Impossible de télécharger le COG : {{message}}",
    "cogUnavailable": "Le téléchargement nécessite l'application de bureau ou une boîte de dialogue d'enregistrement du navigateur.",
    "cancel": "Annuler",
    "addTitle": "Ajouter ce service à la carte",
    "removeTitle": "Retirer ce service de la carte",
    "zoomTitle": "Zoomer sur ce service",
    "zoomUnavailableTitle": "Ce service ne publie pas d'emprise",
    "detailsTitle": "Afficher les métadonnées de ce service",
    "addError": "Impossible d'ajouter le service : {{message}}",
    "addTimeout": "il n'a pas répondu en moins d'une minute. La couche apparaîtra tout de même si l'opération se termine.",
    "zoomedToData": "Zoom au-delà de l'emprise complète de cette couche : le service ne s'affiche qu'aux niveaux de zoom supérieurs.",
    "detailsHeading": "Détails du service",
    "close": "Fermer",
    "metaTitle": "Titre",
    "metaType": "Type",
    "metaSummary": "Résumé",
    "metaDescription": "Description",
    "metaOwner": "Publié par",
    "metaModified": "Dernière modification",
    "metaTags": "Étiquettes",
    "metaExtent": "Emprise (O, S, E, N)",
    "metaCredits": "Crédits",
    "metaLicense": "Conditions d'utilisation",
    "metaService": "URL du service",
    "metaPortalItem": "Élément du portail",
    "metaRaw": "Métadonnées brutes"
  },
  "sourceCoop": {
    "hint": "Recherchez des données géospatiales ouvertes sur Source Cooperative, ou entrez un identifiant de compte/produit.",
    "searchPlaceholder": "Rechercher des données, ou compte/produit",
    "search": "Rechercher",
    "searching": "Recherche…",
    "loading": "Chargement du catalogue…",
    "loadError": "Impossible de joindre Source Cooperative : {{message}}. Veuillez réessayer.",
    "noResults": "Aucun produit correspondant.",
    "retry": "Réessayer",
    "featured": "En vedette",
    "showing": "Affichage de {{shown}} produits sur {{total}}.",
    "browseAccount": "Parcourir tous les produits de {{account}}",
    "back": "Retour",
    "files": "Fichiers",
    "noFiles": "Aucun fichier dans ce dossier.",
    "loadingFiles": "Chargement des fichiers…",
    "loadMore": "Charger plus",
    "parent": "Remonter d'un niveau",
    "add": "Ajouter",
    "adding": "Ajout…",
    "added": "Ajouté",
    "stream": "Diffuser",
    "streaming": "Diffusion",
    "remove": "Retirer",
    "download": "Télécharger",
    "copyUrl": "Copier l'URL",
    "copied": "Copié",
    "openProduct": "Ouvrir sur source.coop",
    "addTitle": "Ajouter ce fichier à la carte",
    "streamTitle": "Interrogez ce fichier là où il se trouve, en ne lisant que les parties visibles. Le fichier entier n'est jamais copié dans DuckDB — idéal pour les fichiers volumineux.",
    "removeTitle": "Retirer ce fichier de la carte",
    "downloadTitle": "Télécharger ce fichier",
    "copyUrlTitle": "Copier l'URL de ce fichier",
    "openProductTitle": "Ouvrir la page de ce produit sur source.coop",
    "unsupportedTitle": "GeoLibre ne peut pas afficher ce format — téléchargez-le à la place",
    "addError": "Impossible d'ajouter ce fichier : {{message}}",
    "largeFileWarning": "Ce fichier fait {{size}}. Il est diffusé depuis la source, donc seules les parties visibles sont lues.",
    "streamHint": "Ce fichier fait {{size}}. « Ajouter » le copie en mémoire ; « Diffuser » ne lit que les parties visibles.",
    "tooLargeToOpen": "Ce fichier fait {{size}} — trop volumineux pour être ouvert par le navigateur (limite de {{limit}}). Téléchargez-le, ou utilisez une version partitionnée de ce jeu de données."
  },
  "huggingFace": {
    "browseTab": "Parcourir",
    "uploadTab": "Téléverser",
    "settingsTab": "Paramètres",
    "hint": "Recherchez des dépôts de jeux de données sur Hugging Face, ou saisissez un nom de compte ou un identifiant owner/dataset.",
    "searchPlaceholder": "Rechercher des jeux de données, un compte ou owner/dataset",
    "search": "Rechercher",
    "searching": "Recherche…",
    "loadError": "Impossible de joindre Hugging Face : {{message}}. Veuillez réessayer.",
    "noResults": "Aucun jeu de données correspondant.",
    "retry": "Réessayer",
    "suggestions": "Jeux de données suggérés",
    "showing_one": "{{count}} jeu de données.",
    "showing_other": "{{count}} jeux de données.",
    "browseOwner": "Parcourir tous les jeux de données de {{owner}}",
    "back": "Retour",
    "private": "Privé",
    "gated": "Accès restreint",
    "privateHint": "Ce jeu de données est privé ou à accès restreint. Ses fichiers nécessitent une requête authentifiée, ce qu'une source cartographique ne peut pas faire ; ils ne peuvent donc être ni ajoutés ni téléchargés ici.",
    "stats": "{{likes}} j'aime · {{downloads}} téléchargements",
    "noFiles": "Aucun fichier dans ce dossier.",
    "loadingFiles": "Chargement des fichiers…",
    "loadMore": "Charger plus",
    "parent": "Remonter d'un niveau",
    "add": "Ajouter",
    "adding": "Ajout…",
    "stream": "Diffuser",
    "streaming": "Diffusion",
    "remove": "Retirer",
    "download": "Télécharger",
    "copyUrl": "Copier l'URL",
    "copied": "Copié",
    "openDataset": "Ouvrir sur Hugging Face",
    "addTitle": "Ajouter ce fichier à la carte",
    "streamTitle": "Interrogez ce fichier là où il se trouve, en ne lisant que les parties visibles. Le fichier entier n'est jamais copié dans DuckDB — idéal pour les fichiers volumineux.",
    "removeTitle": "Retirer ce fichier de la carte",
    "downloadTitle": "Télécharger ce fichier",
    "copyUrlTitle": "Copier l'URL de ce fichier",
    "openDatasetTitle": "Ouvrir la page de ce jeu de données sur huggingface.co",
    "unsupportedTitle": "GeoLibre ne peut pas afficher ce format — téléchargez-le à la place",
    "addError": "Impossible d'ajouter ce fichier : {{message}}",
    "notRasterIndex": "Ce fichier JSON n'indexe aucun raster, il n'y a donc rien à placer sur la carte. Les MosaicJSON et les collections STAC sont pris en charge.",
    "largeFileWarning": "Ce fichier fait {{size}}. Il est diffusé depuis la source, donc seules les parties visibles sont lues.",
    "streamHint": "Ce fichier fait {{size}}. « Ajouter » le copie en mémoire ; « Diffuser » ne lit que les parties visibles.",
    "tooLargeToOpen": "Ce fichier fait {{size}} — trop volumineux pour être ouvert par le navigateur (limite de {{limit}}). Téléchargez-le, ou utilisez une version partitionnée de ce jeu de données.",
    "tokenLabel": "Jeton d'accès",
    "tokenHint": "Créer un dépôt de jeu de données et téléverser des fichiers nécessite un jeton d'accès Hugging Face avec accès en écriture. Il est stocké uniquement dans ce navigateur et envoyé à huggingface.co seulement.",
    "tokenPlaceholder": "hf_…",
    "tokenSave": "Enregistrer le jeton",
    "tokenClear": "Effacer",
    "tokenHelp": "Obtenir un jeton",
    "tokenChecking": "Vérification du jeton…",
    "tokenError": "Impossible de vérifier ce jeton : {{message}}",
    "signedInAs": "Connecté en tant que {{name}}",
    "readOnlyToken": "Ce jeton est en lecture seule. Créez un jeton avec accès en écriture pour téléverser.",
    "createHeading": "Créer un dépôt de jeu de données",
    "ownerLabel": "Propriétaire",
    "datasetNameLabel": "Nom du jeu de données",
    "datasetNamePlaceholder": "my-geodata",
    "privateLabel": "Privé",
    "create": "Créer",
    "creating": "Création…",
    "createdRepo": "{{repoId}} créé.",
    "createError": "Impossible de créer ce jeu de données : {{message}}",
    "uploadHeading": "Téléverser des fichiers",
    "targetLabel": "Jeu de données",
    "targetPlaceholder": "owner/dataset",
    "folderLabel": "Dossier (facultatif)",
    "folderPlaceholder": "data/",
    "chooseFiles": "Choisir des fichiers",
    "chooseLayer": "Choisir une couche",
    "chooseLayerTitle": "Téléverser les entités d'une couche de la carte sous forme de fichier GeoJSON",
    "layerPickerHeading": "Téléverser une couche en GeoJSON",
    "layerFeatures_one": "{{count}} entité",
    "layerFeatures_other": "{{count}} entités",
    "layerOriginalFile": "Fichier d'origine",
    "layerUnavailable": "{{name}} n'est plus disponible pour le téléversement.",
    "remoteRasterNote": "Les rasters chargés depuis une URL ne sont pas listés : leurs données ne sont pas dans le navigateur, et ils disposent déjà d'un lien que vous pouvez partager. Seuls les fichiers ouverts localement peuvent être téléversés.",
    "noUploadableLayers": "Aucune couche de la carte ne contient d'entités téléversables. Ajoutez d'abord une couche vectorielle.",
    "clearSelection": "Effacer",
    "selectedFiles_one": "{{count}} fichier sélectionné ({{size}}).",
    "selectedFiles_other": "{{count}} fichiers sélectionnés ({{size}}).",
    "commitMessageLabel": "Message de commit (facultatif)",
    "commitMessagePlaceholder": "Téléversé avec GeoLibre",
    "upload": "Téléverser",
    "uploadPreparing": "Préparation du téléversement…",
    "uploadHashing": "Calcul de l'empreinte de {{name}} ({{index}}/{{total}})…",
    "uploadSending": "Téléversement de {{name}} ({{index}}/{{total}})…",
    "uploadCommitting": "Commit en cours…",
    "uploadDone_one": "{{count}} fichier téléversé.",
    "uploadDone_other": "{{count}} fichiers téléversés.",
    "uploadError": "Échec du téléversement : {{message}}",
    "fileTooLarge": "{{name}} dépasse la limite de téléversement de {{limit}}.",
    "selectionTooLarge": "Les fichiers sélectionnés totalisent {{size}}, au-delà de la limite de {{limit}} pour un seul téléversement. Téléversez-les par lots plus petits.",
    "openUploaded": "Ouvrir le jeu de données",
    "rgbHeading": "Imagerie multibande",
    "rgbHint": "Choisissez les bandes correspondant au rouge, au vert et au bleu lorsqu'une image en comporte trois ou plus. Numérotation à partir de 1 ; le panneau Styles peut toujours modifier n'importe quelle couche par la suite.",
    "bandR": "Rouge",
    "bandG": "Vert",
    "bandB": "Bleu",
    "colormapHeading": "Imagerie monobande",
    "colormapHint": "La palette de couleurs appliquée lorsqu'une image ne comporte qu'une bande.",
    "colormapLabel": "Palette de couleurs",
    "engineHeading": "Moteur de rendu",
    "engineHint": "Quel moteur décode l'imagerie. Contrairement aux réglages ci-dessus, celui-ci ne s'applique pas par couche : il concerne tous les rasters de la carte, y compris ceux déjà ajoutés.",
    "engineLabel": "Moteur",
    "engineAuto": "Laisser inchangé",
    "engineGpu": "GPU (deck.gl)",
    "engineWasm": "Générateur de tuiles WebAssembly",
    "engineTitiler": "Serveur TiTiler",
    "resetDefaults": "Réinitialiser les valeurs par défaut"
  },
  "basemaps": {
    "confirmStyleReplace_one": "Passer à « {{name}} » remplace tout le style de la carte et supprimera le fond de carte superposé que vous avez ajouté. Continuer ?",
    "confirmStyleReplace_other": "Passer à « {{name}} » remplace tout le style de la carte et supprimera les {{count}} fonds de carte superposés que vous avez ajoutés. Continuer ?"
  },
  "annotations": {
    "toolbar": "Outils d'annotation",
    "layerName": "Annotations",
    "elementsPanelTitle": "Éléments",
    "tools": {
      "text": "Texte",
      "arrow": "Flèche",
      "rectangle": "Surlignage rectangulaire",
      "ellipse": "Surlignage elliptique",
      "freehand": "Surlignage à main levée",
      "pin": "Épingle",
      "sticky_note": "Pense-bête",
      "placed_image": "Image placée"
    },
    "color": "Couleur d'annotation",
    "width": "Épaisseur de ligne",
    "widthOptions": {
      "thin": "Fine",
      "medium": "Moyenne",
      "thick": "Épaisse"
    },
    "deleteLast": "Supprimer la dernière annotation",
    "clearAll": "Effacer toutes les annotations",
    "textPlaceholder": "Saisissez l'étiquette, Entrée pour placer",
    "pinTitlePrompt": "Titre",
    "pinDescPrompt": "Description",
    "stickyNotePrompt": "Contenu de la note",
    "imageUrlPrompt": "URL de l'image",
    "cancel": "Annuler",
    "saveElement": "Enregistrer l'élément",
    "atPoint": "Au point",
    "pinnedToExtent": "Ancré à l'emprise"
  },
  "pythonConsole": {
    "title": "Console Python",
    "resize": "Redimensionner la console Python",
    "clear": "Effacer la sortie",
    "collapse": "Réduire la console Python",
    "expand": "Développer la console Python",
    "close": "Fermer la console Python",
    "run": "Exécuter",
    "runHint": "Exécuter (Ctrl/Cmd+Entrée)",
    "completions": "Complétions",
    "placeholder": "Python ici · Ctrl/Cmd+Entrée pour exécuter · Tab pour l'autocomplétion · ↑/↓ pour l'historique",
    "intro": "Console Python prête. Utilisez l'objet `geolibre` pour scripter la carte, p. ex. geolibre.get_center(). Tab autocomplète, ↑/↓ rappelle les commandes précédentes, et `await geolibre.load_package(\"numpy\")` ajoute des paquets.",
    "loadFailed": "Échec du chargement de l'environnement d'exécution Python.",
    "showEditor": "Afficher l'éditeur",
    "hideEditor": "Masquer l'éditeur",
    "resizeEditor": "Redimensionner l'éditeur",
    "fileNew": "Nouveau script",
    "fileOpen": "Ouvrir un script…",
    "fileSave": "Enregistrer le script (Ctrl/Cmd+S)",
    "fileSaveAs": "Enregistrer le script sous…",
    "clearEditor": "Effacer l'éditeur",
    "runScript": "Exécuter le script ou la sélection (Ctrl/Cmd+Entrée)",
    "untitled": "sans_titre.py",
    "discardChanges": "Annuler les modifications non enregistrées du script actuel ?",
    "editorPlaceholder": "Écrivez un script Python multi-ligne ici. Ctrl/Cmd+Entrée l'exécute (ou la sélection) dans la console ; Tab indente ; Ctrl+Espace autocomplète."
  },
  "notebook": {
    "title": "Notebook",
    "resize": "Redimensionner le panneau notebook",
    "collapse": "Réduire le notebook",
    "expand": "Développer le notebook",
    "close": "Fermer le notebook",
    "copyServerUrl": "Copier l'URL du serveur pour les clients externes (VS Code…)",
    "serverUrlCopied": "URL du serveur copiée",
    "loading": "Chargement du notebook…",
    "loadFailed": "Échec du chargement du notebook."
  },
  "dashboard": {
    "title": "Tableau de bord",
    "resize": "Redimensionner le panneau du tableau de bord",
    "collapse": "Réduire le tableau de bord",
    "expand": "Développer le tableau de bord",
    "close": "Fermer le tableau de bord",
    "columns": "Colonnes",
    "addWidget": "Ajouter un widget",
    "widgetCount_one": "{{count}} widget",
    "widgetCount_other": "{{count}} widgets",
    "empty": "Pas encore de widgets. Ajoutez un graphique pour résumer une couche.",
    "emptyNoLayers": "Aucune couche compatible trouvée. Ajoutez une couche vectorielle ou de requête DuckDB à votre projet via le menu Ajouter des données ci-dessus, puis revenez ici pour créer des graphiques.",
    "noLayersHint": "Ajoutez d'abord une couche vectorielle ou de requête DuckDB.",
    "layerMissing": "Couche indisponible",
    "noData": "Cette couche n'a pas d'attributs graphiques.",
    "selectorMatches_one": "{{count}} entité sur {{total}}",
    "selectorMatches_other": "{{count}} entités sur {{total}}",
    "selectorClear": "Effacer",
    "moveBack": "Reculer",
    "moveForward": "Avancer",
    "editWidget": "Modifier le widget",
    "removeWidget": "Supprimer le widget",
    "chartType": {
      "histogram": "Histogramme",
      "scatter": "Nuage de points",
      "bar": "Barres",
      "line": "Ligne",
      "box": "Boîte à moustaches",
      "pie": "Camembert",
      "indicator": "Indicateur",
      "selector": "Sélecteur",
      "list": "Liste"
    },
    "aggregate": {
      "count": "Nombre",
      "sum": "Somme",
      "mean": "Moyenne"
    },
    "chart": {
      "emptyNumeric": "Aucune valeur numérique à tracer.",
      "emptyScatter": "Aucune ligne n'a les deux champs définis avec un nombre.",
      "emptyBar": "Aucune ligne à regrouper.",
      "emptyPie": "Aucune valeur positive à représenter.",
      "pieCaptionCount_one": "nombre de lignes · {{count}} catégorie",
      "pieCaptionCount_other": "nombre de lignes · {{count}} catégories",
      "pieCaptionSum_one": "somme · {{count}} catégorie",
      "pieCaptionSum_other": "somme · {{count}} catégories"
    },
    "editor": {
      "addTitle": "Ajouter un widget",
      "editTitle": "Modifier le widget",
      "description": "Choisissez une couche, un type de graphique et les champs à tracer.",
      "noLayers": "Aucune couche graphique. Ajoutez d'abord une couche vectorielle ou de requête DuckDB.",
      "noFields": "Cette couche n'a pas de champs numériques ou catégoriels à représenter.",
      "layer": "Couche",
      "chartType": "Type de graphique",
      "field": "Champ",
      "bins": "Classes",
      "xAxis": "Axe X",
      "yAxis": "Axe Y",
      "category": "Catégorie",
      "aggregate": "Agrégat",
      "value": "Valeur",
      "prefix": "Préfixe",
      "suffix": "Suffixe",
      "multiSelect": "Autoriser la sélection multiple",
      "listColumns": "Colonnes",
      "sortBy": "Trier par",
      "sortDir": "Sens",
      "ascending": "Croissant",
      "descending": "Décroissant",
      "limit": "Limite de lignes",
      "titleLabel": "Titre",
      "titlePlaceholder": "Titre facultatif",
      "color": "Couleur",
      "colorReset": "Réinitialiser",
      "colorDefault": "Couleurs de graphique par défaut",
      "cancel": "Annuler",
      "save": "Enregistrer"
    },
    "indicatorAggregation": {
      "count": "Nombre",
      "sum": "Somme",
      "mean": "Moyenne",
      "min": "Minimum",
      "max": "Maximum",
      "median": "Médiane"
    }
  },
  "assistant": {
    "title": "Assistant IA",
    "resize": "Redimensionner le panneau de l'assistant",
    "clear": "Effacer la conversation",
    "close": "Fermer l'assistant",
    "send": "Envoyer",
    "sendHint": "Envoyer (Ctrl/Cmd+Entrée)",
    "stop": "Arrêter",
    "placeholder": "Posez une question sur vos données, p. ex. « afficher les pays avec une population de plus de 50 millions » · Ctrl/Cmd+Entrée pour envoyer",
    "intro": "Discutez avec vos données. Je peux exécuter du SQL spatial, ajouter ou supprimer des couches, les restyler et déplacer la carte — chaque modification peut être annulée. Essayez « colorer les pays par population avec un dégradé de rouge ».",
    "setupTitle": "Configurer l'assistant IA",
    "setupStatus": "L'assistant a besoin d'un fournisseur d'IA pour réfléchir. Ajoutez des identifiants pour un fournisseur ci-dessous et le panneau passe en mode discussion dès que vous enregistrez.",
    "setupProviders": "Ajouter des identifiants pour un fournisseur",
    "setupOpenSettings": "Ouvrir Paramètres → Fournisseurs d'IA",
    "thinking": "Traitement en cours…",
    "toolError": "échec",
    "provider": "Fournisseur LLM",
    "profile": "Profil IA",
    "deploymentProxy": "Proxy de déploiement",
    "model": "Modèle",
    "codeApprovalTitle": "Exécuter le code de l'assistant ?",
    "codeApprovalBody": "L'assistant veut exécuter du code {{language}} dans l'application. Vérifiez-le d'abord — il peut modifier la carte et accéder aux données de l'application.",
    "codeApprovalAlways": "Autoriser le code de l'assistant pour le reste de cette session",
    "codeApprovalRun": "Exécuter",
    "codeApprovalDecline": "Annuler"
  },
  "storymap": {
    "title": "Story Map",
    "description": "Créez un récit piloté par le défilement à partir de chapitres cartographiques. Chaque chapitre capture une vue de caméra et un texte.",
    "chapters": "Chapitres ({{count}})",
    "addChapter": "Ajouter un chapitre",
    "empty": "Pas encore de chapitres. Naviguez sur la carte, puis ajoutez un chapitre pour capturer la vue actuelle.",
    "defaultChapterTitle": "Chapitre {{index}}",
    "untitledChapter": "Chapitre sans titre",
    "present": "Présenter",
    "exportHtml": "Exporter en HTML",
    "exitPresentation": "Quitter",
    "preview": "Aller à ce chapitre",
    "captureView": "Définir avec la vue actuelle",
    "composeOnMap": "Composer sur la carte",
    "resizeDialog": "Redimensionner la boîte de dialogue",
    "composeMode": {
      "title": "Composition du chapitre",
      "hint": "Déplacez, zoomez et inclinez la carte, puis enregistrez la vue dans ce chapitre.",
      "save": "Enregistrer la vue et revenir à Story Map",
      "cancel": "Annuler",
      "waiting": "Attendez que la carte finisse de se déplacer"
    },
    "moveUp": "Monter",
    "moveDown": "Descendre",
    "onEnter": "À l'entrée",
    "onExit": "À la sortie",
    "addEffect": "Ajouter un effet de couche",
    "field": {
      "title": "Titre",
      "subtitle": "Sous-titre",
      "byline": "Signature",
      "footer": "Pied de page",
      "theme": "Thème du panneau",
      "showMarkers": "Afficher les marqueurs",
      "markerColor": "Couleur du marqueur",
      "inset": "Mini-carte incrustée",
      "hideChapterNav": "Masquer la liste des chapitres",
      "startView": "Activer la vue de démarrage",
      "closingSlide": "Activer la diapositive de clôture",
      "chapterTitle": "Titre du chapitre",
      "description": "Description (HTML autorisé)",
      "image": "URL de l'image",
      "alignment": "Alignement du panneau",
      "animation": "Animation de la carte",
      "hidden": "Masquer le panneau",
      "rotate": "Faire pivoter la caméra",
      "imagePlaceholder": "https://example.com/image.jpg"
    },
    "theme": {
      "dark": "Sombre",
      "light": "Clair"
    },
    "align": {
      "left": "Gauche",
      "center": "Centre",
      "right": "Droite",
      "full": "Pleine largeur"
    },
    "inset": {
      "topLeft": "Haut gauche",
      "topRight": "Haut droite",
      "bottomLeft": "Bas gauche",
      "bottomRight": "Bas droite"
    },
    "slide": {
      "blank": "Écran vide",
      "black": "Écran noir",
      "global": "Vue globale",
      "startAdjacent": "Aperçu du premier chapitre",
      "endAdjacent": "Rester sur le dernier chapitre"
    },
    "loadSample": "Charger une histoire d'exemple",
    "htmlFile": "HTML",
    "handout": {
      "button": "Document (PDF)",
      "title": "Générateur de document PDF",
      "description": "Exportez les vues de chapitres sélectionnées en document PDF multi-pages.",
      "screens": "Écrans ({{count}}/{{total}})",
      "selectAll": "Tout sélectionner",
      "selectNone": "Ne rien sélectionner",
      "paperSize": "Format de papier",
      "orientation": "Orientation",
      "portrait": "Portrait",
      "landscape": "Paysage",
      "documentTitle": "Titre du document",
      "documentTitlePlaceholder": "Titre affiché en haut de chaque page",
      "subtitle": "Sous-titre",
      "subtitlePlaceholder": "Sous-titre affiché sous le titre sur chaque page",
      "byline": "Signature",
      "bylinePlaceholder": "Auteur ou crédit",
      "footerText": "Texte de pied de page",
      "footerPlaceholder": "Pied de page affiché en bas de chaque page",
      "startSlide": "Diapositive de départ",
      "endSlide": "Diapositive de clôture",
      "generate": "Générer le PDF",
      "stop": "Arrêter",
      "cancelled": "Export annulé.",
      "progress": "Capture de la vue {{current}} sur {{total}}…",
      "pdfFile": "Document PDF",
      "noMap": "La carte n'est pas encore prête. Réessayez dans un instant.",
      "noneSelected": "Sélectionnez au moins un écran à exporter."
    },
    "opacityLabel": "Opacité",
    "toggleNav": "Basculer la liste des chapitres",
    "chapterNav": "Chapitres de l'histoire",
    "durationLabel": "Transition (ms)",
    "dragHint": "Faites glisser pour déplacer (double-cliquez pour réinitialiser)",
    "resizeHint": "Faites glisser pour redimensionner",
    "import": "Importer",
    "importJson": "Importer JSON…",
    "importCsv": "Importer CSV…",
    "exportData": "Exporter",
    "exportJson": "Exporter JSON",
    "exportCsv": "Exporter CSV",
    "reset": "Réinitialiser",
    "resetTitle": "Effacer l'histoire et recommencer",
    "resetConfirm": "Effacer cette Story Map ? Tous les chapitres et paramètres seront supprimés afin que vous puissiez créer la vôtre."
  },
  "network": {
    "title": "Analyse de réseau",
    "description": "Isochrones, zones de desserte et matrices de coûts origine-destination à partir de vos couches de points.",
    "heading": "Réseau",
    "run": "Exécuter",
    "outputPlaceholder": "La sortie apparaîtra ici.",
    "endpointNotice": "Les coordonnées des points sont envoyées au serveur de calcul d'itinéraire ({{endpoint}}). La valeur par défaut est un serveur Valhalla public partagé (FOSSGIS), limité en débit. Pour un usage intensif, entrez l'URL de votre propre serveur dans le champ « Serveur de calcul d'itinéraire (Valhalla) » ci-dessus."
  },
  "statistics": {
    "title": "Statistiques spatiales",
    "description": "Autocorrélation spatiale, analyse des points chauds et mesures de densité. Chaque outil s'exécute côté client sur vos couches GeoJSON.",
    "heading": "Statistiques spatiales",
    "run": "Exécuter",
    "requiredFieldLegend": "Indique un champ obligatoire",
    "outputPlaceholder": "La sortie apparaîtra ici."
  },
  "processing": {
    "filePicker": {
      "filePath": "Chemin du fichier",
      "chooseFile": "Choisir un fichier",
      "chooseFilePlaceholder": "Choisir un fichier",
      "chooseInputFile": "Choisir le fichier d'entrée",
      "chooseOutputFile": "Choisir le fichier de sortie"
    },
    "searchTools": "Rechercher des outils",
    "refreshCatalog": "Actualiser le catalogue",
    "increaseValue": "Augmenter la valeur",
    "decreaseValue": "Diminuer la valeur",
    "distance": {
      "unitLabel": "Unité de distance",
      "units": {
        "degrees": "Degrés",
        "meters": "Mètres",
        "kilometers": "Kilomètres",
        "feet": "Pieds",
        "miles": "Milles"
      },
      "north": "{{latitude}}°N",
      "south": "{{latitude}}°S",
      "equator": "l'équateur",
      "geographicNote": "Les couches sélectionnées utilisent un CRS géographique (WGS84), les distances sont donc en degrés. Choisissez une unité à côté d'un champ de distance pour saisir des mètres à la place, ou reprojetez vers un CRS projeté pour des résultats exacts.",
      "converted": "Envoyé à l'outil sous la forme {{degrees}}°, converti à {{latitude}}. Un degré varie selon la latitude et la direction, il s'agit donc d'une approximation.",
      "convertedEmpty": "Les valeurs seront converties en degrés à {{latitude}}. Un degré varie selon la latitude et la direction, il s'agit donc d'une approximation.",
      "notANumber": "Ce n'est pas un nombre : la valeur est transmise à l'outil telle quelle au lieu d'être convertie. Utilisez un décimal simple comme 12000 ou 1.5."
    },
    "history": {
      "title": "Historique des traitements",
      "description": "Chaque exécution de traitement de ce projet, la plus récente en premier. Relancez un outil, rouvrez-le avec les mêmes paramètres, ou copiez l'exécution en JSON ou Python.",
      "empty": "Aucune exécution de traitement enregistrée pour le moment. Lancez un outil depuis le menu Traitement et elle apparaîtra ici.",
      "rerun": "Relancer",
      "editRerun": "Modifier et relancer",
      "copyJson": "Copier le JSON",
      "copyPython": "Copier le Python",
      "copied": "Copié",
      "clear": "Effacer l'historique",
      "count_one": "{{count}} exécution enregistrée",
      "count_other": "{{count}} exécutions enregistrées",
      "toolUnavailable": "L'outil « {{toolId}} » n'est plus disponible"
    },
    "modelBuilder": {
      "moveStepUp": "Monter l'étape",
      "moveStepDown": "Descendre l'étape",
      "removeStep": "Supprimer l'étape",
      "title": "Lots et modèles",
      "description": "Exécutez un outil vecteur sur de nombreuses couches, ou enchaînez des outils dans un modèle réutilisable enregistré avec votre projet.",
      "tabBatch": "Lot",
      "tabModels": "Modèles",
      "outputPlaceholder": "La sortie apparaîtra ici.",
      "tool": "Outil",
      "sharedParameters": "Paramètres partagés",
      "noExtraParameters": "Cet outil n'a pas de paramètres supplémentaires.",
      "inputLayers": "Couches d'entrée",
      "selectAll": "Tout sélectionner",
      "clearSelection": "Effacer",
      "noCompatibleLayers": "Aucune couche GeoJSON compatible.",
      "newModel": "Nouveau modèle",
      "noSavedModels": "Aucun modèle enregistré pour l'instant.",
      "untitledModel": "Modèle sans titre",
      "modelName": "Nom du modèle",
      "emptyPipelineHint": "Ajoutez une étape pour commencer à construire la chaîne. La première étape lit une couche d'entrée ; chaque étape suivante reçoit la sortie de l'étape précédente.",
      "addStep": "Ajouter une étape",
      "runModel": "Exécuter le modèle",
      "deleteModel": "Supprimer",
      "inputPreviousStep": "Entrée : ← sortie de l'étape précédente",
      "unknownTool": "Outil inconnu « {{id}} »",
      "noParameters": "Aucun paramètre."
    },
    "parameterField": {
      "selectLayer": "Sélectionner une couche...",
      "selectField": "Sélectionner un champ...",
      "selectLayerFirst": "Sélectionnez d'abord une couche"
    },
    "whitebox": {
      "run": "Exécuter",
      "running": "Exécution…",
      "runLocal": "Exécuter localement (WASM)",
      "runLocalHint": "Exécuter localement en WebAssembly (sans sidecar Python)",
      "runningLocally": "Exécution locale avec WebAssembly. Aucun sidecar requis.",
      "copyLink": "Copier le lien",
      "copyLinkCopied": "Copié !",
      "copyLinkHint": "Copier un lien partageable qui ouvre cet outil avec les paramètres actuels",
      "copyLinkFailed": "Impossible de copier le lien dans le presse-papiers.",
      "catalogSnapshotError": "Impossible de charger l'instantané du catalogue Whitebox.",
      "localRunnerError": "Impossible de charger l'exécuteur d'outils local (WASM). Actualisez et réessayez, ou utilisez le sidecar s'il est disponible.",
      "output": {
        "geojson": "GeoJSON (ajouter à la carte)",
        "geoparquet": "GeoParquet (télécharger, conserve le SRC)",
        "flatgeobuf": "FlatGeobuf (télécharger, conserve le SRC)",
        "shapefile": "Shapefile (télécharger, conserve le SRC)",
        "projectedHint": "Enregistré dans vos téléchargements dans le SRC cible. La carte n'affiche que l'EPSG:4326, donc un résultat projeté n'est pas ajouté comme couche."
      },
      "filterBySource": "Filtrer par source",
      "allSources": "Toutes les sources",
      "geolibreTools": "Outils GeoLibre",
      "whiteboxTools": "Outils Whitebox",
      "toolbox": "Boîte à outils Whitebox",
      "checkingRuntime": "Vérification de l'environnement d'exécution.",
      "toolsAvailable_one": "{{count}} outil disponible.",
      "toolsAvailable_other": "{{count}} outils disponibles.",
      "runtimeUnavailable": "L'environnement d'exécution Whitebox est indisponible.",
      "useMapExtent": "Utiliser l'emprise de la carte",
      "fromLayer": "Depuis une couche",
      "drawBbox": "Dessiner sur la carte",
      "drawingBbox": "Dessin…",
      "drawBboxHint": "Faites glisser une zone sur la carte pour définir l'emprise. Appuyez sur Échap pour annuler.",
      "mapExtentPlaceholder": "minX,minY,maxX,maxY",
      "mapExtentUnavailable": "La vue cartographique n'est pas encore disponible. Attendez le chargement de la carte, puis réessayez.",
      "mapExtentInvalid": "La vue cartographique actuelle ne peut pas servir d'emprise : elle enveloppe le méridien 180° ou dépasse les limites valides de longitude/latitude. Ajustez la vue, puis réessayez.",
      "extentLabel": "Zone d'intérêt",
      "extentNorth": "Nord",
      "extentSouth": "Sud",
      "extentWest": "Ouest",
      "extentEast": "Est",
      "extentHint": "Reprenez le cadre de la vue actuelle de la carte, ou tracez-en un sur la carte, plutôt que de saisir chaque limite. Les coordonnées sont renseignées en WGS84 (EPSG:4326).",
      "noToolSelected": "Aucun outil sélectionné",
      "optionDefault": "Par défaut",
      "optionPath": "Chemin",
      "selectedLayer": "Couche sélectionnée",
      "filePath": "Chemin du fichier",
      "auto": "Auto",
      "chooseOutputPath": "Choisir le chemin de sortie",
      "chooseInputPath": "Choisir le chemin d'entrée",
      "categoryGeneral": "Général",
      "categoryAll": "Tous ({{total}})",
      "errorLoadSnapshot": "Impossible de charger l'instantané du catalogue Whitebox.",
      "errorLoadLive": "Impossible de charger le catalogue en direct.",
      "errorConnect": "Impossible de se connecter au sidecar.",
      "errorPoll": "Impossible d'interroger la tâche.",
      "errorStartTool": "Impossible de démarrer l'outil Whitebox.",
      "errorStartSidecar": "Impossible de démarrer le sidecar GeoLibre.",
      "errorStopSidecar": "Impossible d'arrêter le sidecar GeoLibre.",
      "noToolsFound": "Aucun outil trouvé.",
      "noParameters": "Cet outil n'a aucun paramètre.",
      "noOutput": "Pas encore de sortie.",
      "enabled": "Activé",
      "requiredSuffix": " | requis",
      "selectField": "Sélectionner un champ",
      "fieldName": "Nom du champ",
      "crs": {
        "browse": "Parcourir",
        "codePlaceholder": "Code EPSG",
        "searchLabel": "Rechercher des systèmes de coordonnées de référence",
        "searchPlaceholder": "Rechercher par nom ou code EPSG",
        "geographic": "Géographique",
        "projected": "Projeté",
        "noResults": "Aucun système de coordonnées correspondant. Tout code EPSG peut malgré tout être saisi."
      },
      "vectorUnitsNote": "Les couches vectorielles sont lues en WGS84 : les valeurs de distance, d'espacement et de tolérance sont donc exprimées en degrés, et non en mètres. 1° vaut environ 111 km et 0,001° environ 111 m."
    },
    "sidecar": {
      "unavailableTitle": "Le serveur de traitement n'est pas disponible.",
      "showHelp": "Afficher ce que cela signifie et comment y remédier",
      "hideHelp": "Masquer les détails",
      "intro": "Le serveur de traitement est un assistant local facultatif ({{sidecarUrl}}) qui exécute des outils Python plus lourds en arrière-plan, séparément de l'application. La plupart des outils Whitebox n'en ont pas besoin : ils peuvent s'exécuter entièrement dans votre navigateur avec WebAssembly.",
      "wasmTipTitle": "Exécuter sans le serveur",
      "wasmTip": "Activez « Exécuter localement (WASM) » pour exécuter les outils Whitebox dans votre navigateur. Aucun serveur, installation ou configuration requis.",
      "runLocallyButton": "Exécuter localement (WASM)",
      "troubleshootingTitle": "Vous voulez quand même utiliser le serveur ?",
      "stepStartServerDesktop": "Cliquez sur « Démarrer le serveur » dans le panneau de liste d'outils pour le lancer, puis attendez quelques secondes qu'il soit en ligne.",
      "stepStartServerBrowser": "Le serveur ne peut être démarré que depuis l'application de bureau GeoLibre. Dans le navigateur, gardez « Exécuter localement (WASM) » activé à la place.",
      "stepCheckPort": "Assurez-vous qu'un pare-feu, un antivirus ou une politique réseau ne bloque pas le port local {{port}}.",
      "stepRestart": "Si le serveur s'est arrêté de manière inattendue, redémarrez l'application de bureau GeoLibre et rouvrez cette boîte de dialogue."
    },
    "vectorTools": {
      "title": "Outils vecteur",
      "description": "Exécutez des opérations de géométrie vectorielle courantes sur vos couches GeoJSON.",
      "engine": "Moteur",
      "engineClient": "Client (Turf.js)",
      "engineSidecar": "Sidecar (GeoPandas)",
      "enginePyodide": "Python (Pyodide)",
      "checkingSidecar": "Vérification de la disponibilité du sidecar...",
      "sidecarUnavailableClient": "Le sidecar GeoPandas n'est pas disponible. Démarrez le sidecar avec l'extra vector, ou basculez sur le moteur client.",
      "sidecarUnavailablePyodide": "Le sidecar GeoPandas n'est pas disponible. Démarrez le sidecar avec l'extra vector, ou basculez sur Python (Pyodide).",
      "pyodideNote": "Exécute GeoPandas dans votre navigateur. La première exécution télécharge l'environnement Python (une seule fois, nécessite une connexion internet).",
      "run": "Exécuter",
      "outputPlaceholder": "La sortie apparaîtra ici.",
      "resolutionRange": "Résolution (0-{{max}})"
    }
  },
  "segmentation": {
    "title": "Segmentation IA",
    "description": "Transformez l'imagerie en entités vectorielles avec SAM3 (segment-geospatial). Choisissez un GeoTIFF, décrivez ce qu'il faut segmenter et obtenez des polygones en retour comme nouvelle couche.",
    "startServer": "Démarrer le serveur",
    "downloadDesktop": "Télécharger l'application de bureau",
    "imageLabel": "Image (GeoTIFF)",
    "imagePlaceholder": "Choisir un GeoTIFF…",
    "chooseImage": "Choisir une image",
    "modeLabel": "Mode",
    "modeText": "Invite textuelle",
    "modeAutomatic": "Automatique (tout)",
    "promptLabel": "Invite",
    "promptPlaceholder": "p. ex. arbres, bâtiments, eau",
    "confidenceLabel": "Seuil de confiance",
    "segment": "Segmenter",
    "status": {
      "checking": "Vérification du service de segmentation IA…",
      "unavailableDesktop": "Le service de segmentation IA n'est pas encore en cours d'exécution. Démarrez le serveur GeoLibre avec segment-geospatial activé pour l'utiliser.",
      "unavailableWeb": "La segmentation IA n'est pas disponible dans le navigateur. Utilisez l'application de bureau GeoLibre pour l'exécuter."
    },
    "error": {
      "chooseImage": "Choisissez une image (GeoTIFF) à segmenter.",
      "enterPrompt": "Entrez une invite textuelle, p. ex. « arbres » ou « bâtiments ».",
      "startServer": "Impossible de démarrer le sidecar GeoLibre.",
      "failed": "Échec de la segmentation."
    },
    "noObjects": "Aucun objet trouvé.",
    "added": "{{count}} entité(s) ajoutée(s) sous « {{name}} ».",
    "layerName": "Segmentation : {{prompt}}",
    "layerNameDefault": "Segmentation",
    "sidecar": {
      "title": "Impossible de démarrer le serveur de segmentation IA.",
      "intro": "La segmentation IA s'exécute dans un serveur assistant local ({{sidecarUrl}}) qui héberge le modèle SAM3 de segment-geospatial. Il exécute Python en arrière-plan, séparément de l'application, et ne fait pas partie de la version navigateur.",
      "troubleshootingTitle": "Comment faire fonctionner le serveur",
      "stepInstall": "Assurez-vous que le serveur GeoLibre est installé avec le backend segment-geospatial activé, afin que le modèle de segmentation soit disponible.",
      "stepStartServerDesktop": "Cliquez sur « Démarrer le serveur » ci-dessus pour le lancer, puis attendez quelques secondes que le modèle soit en ligne."
    }
  },
  "objectDetection": {
    "title": "Détection d'objets",
    "description": "Exécutez un modèle YOLO exporté en ONNX sur un GeoTIFF, entièrement dans le navigateur. Les zones détectées sont géoréférencées et chaque classe est ajoutée comme couche distincte.",
    "hint": "Utilisez un modèle COCO intégré (téléchargé et mis en cache une fois) ou fournissez votre propre modèle ONNX YOLOv5/v8/v11. La détection s'exécute localement dans le navigateur. Les modèles intégrés détectent des objets courants ; pour l'imagerie aérienne, fournissez votre propre modèle entraîné sur des vues aériennes.",
    "imageLabel": "Image (GeoTIFF)",
    "imagePlaceholder": "Choisir un GeoTIFF…",
    "chooseImage": "Choisir une image",
    "modelLabel": "Modèle",
    "modelSourceBuiltin": "Intégré (téléchargement)",
    "modelSourceLocal": "Fichier local",
    "builtinModelLabel": "Modèle intégré",
    "modelFileLabel": "Fichier de modèle (ONNX)",
    "modelPlaceholder": "Choisir un modèle .onnx…",
    "chooseModel": "Choisir un modèle",
    "downloadingModel": "Téléchargement du modèle…",
    "classNamesLabel": "Noms des classes (séparés par des virgules, facultatif)",
    "classNamesPlaceholder": "ex. voiture, arbre, bâtiment",
    "confidenceLabel": "Confiance",
    "iouLabel": "IoU (NMS)",
    "inputSizeLabel": "Taille d'entrée",
    "detect": "Détecter",
    "noObjects": "Aucun objet détecté. Essayez d'abaisser le seuil de confiance.",
    "added": "{{count}} détection(s) ajoutée(s) sur {{classes}} classe(s).",
    "layerName": "Détection : {{class}}",
    "error": {
      "chooseImage": "Choisissez une image (GeoTIFF) sur laquelle exécuter la détection.",
      "photoLocation": "Cette photo n'a pas de coordonnées GPS exploitables. Choisissez une photo géolocalisée.",
      "chooseModel": "Choisissez un modèle YOLO exporté en ONNX (.onnx).",
      "downloadModel": "Impossible de télécharger le modèle. Vérifiez votre connexion et réessayez.",
      "failed": "La détection a échoué."
    }
  },
  "segmentEverything": {
    "title": "Tout segmenter",
    "description": "Exécutez SlimSAM automatiquement sur un GeoTIFF, entièrement dans le navigateur. Chaque objet détecté devient un polygone géoréférencé ajouté comme une seule couche.",
    "hint": "Une grille de points est échantillonnée sur l'image et segmentée avec SlimSAM (téléchargé et mis en cache une fois). Aucun clic ni étiquette — des grilles plus denses trouvent plus d'objets mais prennent plus de temps.",
    "imageLabel": "Image (GeoTIFF)",
    "imagePlaceholder": "Choisir un GeoTIFF…",
    "chooseImage": "Choisir une image",
    "gridLabel": "Grille",
    "qualityLabel": "Qualité",
    "minSizeLabel": "Taille min. %",
    "run": "Segmenter",
    "downloadingModel": "Téléchargement du modèle…",
    "progress": "Segmentation… {{done}}/{{total}}",
    "noObjects": "Aucun objet segmenté. Essayez une grille plus dense ou un seuil de qualité plus bas.",
    "added": "{{count}} segment(s) ajouté(s).",
    "layerName": "Segments",
    "error": {
      "chooseImage": "Choisissez une image (GeoTIFF) à segmenter.",
      "downloadModel": "Impossible de télécharger le modèle. Vérifiez votre connexion et réessayez.",
      "failed": "La segmentation a échoué."
    }
  },
  "pluginPanel": {
    "expand": "Développer le panneau",
    "collapse": "Réduire le panneau",
    "close": "Fermer le panneau",
    "resize": "Redimensionner le panneau",
    "moveLeft": "Déplacer le panneau vers la gauche",
    "moveRight": "Déplacer le panneau vers la droite",
    "mergeIntoStyleRail": "Fusionner dans le rail Style",
    "mergeIntoLayersRail": "Fusionner dans le rail Couches",
    "detach": "Détacher comme panneau mobile",
    "collapsedLabel": "{{title}} (réduit)"
  },
  "sharedRail": {
    "label": "Barre latérale",
    "layers": "Couches",
    "style": "Style",
    "expand": "Développer {{title}}",
    "collapse": "Réduire {{title}}"
  },
  "attributeTable": {
    "title": "Table attributaire",
    "resize": "Redimensionner la table attributaire",
    "editValues": "Modifier les valeurs d'attribut",
    "editTitleFinishGeometry": "Terminez la modification de géométrie pour modifier les attributs",
    "editTitleReadOnly": "La modification n'est pas disponible pour les couches Ajouter une couche vectorielle",
    "editTitleUseSaveCancel": "Utilisez Enregistrer ou Annuler pour terminer la modification",
    "exitEditMode": "Quitter le mode édition",
    "editTitleDuckdb": "Modifier les attributs de requête DuckDB affichés en mémoire",
    "saveEdits": "Enregistrer les modifications d'attributs",
    "saveTitleInvalid": "Corrigez le JSON invalide avant d'enregistrer",
    "saveTitleDuckdb": "Enregistrer les modifications d'attributs DuckDB en mémoire",
    "addFieldTitle": "Ajouter un nouveau champ",
    "addField": "Ajouter un champ",
    "fieldCalculatorTitle": "Calculer les valeurs de champ à partir d'une expression",
    "fieldCalculator": "Calculatrice de champs",
    "manageFieldsTitle": "Afficher ou masquer les champs",
    "manageFields": "Gérer les champs",
    "columnExplorerTitle": "Explorer tous les champs en un coup d'œil",
    "columnExplorerTitleDisabled": "L'explorateur de colonnes nécessite une couche vectorielle ou de requête DuckDB",
    "columnExplorer": "Explorateur de colonnes",
    "statisticsTitle": "Résumé des statistiques de champ",
    "statisticsTitleDisabled": "Les statistiques nécessitent une couche vectorielle ou de requête DuckDB",
    "statistics": "Statistiques de champ",
    "chartsTitle": "Représenter graphiquement les champs numériques",
    "chartsTitleDisabled": "Les graphiques nécessitent une couche vectorielle ou de requête DuckDB",
    "charts": "Graphiques",
    "dashboardTitle": "Ouvrir le tableau de bord pour créer des widgets graphiques",
    "dashboard": "Tableau de bord",
    "exportSelectedLayer": "Exporter la couche sélectionnée",
    "exportTitleDisabled": "L'exportation nécessite une couche basée sur GeoJSON",
    "cancelEdits": "Annuler les modifications d'attributs",
    "searchPlaceholder": "Rechercher des attributs...",
    "searchAria": "Rechercher des attributs",
    "clearSelectedFeature": "Effacer l'entité sélectionnée",
    "statusFeatures_one": "{{count}} entité",
    "statusFeatures_other": "{{count}} entités",
    "statusShown_one": "{{count}} affichée",
    "statusShown_other": "{{count}} affichées",
    "statusSelected_one": "{{count}} sélectionnée",
    "statusSelected_other": "{{count}} sélectionnées",
    "featureViewAria": "Vue des entités",
    "showAllFeatures": "Afficher toutes les entités",
    "showSelectedFeatures": "Afficher la sélection ({{count}})",
    "expand": "Développer la table attributaire",
    "collapse": "Réduire la table attributaire",
    "close": "Fermer la table attributaire",
    "newFieldPlaceholder": "p. ex. catégorie",
    "defaultValuePlaceholder": "Laisser vide pour une valeur vide",
    "newFieldNamePlaceholder": "Nom du nouveau champ",
    "showFields": "Afficher les champs",
    "noFields": "Aucun champ",
    "showAllFields": "Afficher tous les champs",
    "buttons": {
      "edit": "Modifier",
      "calculate": "Calculer",
      "fields": "Champs",
      "explore": "Explorer",
      "statistics": "Statistiques",
      "export": "Exporter"
    },
    "chart": {
      "field": "Champ",
      "xAxis": "Axe X",
      "yAxis": "Axe Y",
      "category": "Catégorie",
      "value": "Valeur",
      "title": "Graphiques",
      "description": "Visualiser les champs de « {{layer}} ».",
      "noChartableFields": "Cette couche n'a aucun champ numérique ou catégoriel à représenter.",
      "chartType": "Type de graphique",
      "typeHistogram": "Histogramme",
      "typeScatter": "Nuage de points",
      "typeBar": "Barres",
      "typeLine": "Courbe",
      "typeBox": "Boîte à moustaches",
      "typePie": "Secteurs",
      "bins": "Classes",
      "aggregate": "Agrégat",
      "aggCount": "Nombre",
      "aggSum": "Somme",
      "aggAverage": "Moyenne",
      "download": "Télécharger",
      "downloadPng": "Image PNG",
      "downloadSvg": "Vecteur SVG",
      "exportError": "Impossible d'exporter le graphique."
    },
    "selectedLayerName": "- {{name}}",
    "noLayerSelected": "- sélectionnez une couche avec des attributs",
    "zoomToSelection": "Zoomer sur la sélection",
    "loadingAttributes": "Chargement des attributs de la couche…",
    "requiresVectorLayer": "La table attributaire nécessite une couche vectorielle ou de requête DuckDB.",
    "invalidJson": "JSON invalide",
    "editCellAria": "Modifier {{col}} pour l'entité {{featureId}}",
    "resizeColumn": "Redimensionner la colonne {{name}}",
    "renameFieldAria": "Renommer le champ {{name}}",
    "manageFieldTitle": "Gérer le champ « {{name}} »",
    "manageFieldAria": "Gérer le champ {{name}}",
    "renameField": "Renommer le champ",
    "hideField": "Masquer le champ",
    "excludeField": "Exclure le champ à l'export",
    "includeField": "Inclure le champ à l'export",
    "moveLeft": "Déplacer à gauche",
    "moveRight": "Déplacer à droite",
    "deleteField": "Supprimer le champ",
    "joinedColumnTitle": "Colonne jointe, dérivée d'une table de jointure. Modifiez plutôt la table ou la définition de la jointure.",
    "virtualColumnTitle": "Champ virtuel, calculé à partir d'une expression. Modifiez plutôt sa définition dans le panneau de style de la couche.",
    "deleteFieldConfirm": "Cela supprime définitivement le champ « {{field}} » de toutes les entités de « {{layer}} ». Le style ou les étiquettes qui le référencent seront effacés. Cette action est irréversible.",
    "addFieldDescription": "Ajoutez un nouveau champ à toutes les entités de « {{layer}} ».",
    "fieldName": "Nom du champ",
    "fieldExists": "Un champ nommé « {{name}} » existe déjà.",
    "fieldType": "Type",
    "typeText": "Texte",
    "typeNumber": "Nombre",
    "typeBoolean": "Booléen",
    "defaultValue": "Valeur par défaut",
    "noDefault": "(aucune valeur par défaut)",
    "noFeaturesForField": "Cette couche n'a aucune entité à laquelle ajouter un champ.",
    "calcDescription": "Calculez des valeurs à partir d'une expression JavaScript et écrivez-les dans un champ de « {{layer}} ».",
    "targetField": "Champ cible",
    "updateField": "Mettre à jour le champ",
    "createField": "Créer le champ",
    "outputType": "Type de sortie",
    "outputAuto": "Auto (conserver le type calculé)",
    "expression": "Expression",
    "calcExpressionPlaceholder": "p. ex. pop / area, ou upper(name), ou pop > 100 ? \"big\" : \"small\"",
    "fieldsLabel": "Champs :",
    "insertField": "Insérer {{name}}",
    "functionsLabel": "Fonctions :",
    "insertFunction": "Insérer {{name}}()",
    "geomMeasureLabel": "Géométrie :",
    "geomMetric": {
      "length": "Longueur",
      "perimeter": "Périmètre",
      "area": "Superficie"
    },
    "geomInsert": "Insérer",
    "sampleRowErrored": "Erreur sur la ligne d'exemple (les autres lignes peuvent tout de même être calculées) : {{message}}",
    "preview": "Aperçu :",
    "onlySelectedFeature": "Mettre à jour uniquement l'entité sélectionnée",
    "evaluationFailed": "L'évaluation a échoué.",
    "invalidExpression": "Expression invalide.",
    "calcCouldNotApply": "Impossible d'appliquer le calcul à cette couche.",
    "calcAppliedWithErrors": "Appliqué, mais {{errors}} entité(s) sur {{evaluated}} ont généré une erreur et ont été écrites comme null.",
    "exportFailed": "Impossible d'exporter la couche sélectionnée.",
    "saveTitleFormErrors": "Corrigez les violations du formulaire d'attributs avant d'enregistrer"
  },
  "styleManager": {
    "title": "Gestionnaire de styles",
    "description": "Enregistrez, parcourez et appliquez des styles, symboles, préréglages d'étiquettes et rampes de couleurs réutilisables entre couches et projets.",
    "searchPlaceholder": "Rechercher styles et étiquettes…",
    "presetsSection": "Préréglages intégrés",
    "librarySection": "Ma bibliothèque",
    "projectSection": "Ce projet",
    "empty": "Aucun style enregistré ne correspond. Enregistrez le style d'une couche ou importez une bibliothèque pour commencer.",
    "apply": "Appliquer",
    "delete": "Supprimer",
    "saveCurrent": "Enregistrer le style actuel…",
    "nameLabel": "Nom",
    "kindLabel": "Quoi enregistrer",
    "kindStyle": "Style complet",
    "kindSymbol": "Symbole uniquement",
    "kindLabels": "Étiquettes uniquement",
    "kindRamp": "Rampe de couleurs uniquement",
    "tagsLabel": "Étiquettes",
    "tagsPlaceholder": "limite, fond de carte (séparés par des virgules)",
    "scopeLabel": "Enregistrer dans",
    "scopeApp": "Ma bibliothèque (tous les projets)",
    "scopeProject": "Ce projet uniquement",
    "saveButton": "Enregistrer le style",
    "cancel": "Annuler",
    "import": "Importer…",
    "export": "Exporter…",
    "importFilterName": "Bibliothèque de styles / QML / SLD",
    "exportFilterName": "Bibliothèque de styles GeoLibre",
    "applied": "« {{name}} » appliqué à {{layer}}.",
    "appliedRampHint": "« {{name}} » appliqué. Passez la couche en style gradué ou catégorisé pour voir la rampe.",
    "saved": "« {{name}} » enregistré dans la bibliothèque.",
    "deleted": "« {{name}} » supprimé.",
    "importedCount_one": "{{count}} style importé.",
    "importedCount_other": "{{count}} styles importés.",
    "importedEntryName": "Style importé",
    "importInvalid": "Ce fichier n'est pas une bibliothèque de styles, un QML ni un SLD.",
    "importNoMatch": "Aucune symbologie n'a pu être lue depuis ce style.",
    "exportEmpty": "Il n'y a aucun style enregistré à exporter.",
    "exportFailed": "Impossible d'exporter la bibliothèque de styles.",
    "exportSuccess": "Bibliothèque de styles exportée.",
    "noLayer": "Sélectionnez une couche vectorielle pour enregistrer ou appliquer des styles."
  },
  "style": {
    "panelLabel": "Style de la couche",
    "panelLabelCollapsed": "Style de la couche (réduit)",
    "heading": "Style",
    "headingWithLayer": "Style - {{name}}",
    "resizePanel": "Redimensionner le panneau Style",
    "expand": "Développer le style",
    "collapse": "Réduire le style",
    "openStyleManager": "Styles enregistrés…",
    "addClass": "Ajouter une classe",
    "removeClass": "Supprimer la classe",
    "beforeIdSavedUnavailable": "Enregistré (indisponible)",
    "raster": {
      "greyscale": "Niveaux de gris",
      "greyscaleHint": "Basculer un fond de carte en niveaux de gris (réduit la saturation au minimum)",
      "reset": "Réinitialiser",
      "resetHint": "Réinitialiser les ajustements à leurs valeurs par défaut",
      "exactValueHint": "Double-cliquez pour saisir une valeur exacte",
      "opacity": "Opacité",
      "brightnessMin": "Luminosité min",
      "brightnessMax": "Luminosité max",
      "saturation": "Saturation",
      "contrast": "Contraste",
      "hueRotate": "Rotation de teinte",
      "footerDeck": "Les modifications s'appliquent en direct à l'opacité de la couche raster.",
      "footerMaplibre": "Les modifications s'appliquent en direct aux propriétés de peinture raster de MapLibre.",
      "valueAria": "Valeur de {{label}}",
      "editValueAria": "Modifier la valeur de {{label}}"
    },
    "visibility": {
      "minZoom": "Zoom min",
      "maxZoom": "Zoom max",
      "minZoomTooltip": "Niveau de zoom auquel cette couche apparaît. Des nombres plus élevés correspondent à un zoom plus rapproché.",
      "maxZoomTooltip": "Niveau de zoom auquel cette couche disparaît. Des nombres plus élevés correspondent à un zoom plus rapproché."
    },
    "joins": {
      "heading": "Jointures",
      "empty": "Ajoutez des colonnes d'une autre couche ou table en faisant correspondre des champs clés. Les colonnes jointes se mettent à jour quand la table change et sont enregistrées avec le projet.",
      "addJoin": "Ajouter une jointure",
      "joinLayer": "Couche de jointure",
      "selectLayer": "Sélectionner une couche…",
      "joinField": "Champ de jointure",
      "targetField": "Champ cible",
      "selectField": "Sélectionner un champ…",
      "fields": "Champs à joindre",
      "fieldCount_one": "{{count}} champ",
      "fieldCount_other": "{{count}} champs",
      "prefix": "Préfixe des noms de champ",
      "prefixPlaceholder": "ex. census_",
      "add": "Ajouter",
      "cancel": "Annuler",
      "remove": "Supprimer la jointure",
      "enabledTitle": "Appliquer cette jointure",
      "missingLayer": "Couche de jointure introuvable",
      "noCandidates": "Aucune autre couche n'a de table attributaire à joindre",
      "statsMatched": "{{matched}} entités sur {{total}} appariées",
      "statsUnmatchedJoin_one": "{{count}} ligne de la table sans correspondance",
      "statsUnmatchedJoin_other": "{{count}} lignes de la table sans correspondance"
    },
    "virtualFields": {
      "heading": "Champs virtuels",
      "empty": "Ajoutez des colonnes basées sur des expressions, recalculées à chaque changement des données. Les champs virtuels sont enregistrés avec le projet et apparaissent partout où les champs apparaissent : table attributaire, style, étiquettes et sélection.",
      "addField": "Ajouter un champ virtuel",
      "name": "Nom du champ",
      "namePlaceholder": "ex. density",
      "nameTaken": "Une colonne portant ce nom existe déjà",
      "nameConflict": "Non appliqué : le nom entre en conflit avec une colonne existante",
      "expression": "Expression",
      "expressionPlaceholder": "[\"/\", [\"get\", \"pop\"], [\"get\", \"area_km2\"]]",
      "expressionTarget": "Expression du champ virtuel",
      "openBuilder": "Ouvrir l'éditeur",
      "invalidExpression": "Expression invalide",
      "add": "Ajouter",
      "save": "Enregistrer",
      "cancel": "Annuler",
      "edit": "Modifier le champ virtuel",
      "remove": "Supprimer le champ virtuel",
      "enabledTitle": "Appliquer ce champ virtuel",
      "evaluationErrors_one": "{{count}} entité n'a pas pu être évaluée (cellule nulle)",
      "evaluationErrors_other": "{{count}} entités n'ont pas pu être évaluées (cellules nulles)"
    },
    "labels": {
      "heading": "Étiquettes",
      "show": "Afficher les étiquettes",
      "field": "Champ d'étiquette",
      "noAttributes": "Aucun attribut trouvé",
      "selectField": "Sélectionner un champ…",
      "placement": "Placement",
      "placementPoint": "Centroïde / point",
      "placementLine": "Le long de la ligne / du bord du polygone",
      "textSize": "Taille du texte",
      "haloWidth": "Épaisseur du halo",
      "textColor": "Couleur du texte",
      "haloColor": "Couleur du halo",
      "minZoom": "Zoom min",
      "maxZoom": "Zoom max",
      "allowOverlap": "Autoriser le chevauchement des étiquettes",
      "anchor": "Ancrage",
      "anchorCenter": "Centre",
      "anchorLeft": "Gauche",
      "anchorRight": "Droite",
      "anchorTop": "Haut",
      "anchorBottom": "Bas",
      "anchorTopLeft": "Haut gauche",
      "anchorTopRight": "Haut droite",
      "anchorBottomLeft": "Bas gauche",
      "anchorBottomRight": "Bas droite",
      "offsetX": "Décalage X (em)",
      "offsetY": "Décalage Y (em)",
      "rotation": "Rotation (°)",
      "maxWidth": "Largeur de retour à la ligne (em)",
      "transform": "Casse des lettres",
      "transformNone": "Telle que saisie",
      "transformUppercase": "MAJUSCULES",
      "transformLowercase": "minuscules",
      "dedupe": "Étiquettes en double",
      "dedupeOff": "Étiqueter chaque entité",
      "dedupeUnique": "Une étiquette par emplacement",
      "dedupeConcatenate": "Fusionner les valeurs à un emplacement",
      "dedupeHint": "Regroupe les points empilés à la même coordonnée. Utilise le champ d'étiquette sur les couches de points locales.",
      "expression": "Expression (facultatif)",
      "expressionHint": "Une expression MapLibre (JSON). Remplace le champ lorsqu'elle est définie.",
      "expressionInvalid": "Ce n'est pas une expression MapLibre valide (doit être un tableau JSON). Cette valeur est ignorée.",
      "dataDefined": {
        "heading": "Substitutions définies par les données",
        "size": "Taille",
        "color": "Couleur",
        "opacity": "Opacité",
        "visibility": "Visibilité",
        "priority": "Priorité",
        "sizeTarget": "Expression de taille d'étiquette",
        "colorTarget": "Expression de couleur d'étiquette",
        "opacityTarget": "Expression d'opacité d'étiquette",
        "visibilityTarget": "Expression de visibilité d'étiquette",
        "priorityTarget": "Expression de priorité d'étiquette",
        "notSet": "Non défini",
        "clear": "Effacer l'expression",
        "hint": "Expressions MapLibre par entité. La taille, l'opacité et la priorité produisent des nombres (les étiquettes aux valeurs de priorité les plus basses sont placées en premier), la couleur une couleur, la visibilité vrai/faux. Ignorées tant que le regroupement des étiquettes en double est actif. Une expression d'opacité remplace l'opacité de la couche pour les étiquettes."
      }
    },
    "elevation3d": {
      "mode": "3D (valeurs Z)",
      "fillColor": "Couleur de remplissage",
      "outlineColor": "Couleur du contour",
      "strokeWidth": "Épaisseur du trait",
      "strokeWidthMeters": "Épaisseur du trait (mètres)",
      "fillOpacity": "Opacité du remplissage",
      "circleRadius": "Rayon du cercle",
      "verticalScale": "Exagération verticale",
      "verticalScaleTooltip": "Multiplie la valeur Z de chaque coordonnée. 1 affiche les altitudes réelles, des valeurs plus grandes accentuent le relief.",
      "offset": "Décalage d'altitude (m)",
      "offsetTooltip": "Hauteur constante en mètres ajoutée à chaque entité, p. ex. pour élever une trace au-dessus des bâtiments ou du relief 3D.",
      "footer": "Rendu en 3D aux valeurs Z des coordonnées via deck.gl. Les modifications s'appliquent en direct. L'identification et la mise en surbrillance des entités ne sont pas disponibles dans ce mode."
    },
    "diagrams": {
      "heading": "Diagrammes",
      "chartType": "Type de graphique",
      "typeNone": "Aucun",
      "typePie": "Diagramme circulaire",
      "typeDonut": "Diagramme en anneau",
      "typeBar": "Diagramme en barres",
      "typeStackedBar": "Barres empilées",
      "fields": "Attributs",
      "addField": "Ajouter un attribut",
      "removeField": "Supprimer l'attribut",
      "noFields": "Ajoutez des attributs numériques à représenter sur chaque entité.",
      "fieldAttribute": "Attribut du diagramme {{index}}",
      "sizeMode": "Taille",
      "sizeFixed": "Taille fixe",
      "sizeSum": "Proportionnelle à la somme des attributs",
      "sizeAttribute": "Proportionnelle à un attribut",
      "sizeField": "Attribut de taille",
      "size": "Taille (px)",
      "minZoom": "Zoom minimum",
      "declutter": "Masquer les diagrammes qui se chevauchent",
      "truncated": "Les diagrammes ne sont dessinés que pour {{count}} entités ; les autres ne sont pas représentées.",
      "atlasFull": "{{count}} diagrammes ne tiennent pas à cette taille et sont masqués. Réduisez la taille des diagrammes."
    },
    "symbology": {
      "colormap": "Palette de couleurs",
      "modeSingle": "Symbologie unique",
      "modeGraduated": "Graduée",
      "modeCategorized": "Catégorisée",
      "modeRuleBased": "Basée sur des règles",
      "modeExpression": "Expression avancée",
      "rules": "Règles",
      "addRule": "Ajouter une règle",
      "removeRule": "Supprimer la règle",
      "noRulesPrefix": "Pas encore de règles. Ajoutez une règle et donnez-lui une expression de filtre MapLibre (p. ex. ",
      "noRulesSuffix": "). La première règle correspondante l'emporte ; la règle Sinon colore tout le reste.",
      "ruleColor": "Couleur de la règle {{index}}",
      "ruleColorPick": "Choisir la couleur de la règle {{index}} à l'écran",
      "ruleLabel": "Étiquette de la règle {{index}}",
      "ruleFilter": "Filtre de la règle {{index}}",
      "ruleEnabled": "Activer la règle {{index}}",
      "ruleAddChild": "Ajouter une sous-règle",
      "ruleOptions": "Symbole et visibilité",
      "ruleMinZoom": "Zoom minimum",
      "ruleMaxZoom": "Zoom maximum",
      "ruleZoomInvalid": "Le zoom min doit être inférieur au zoom max - cette règle ne s'applique jamais tant que la plage est vide.",
      "ruleStrokeWidth": "Largeur de trait",
      "ruleFillOpacity": "Opacité du remplissage",
      "ruleCircleSize": "Rayon du cercle",
      "ruleOutlineColor": "Remplacer la couleur du contour",
      "ruleOutlineColorPick": "Choisir la couleur du contour de la règle {{index}} à l'écran",
      "ruleInherit": "Hérité",
      "ruleGroupNote": "Cette règle a des sous-règles : elle restreint ce à quoi ses sous-règles s'appliquent et ne dessine rien elle-même.",
      "labelPlaceholder": "Étiquette (facultatif)",
      "filterInvalid": "Filtre invalide — doit être une expression de tableau JSON. Cette règle est ignorée jusqu'à sa correction.",
      "elseRuleColor": "Couleur de la règle Sinon",
      "elseRuleColorPick": "Choisir la couleur de la règle Sinon à l'écran",
      "elseRuleEnabled": "Activer la règle «sinon» (désactivée, les entités ne correspondant à aucune règle sont masquées)",
      "elseAllOtherFeatures": "Sinon (toutes les autres entités)",
      "applyHint": "Cliquez sur Appliquer pour activer le rendu basé sur des règles.",
      "rulesApplyLive": "Les modifications des règles s'appliquent immédiatement à la carte — aucune étape d'application distincte n'est nécessaire.",
      "proportionalSize": "Taille proportionnelle",
      "sizeByValue": "Taille selon la valeur",
      "sizeField": "Champ de taille",
      "chooseField": "Choisir un champ…",
      "minValue": "Valeur min",
      "maxValue": "Valeur max",
      "minSize": "Taille min (px)",
      "maxSize": "Taille max (px)",
      "sizeLegend": "Légende de taille",
      "fillPattern": "Motif de remplissage",
      "patternColor": "Couleur du motif",
      "patternSvg": "SVG du motif",
      "svgPlaceholder": "<svg xmlns='http://www.w3.org/2000/svg' ...>…</svg> ou une URL data/https",
      "marker": "Marqueur",
      "useMarkerIcon": "Utiliser une icône de marqueur",
      "markerShape": "Forme du marqueur",
      "markerColor": "Couleur du marqueur",
      "markerSize": "Taille du marqueur (px)",
      "markerSvg": "SVG du marqueur",
      "markerShapes": {
        "circle": "Cercle",
        "square": "Carré",
        "triangle": "Triangle",
        "diamond": "Losange",
        "star": "Étoile",
        "cross": "Croix",
        "pin": "Épingle",
        "custom": "SVG personnalisé"
      },
      "fillPatterns": {
        "none": "Aucun (remplissage uni)",
        "hatch": "Hachures",
        "crossHatch": "Hachures croisées",
        "horizontal": "Lignes horizontales",
        "vertical": "Lignes verticales",
        "dots": "Points",
        "svg": "SVG personnalisé"
      },
      "transparent": "Transparent",
      "transparentSwatch": "Aucune couleur (transparent). Cliquez pour choisir une couleur.",
      "styleType": "Type de style",
      "attribute": "Attribut",
      "classes": "Classes",
      "allClasses": "Toutes ({{total}})",
      "scheme": "Schéma",
      "stops": "Paliers",
      "categories": "Catégories",
      "classColor": "Couleur de la classe {{index}}",
      "classColorPick": "Choisir la couleur de la classe {{index}} à l'écran",
      "classValue": "Valeur de la classe {{index}}",
      "colorExpression": "Expression de couleur",
      "applyStyleType": "Appliquer le type de style",
      "pointRenderer": "Rendu des points",
      "pointRendererSingle": "Symbole unique",
      "pointRendererHeatmap": "Heatmap",
      "pointRendererClustered": "Regroupé",
      "heatmapRadius": "Rayon de la Heatmap",
      "heatmapIntensity": "Intensité de la Heatmap",
      "clusterRadius": "Rayon de cluster (px)",
      "clusterMaxZoom": "Zoom max du cluster",
      "strokeWidthUnit": "Unité d'épaisseur du trait",
      "strokeWidthUnitPixels": "Pixels (constant à l'écran)",
      "strokeWidthUnitMeters": "Mètres (à l'échelle de la carte)",
      "textHaloColor": "Couleur du halo de texte",
      "textHaloWidth": "Épaisseur du halo de texte",
      "schemeEqualInterval": "Intervalle égal",
      "schemeQuantile": "Quantile",
      "schemeNaturalBreaks": "Seuils naturels",
      "schemeTopValues": "Les plus fréquents",
      "schemeAlphabetical": "Alphabétique",
      "schemeFirstValues": "Premières valeurs",
      "errorChooseAttribute": "Choisissez un attribut pour ce mode de style.",
      "errorAttributesUnavailable": "Impossible de charger les valeurs d'attributs de cette couche.",
      "errorProportionalSizeField": "Le champ de taille doit être numérique et comporter plus d'une valeur distincte.",
      "errorGraduatedStops": "Le style gradué nécessite au moins deux paliers numériques.",
      "errorCategorizedStops": "Le style catégorisé nécessite au moins une catégorie.",
      "invertedFill": "Remplissage inversé",
      "invertedFillHint": "Remplir hors des entités"
    },
    "suggestions": {
      "title": "Suggestions de style",
      "dismiss": "Masquer les suggestions",
      "categorize": "Catégoriser par {{field}}",
      "graduate": "Graduer par {{field}}",
      "heatmap": "Carte de chaleur"
    },
    "selectLayerHint": "Sélectionnez une couche pour modifier son style.",
    "layerOrderDefault": "Ordre des couches (par défaut)",
    "increaseValue": "Augmenter {{label}}",
    "decreaseValue": "Diminuer {{label}}",
    "visualization": "Visualisation",
    "mode2d": "2D",
    "mode3dExtrusion": "Extrusion 3D",
    "noControls": "Les commandes de style ne sont pas encore disponibles pour ce type de couche.",
    "selectedLayerType": "Type de couche sélectionnée : {{type}}",
    "footerDeck": "Les modifications s'appliquent en direct au style de la couche deck.gl de DuckDB.",
    "footerMaplibre": "Les modifications s'appliquent en direct aux propriétés de peinture de MapLibre.",
    "pluginPaintedFooter": "Cette couche est dessinée par son plugin, qui fournit ses propres contrôles de style.",
    "extrusion": {
      "color": "Couleur d'extrusion",
      "opacity": "Opacité d'extrusion",
      "advanced": "Expression de hauteur avancée",
      "heightExpression": "Expression de hauteur",
      "heightProperty": "Propriété de hauteur",
      "heightScale": "Échelle de hauteur",
      "base": "Hauteur de base",
      "apply": "Appliquer l'extrusion 3D",
      "footer": "Les paramètres d'extrusion 3D s'appliquent à l'enregistrement."
    },
    "expressionLabels": {
      "style": "Expression de style",
      "color": "Expression de couleur",
      "height": "Expression de hauteur"
    },
    "expressionErrors": {
      "notArray": "{{label}} doit être une expression de tableau JSON.",
      "notOperator": "{{label}} doit commencer par un opérateur, p. ex. [\"==\", [\"get\", \"field\"], value].",
      "notJson": "{{label}} n'est pas un JSON valide : {{message}}"
    },
    "expressionBuilder": {
      "title": "Générateur d'expressions",
      "openBuilder": "Ouvrir le générateur d'expressions",
      "openBuilderForRule": "Ouvrir le générateur d'expressions pour la règle {{index}}",
      "expressionLabel": "Expression",
      "clear": "Effacer l'expression",
      "valid": "Expression valide.",
      "apply": "Appliquer",
      "preview": "Aperçu",
      "previewEmpty": "Entrez une expression pour voir un aperçu en direct.",
      "previewNoFeatures": "Aucune entité pour l'aperçu.",
      "sampleFeature": "Entité {{index}} sur {{count}}",
      "previousFeature": "Entité précédente",
      "nextFeature": "Entité suivante",
      "filterMatches": "Correspond à cette entité",
      "filterNoMatch": "Ne correspond pas à cette entité",
      "fields": "Champs",
      "noFields": "Cette couche n'a aucun champ d'attribut.",
      "insertField": "Insérer le champ {{name}}",
      "functionsHeading": "Fonctions",
      "functionSearch": "Rechercher des fonctions",
      "noFunctionMatches": "Aucune fonction ne correspond à la recherche.",
      "variables": "Variables",
      "variablesHint": "Les variables sont remplacées par leurs valeurs actuelles lorsque l'expression est appliquée.",
      "categories": {
        "data": "Données et recherche",
        "decision": "Conditions et comparaison",
        "math": "Mathématiques",
        "string": "Chaînes",
        "conversion": "Conversion de type",
        "camera": "Zoom et couleur"
      },
      "functions": {
        "get": "Renvoie la valeur de l'attribut nommé de l'entité.",
        "has": "Vrai lorsque l'entité possède l'attribut nommé.",
        "id": "Renvoie l'identifiant de l'entité.",
        "properties": "Renvoie l'objet complet des attributs de l'entité.",
        "geometryType": "Renvoie le type de géométrie de l'entité (Point, LineString, Polygon, ...).",
        "at": "Renvoie l'élément du tableau à l'index donné.",
        "in": "Vrai lorsque la première valeur est contenue dans la seconde (chaîne ou tableau).",
        "indexOf": "Renvoie la position de la première valeur dans la seconde, ou -1.",
        "length": "Renvoie la longueur d'une chaîne ou d'un tableau.",
        "literal": "Intègre un tableau ou un objet littéral dans l'expression.",
        "typeofOp": "Renvoie le nom du type de la valeur.",
        "caseOp": "Renvoie la première sortie dont la condition est vraie, sinon la valeur de repli.",
        "match": "Compare une entrée à des valeurs listées et renvoie la sortie correspondante.",
        "coalesce": "Renvoie la première valeur non nulle.",
        "eq": "Vrai lorsque les deux valeurs sont égales.",
        "neq": "Vrai lorsque les valeurs diffèrent.",
        "gt": "Vrai lorsque la première valeur est supérieure à la seconde.",
        "gte": "Vrai lorsque la première valeur est supérieure ou égale à la seconde.",
        "lt": "Vrai lorsque la première valeur est inférieure à la seconde.",
        "lte": "Vrai lorsque la première valeur est inférieure ou égale à la seconde.",
        "all": "Vrai lorsque toutes les conditions sont vraies.",
        "any": "Vrai lorsqu'au moins une condition est vraie.",
        "not": "Inverse un booléen.",
        "add": "Additionne des nombres.",
        "subtract": "Soustrait le second nombre du premier.",
        "multiply": "Multiplie des nombres.",
        "divide": "Divise le premier nombre par le second.",
        "modulo": "Renvoie le reste d'une division.",
        "power": "Élève le premier nombre à la puissance du second.",
        "abs": "Renvoie la valeur absolue.",
        "ceil": "Arrondit à l'entier supérieur.",
        "floor": "Arrondit à l'entier inférieur.",
        "round": "Arrondit à l'entier le plus proche.",
        "sqrt": "Renvoie la racine carrée.",
        "ln": "Renvoie le logarithme naturel.",
        "log10": "Renvoie le logarithme en base 10.",
        "min": "Renvoie la plus petite des valeurs.",
        "max": "Renvoie la plus grande des valeurs.",
        "concat": "Joint les valeurs en une seule chaîne.",
        "upcase": "Convertit une chaîne en majuscules.",
        "downcase": "Convertit une chaîne en minuscules.",
        "slice": "Renvoie une portion d'une chaîne ou d'un tableau.",
        "toNumber": "Convertit une valeur en nombre.",
        "toString": "Convertit une valeur en chaîne.",
        "toBoolean": "Convertit une valeur en vrai ou faux.",
        "toColor": "Convertit une valeur en couleur.",
        "zoom": "Le niveau de zoom actuel de la carte (évalué en direct par la carte).",
        "interpolate": "Interpole en douceur entre les sorties à mesure que l'entrée change.",
        "step": "Renvoie des sorties par paliers aux seuils d'entrée donnés.",
        "rgb": "Construit une couleur à partir du rouge, du vert et du bleu (0-255).",
        "rgba": "Construit une couleur à partir du rouge, du vert, du bleu et de l'alpha."
      }
    },
    "decorations": {
      "heading": "Décoration de ligne",
      "typeNone": "Aucune",
      "typeArrow": "Flèches",
      "typeTriangle": "Triangles",
      "typeCircle": "Cercles",
      "typeSquare": "Carrés",
      "color": "Couleur de décoration",
      "size": "Taille du symbole (px)",
      "spacing": "Espacement (px)"
    },
    "generator": {
      "heading": "Générateur de géométrie",
      "type": "Géométrie dérivée",
      "typeNone": "Aucune",
      "typeCentroid": "Centroïdes",
      "typeBoundingBox": "Emprises",
      "typeConvexHull": "Enveloppes convexes",
      "typeBuffer": "Tampons",
      "bufferDistance": "Distance de tampon (m)",
      "fillColor": "Couleur de remplissage",
      "strokeColor": "Couleur de contour",
      "strokeWidth": "Largeur de contour (px)",
      "opacity": "Opacité du remplissage",
      "circleRadius": "Rayon de point (px)"
    },
    "attributeForm": {
      "heading": "Formulaire d'attributs",
      "empty": "Aucun champ configuré. Attribuez un widget d'édition, une contrainte ou une règle de visibilité à un champ.",
      "configureField": "Configurer le champ",
      "field": "Champ",
      "selectField": "Sélectionner un champ…",
      "widgetLabel": "Widget d'édition",
      "widget": {
        "text": "Texte",
        "number": "Nombre",
        "range": "Plage",
        "checkbox": "Case à cocher",
        "date": "Date",
        "valueMap": "Carte de valeurs"
      },
      "alias": "Alias",
      "required": "Obligatoire",
      "requiredTag": "obligatoire",
      "constraintTag": "contrainte",
      "visibilityTag": "visibilité",
      "valueMap": "Entrées de la carte de valeurs",
      "valueMapPlaceholder": "residential=Residential\ncommercial=Commercial",
      "valueMapHint": "Une entrée par ligne : valeur ou valeur=Étiquette.",
      "min": "Min",
      "max": "Max",
      "step": "Pas",
      "constraintExpression": "Expression de contrainte",
      "constraintPlaceholder": "[\">\", [\"get\", \"population\"], 0]",
      "constraintDescription": "Description de la contrainte",
      "constraintDescriptionPlaceholder": "Affichée lorsque la contrainte échoue",
      "visibilityExpression": "Expression de visibilité",
      "visibilityPlaceholder": "[\"==\", [\"get\", \"type\"], \"school\"]",
      "invalidExpression": "Expression non valide",
      "openBuilder": "Ouvrir le générateur d'expressions",
      "edit": "Modifier la configuration du champ",
      "remove": "Supprimer la configuration du champ",
      "cancel": "Annuler",
      "save": "Enregistrer",
      "noFields": "La couche n'a aucun champ d'attribut à configurer.",
      "minMaxInvalid": "Le minimum doit être inférieur ou égal au maximum."
    }
  },
  "layers": {
    "panelCollapsedLabel": "Couches (réduit)",
    "expand": "Développer les couches",
    "collapse": "Réduire les couches",
    "resizePanel": "Redimensionner le panneau Couches",
    "dragToReorder": "Faites glisser pour réorganiser",
    "saveGeometryEdits": "Enregistrer les modifications de géométrie",
    "discardGeometryEdits": "Annuler les modifications de géométrie",
    "moveUp": "Monter",
    "moveDown": "Descendre",
    "zoomToLayer": "Zoomer sur la couche",
    "layerActions": "Actions de la couche",
    "metadata": "Métadonnées",
    "removeLayer": "Supprimer la couche",
    "identifyFeatures": "Identifier les entités",
    "identifyDeactivate": "Désactiver l'identification",
    "identifyInspectPixels": "Inspecter les valeurs de pixels",
    "identifyStopInspectPixels": "Arrêter d'inspecter les valeurs de pixels",
    "identifyUnavailable": "L'identification n'est disponible que pour les couches vectorielles, WMS et COG",
    "exportGeoTiff": "GeoTIFF (COG)",
    "extractSubset": "Extraire un sous-ensemble…",
    "stylesMenu": "Styles",
    "exportMapboxStyle": "Exporter en style Mapbox GL",
    "exportSldStyle": "Exporter en OGC SLD",
    "exportQmlStyle": "Exporter en QGIS QML",
    "exportStyleSuccess": "Style exporté.",
    "exportStyleDataNotReady": "Les données de la couche ne sont pas encore prêtes. Réessayez dans un instant.",
    "exportStyleNeedsFeatures": "L'exportation de style nécessite une couche vectorielle avec des entités.",
    "exportStyleError": "Impossible d'exporter le style de cette couche.",
    "importStyle": "Importer un style (Mapbox GL / SLD / QML)…",
    "openStyleManager": "Styles enregistrés (Gestionnaire de styles)…",
    "importStyleSuccess": "Style importé.",
    "importStyleInvalid": "Ce fichier n'est pas un JSON, SLD ou QML valide.",
    "importStyleNoMatch": "Aucune symbologie n'a pu être lue depuis ce style.",
    "importStyleError": "Impossible d'importer ce style.",
    "copyStyle": "Copier le style",
    "pasteStyle": "Coller le style",
    "pasteStyleFrom": "Coller le style de « {{name}} »",
    "pasteStyleEmpty": "Copiez d'abord le style d'une couche",
    "pasteStyleMismatch": "Le style copié correspond à un autre type de couche",
    "styleCopied": "Style copié depuis « {{name}} ».",
    "stylePasted": "Style collé depuis « {{name}} ».",
    "saveToLibrary": "Enregistrer dans Mes données",
    "savedToLibrary": "« {{name}} » enregistré dans Mes données.",
    "saveToLibraryNoSource": "Cette couche n'a pas de source pouvant être rajoutée, elle ne peut donc pas être enregistrée dans Mes données.",
    "saveToLibraryTooLarge": "Les entités de cette couche en sont l'unique copie et sont trop volumineuses pour être enregistrées dans Mes données.",
    "saveToLibraryConfigTooLarge": "La configuration enregistrée de cette couche est trop volumineuse pour Mes données.",
    "bindToTimeSlider": "Lier au curseur temporel…",
    "bindTimeDimensionToTimeSlider": "Lier la dimension temporelle au curseur temporel",
    "bindNoTimeDimension": "Cette couche n'a pas de dimension temporelle lisible.",
    "unbindFromTimeSlider": "Délier du curseur temporel",
    "bindDialogDescription": "Filtrer les entités de cette couche par une propriété de date ou d'horodatage lorsque vous parcourez la chronologie. La couche conserve son style et son opacité.",
    "bindScanning": "Analyse des entités pour les propriétés de date et d'horodatage…",
    "bindNoProperty": "Aucune propriété de date ou d'horodatage n'a été trouvée dans cette couche.",
    "bindNoTimestamps": "La propriété sélectionnée n'a pas d'horodatages lisibles. Choisissez une autre propriété.",
    "bindTileNoFeatures": "Aucune tuile n'est encore chargée pour cette couche. Zoomez sur la couche, puis réessayez.",
    "bindRange": "Plage temporelle",
    "bindRangeEnd": "Fin de la plage temporelle",
    "bindRangeHint": "Établie à partir des tuiles chargées jusqu'ici, elle peut donc être plus étroite que le jeu de données complet. Saisissez une année (1958) ou une date (1958-03-01).",
    "bindRangeInvalid": "Saisissez les deux bornes sous forme d'année (1958) ou de date (1958-03-01).",
    "bindProperty": "Propriété temporelle",
    "bindWindow": "Afficher les entités",
    "bindWindowStep": "Dans l'étape actuelle",
    "bindWindowWide": "Dans une étape avant et après",
    "bindWindowWider": "Dans trois étapes avant et après",
    "bindWindowCumulative": "Tout jusqu'à l'étape actuelle (cumulatif)",
    "bindCancel": "Annuler",
    "bindConfirm": "Lier",
    "openRasterStylePanel": "Modifier le style raster…",
    "exportRasterSuccess": "Raster exporté.",
    "exportRasterError": "Impossible d'exporter ce raster.",
    "saveEditsToSource": "Enregistrer les modifications dans le fichier source",
    "saveEditsSuccess": "{{count}} entité(s) enregistrée(s) dans le fichier source.",
    "saveEditsNoFeatures": "Cette couche n'a aucune entité à enregistrer.",
    "saveEditsError": "Impossible d'enregistrer les modifications dans le fichier source.",
    "saveEditsToPostgis": "Enregistrer les modifications dans la table PostGIS",
    "saveEditsPostgisSuccess": "Enregistré dans {{table}} : {{inserted}} inséré(s), {{updated}} mis à jour, {{deleted}} supprimé(s).",
    "saveEditsPostgisSkippedFields": "Les champs sans colonne de table correspondante n'ont pas été enregistrés : {{fields}}.",
    "saveEditsPostgisRefreshWarning": "Les modifications ont été enregistrées dans la table, mais l'actualisation de la couche a échoué. Rechargez la couche avant d'enregistrer à nouveau, sinon de nouvelles entités pourraient être insérées deux fois.",
    "saveEditsPostgisNoConnection": "Aucune connexion PostgreSQL n'est disponible pour cette couche. Reconnectez-vous dans Ajouter des données > PostgreSQL, puis réessayez.",
    "typeBasemap": "fond de carte",
    "searchPlaces": "Rechercher des lieux",
    "searchPlacesPlaceholder": "Rechercher un lieu, des coordonnées ou une cellule H3...",
    "searchPlacesSearching": "Recherche...",
    "searchPlacesNoResults": "Aucun lieu trouvé",
    "searchPlacesError": "Échec de la recherche. Réessayez.",
    "searchPlacesClear": "Effacer la recherche",
    "searchPlacesGoToCoordinate": "Aller à {{coordinate}}",
    "searchPlacesGoToH3Cell": "Aller à la cellule H3 {{cell}} (rés. {{resolution}})",
    "background": "Arrière-plan",
    "backgroundCannotReorder": "L'arrière-plan ne peut pas être réorganisé",
    "hideBackground": "Masquer l'arrière-plan",
    "showBackground": "Afficher l'arrière-plan",
    "opacity": "Opacité",
    "opacityExactHint": "Double-cliquez pour saisir une valeur exacte",
    "opacityFor": "Opacité de {{name}}",
    "opacityValueInputAria": "Valeur de {{label}}",
    "opacityValueEditAria": "Modifier la valeur de {{label}}",
    "basemapOpacity": "Opacité du fond de carte",
    "newGroup": "Nouveau groupe",
    "basemaps": "Fonds de carte",
    "geoEditor": "GeoEditor",
    "collapseGroup": "Réduire le groupe",
    "expandGroup": "Développer le groupe",
    "hideGroup": "Masquer le groupe",
    "showGroup": "Afficher le groupe",
    "renameGroup": "Renommer le groupe",
    "moveGroupUp": "Monter le groupe",
    "moveGroupDown": "Descendre le groupe",
    "ungroupKeepLayers": "Dégrouper (conserver les couches)",
    "deleteGroupAndLayers": "Supprimer le groupe et les couches",
    "groupActions": "Actions de groupe",
    "addDataToGroup": "Ajouter des données au groupe",
    "groupOpacity": "Opacité",
    "groupOpacityAria": "Opacité du groupe {{name}}",
    "doubleClickToRename": "Double-cliquez pour renommer",
    "doubleClickToChangeBasemap": "Double-cliquez pour changer le fond de carte",
    "renameNamed": "Renommer {{name}}",
    "newGroupFromLayer": "Nouveau groupe depuis la couche",
    "newGroupFromSelectedLayers": "Nouveau groupe depuis les couches sélectionnées",
    "moveToGroup": "Déplacer vers un groupe",
    "moveSelectedToGroup": "Déplacer les couches sélectionnées vers un groupe",
    "removeFromGroup": "Retirer du groupe",
    "hiddenByGroup": "Masqué car son groupe n'est pas visible",
    "empty": "Aucune couche de données. Ajoutez des données depuis la barre d'outils.",
    "emptyBeginner": "Pas encore de couches. Ajoutez des fonds de carte via Extensions → Fonds de carte, ou vos propres données via le menu Ajouter des données.",
    "hideAllLayers": "Masquer toutes les couches",
    "showAllLayers": "Afficher toutes les couches",
    "dragNamedToReorder": "Faites glisser {{name}} pour réorganiser",
    "hideLayer": "Masquer la couche",
    "showLayer": "Afficher la couche",
    "editingGeometry": "Modification de la géométrie",
    "rename": "Renommer",
    "materializeToEditable": "Matérialiser en couche modifiable",
    "finishEditingGeometry": "Terminer la modification de la géométrie",
    "editGeometry": "Modifier la géométrie",
    "openAttributeTable": "Ouvrir la table attributaire",
    "openRasterAttributeTable": "Ouvrir la table d'attributs raster",
    "export": "Exporter",
    "refresh": "Actualiser",
    "autoRefreshOn": "Actualisation automatique activée",
    "lastSynced": "Dernière synchronisation {{time}}",
    "syncErrorStatus": "Échec de la synchronisation : {{message}}",
    "autoRefresh": "Actualisation automatique",
    "refreshWfsGeojsonOnly": "URL WFS et GeoJSON uniquement",
    "editSqlQuery": "Modifier la requête dans l'espace de travail SQL",
    "reloadFromDisk": "Recharger depuis le disque",
    "watchFile": "Surveiller les modifications du fichier",
    "watchError": "Impossible de surveiller les modifications de ce fichier.",
    "autoRefreshDialogTitle": "Actualisation automatique de {{name}}",
    "layerFallback": "Couche",
    "autoRefreshDialogDescription": "Recharger cette couche depuis sa source à intervalle fixe.",
    "interval": "Intervalle",
    "custom": "Personnalisé",
    "customIntervalSeconds": "Intervalle personnalisé (secondes)",
    "refreshFailurePolicy": "En cas d'échec de l'actualisation",
    "refreshFailureKeepLast": "Conserver les dernières données valides",
    "refreshFailureClear": "Vider la couche",
    "apply": "Appliquer",
    "enterPositiveSeconds": "Entrez un nombre de secondes positif.",
    "metadataDialogTitle": "Métadonnées de {{name}}",
    "metadataDialogDescription": "Métadonnées de la couche et informations sur la source",
    "metadataRasterLoading": "Lecture des métadonnées du raster…",
    "metadataRasterError": "Impossible de lire les métadonnées de ce raster.",
    "resizeMetadataDialog": "Redimensionner la boîte de dialogue des métadonnées",
    "removeLayerConfirmTitle": "Supprimer la couche ?",
    "removeLayerConfirmBody": "Cela supprime {{name}} du projet et de la carte.",
    "thisLayerFallback": "cette couche",
    "refreshingAuto": "Actualisation automatique...",
    "refreshing": "Actualisation...",
    "refreshVectorControlError": "Impossible d'actualiser cette couche. Essayez de rouvrir le panneau Ajouter une couche vectorielle.",
    "refreshed": "Actualisé.",
    "refreshedCount": "{{count}} entités actualisées.",
    "refreshError": "Impossible d'actualiser cette couche.",
    "exportNeedsFeatures": "L'exportation nécessite une couche vectorielle avec des entités.",
    "exportedWithWarnings": "Couche exportée. {{warnings}}",
    "exported": "Couche exportée.",
    "exportLayerError": "Impossible d'exporter cette couche.",
    "refreshIntervals": {
      "off": "Désactivé",
      "s15": "15 secondes",
      "s30": "30 secondes",
      "m1": "1 minute",
      "m5": "5 minutes",
      "m15": "15 minutes"
    }
  },
  "timeSliderSymbology": {
    "bands": "Bandes",
    "bandsPlaceholder": "auto",
    "bandsHint": "Numéros de bande à partir de 1, séparés par des virgules (ex. 4,3,2). Laissez vide pour la valeur par défaut.",
    "bandsInvalid": "Saisissez des numéros de bande entiers à partir de 1, séparés par des virgules.",
    "colormapNone": "Aucun (RVB / multibande)"
  },
  "rasterSymbology": {
    "gamma": "Gamma",
    "min": "Min",
    "max": "Max",
    "value": "Valeur",
    "autoPlaceholder": "auto",
    "colorRampLabel": "Dégradé de couleurs",
    "reverseRamp": "Inverser le dégradé",
    "customRamp": "Personnalisé…",
    "customColors": "Couleurs personnalisées",
    "customColorsValid": "{{count}} couleurs, du plus bas au plus haut. Utilisez Inverser pour permuter.",
    "customColorsHint": "Entrez au moins deux codes hexadécimaux, séparés par des virgules ou des espaces.",
    "imagePalette": "Palette d'image",
    "createLegend": "Créer une légende à partir de la palette",
    "createLegendHint": "Ajoute une légende avec un élément par valeur de pixel, en utilisant les couleurs de la palette du raster. Renommez les éléments en noms de classe par la suite.",
    "createLegendPending": "Lecture de la palette…",
    "createLegendEmpty": "Aucune couleur de palette trouvée pour ce raster.",
    "createLegendError": "Impossible de lire la palette du raster.",
    "heading": "Symbologie raster",
    "renderMode": "Mode de rendu",
    "modeSingle": "Bande unique (pseudo-couleur)",
    "modeIndex": "Indice (différence normalisée)",
    "modeRgb": "Composition RVB",
    "band": "Bande",
    "stretch": "Étirement",
    "stretchLinear": "Linéaire",
    "stretchLog": "Logarithmique",
    "stretchSqrt": "Racine carrée",
    "index": "Indice",
    "classifyToggle": "Classer en classes discrètes",
    "method": "Méthode",
    "methodEqualInterval": "Intervalles égaux",
    "methodQuantile": "Quantile",
    "methodManual": "Seuils manuels",
    "classes": "Classes",
    "classEdges": "Bornes de classe",
    "noData": "Sans données",
    "nodataAuto": "Auto (depuis le fichier)",
    "nodataOff": "Afficher tous les pixels",
    "nodataCustom": "Valeur personnalisée"
  },
  "rasterAttributeTable": {
    "title": "Table d'attributs raster",
    "resize": "Redimensionner la table d'attributs raster",
    "noRasterSelected": "Sélectionnez une couche raster pour afficher sa table d'attributs.",
    "computing": "Lecture des classes du raster…",
    "empty": "Pas encore de classes. Utilisez Recalculer pour construire la table.",
    "band": "Bande",
    "bandOption": "Bande {{band}}",
    "close": "Fermer la table d'attributs raster",
    "noSource": "Ce raster n'a pas de fichier source lisible.",
    "readError": "Impossible de lire les données du raster.",
    "bandMissing": "La bande {{band}} est introuvable dans ce raster.",
    "notCategorical": "Cette bande a trop de valeurs distinctes pour être catégorielle.",
    "tooManyClasses": "L'application de la symbologie prend en charge jusqu'à {{max}} classes.",
    "symbologyApplied": "Symbologie appliquée depuis la table.",
    "noPalette": "Ce raster n'a pas de palette intégrée.",
    "legendError": "Impossible d'ouvrir la légende.",
    "csvError": "Impossible d'exporter le fichier CSV.",
    "recomputeTitle": "Analyser le raster et reconstruire la table des classes",
    "applyTitle": "Colorer le raster selon les classes de la table",
    "paletteTitle": "Réinitialiser les couleurs depuis la palette intégrée",
    "legendTitle": "Remplir la légende de la carte avec les classes de la table",
    "csvTitle": "Exporter la table en CSV",
    "buttons": {
      "recompute": "Recalculer",
      "apply": "Appliquer la symbologie",
      "palette": "Depuis la palette",
      "legend": "Vers la légende",
      "csv": "CSV"
    },
    "columns": {
      "value": "Valeur",
      "count": "Nombre",
      "percent": "%",
      "area_m2": "Surface (m²)",
      "area_ha": "Surface (ha)",
      "area_km2": "Surface (km²)",
      "color": "Couleur",
      "label": "Étiquette"
    },
    "rowColor": "Couleur pour la valeur {{value}}",
    "rowLabel": "Étiquette pour la valeur {{value}}"
  },
  "raster": {
    "filePickerLabel": "Rasters",
    "cogConvertConfirm": "« {{name}} » est un GeoTIFF simple (par bandes), qui ne peut pas être affiché directement. Le convertir maintenant en GeoTIFF Cloud-Optimized et le charger ?",
    "cogConvertRemoteConfirm": "« {{name}} » est un GeoTIFF simple (par bandes), qui ne peut pas être affiché directement. L'afficher implique de télécharger le fichier complet et de le convertir en GeoTIFF Cloud-Optimized dans le navigateur, ce qui peut être lent et gourmand en mémoire pour les fichiers volumineux. Continuer ?",
    "cogConvertLargeConfirm": "« {{name}} » est un grand GeoTIFF {{width}}×{{height}} qui n'est pas un GeoTIFF Cloud-Optimized. Le convertir dans le navigateur peut être lent et gourmand en mémoire. Le convertir et le charger quand même ?",
    "cogConvertFailed": "Impossible de convertir « {{name}} » en GeoTIFF Cloud-Optimized. Essayez de le convertir avec gdal_translate ou rio cogeo, puis chargez le résultat.",
    "rasterDownloadFailed": "Impossible de télécharger « {{name}} ». Le serveur est peut-être lent, inaccessible ou bloque les requêtes cross-origin, ou le fichier est peut-être trop volumineux pour tenir en mémoire. Vérifiez l'URL et réessayez.",
    "rasterNotGeotiff": "« {{name}} » n'a pas renvoyé de GeoTIFF. Le serveur a peut-être envoyé une erreur ou une page de connexion à la place. Vérifiez l'URL et réessayez."
  },
  "attributeForm": {
    "error": {
      "required": "Une valeur est requise",
      "number": "Doit être un nombre",
      "range": "Doit être entre {{min}} et {{max}}",
      "rangeMin": "Doit être au moins {{min}}",
      "rangeMax": "Doit être au plus {{max}}",
      "valueMap": "La valeur ne figure pas dans la liste autorisée",
      "constraint": "Contrainte non satisfaite"
    }
  },
  "legendPanel": {
    "edit": "Modifier la légende",
    "done": "Terminer la modification",
    "close": "Fermer la légende",
    "empty": "Aucune couche visible à afficher.",
    "renameTitle": "Titre de la légende",
    "renameEntry": "Renommer {{name}}",
    "renameItem": "Renommer {{name}}",
    "moveUp": "Monter",
    "moveDown": "Descendre",
    "hideEntry": "Masquer de la légende",
    "showEntry": "Afficher dans la légende",
    "hideItem": "Masquer l'élément",
    "showItem": "Afficher l'élément",
    "customizeEntry": "Personnaliser les éléments",
    "resetEntry": "Rétablir en automatique",
    "removeSection": "Supprimer la section",
    "addSection": "Ajouter une section personnalisée",
    "newSectionTitle": "Nouvelle section",
    "newItemLabel": "Nouvel élément",
    "addItem": "Ajouter un élément",
    "removeItem": "Supprimer l'élément",
    "itemColor": "Couleur de l'élément",
    "position": "Position",
    "positions": {
      "top-left": "En haut à gauche",
      "top-right": "En haut à droite",
      "bottom-left": "En bas à gauche",
      "bottom-right": "En bas à droite"
    },
    "low": "Faible",
    "high": "Élevé",
    "addFromDictionary": "Ajouter depuis un dictionnaire",
    "dictionaryHint": "Un objet JSON de paires {\"libellé\": \"couleur\"}, ou une ligne \"libellé : couleur\" par élément.",
    "dictionaryAdd": "Ajouter la section",
    "cancel": "Annuler",
    "resize": "Redimensionner la légende",
    "collapseEntry": "Réduire la section",
    "expandEntry": "Développer la section",
    "collapsePanel": "Réduire la légende",
    "expandPanel": "Développer la légende",
    "exportJson": "Exporter en JSON"
  },
  "errorBoundary": {
    "title": "Une erreur est survenue",
    "description": "GeoLibre a rencontré une erreur inattendue et n'a pas pu continuer. Votre travail n'est peut-être pas enregistré — essayez de le récupérer avant de recharger.",
    "tryAgain": "Réessayer",
    "reload": "Recharger l'application",
    "sectionFailed": "{{label}} n'a pas pu s'afficher. Le reste de GeoLibre reste disponible."
  },
  "commandPalette": {
    "title": "Palette de commandes",
    "searchAria": "Rechercher des commandes",
    "searchPlaceholder": "Rechercher des commandes…",
    "listAria": "Commandes",
    "noMatches": "Aucune commande correspondante"
  },
  "shortcuts": {
    "title": "Raccourcis clavier",
    "description": "Appuyez sur {{shortcut}} pour rechercher n'importe quelle action dans la palette de commandes.",
    "groupGeneral": "Général",
    "groupMapNavigation": "Navigation dans la carte",
    "openCommandPalette": "Ouvrir la palette de commandes",
    "showKeyboardShortcuts": "Afficher les raccourcis clavier",
    "nav": {
      "zoomIn": "Zoom avant",
      "zoomOut": "Zoom arrière",
      "pan": "Déplacer",
      "rotate": "Pivoter",
      "tilt": "Incliner"
    }
  },
  "diagnostics": {
    "title": "Diagnostics",
    "description": "Requêtes réseau récentes, erreurs MapLibre, avertissements de la console et exceptions d'exécution.",
    "countTotal_one": "{{count}} au total",
    "countTotal_other": "{{count}} au total",
    "countErrors_one": "{{count}} erreur",
    "countErrors_other": "{{count}} erreurs",
    "countWarnings_one": "{{count}} avertissement",
    "countWarnings_other": "{{count}} avertissements",
    "countNetwork_one": "{{count}} réseau",
    "countNetwork_other": "{{count}} réseau",
    "countNetworkErrors_one": "{{count}} erreur réseau",
    "countNetworkErrors_other": "{{count}} erreurs réseau",
    "logAllRequests": "Journaliser toutes les requêtes réseau",
    "logAllRequestsHint": "Enregistre désormais les requêtes réseau réussies et abandonnées ; les requêtes faites pendant que la journalisation était désactivée ne sont pas rattrapées. Désactivé par défaut, car journaliser chaque requête ralentit l'application.",
    "copyJson": "Copier le JSON",
    "copied": "Copié",
    "clear": "Effacer",
    "emptyAll": "Aucun diagnostic capturé.",
    "emptyError": "Aucun diagnostic d'erreur capturé.",
    "emptyWarning": "Aucun diagnostic d'avertissement capturé.",
    "emptyInfo": "Aucun diagnostic d'information capturé.",
    "emptyNetwork": "Aucun diagnostic réseau capturé.",
    "emptyNetworkError": "Aucun diagnostic d'erreur réseau capturé."
  },
  "shell": {
    "workspaceTitle": "Espace de travail cartographique GeoLibre",
    "section": {
      "toolbar": "Barre d'outils",
      "sharedLeftSidebar": "Barre latérale gauche partagée",
      "pluginPanelLeftOfLayers": "Panneau d'extension (à gauche de Couches)",
      "layerPanel": "Panneau des couches",
      "pluginPanelRightOfLayers": "Panneau d'extension (à droite de Couches)",
      "map": "Carte",
      "pluginFloatingPanels": "Panneaux flottants d'extensions",
      "selectionPanels": "Panneaux de sélection",
      "sunSimulationPanel": "Panneau de simulation solaire",
      "routeAnimationPanel": "Panneau d'animation d'itinéraire",
      "flightSimulatorPanel": "Panneau du simulateur de vol",
      "sharedRightSidebar": "Barre latérale droite partagée",
      "pluginPanelLeftOfStyle": "Panneau d'extension (à gauche de Style)",
      "stylePanel": "Panneau de style",
      "pluginPanelRightOfStyle": "Panneau d'extension (à droite de Style)",
      "notebook": "Notebook",
      "attributeTable": "Table attributaire",
      "rasterAttributeTable": "Table attributaire raster",
      "dashboard": "Tableau de bord",
      "pythonConsole": "Console Python",
      "sqlWorkspace": "Espace de travail SQL",
      "assistant": "Assistant",
      "statusBar": "Barre d'état"
    }
  },
  "attributeStats": {
    "title": "Statistiques de champ",
    "description": "Statistiques récapitulatives d'un champ dans « {{layer}} ».",
    "noFields": "Cette couche n'a aucun champ à résumer.",
    "field": "Champ",
    "scope": "Portée",
    "scopeAll": "Toutes les entités ({{total}})",
    "scopeFiltered": "Filtrées ({{total}})",
    "copiedToClipboard": "Copié dans le presse-papiers.",
    "copy": "Copier",
    "copyHeader": "Statistiques de champ — {{field}}",
    "copyHeaderFiltered": "Statistiques de champ — {{field}} (filtrées)",
    "noValues": "Aucune valeur à résumer.",
    "mostFrequent": "Valeurs les plus fréquentes",
    "noPopulated": "Aucune valeur renseignée.",
    "stat": {
      "count": "Nombre",
      "nulls": "Valeurs nulles",
      "nonNumeric": "Non numériques",
      "unique": "Uniques",
      "min": "Min",
      "max": "Max",
      "mean": "Moyenne",
      "median": "Médiane",
      "std": "Écart-type",
      "sum": "Somme"
    }
  },
  "columnExplorer": {
    "title": "Explorateur de colonnes",
    "description": "Type, complétude et distribution de chaque champ dans « {{layer}} ».",
    "noFields": "Cette couche n'a aucun champ à explorer.",
    "findField": "Trouver un champ",
    "findFieldPlaceholder": "Filtrer les champs par nom...",
    "scope": "Portée",
    "scopeAll": "Toutes les entités ({{total}})",
    "scopeFiltered": "Filtrées ({{total}})",
    "fieldsShown": "{{shown}} champs sur {{total}}",
    "noMatches": "Aucun champ ne correspond à « {{search}} ».",
    "typeNumeric": "Numérique",
    "typeText": "Texte",
    "completenessTitle": "{{populated}} renseignées, {{nulls}} nulles",
    "populated": "{{total}} renseignées",
    "null": "{{total}} nulles",
    "unique": "{{total}} uniques",
    "min": "Min",
    "mean": "Moyenne",
    "max": "Max",
    "noNumericValues": "Aucune valeur numérique à tracer.",
    "distributionAria": "Distribution de {{field}} : {{total}} valeurs de {{min}} à {{max}}",
    "noPopulated": "Aucune valeur renseignée.",
    "moreValues": "+{{total}} autres valeurs"
  },
  "stacPlugin": {
    "title": "Catalogues STAC",
    "footprintLayerName": "Emprises de recherche STAC",
    "catalogSearch": "Trouver un catalogue public dans STAC Index",
    "catalogSearchPlaceholder": "Rechercher des noms de catalogues…",
    "indexLoading": "Chargement de STAC Index…",
    "indexUnavailable": "STAC Index indisponible : saisissez une URL",
    "indexLoadFailed": "Impossible de charger STAC Index",
    "urlLabel": "URL du catalogue ou de l'API STAC",
    "connect": "Connecter",
    "connecting": "Connexion à STAC…",
    "connected": "Connecté. Choisissez des filtres et lancez la recherche.",
    "connectFailed": "Impossible de se connecter à STAC",
    "selectCatalog": "Sélectionnez un catalogue…",
    "noMatchingCatalogs": "Aucun catalogue correspondant",
    "catalogApiSuffix": " (API)",
    "catalogStaticSuffix": " (statique)",
    "kindApi": "API STAC",
    "kindStatic": "catalogue statique",
    "collectionsHint": "Maintenez Ctrl/Cmd pour sélectionner plusieurs collections ; faites glisser le bord inférieur pour redimensionner",
    "limitToExtent": "Limiter la recherche à l'emprise actuelle de la carte",
    "bboxLabel": "Boîte englobante (ouest, sud, est, nord)",
    "bboxPlaceholder": "Facultatif ; remplace l'emprise de la carte",
    "bboxInvalid": "Saisissez une boîte englobante valide : ouest, sud, est, nord.",
    "drawBbox": "Dessiner une emprise sur la carte",
    "cancelDrawing": "Annuler le dessin",
    "clearDrawnBbox": "Effacer l'emprise dessinée",
    "drawHint": "Cliquez et faites glisser sur la carte pour dessiner une emprise de recherche.",
    "drawnBbox": "Emprise dessinée : {{bbox}}",
    "drawnBboxCleared": "Emprise dessinée effacée.",
    "mapNotReady": "La carte n'est pas prête pour le dessin.",
    "startDate": "Date de début",
    "endDate": "Date de fin",
    "additionalParams": "Paramètres de recherche supplémentaires (JSON, API STAC uniquement)",
    "additionalInvalid": "Les paramètres de recherche supplémentaires doivent être un objet JSON.",
    "searchItems": "Rechercher des éléments",
    "clearResults": "Effacer les résultats",
    "resultsCleared": "Résultats de recherche effacés.",
    "searching": "Recherche d'éléments STAC…",
    "loadingMore": "Chargement d'autres éléments…",
    "noResults": "Aucun élément STAC ne correspond à ces filtres.",
    "searchFailed": "Échec de la recherche STAC",
    "showing": "Affichage de {{count}} éléments.",
    "showingOfMatched": "Affichage de {{count}} éléments sur {{matched}}.",
    "loadMore": "Charger plus",
    "renderOptions": "Options de rendu raster",
    "bands": "Bandes",
    "bandsPlaceholder": "p. ex. 1 ou 1,2,3 (par défaut : automatique)",
    "colormap": "Palette de couleurs (bande unique uniquement)",
    "colormapDefault": "Valeur par défaut du moteur de rendu",
    "minValue": "Valeur minimale",
    "maxValue": "Valeur maximale",
    "nodata": "Valeur NoData",
    "nodataPlaceholder": "Remplace la balise NoData du fichier",
    "renderHint": "Laissez un champ vide pour que le moteur de rendu le déduise du GeoTIFF. Les options s'appliquent aux ressources ajoutées ensuite.",
    "initialStatus": "Choisissez un catalogue dans STAC Index ou saisissez une URL.",
    "catalogInfo": "{{title}} · {{kind}}",
    "zoom": "Zoomer",
    "add": "Ajouter",
    "download": "Télécharger",
    "adding": "Ajout de {{asset}}…",
    "added": "{{asset}} ajouté à la carte.",
    "addUnsupported": "Seules les ressources GeoTIFF/COG et GeoJSON peuvent être ajoutées à la carte",
    "addFailed": "Impossible d'ajouter la ressource",
    "cogUnsupported": "Cet hôte GeoLibre ne peut pas visualiser les ressources GeoTIFF distantes"
  },
  "vectorExport": {
    "invalidKmlCoordinatesByPosition": "L'export KML n'a pas pu écrire l'entité {{position}} car ses coordonnées sont invalides.",
    "invalidKmlCoordinatesById": "L'export KML n'a pas pu écrire l'entité d'ID {{id}} car ses coordonnées sont invalides."
  },
  "comments": {
    "title": "Commentaires",
    "addDialogTitle": "Ajouter un commentaire de revue",
    "addDialogDescription": "Publiez une note ancrée sur ce projet pour la revue d'équipe ou comme référence hors ligne.",
    "authorNameLabel": "Votre nom (demandé une fois, enregistré automatiquement)",
    "authorNamePlaceholder": "p. ex. Alex ou Sarah",
    "commentLabel": "Commentaire / Retour",
    "commentPlaceholder": "Saisissez ici votre note de revue ou votre retour...",
    "confirmDelete": "Voulez-vous vraiment supprimer ce fil de commentaires ?",
    "sessionDisconnected": "Session déconnectée.",
    "defaultAuthorName": "Auteur"
  },
  "s2Plugin": {
    "title": "Grille S2",
    "controlTitle": "Paramètres de la grille S2",
    "autoResolution": "Résolution automatique",
    "resolution": "Résolution",
    "cellCount": "Cellules dans la vue : {{count}}",
    "tooManyCells": "Cette vue dépasse la limite de {{limit}} cellules. Zoomez ou réduisez la résolution.",
    "fillColor": "Couleur de remplissage",
    "fillOpacity": "Opacité du remplissage",
    "lineColor": "Couleur du contour",
    "lineWidth": "Épaisseur du contour",
    "showLabels": "Afficher les identifiants de cellule",
    "identifyHint": "Cliquez sur la carte pour identifier une cellule S2.",
    "selectedCell": "Cellule sélectionnée",
    "noSelection": "Aucune cellule sélectionnée",
    "copyId": "Copier l'identifiant",
    "parent": "Cellule parente",
    "children": "Cellules enfants",
    "neighbors": "Voisines",
    "center": "Centre",
    "zoomToCell": "Zoomer sur la cellule",
    "addAsLayer": "Ajouter la grille comme couche",
    "exportGeoJson": "Exporter en GeoJSON",
    "exportCsv": "Exporter en CSV",
    "includeNeighbors": "Inclure les cellules voisines de la cellule sélectionnée",
    "includeParents": "Inclure les cellules parentes de la cellule sélectionnée"
  },
  "a5Plugin": {
    "title": "Grille A5",
    "controlTitle": "Paramètres de la grille A5",
    "autoResolution": "Résolution automatique",
    "resolution": "Résolution",
    "cellCount": "Cellules dans la vue : {{count}}",
    "tooManyCells": "Cette vue dépasse la limite de {{limit}} cellules. Zoomez ou réduisez la résolution.",
    "fillColor": "Couleur de remplissage",
    "fillOpacity": "Opacité du remplissage",
    "lineColor": "Couleur du contour",
    "lineWidth": "Épaisseur du contour",
    "showLabels": "Afficher les identifiants de cellule",
    "identifyHint": "Cliquez sur la carte pour identifier une cellule A5.",
    "selectedCell": "Cellule sélectionnée",
    "noSelection": "Aucune cellule sélectionnée",
    "copyId": "Copier l'identifiant",
    "parent": "Cellule parente",
    "children": "Cellules enfants",
    "neighbors": "Voisines",
    "center": "Centre",
    "zoomToCell": "Zoomer sur la cellule",
    "addAsLayer": "Ajouter la grille comme couche",
    "exportGeoJson": "Exporter en GeoJSON",
    "exportCsv": "Exporter en CSV",
    "includeNeighbors": "Inclure les cellules voisines de la cellule sélectionnée",
    "includeParents": "Inclure les cellules parentes de la cellule sélectionnée"
  },
  "dggridPlugin": {
    "title": "DGGRID",
    "controlTitle": "Paramètres de DGGRID",
    "cellType": "Type de cellule",
    "topologyHexagon": "Hexagone",
    "topologyDiamond": "Losange",
    "topologyTriangle": "Triangle",
    "projection": "Projection",
    "aperture": "Ouverture",
    "autoResolution": "Résolution automatique",
    "resolution": "Résolution",
    "cellCount": "Cellules dans la vue : {{count}}",
    "tooManyCells": "Cette vue dépasse la limite de {{limit}} cellules. Zoomez ou réduisez la résolution.",
    "fillColor": "Couleur de remplissage",
    "fillOpacity": "Opacité du remplissage",
    "lineColor": "Couleur du contour",
    "lineWidth": "Épaisseur du contour",
    "showLabels": "Afficher les identifiants de cellule",
    "identifyHint": "Cliquez sur la carte pour identifier une cellule DGGRID.",
    "selectedCell": "Cellule sélectionnée",
    "noSelection": "Aucune cellule sélectionnée",
    "copyId": "Copier l'identifiant",
    "parent": "Cellule parente",
    "children": "Cellules enfants",
    "neighbors": "Voisines",
    "center": "Centre",
    "zoomToCell": "Zoomer sur la cellule",
    "addAsLayer": "Ajouter la grille comme couche",
    "exportGeoJson": "Exporter en GeoJSON",
    "exportCsv": "Exporter en CSV",
    "includeNeighbors": "Inclure les cellules voisines de la cellule sélectionnée",
    "includeParents": "Inclure les cellules parentes de la cellule sélectionnée"
  },
  "dggalPlugin": {
    "title": "DGGAL",
    "controlTitle": "Paramètres de DGGAL",
    "gridType": "Type de DGGS",
    "autoResolution": "Résolution automatique",
    "resolution": "Résolution",
    "cellCount": "Cellules dans la vue : {{count}}",
    "tooManyCells": "Cette vue dépasse la limite de {{limit}} cellules. Zoomez ou réduisez la résolution.",
    "fillColor": "Couleur de remplissage",
    "fillOpacity": "Opacité du remplissage",
    "lineColor": "Couleur du contour",
    "lineWidth": "Épaisseur du contour",
    "showLabels": "Afficher les identifiants de cellule",
    "identifyHint": "Cliquez sur la carte pour identifier une cellule DGGAL.",
    "selectedCell": "Cellule sélectionnée",
    "noSelection": "Aucune cellule sélectionnée",
    "copyId": "Copier l'identifiant",
    "parent": "Cellule parente",
    "children": "Cellules enfants",
    "neighbors": "Voisines",
    "center": "Centre",
    "zoomToCell": "Zoomer sur la cellule",
    "addAsLayer": "Ajouter la grille comme couche",
    "exportGeoJson": "Exporter en GeoJSON",
    "exportCsv": "Exporter en CSV",
    "includeNeighbors": "Inclure les cellules voisines de la cellule sélectionnée",
    "includeParents": "Inclure les cellules parentes de la cellule sélectionnée"
  },
  "olcPlugin": {
    "title": "OLC",
    "controlTitle": "Paramètres d'OLC",
    "autoResolution": "Résolution automatique",
    "resolution": "Résolution",
    "cellCount": "Cellules dans la vue : {{count}}",
    "tooManyCells": "Cette vue dépasse la limite de {{limit}} cellules. Zoomez ou réduisez la résolution.",
    "fillColor": "Couleur de remplissage",
    "fillOpacity": "Opacité du remplissage",
    "lineColor": "Couleur du contour",
    "lineWidth": "Épaisseur du contour",
    "showLabels": "Afficher les identifiants de cellule",
    "identifyHint": "Cliquez sur la carte pour identifier une cellule OLC.",
    "selectedCell": "Cellule sélectionnée",
    "noSelection": "Aucune cellule sélectionnée",
    "copyId": "Copier l'identifiant",
    "parent": "Cellule parente",
    "children": "Cellules enfants",
    "neighbors": "Voisines",
    "center": "Centre",
    "zoomToCell": "Zoomer sur la cellule",
    "addAsLayer": "Ajouter la grille comme couche",
    "exportGeoJson": "Exporter en GeoJSON",
    "exportCsv": "Exporter en CSV",
    "includeNeighbors": "Inclure les cellules voisines de la cellule sélectionnée",
    "includeParent": "Inclure la cellule parente de la cellule sélectionnée"
  },
  "geohashPlugin": {
    "title": "Geohash",
    "controlTitle": "Paramètres de Geohash",
    "autoResolution": "Résolution automatique",
    "resolution": "Résolution",
    "cellCount": "Cellules dans la vue : {{count}}",
    "tooManyCells": "Cette vue dépasse la limite de {{limit}} cellules. Zoomez ou réduisez la résolution.",
    "fillColor": "Couleur de remplissage",
    "fillOpacity": "Opacité du remplissage",
    "lineColor": "Couleur du contour",
    "lineWidth": "Épaisseur du contour",
    "showLabels": "Afficher les identifiants de cellule",
    "identifyHint": "Cliquez sur la carte pour identifier une cellule Geohash.",
    "selectedCell": "Cellule sélectionnée",
    "noSelection": "Aucune cellule sélectionnée",
    "copyId": "Copier l'identifiant",
    "parent": "Cellule parente",
    "children": "Cellules enfants",
    "neighbors": "Voisines",
    "center": "Centre",
    "zoomToCell": "Zoomer sur la cellule",
    "addAsLayer": "Ajouter la grille comme couche",
    "exportGeoJson": "Exporter en GeoJSON",
    "exportCsv": "Exporter en CSV",
    "includeNeighbors": "Inclure les cellules voisines de la cellule sélectionnée",
    "includeParent": "Inclure la cellule parente de la cellule sélectionnée"
  },
  "tilecodePlugin": {
    "title": "Tilecode",
    "controlTitle": "Paramètres de Tilecode",
    "autoResolution": "Résolution automatique",
    "resolution": "Résolution",
    "cellCount": "{{count}} tuiles dans la vue",
    "tooManyCells": "Cette vue dépasse la limite de {{limit}} tuiles. Zoomez ou réduisez la résolution.",
    "fillColor": "Couleur de remplissage",
    "fillOpacity": "Opacité du remplissage",
    "lineColor": "Couleur du contour",
    "lineWidth": "Épaisseur du contour",
    "showLabels": "Afficher les identifiants de tuile",
    "identifyHint": "Cliquez sur la carte pour identifier une tuile.",
    "selectedCell": "Tuile sélectionnée",
    "noSelection": "Aucune tuile sélectionnée",
    "copyId": "Copier l'identifiant",
    "quadkey": "Quadkey",
    "parent": "Tuile parente",
    "children": "Tuiles enfants",
    "neighbors": "Voisines",
    "center": "Centre",
    "zoomToCell": "Zoomer sur la tuile",
    "addAsLayer": "Ajouter la grille comme couche",
    "exportGeoJson": "Exporter en GeoJSON",
    "exportCsv": "Exporter en CSV",
    "includeNeighbors": "Inclure les tuiles voisines de la tuile sélectionnée",
    "includeParent": "Inclure la tuile parente de la tuile sélectionnée"
  },
  "netcdfSymbology": {
    "heading": "Symbologie NetCDF",
    "colorRampLabel": "Palette de couleurs",
    "reverse": "Inverser la palette",
    "colorMin": "Couleur min",
    "colorMax": "Couleur max",
    "resetRange": "Réinitialiser sur la plage des données",
    "openCube": "Cube 3D"
  },
  "netcdfCube": {
    "heading": "Cube d'images 3D",
    "close": "Fermer",
    "settings": "Paramètres",
    "setupTitle": "Cube d'images 3D",
    "setupDescription": "Choisissez ce qui doit être lu avant de construire le cube. Chaque bande est une lecture distincte : l'emprise et le nombre de bandes déterminent donc la durée.",
    "extent": "Emprise",
    "extentView": "Vue actuelle de la carte",
    "extentDraw": "Dessiner sur la carte",
    "extentFull": "Emprise complète de la couche",
    "viewHint": "Lit ce que la carte affiche au moment où le cube est construit.",
    "fullHint": "Lit la grille entière. Lent pour un cube à l'échelle d'une scène.",
    "drawBbox": "Dessiner sur la carte",
    "drawing": "Faites glisser une zone sur la carte pour définir l'emprise du cube",
    "drawHint": "Faites glisser une zone sur la carte pour définir l'emprise.",
    "drawnExtent": "O {{west}}, S {{south}}, E {{east}}, N {{north}}",
    "detail": "Niveau de détail",
    "detailOption": "{{size}} cellules par côté",
    "bands": "Bandes",
    "allBands": "Toutes ({{count}})",
    "rgbOverlay": "Image RVB au-dessus",
    "rgbHint": "Compose trois bandes en une image couleur posée sur la face supérieure, pour que le cube reste reconnaissable comme un lieu.",
    "red": "Rouge",
    "green": "Vert",
    "blue": "Bleu",
    "planeEstimate": "{{count}} lectures de bande",
    "create": "Créer le cube",
    "colorRampLabel": "Palette de couleurs",
    "reverse": "Inverser",
    "showRgb": "RVB au-dessus",
    "rgbBands": "Bandes RVB",
    "recomposing": "lecture...",
    "zScale": "Hauteur",
    "slice": "Coupe",
    "sliceAt": "coupe à {{band}} {{units}}",
    "reading": "Lecture de la bande {{done}} sur {{total}}...",
    "summary": "{{nx}} x {{ny}} cellules, {{nz}} bandes le long de {{axis}}",
    "errorNoCube": "Le fichier source de cette couche n'est plus ouvert : aucun cube ne peut être lu.",
    "error": {
      "shapeMismatch": "Les plans de bande de la variable n'ont pas tous la même forme et ne peuvent donc pas être empilés en un cube.",
      "rgbShapeMismatch": "Les bandes RVB choisies ne correspondent pas à la forme du cube.",
      "noBands": "Cette variable n'a aucune bande à lire.",
      "noReadWindow": "Ce cube ne peut pas être mis à jour sur place. Reconstruisez-le depuis les Paramètres."
    }
  },
  "netcdfProfile": {
    "heading": "Profil spectral",
    "clear": "Effacer",
    "chartAria": "Valeurs de pixel échantillonnées le long de l'axe des bandes",
    "popOut": "Détacher",
    "dock": "Ancrer",
    "poppedOutHint": "Le graphique est ouvert dans une fenêtre sur la carte.",
    "noValues": "Aucune valeur à représenter pour ces pixels.",
    "exportPng": "PNG",
    "exportCsv": "CSV",
    "exportError": "Impossible d'exporter le graphique."
  },
  "netcdfIdentify": {
    "noData": "sans données",
    "coordinates": "lon, lat",
    "cell": "ligne, colonne"
  }
}
