{
  "ai": {
    "api_key": "Clé API",
    "api_url": "URL de l'API",
    "automaticPlasmidTags": "Génération automatique des étiquettes de plasmides",
    "automaticPlasmidTagsDescription": "Une fois activé, chaque ouverture d'un plasmide met à jour les étiquettes de la base de données en arrière-plan avec la configuration IA actuelle.",
    "clearAll": "Effacer toutes les conversations",
    "configNamePlaceholder": "Par exemple : DeepSeek-v4-flash",
    "confirmClearAll": "Voulez-vous vraiment effacer toutes les conversations ? Cette action est irréversible.",
    "copied": "Copié",
    "copy": "Copier",
    "createConfig": "Nouvelle configuration",
    "delete": "Supprimer l'enregistrement",
    "emptyConfigBanner": "Aucune configuration IA n'a encore été enregistrée. Veuillez d'abord créer et enregistrer une configuration (en renseignant la clé API) pour pouvoir utiliser l'assistant IA et la génération d'étiquettes de plasmides.",
    "emptyHint": "Saisissez ce que vous souhaitez faire ! L'assistant IA peut vous aider à rechercher dans votre base de données de plasmides, consulter des séquences, ajouter des annotations, concevoir des amorces, etc.",
    "errorTag": "(Erreur)",
    "exportDebug": "Exporter les informations de débogage",
    "exportDebugTooltip": "Exporte en JSON la requête complète envoyée à l'IA en cas d'erreur (messages/tools/champs de réflexion) pour faciliter le diagnostic",
    "getKey": "Obtenir",
    "getKeyFailed": "Impossible d'ouvrir la page web, veuillez copier le lien manuellement",
    "getKeyTooltip": "Ouvrir la page web du fournisseur pour obtenir la clé API",
    "inputPlaceholder": "Saisissez un message, Entrée pour envoyer, Maj+Entrée pour un saut de ligne",
    "mcpBootFailed": "Échec du démarrage de MCP",
    "mcpConnected": "MCP connecté",
    "mcpDisconnected": "MCP non connecté",
    "model": "Modèle",
    "name": "Nom de la configuration",
    "new": "Nouveau",
    "newChat": "Nouvelle conversation",
    "newSession": "Nouvelle session",
    "noSessions": "Aucune session",
    "openAsWindow": "Ouvrir dans une nouvelle fenêtre",
    "parameters": "Paramètres",
    "provider": "Fournisseur",
    "reasoning": "Modèle de raisonnement",
    "result": "Résultat",
    "save": "Enregistrer",
    "saveCurrent": "Enregistrer la configuration actuelle",
    "savedConfigs": "Configurations enregistrées",
    "selectOrCreate": "Sélectionnez ou créez une session pour commencer",
    "send": "Envoyer",
    "sessions": "Sessions",
    "setAsCurrent": "Définir comme actuelle",
    "settings": "Paramètres",
    "settingsTitle": "Paramètres IA",
    "stopGenerate": "Arrêter la génération",
    "tagPrompt": "Invite pour les étiquettes de plasmides",
    "tagPromptDefault": "Classez les plasmides à l'aide d'étiquettes biologiques concises. Si une étiquette existante exprime le même sens, réutilisez son orthographe exacte ; ne créez une nouvelle étiquette que pour un concept véritablement distinct — **ne donnez jamais deux étiquettes sémantiquement quasi redondantes** (par exemple, choisissez entre « shRNA » et « RNAi », entre « lentiviral » et « lenti », entre « fluorescent » et « fluorescence », sans les conserver toutes les deux).\nLes chemins de fichiers et les noms de fichiers contiennent souvent des informations biologiquement pertinentes — ils doivent être considérés comme des signaux de référence principaux au même titre que les features. Les signaux exploitables courants incluent : la famille/le type de vecteur (comme lenti/retro/AAV/adenoviral/pLVX/pCDH), le squelette, le gène ou l'insert, la résistance, le promoteur, l'étiquette d'affinité, le rapporteur fluorescent, le système d'expression, l'organisme hôte, le nom du projet et le fournisseur. Si un signal correspond à une étiquette existante, réutilisez son orthographe exacte ; n'ajoutez une nouvelle étiquette que si le signal est réellement informatif et non couvert par les étiquettes existantes. Ne transformez pas mécaniquement chaque fragment de répertoire ou de nom de fichier en étiquette (ignorez les termes génériques comme plasmid, vector, final, v2, ainsi que le bruit de dates/versions).\nSoyez extrêmement sélectif — la qualité prime sur la quantité (mieux vaut moins que trop). Ne conservez que les étiquettes les plus importantes, et **pas plus de 20**. **Chaque étiquette doit être courte — généralement un ou deux mots** (comme « lentiviral », « GFP », « shRNA », « kanamycin ») ; évitez les phrases, les phrases complètes ou les descriptions longues. Classez par ordre d'importance : **les gènes/inserts et l'usage du plasmide (comme l'expression lentivirale, Gateway, le knockdown par shRNA) sont prioritaires** ; ensuite, n'ajoutez la résistance, le rapporteur, l'espèce ou la famille de vecteur que si cela aide réellement à la recherche. **Considérez les petits éléments/éléments génériques comme le promoteur, le NLS comme des signaux de faible priorité** — n'annotez le promoteur que s'il est l'élément emblématique de ce plasmide (s'il y a plusieurs promoteurs, annotez au maximum celui qui pilote le gène/l'insert d'intérêt). **N'annotez pas les éléments génériques/courants présents dans presque tous les plasmides** — par exemple l'origine de réplication (ori), le signal de localisation nucléaire (NLS), les petites étiquettes épitope/affinité (FLAG, HA, Myc, His), les sites de liaison d'amorces génériques/de séquençage (comme les amorces M13, T7, T3, SP6), les linkers ou MCS, le terminateur du promoteur T7, le polyA, etc. — ils n'ajoutent que du bruit et ne facilitent pas la recherche. Écartez toute étiquette redondante, implicitement contenue dans une autre ou très peu informative ; si deux étiquettes candidates ont essentiellement le même sens, ne conservez que la plus spécifique. En cas de doute sur l'utilité d'une étiquette, ne la conservez pas.",
    "tagPromptDescription": "Invite utilisée lors de la génération des étiquettes de plasmides (partie instructions uniquement). Les données spécifiques de chaque plasmide (nom, chemin, caractéristiques, étiquettes existantes) sont automatiquement ajoutées à la fin, inutile de les saisir ici. Laissez inchangé pour utiliser l'invite par défaut intégrée.",
    "tagPromptReset": "Rétablir la valeur par défaut",
    "tagPromptSummary": "Personnaliser la façon dont l'IA étiquette les plasmides",
    "tagThinking": "Activer la réflexion pour la génération d'étiquettes",
    "tagThinkingDescription": "Une fois activé, l'IA réfléchit avant de produire les étiquettes de plasmides (plus précis mais plus lent, désactivé par défaut).",
    "test": "Tester la connexion",
    "testOk": "Connexion réussie",
    "thinking": "Réflexion",
    "thinkingContent": "Contenu de la réflexion",
    "thinkingInProgress": "Réflexion en cours...",
    "thinkingTooltip": "Une fois activé, le modèle réfléchit avant de répondre (activé par défaut)",
    "toggleSidebar": "Déplier/replier la liste des sessions",
    "toolCalls": "Appels d'outils ({{count}})",
    "toolCallsWithErrors": "Appels d'outils ({{count}}, {{errors}} erreurs)",
    "usageAvgSpeed": "Vitesse moyenne",
    "usageCacheHit": "Correspondances en cache",
    "usageCached": "dont {{n}} jetons en cache (facturés à tarif réduit)",
    "usageCompletion": "Sortie {{n}} jetons",
    "usageDaily": "Dernière utilisation",
    "usageInput": "Entrée (incl. cache)",
    "usageLoading": "Chargement des statistiques...",
    "usageNoDaily": "Aucune entrée récente",
    "usageOutput": "Sortie",
    "usagePrompt": "Entrée {{n}} jetons (incl. correspondances en cache)",
    "usageRequests": "Nombre de requêtes",
    "usageSession": "Conversation actuelle",
    "usageSpeed": "Vitesse de génération : {{n}} jetons/seconde",
    "usageStats": "Statistiques d'utilisation",
    "usageToday": "Aujourd'hui",
    "usageTotal": "Total des 7 derniers jours",
    "usedTool": "Outil utilisé",
    "vision": "Modèle de vision"
  },
  "alignment": {
    "addFiles": "Ajouter des fichiers",
    "algorithm": "Algorithme",
    "calculating": "Calcul en cours...",
    "chromatogramHeight": "Hauteur du chromatogramme {{multiplier}}×, double-cliquez pour réinitialiser",
    "chromatogramHeightLabel": "Hauteur du chromatogramme",
    "collapseDetails": "Réduire les détails",
    "ctxCopied": "{{count}} pb de séquence copiés",
    "ctxCopyFailed": "Échec de la copie",
    "ctxCopySequence": "Copier la séquence complète ({{count}} pb)",
    "ctxExportAb1": "Exporter AB1 (avec chromatogramme)",
    "ctxExportFailed": "Échec de l'exportation",
    "ctxExportFasta": "Exporter FASTA",
    "dropToAdd": "Déposez les fichiers pour ajouter des séquences",
    "emptyState": "Ajoutez des séquences à aligner avec la séquence de référence",
    "expandDetails": "Développer les détails",
    "files": "Fichiers",
    "fromClipboard": "Depuis le presse-papiers",
    "fromOpenWindows": "Depuis les fenêtres ouvertes",
    "hide": "Masquer",
    "hideChromatograms": "Masquer les chromatogrammes",
    "namePlaceholder": "Nom (facultatif)",
    "originalSequence": "Séquence d'origine",
    "paste": "Coller",
    "remove": "Supprimer",
    "seqsCount": "{{count}} séquences",
    "sequencePlaceholder": "Collez ou saisissez une séquence...",
    "show": "Afficher",
    "showChromatograms": "Afficher les chromatogrammes",
    "title": "Alignement de séquences",
    "typeSequence": "Saisir une séquence",
    "wheelHorizontal": "Sens de la molette : défiler horizontalement (cliquer pour passer en vertical)",
    "wheelVertical": "Sens de la molette : défiler verticalement (cliquer pour passer en horizontal)"
  },
  "app": {
    "circularPlasmid": "Plasmide circulaire",
    "createNewSequence": "Créer une nouvelle séquence",
    "createSequence": "Créer une séquence",
    "dnaSequence": "Séquence d'ADN",
    "dnaSequencePlaceholder": "Saisissez la séquence d'ADN (A, T, C, G)...",
    "dragDropHint": "Vous pouvez également glisser-déposer un ou plusieurs fichiers de séquences directement dans cette fenêtre pour les ouvrir",
    "dragDropRelease": "Relâchez pour ouvrir le fichier",
    "emptyView": "Sélectionnez un chromatogramme ou une séquence à afficher",
    "fileError": "Erreur de fichier",
    "multiRecordMessage": "« {{name}} » contient {{count}} séquences. Comment souhaitez-vous les ouvrir ?",
    "multiRecordOpenAll": "Ouvrir séparément ({{count}} documents)",
    "multiRecordOpenFirst": "Ouvrir uniquement la première séquence",
    "multiRecordTitle": "Plusieurs séquences détectées",
    "newSequence": "Nouvelle séquence",
    "newSequenceDefaultName": "Séquence sans nom",
    "newSequenceDesc": "Créer à partir de zéro",
    "newSequenceHandoffFailed": "Échec de l'ouverture : la charge utile de la séquence est trop volumineuse pour être transmise à une nouvelle fenêtre",
    "newTab": "Nouvel onglet",
    "newWindowFailed": "Échec de l'ouverture d'une nouvelle fenêtre d'édition.",
    "openFile": "Ouvrir un fichier de séquence",
    "openFileDesc": "Fichiers .gen, .dna, .prot, .rna, .gb, .gbk, .gjson, .fasta, .ab1",
    "parseWarning": "Échec de l'analyse d'une partie du contenu",
    "parseWarningDesc": "La séquence a été chargée avec succès, mais une partie du contenu a été ignorée en raison d'erreurs. Veuillez copier les détails ci-dessous et les signaler au développeur.",
    "sequenceName": "Nom de la séquence",
    "sequenceNamePlaceholder": "Saisissez le nom de la séquence...",
    "settings": "Paramètres",
    "settingsTooltip": "Configurer les préférences de l'application",
    "subtitle": "Puissant outil de visualisation et d'édition de séquences d'ADN",
    "title": "GenePad"
  },
  "cdsExtension": {
    "cancel": "Annuler",
    "confirm": "Étendre",
    "message": "Étendre la région annotée de ce CDS au cadre de lecture complet (jusqu'au codon stop) ?",
    "title": "Étendre le CDS au cadre de lecture complet"
  },
  "cloning": {
    "addFragment": "Ajouter un fragment",
    "addFragmentBlockedCircular": "Un fragment déjà circularisé ne peut pas être assemblé avec d'autres fragments",
    "addStep": "Ajouter une étape de traitement",
    "addStepDisabledHint": "L'étape précédente doit d'abord être terminée",
    "autoAssemblyHint": "Assemblage automatique une fois les produits de tous les fragments prêts, avec détermination de la topologie linéaire ou circulaire",
    "bluntEnd": "Extrémité franche",
    "circularInAssemblyError": "Un fragment circularisé est présent et ne peut pas être assemblé avec d'autres fragments ; supprimez son étape d'auto-ligation ou réduisez le nombre de fragments.",
    "circularTopology": "Plasmide circulaire",
    "clickMapToFill": "Cliquez sur un numéro pour sélectionner le champ, puis cliquez sur un site de coupure sur la carte",
    "clickSequenceToFillPrimer": "Cliquez sur une amorce sur la carte ou sélectionnez des bases dans la vue « Séquence » pour remplir le prochain emplacement d'amorce vide (sens direct d'abord, puis sens inverse) ; maintenez Ctrl et cliquez successivement sur deux amorces pour remplir les deux dans l'ordre.",
    "currentVector": "Retirer le vecteur",
    "cutEnzymes": "Enzymes de restriction",
    "defaultProductName": "Produit de clonage",
    "digest": "Digestion par enzyme de restriction",
    "digestAllOccurrencesHint": "La sélection d'enzymes de restriction déclenche la digestion automatique : coupure à tous les sites de reconnaissance de chaque enzyme choisie sur la séquence actuelle, avec surlignage immédiat des intervalles produits sur la séquence d'origine ; maintenez Ctrl et cliquez successivement sur plusieurs sites de coupure sur la carte pour ajouter plusieurs enzymes en une fois, la redigestion étant automatique après la sélection.",
    "directProduct": "Obtenir directement le produit de la dernière étape",
    "emptyTemplate": "Veuillez d'abord charger une matrice d'ADN",
    "enzymeSearchSummary": "Affichage de {{shown}} / {{total}} enzymes de restriction ; saisissez du texte pour affiner la recherche.",
    "finalFragmentProduct": "Produit final du fragment",
    "finalProduct": "Produit final",
    "fivePrimeOverhang": "Extrémité cohésive 5′",
    "forwardPrimer": "Séquence de l'amorce directe",
    "forwardPrimerNoAnneal": "L'extrémité 3′ de l'amorce directe ne présente pas de correspondance continue d'au moins 6 pb sur la matrice actuelle.",
    "fragment": "Fragment d'ADN {{number}}",
    "fragmentNotReadySteps": "Des étapes de traitement sont encore inachevées",
    "fusion": "Assemblage par fusion",
    "fusionHint": "Assemblage dans l'ordre de tous les fragments traités.",
    "fusionMethod": "Méthode de fusion",
    "importFromWindow": "Importer depuis une fenêtre",
    "importFromWindowEmpty": "Aucune fenêtre avec un document ouvert actuellement.",
    "leftEnd": "Coupure gauche",
    "ligation": "Ligation après digestion",
    "linearTopology": "ADN linéaire",
    "loadTemplateHint": "Ouvrir un fichier de séquence ou coller de l'ADN",
    "loading": "Chargement…",
    "minimumOverlap": "Longueur de chevauchement minimale (pb)",
    "newForwardPrimer": "Amorce directe de PCR",
    "newReversePrimer": "Amorce inverse de PCR",
    "noEnzymes": "Aucune enzyme de restriction sélectionnée",
    "noExistingPrimers": "La matrice actuelle ne contient aucune amorce intégrée.",
    "noMatchingSites": "Aucun site de restriction correspondant",
    "noStepsHint": "Aucune étape de traitement pour l'instant ; ajoutez-en une pour commencer le traitement du fragment.",
    "notReady": "Pas encore prêt",
    "openAsNewFile": "Ouvrir comme nouveau fichier",
    "openAsNewFileHint": "Le produit sera ouvert directement comme nouveau document (avec annotations) ; le choix d'enregistrer ou non et le format d'enregistrement se fait dans le document ouvert.",
    "openFile": "Ouvrir",
    "openedAsNewFile": "Le produit a été ouvert comme nouveau fichier.",
    "originalSequence": "Séquence d'origine",
    "overhangSequence": "Séquence de l'extrémité saillante",
    "overlapFound": "Chevauchement de {{count}} pb",
    "overlapPcr": "PCR de chevauchement",
    "paste": "Coller de l'ADN",
    "pastePlaceholder": "Collez ici la séquence d'ADN ; les espaces, sauts de ligne et numéros de position sont ignorés.",
    "pastedFragment": "Fragment collé {{number}}",
    "pcr": "PCR",
    "prepareBoth": "Veuillez d'abord terminer le traitement de chaque fragment.",
    "previewMap": "Carte",
    "previewSequence": "Séquence",
    "primersRequired": "Veuillez d'abord saisir les séquences des amorces directe et inverse.",
    "process": "Traiter",
    "processSuccess": "Le produit de cette étape a été généré",
    "processingSteps": "Étapes de traitement",
    "product": "Produit",
    "productName": "Nom du produit",
    "productOption": "Produit {{number}} · {{length}} pb",
    "readyToClone": "Prêt à cloner · produit {{length}} pb",
    "removeFragment": "Supprimer le fragment {{number}}",
    "removeStep": "Supprimer l'étape {{number}} et les suivantes",
    "reverseComplement": "Complément inverse",
    "reversePrimer": "Séquence de l'amorce inverse",
    "reversePrimerNoAnneal": "L'extrémité 3′ de l'amorce inverse ne présente pas de correspondance continue d'au moins 6 pb sur la matrice actuelle.",
    "rightEnd": "Coupure droite",
    "rotateFragmentDirection": "Inverser l'orientation de la séquence",
    "schemeDiagram": "Schéma du clonage moléculaire",
    "seamless": "Clonage sans couture",
    "searchEnzymeSite": "Rechercher une enzyme de restriction ou une position…",
    "selectExistingPrimer": "Amorces existantes",
    "selfLigate": "Auto-ligation du vecteur",
    "selfLigateCircularError": "Le fragment est déjà circulaire, l'auto-ligation est inutile.",
    "selfLigateHint": "Relier les deux extrémités d'un fragment linéaire pour former un cercle. Les extrémités doivent être compatibles : extrémités cohésives produites par la même enzyme de restriction (ou des isoschizomères), ou extrémités franches.",
    "selfLigateIncompatible": "Les extrémités ne correspondent pas, auto-ligation impossible (nécessite des extrémités cohésives compatibles ou des extrémités franches).",
    "sequenceFiles": "Fichiers de séquence d'ADN",
    "setAsVector": "Afficher comme vecteur",
    "singleFragmentHint": "Avec un seul fragment, le produit correspond au résultat de la dernière étape de traitement de ce fragment, qu'il soit linéaire ou plasmidique circulaire.",
    "siteOccurrences": "{{number}} site(s) de coupure",
    "sitesNotFound": "Les enzymes de restriction sélectionnées ne coupent pas cette séquence.",
    "sitesRequired": "Veuillez sélectionner au moins une enzyme de restriction.",
    "step": "Étape {{number}}",
    "threePrimeOverhang": "Extrémité cohésive 3′",
    "topologyPending": "Détermination automatique circulaire ou linéaire après traitement",
    "twoOverlapsFound": "Jonction de fragment {{first}} pb · Jonction de circularisation {{closing}} pb",
    "unsupportedFile": "Ce type de fichier ne peut pas servir de matrice de clonage.",
    "useSequence": "Utiliser cette séquence",
    "variantCount": "{{count}} produit(s) possible(s)",
    "variantCurrent": "Orientation actuelle",
    "variantHint": "Lorsque les extrémités cohésives ou les bras homologues aux deux extrémités du fragment sont identiques, la liaison peut se faire dans les deux sens. Cet assemblage présente plusieurs produits possibles ; veuillez choisir l'orientation à prévisualiser et à exporter :",
    "variantReversed": "Inversée",
    "vector": "Vecteur",
    "vectorRoleHint": "« Afficher comme vecteur » modifie uniquement le style du schéma (cercle ouvert). Un seul fragment au maximum peut être marqué, sans incidence sur le résultat de l'assemblage.",
    "waitingForFragments": "En attente de tous les fragments"
  },
  "codonOptimization": {
    "algorithm": "Algorithme d'optimisation",
    "algorithms": {
      "unified": "Algorithme pondéré unifié (recommandé)"
    },
    "cancel": "Annuler",
    "changedCodons": "{{count}} codons remplacés",
    "confirmAndReplace": "Optimiser et remplacer",
    "copied": "Copié",
    "copy": "Copier la séquence",
    "dialogDescription": "Optimiser les {{count}} codons sélectionnés et remplacer la séquence codante d'origine.",
    "dialogTitle": "Optimisation des codons",
    "errors": {
      "emptyInput": "Veuillez d'abord saisir une séquence.",
      "hostLoadFailed": "Impossible de charger les préréglages d'espèces depuis le backend Rust.",
      "incompleteCodon": "La longueur de la séquence d'ADN doit être un multiple de 3.",
      "invalidDna": "L'entrée d'ADN ne peut contenir que A, C, G, T ou U.",
      "invalidInput": "Impossible d'optimiser cette séquence d'entrée.",
      "invalidProtein": "L'entrée d'acides aminés ne peut utiliser que les 20 codes standard à une lettre, avec * pour le codon stop.",
      "tissueLoadFailed": "Impossible de charger les préférences tissulaires depuis le backend Rust.",
      "unknownHost": "Le préréglage d'espèce sélectionné est indisponible.",
      "unknownPreferenceType": "La source de préférence sélectionnée est indisponible.",
      "unknownTissue": "La préférence tissulaire sélectionnée est indisponible."
    },
    "gcChange": "GC {{before}} % → {{after}} %",
    "hosts": {
      "bacillus": "Bacillus subtilis 168",
      "cho": "Cellules CHO",
      "ecoli": "Escherichia coli K-12",
      "human": "Humain",
      "mouse": "Souris",
      "yeast": "Saccharomyces cerevisiae"
    },
    "inputHint": "Les espaces et les chiffres de position sont ignorés automatiquement ; la séquence d'ADN peut utiliser T ou U.",
    "inputTitle": "Séquence d'entrée",
    "loadingHosts": "Chargement des préréglages d'espèces depuis le backend Rust…",
    "methodNote": "L'algorithme pondéré unifié de Rust prend en compte simultanément la préférence de codons cible (38 %), la diversité des codons fréquents (18 %), la proximité du GC cible (20 %), l'évitement des codons rares (12 %) et la pénalité de répétition/homopolymère (12 %), avec une perturbation aléatoire n'excédant pas 8 %. Les préférences tissulaires utilisent les données de fréquence de GenePad Codon Atlas ; le score de préférence tissulaire affiché dans l'interface correspond au poids CAI de l'atlas multiplié par 100. L'optimisation continue évite autant que possible l'entrée d'origine et le résultat précédent, tout en préservant la traduction protéique ; si la séquence ne contient que des résidus sans codons synonymes comme Met et Trp, aucun changement forcé n'est possible. La structure de l'ARN, les sites de restriction, les paires de codons et CpG/UpA ne sont pas encore pris en compte.",
    "notesTitle": "Notes sur l'algorithme et les données",
    "optimize": "Optimiser la séquence",
    "optimizing": "Optimisation en cours…",
    "outputPlaceholder": "La séquence optimisée s'affichera ici.",
    "outputTitle": "Séquence d'ADN optimisée",
    "placeholders": {
      "dna": "Collez une séquence d'ADN codante, par exemple : ATGGCTCTGTGG...",
      "protein": "Collez une séquence d'acides aminés à une lettre, par exemple : MALW..."
    },
    "preferenceType": "Source de préférence",
    "protein": "Acides aminés",
    "resultSummary": "{{codons}} codons · GC {{gc}} %",
    "selectedSpecies": "Configuration d'espèce : {{species}}",
    "selectedTissue": "Configuration de tissu humain : {{tissue}}",
    "speciesPreference": "Préférence d'espèce",
    "speciesSource": "Les classements d'espèces proviennent de synthèses d'usage des codons à l'échelle du génome (Kazusa Codon Usage Database ; Codon Statistics Database, 2022).",
    "targetHost": "Espèce d'expression cible",
    "targetTissue": "Tissu humain cible",
    "tissuePreference": "Préférence tissulaire",
    "tissueSource": "Source des données tissulaires : GenePad Codon Atlas, calculées indépendamment à partir des données agrégées de TPM médian des gènes GTEx v8 non restreints et des transcrits codants représentatifs de GENCODE release 50 (date d'accès 2026-07-14). Les tableaux TissueCoCoPUTs ne sont pas des entrées numériques ; seule leur méthode publique de pondération tissulaire sert de référence méthodologique scientifique. Cette version des données GTEx peut ne pas être la plus récente et n'implique aucun aval de l'institution concernée. Source :",
    "tissues": {
      "adipose-subcutaneous": "Tissu adipeux sous-cutané",
      "adipose-visceral-omentum": "Tissu adipeux viscéral (omentum)",
      "adrenal-gland": "Glande surrénale",
      "artery-aorta": "Artère aorte",
      "artery-coronary": "Artère coronaire",
      "artery-tibial": "Artère tibiale",
      "bladder": "Vessie",
      "brain-amygdala": "Cerveau – amygdale",
      "brain-anterior-cingulate-cortex-ba24": "Cerveau – cortex cingulaire antérieur (BA24)",
      "brain-caudate-basal-ganglia": "Cerveau – noyau caudé (ganglions de la base)",
      "brain-cerebellar-hemisphere": "Cerveau – hémisphère cérébelleux",
      "brain-cerebellum": "Cerveau – cervelet",
      "brain-cortex": "Cerveau – cortex cérébral",
      "brain-frontal-cortex-ba9": "Cerveau – cortex frontal (BA9)",
      "brain-hippocampus": "Cerveau – hippocampe",
      "brain-hypothalamus": "Cerveau – hypothalamus",
      "brain-nucleus-accumbens-basal-ganglia": "Cerveau – noyau accumbens (ganglions de la base)",
      "brain-putamen-basal-ganglia": "Cerveau – putamen (ganglions de la base)",
      "brain-spinal-cord-cervical-c-1": "Cerveau – moelle épinière cervicale (C1)",
      "brain-substantia-nigra": "Cerveau – substance noire",
      "breast-mammary-tissue": "Tissu mammaire",
      "cells-cultured-fibroblasts": "Fibroblastes cultivés",
      "cells-ebv-transformed-lymphocytes": "Lymphocytes transformés par EBV",
      "cervix-ectocervix": "Col de l'utérus – exocol",
      "cervix-endocervix": "Col de l'utérus – endocol",
      "colon-sigmoid": "Côlon – sigmoïde",
      "colon-transverse": "Côlon – transverse",
      "esophagus-gastroesophageal-junction": "Œsophage – jonction gastro-œsophagienne",
      "esophagus-mucosa": "Œsophage – muqueuse",
      "esophagus-muscularis": "Œsophage – musculeuse",
      "fallopian-tube": "Trompe de Fallope",
      "heart-atrial-appendage": "Cœur – appendice auriculaire",
      "heart-left-ventricle": "Cœur – ventricule gauche",
      "kidney-cortex": "Rein – cortex",
      "kidney-medulla": "Rein – médulla",
      "liver": "Foie",
      "lung": "Poumon",
      "minor-salivary-gland": "Glande salivaire mineure",
      "muscle-skeletal": "Muscle squelettique",
      "nerve-tibial": "Nerf tibial",
      "ovary": "Ovaire",
      "pancreas": "Pancréas",
      "pituitary": "Hypophyse",
      "prostate": "Prostate",
      "skin-not-sun-exposed-suprapubic": "Peau – zone non exposée au soleil (sus-pubienne)",
      "skin-sun-exposed-lower-leg": "Peau – zone exposée au soleil (jambe inférieure)",
      "small-intestine-terminal-ileum": "Intestin grêle – iléon terminal",
      "spleen": "Rate",
      "stomach": "Estomac",
      "testis": "Testicule",
      "thyroid": "Thyroïde",
      "uterus": "Utérus",
      "vagina": "Vagin",
      "whole-blood": "Sang total"
    }
  },
  "codonTable": {
    "codes": {
      "invertebrateMitochondrial": "Mitochondrial des invertébrés",
      "standard": "Code standard",
      "vertebrateMitochondrial": "Mitochondrial des vertébrés"
    },
    "detailHint": "Cliquez ou survolez un codon pour voir les détails de l'acide aminé",
    "expressionScore": "Score d'expression",
    "firstBase": "Première base",
    "fullName": "Nom complet",
    "oneLetter": "Une lettre",
    "scoreLoadFailed": "Score indisponible",
    "scoreLoading": "Chargement…",
    "scoreTooltip": "Score de préférence {{score}} · rang {{rank}} sur {{count}} codons synonymes",
    "scoreType": "Source du score d'expression",
    "scoreValue": "Score {{score}}",
    "secondBase": "Deuxième base {{base}}",
    "skeletalFormula": "Formule topologique",
    "speciesPreferenceScore": "Score de préférence d'espèce",
    "start": "Start",
    "startCodon": "Codon start",
    "stop": "Stop",
    "stopCodon": "Codon stop",
    "targetSpecies": "Espèce cible",
    "targetTissue": "Tissu cible",
    "threeLetter": "Trois lettres",
    "tissuePreferenceScore": "Score de préférence tissulaire",
    "tissueScoreNote": "Le score tissulaire utilise les poids CAI de GenePad Codon Atlas × 100 (GTEx v8 + GENCODE release 50)."
  },
  "common": {
    "add": "Ajouter",
    "cancel": "Annuler",
    "close": "Fermer",
    "current": "Actuel",
    "delete": "Supprimer",
    "edit": "Modifier",
    "export": "Exporter",
    "hide": "Masquer",
    "import": "Importer",
    "listSeparator": ", ",
    "loading": "Chargement...",
    "maximize": "Agrandir",
    "minimize": "Réduire",
    "no": "Non",
    "none": "Aucun",
    "ok": "OK",
    "or": "ou",
    "refresh": "Actualiser",
    "restore": "Restaurer",
    "save": "Enregistrer",
    "search": "Rechercher...",
    "show": "Afficher",
    "yes": "Oui"
  },
  "commonFeatures": {
    "addAnnotations": "Ajouter des annotations ({{count}})",
    "annotatedAs": "Annoté comme {{name}}",
    "annotatedAsHint": "Une annotation portant un nom différent ({{name}}) existe déjà à cette position ; passez cette entrée si c'est bien le même élément",
    "cancelled": "Recherche annulée.",
    "circular": "Séquence circulaire",
    "colCoverage": "Couverture",
    "colIdentity": "Identité",
    "colLocation": "Position",
    "colMethod": "Source",
    "colName": "Nom",
    "colStrand": "Brin",
    "colType": "Type",
    "description": "Rechercher les éléments plasmidiques courants dans la séquence actuelle ({{length}} pb), avec tolérance aux mésappariements et correspondance au niveau protéique.",
    "descriptionSelection": "Rechercher uniquement dans la région sélectionnée {{range}} ({{length}} pb), avec tolérance aux mésappariements et correspondance au niveau protéique.",
    "detect": "Lancer la recherche",
    "elapsedTime": "Durée totale de la recherche : {{seconds}} s.",
    "existing": "Existant",
    "existingHint": "Une annotation de nom identique ou similaire existe déjà à cette position",
    "largeSequenceHint": "Plage de recherche : {{length}} pb. Au-delà de 30 kb, la recherche peut prendre du temps ; veuillez patienter (arrêt possible à tout moment).",
    "methodDna": "Nucléique",
    "methodPeptide": "Peptidique",
    "methodProtein": "Protéique",
    "noResults": "Aucun élément courant correspondant trouvé ; essayez d'assouplir la stringence.",
    "progressPercent": "Recherche en cours… {{percent}} %",
    "proteinHint": "Traduire les éléments CDS en protéines pour l'alignement, et faire correspondre exactement les étiquettes peptidiques courtes (FLAG/NLS/His, etc.) au niveau peptidique, ce qui permet d'identifier les séquences à codons optimisés.",
    "proteinOff": "Désactivé",
    "proteinOn": "Activé",
    "proteinSearch": "Recherche protéique",
    "redetect": "Relancer la recherche",
    "results": "{{count}} correspondances trouvées",
    "selectAll": "Tout sélectionner",
    "selectedCount": "{{count}} sélectionné(s)",
    "stop": "Arrêter",
    "strandForward": "Sens direct",
    "strandReverse": "Sens inverse",
    "title": "Détecter les éléments courants",
    "tolerance": "Stringence de correspondance",
    "toleranceHint": "Identité nucléique ≥ {{identity}}, identité protéique ≥ {{protein}}, couverture ≥ {{coverage}}",
    "toleranceLoose": "Souple",
    "toleranceStandard": "Standard",
    "toleranceStrict": "Stricte"
  },
  "contextMenu": {
    "addEnzymeSite": "Ajouter",
    "addEnzymeSiteRevComp": "Ajouter la séquence complémentaire inversée",
    "aminoAcidProperties": "Propriétés des acides aminés",
    "aminoKeptHint": "Conserver uniquement les codes à une lettre des 20 acides aminés standards et * (stop)",
    "blast": "BLAST",
    "blastCncb": "CNCB BLAST",
    "blastCncbCopied": "Séquence copiée, veuillez la coller dans le champ de requête de la page CNCB (Ctrl+V)",
    "blastNcbi": "NCBI BLAST",
    "blastOpenFailed": "Échec de l'ouverture de la page BLAST",
    "bothStrands": "Brin supérieur et inférieur",
    "bottomStrand": "Brin inférieur",
    "clearBaseColor": "Effacer la couleur",
    "codonOptimization": "Optimisation des codons",
    "colorBases": "Colorer l'ADN",
    "copyAminoAcidSequence": "Copier la séquence d'acides aminés",
    "copyPrimerNameAndSeq": "Copier le nom et la séquence de l'amorce",
    "copyPrimerSeq": "Copier la séquence de l'amorce",
    "copyProteinSequence": "Copier la séquence protéique",
    "copyReversedPrimerSeq": "Copier la séquence de l'amorce inverse",
    "deleteDNAAndFeature": "Supprimer l'ADN et l'annotation",
    "deleteFeature": "Supprimer l'annotation",
    "deletePrimer": "Supprimer l'amorce",
    "deletePrimers": "Supprimer les amorces ({{count}})",
    "dnaKeptHint": "Conserver uniquement les caractères de bases (A, T, C, G et codes dégénérés IUPAC)",
    "editFeature": "Modifier l'annotation",
    "editPrimer": "Modifier l'amorce",
    "electrophoresis": "Simulation d'électrophorèse",
    "enzymeSearchPlaceholder": "Rechercher une enzyme de restriction (nom ou séquence de reconnaissance)...",
    "exportPrimerData": "Exporter les données des amorces",
    "exportPrimerNameSeq": "Exporter le nom + la séquence des amorces",
    "filtered": "Après filtrage : {{count}} pb",
    "filteredAmino": "Après filtrage : {{count}} aa",
    "insert": "Insérer",
    "insertAtInfo": "Position d'insertion {{pos}}",
    "insertTitle": "Insérer une séquence",
    "optimizeAndInsert": "Optimiser et insérer",
    "optimizeAndReplace": "Optimiser et remplacer",
    "pasteInputMode": "Type de saisie",
    "pastePlaceholder": "Coller la séquence d'ADN...",
    "pastePlaceholderAmino": "Coller la séquence d'acides aminés...",
    "proteinProperties": "Propriétés de la protéine",
    "replace": "Remplacer",
    "replaceRangeInfo": "Remplacer {{start}}..{{end}}",
    "replaceTitle": "Remplacer la sélection",
    "selectAll": "Tout sélectionner",
    "topStrand": "Brin supérieur",
    "transferredHintBoth": "Lors du collage, {{features}} annotations d'éléments et {{primers}} amorces seront également importées",
    "transferredHintFeatures": "Lors du collage, {{features}} annotations d'éléments seront également importées",
    "transferredHintPrimers": "Lors du collage, {{primers}} amorces seront également importées"
  },
  "crispr": {
    "addToMap": "Ajouter à la carte",
    "annotateOne": "Annoter cette cible",
    "bindingNum": "Nombre de sites de liaison",
    "calculate": "Calculer",
    "calculating": "Calcul des candidats sgRNA en cours",
    "clickSequenceHint": "Cliquez sur la séquence pour accéder à la position correspondante sur la carte.",
    "crisprType": "Type de CRISPR",
    "custom": "Personnalisé",
    "description": "Concevoir des candidats sgRNA à partir de la séquence sélectionnée de {{count}} pb.",
    "designFailed": "Échec de la conception CRISPR : {{error}}",
    "designSgrna": "Concevoir des sgRNA CRISPR",
    "direction": "Orientation",
    "exportCsv": "Exporter toutes les séquences",
    "exportCsvDone": "Export CSV réussi",
    "exportCsvFailed": "Échec de l'export CSV",
    "filtering": "Filtrage",
    "forward": "Sens direct",
    "maxBindingNum": "Nombre maximal de sites de liaison",
    "maxBindingUnlimited": "Illimité",
    "minBindingNum": "Nombre minimal de sites de liaison",
    "mismatchOutsideSeed": "Autoriser les mésappariements hors seed",
    "name": "Nom",
    "noContext": "Aucun contexte de conception sgRNA reçu.",
    "noSgrnaPassed": "Aucun sgRNA n'a passé le filtrage. Nombre de candidats : {{count}}",
    "nuclease": "Nucléase",
    "pam": "PAM",
    "recalculate": "Recalculer",
    "recognitionLayout": "Disposition de reconnaissance",
    "resultSummary": "{{accepted}} candidats retenus sur {{total}}",
    "results": "Résultats",
    "reverse": "Sens inverse",
    "seedLength": "Longueur de la séquence seed",
    "selectAll": "Tout sélectionner",
    "selectedCount": "{{count}} sélectionné(s)",
    "sequence": "Séquence",
    "sgLength": "Longueur du sgRNA",
    "targetNotFound": "Cible introuvable dans le fichier {{fileName}}",
    "targetSequence": "Séquence de la région cible",
    "title": "CRISPR sgRNA",
    "unselectAll": "Tout désélectionner",
    "validationBindingRange": "Le nombre minimal de sites de liaison ne peut pas être supérieur au nombre maximal.",
    "validationCutSite": "Le site de coupure doit être un entier.",
    "validationMaxBinding": "Le nombre maximal de sites de liaison doit être au moins 1.",
    "validationMinBinding": "Le nombre minimal de sites de liaison doit être au moins 1.",
    "validationPamRequired": "La séquence PAM ne peut pas être vide.",
    "validationPamUnsupported": "La séquence PAM contient des bases non prises en charge.",
    "validationSeedLength": "La longueur de la séquence seed doit être comprise entre 1 et la longueur du sgRNA.",
    "validationSgLength": "La longueur du sgRNA doit être au moins 1."
  },
  "cutConfirm": {
    "copy": "Copier",
    "dontShowAgain": "Ne plus afficher pour cette session",
    "message": "Confirmer la coupure ?",
    "ok": "Confirmer",
    "title": "Confirmer la coupure"
  },
  "deleteConfirm": {
    "dontShowAgain": "Ne plus afficher pour cette session",
    "message": "Confirmer la suppression de la séquence sélectionnée ({{count}} pb) ? Cela supprimera la région sélectionnée de la séquence.",
    "ok": "Supprimer",
    "title": "Confirmer la suppression"
  },
  "electrophoresis": {
    "add": "Ajouter un puits",
    "addPrepared": "Ajouter un fragment préparé",
    "addSample": "Préparer l'échantillon",
    "agarose": "Concentration d'agarose (%)",
    "bands": "Bandes",
    "catalogNumber": "Numéro de catalogue",
    "chooseCutSite": "Choisir le site de restriction",
    "chooseLadder": "Choisir le marqueur de taille",
    "clear": "Effacer",
    "clearCutSite": "Effacer le site de restriction sélectionné",
    "custom": "Personnalisé",
    "customBandsHint": "Une bande par ligne : indiquez d'abord la taille en {{unit}}, puis la luminosité relative (0–3) après une virgule.",
    "customBandsPlaceholder": "8000, 1\n5000, 1\n1000, 2",
    "customDeleted": "Échelle personnalisée supprimée.",
    "customLadder": "Échelle personnalisée",
    "customLadderName": "Nom de l'échelle",
    "customLadderSource": "URL source (facultatif)",
    "customNameRequired": "Veuillez saisir un nom pour l'échelle personnalisée.",
    "customSaved": "Échelle personnalisée enregistrée sur cet appareil.",
    "cutSites": "Sites de restriction",
    "deleteCustom": "Supprimer l'échelle personnalisée sélectionnée",
    "digest": "Digestion par enzyme de restriction",
    "dna": "Électrophorèse d'ADN",
    "dnaInputHint": "Ouvrez un fichier de séquence, sélectionnez une région, digérez, amplifiez par PCR, ou collez directement de l'ADN.",
    "emptyLanes": "Ajoutez un échantillon pour créer des puits",
    "end": "Fin",
    "forwardPrimer": "Amorce sens (5′→3′)",
    "full": "Séquence complète",
    "fullSequence": "Séquence complète",
    "ladder": "Marqueur de taille",
    "ladderSource": "Voir la source des spécifications de l'échelle",
    "ladderType": "Type",
    "lanes": "Puits du gel",
    "noMatchingCutSites": "Aucun site de restriction correspondant",
    "noMatchingLadders": "Aucun marqueur correspondant",
    "noTemplate": "Aucune matrice d'ADN chargée",
    "openFile": "Ouvrir",
    "pasted": "Coller la séquence",
    "pcr": "PCR",
    "polyacrylamide": "Concentration du gel (%)",
    "protein": "Électrophorèse de protéines",
    "proteinInputHint": "Collez une séquence d'acides aminés, ou ajoutez-la depuis le menu contextuel d'un CDS/région traduite.",
    "range": "Sélectionner une région",
    "reversePrimer": "Amorce antisens (5′→3′)",
    "sample": "Échantillon",
    "sampleName": "Nom de l'échantillon",
    "saveCustom": "Enregistrer l'échelle personnalisée",
    "searchCutSite": "Rechercher une enzyme de restriction, une séquence de reconnaissance ou une position…",
    "searchLadder": "Rechercher un fournisseur, un nom de marqueur ou une taille de bande…",
    "searchSummary": "Affichage des {{matches}} correspondances (sur {{total}} au total).",
    "selectedRange": "Région sélectionnée",
    "sequenceFiles": "Fichiers de séquence d'ADN",
    "simulationNotice": "Simulation de migration après {{minutes}} minutes d'électrophorèse ; le point médian du curseur à 30 minutes est calibré sur le profil de référence Trans2K® Plus II.",
    "start": "Début",
    "subtitle": "Comparez des fragments d'ADN sur gel d'agarose, ou des protéines par SDS-PAGE.",
    "title": "Simulation d'électrophorèse",
    "unsupportedFile": "Ce type de fichier ne peut pas être utilisé pour la simulation d'électrophorèse.",
    "voltage": "Tension (V)"
  },
  "enzyme": {
    "cutCount": "Nombre de sites de coupure",
    "enzyme": "Enzyme",
    "noRestrictionSites": "Aucun site de restriction trouvé",
    "position": "Position",
    "recognitionSequence": "Séquence de reconnaissance",
    "search": "Rechercher une enzyme...",
    "showingCount": "Affichage de {{count}} enzymes (sur {{total}} sites)",
    "sites": "Nombre de sites",
    "sitesTotal": "sites"
  },
  "enzymeFilters": {
    "__custom__": "Personnalisé",
    "all": "Toutes les enzymes",
    "allCommercial": "Toutes les enzymes commerciales",
    "allEnzymes": "Toutes les enzymes",
    "bluntEnd": "Enzymes à extrémités franches",
    "double": "Enzymes à double site",
    "fivePrime": "Enzymes à extrémité 5′ saillante",
    "goldenGate": "Enzymes Golden Gate",
    "lowPrice": "Prix par réaction ≤ ¥20",
    "neb": "Enzymes NEB",
    "nebThermo": "NEB & Thermo",
    "stickyEnd": "Enzymes à extrémités cohésives",
    "thermoFisher": "Enzymes Thermo",
    "threePrime": "Enzymes à extrémité 3′ saillante",
    "typeIIS": "Enzymes de type IIS",
    "unique": "Enzymes à site unique",
    "uniqueOrDouble": "Enzymes à site unique ou double"
  },
  "enzymeInfo": {
    "bluntEnd": "Extrémité franche",
    "bufferActivity": "Activité par tampon",
    "catalogNumber": "Référence",
    "catalogPrice": "Prix catalogue",
    "commerciallyAvailable": "Disponible dans le commerce",
    "compatibleEnds": "Enzymes compatibles",
    "compatibleEndsTip": "Enzymes reconnaissant des séquences différentes mais produisant des extrémités cohésives identiques après clivage.",
    "currentRange": "Plage actuelle",
    "cutFrequency": "Fréquence de coupure",
    "cutSiteNotConfigured": "Site de coupure non configuré",
    "databaseIds": "Identifiants de base de données",
    "endType": "Type d'extrémité",
    "equischizomers": "Isoschizomères stricts",
    "equischizomersTip": "Isoschizomères dont le site de coupure est également identique.",
    "fivePrimeOverhang": "Extrémité 5′ saillante",
    "heatInactivation": "Température d'inactivation thermique",
    "inactTemp": "Température d'inactivation",
    "isoschizomers": "Isoschizomères",
    "isoschizomersTip": "Enzymes de restriction reconnaissant la même séquence d'ADN. « Isoschizomères » est un terme générique englobant les isoschizomères stricts et les néoschizomères.",
    "methylable": "Méthylable",
    "methylationInfo": "Informations de méthylation",
    "neoschizomers": "Néoschizomères",
    "neoschizomersTip": "Isoschizomères reconnaissant la même séquence mais coupant à des positions différentes.",
    "noVendorInfo": "Aucune donnée produit fournisseur pour cette enzyme",
    "notConfigured": "Non configuré",
    "optTemp": "Température optimale",
    "packagePrices": "Conditionnements et prix",
    "pricePerReaction": "Prix par réaction",
    "properties": "Propriétés enzymatiques",
    "reactionTemperature": "Température de réaction",
    "reactionTime": "Temps de réaction",
    "recognitionAndCutSite": "Site de reconnaissance / clivage",
    "relationships": "Relations taxonomiques",
    "selectEnzyme": "Veuillez sélectionner une enzyme de restriction",
    "spec": "Conditionnement",
    "suppliers": "Fournisseurs ({{count}})",
    "threePrimeOverhang": "Extrémité 3′ saillante",
    "title": "Informations sur l'enzyme de restriction",
    "type": "Type",
    "unknown": "Inconnu",
    "vendorEnzymology": "Propriétés enzymatiques du fournisseur",
    "vendorLink": "Page du fournisseur",
    "vendorOther": "Autre"
  },
  "enzymeLibrary": {
    "enzymeCount": "{{count}} enzymes",
    "searchHintAa": "Recherche d'acides aminés : la séquence assemblée est traduite selon les 6 cadres de lecture (y compris le brin complémentaire inverse), puis recherchée. Seules les lignes de cadre correspondantes sont affichées, et les bases correspondantes sont surlignées selon l'orientation du cadre.",
    "searchHintDna": "Recherche d'ADN : recherche simultanée de fragments de bases dans la séquence assemblée de la cellule actuelle et dans les trois lignes R1/R2 (la requête et son complément inverse sont tous deux recherchés).",
    "searchPlaceholder": "Rechercher un nom d'enzyme ou une séquence de reconnaissance...",
    "searchPlaceholderAa": "Acides aminés (ex. MGH…) ou contenant *"
  },
  "enzymePanel": {
    "activeEnzymes": "Enzymes actives ({{count}})",
    "activeNonCutters": "Enzymes sans site de coupure ({{count}})",
    "addSearchPlaceholder": "Ajouter une enzyme à la liste (rechercher par nom)...",
    "addSelectedToPool": "Ajouter la sélection au pool d'enzymes",
    "count": "{{count}}",
    "currentPool": "Pool d'enzymes actuel",
    "customPool": "Pool d'enzymes personnalisé ({{count}})",
    "cutSites": "{{count}} sites de coupure",
    "deselectAll": "Tout désélectionner",
    "editPool": "Modifier le pool d'enzymes",
    "enzymeInfo": "Informations sur l'enzyme",
    "filterScheme": "Schéma de filtrage",
    "locate": "Localiser",
    "matches": "→ {{count}} correspondances",
    "migratedSelection": "Sélection d'enzymes migrée",
    "noEnzymesAdded": "Aucune enzyme ajoutée",
    "noMatchingEnzymes": "Aucune enzyme correspondante",
    "price": "Prix",
    "pricePerReaction": "Prix par réaction",
    "properties": "Propriétés enzymatiques",
    "removeAll": "Tout retirer",
    "removeFromList": "Retirer de la liste actuelle",
    "removeSelected": "Retirer la sélection",
    "restoreDefault": "Restaurer les paramètres par défaut",
    "saveAsPreset": "Enregistrer comme schéma fréquent...",
    "schemeNamePrompt": "Nom du schéma :",
    "selectAll": "Tout sélectionner",
    "selectedInPool": "Sélectionnées dans le pool ({{count}})",
    "suppliers": "Fournisseurs",
    "toggleCutSitesView": "Basculer l'affichage des enzymes avec/sans site de coupure",
    "userCustom": "Personnalisé par l'utilisateur",
    "withCutSites": "Avec site de coupure",
    "withoutCutSites": "Sans site de coupure"
  },
  "errorBoundary": {
    "details": "Détails techniques",
    "fallbackMessage": "Une erreur inattendue s'est produite",
    "reload": "Recharger",
    "title": "Un problème est survenu"
  },
  "fastq": {
    "addAnnot": "Ajouter une annotation temporaire",
    "analyzeAnchorsHint": "Avec ancres = fenêtre de découpe telle quelle ; sans ancres = les séquences d'ancrage aux deux extrémités de la fenêtre sont retirées avant le comptage.",
    "analyzeAnchorsLabel": "Mode d'ancrage",
    "analyzeAnchorsWith": "Avec ancres de découpe (conserver les ancres aux deux extrémités de la fenêtre)",
    "analyzeAnchorsWithout": "Sans ancres de découpe (retirer les ancres aux deux extrémités de la fenêtre)",
    "analyzeBack": "Relancer l'analyse",
    "analyzeButton": "Analyse de séquences",
    "analyzeCancel": "Annuler l'analyse",
    "analyzeCancelled": "Analyse annulée",
    "analyzeCancelling": "Annulation en cours…",
    "analyzeConfirm": "Démarrer l'analyse",
    "analyzeCsvCount": "Effectif",
    "analyzeCsvFrame": "Acides aminés du cadre +1",
    "analyzeCsvFrequency": "Fréquence (%)",
    "analyzeCsvLength": "Longueur (pb)",
    "analyzeCsvRank": "Rang",
    "analyzeCsvSequence": "Séquence",
    "analyzeDesc": "Réanalyser la plage sélectionnée : calculer la qualité de séquençage (lectures brutes de la plage) et regrouper les séquences ayant passé la découpe/le filtrage — compter les séquences dédupliquées selon la fenêtre de découpe (avec ou sans ancres), et calculer l'effectif, la fréquence et les acides aminés du cadre +1.",
    "analyzeDescNoTrim": "Aucune ancre de découpe définie : calculer uniquement la qualité de séquençage et générer un rapport HTML, sans regroupement des séquences dédupliquées.",
    "analyzeExportCsvHtml": "Exporter le tableau CSV et le rapport HTML",
    "analyzeExportFailed": "Échec de l'export du rapport d'analyse",
    "analyzeExportHtml": "Exporter le rapport HTML",
    "analyzeFailed": "Échec de l'analyse de séquences",
    "analyzeHint": "Analyse de séquences : calculer la qualité de séquençage de la plage sélectionnée et regrouper les séquences dédupliquées ayant passé la découpe/le filtrage (effectif/fréquence/acides aminés du cadre +1), exporter le tableau CSV et le rapport de qualité HTML (sans découpe, seul le rapport de qualité est généré)",
    "analyzeHtmlAnchorEmpty": "Non défini",
    "analyzeHtmlAnchorLeft": "Ancre gauche (5′)",
    "analyzeHtmlAnchorMarkNote": "Les segments colorés correspondent aux ancres de découpe : orange = ancre gauche, cyan = ancre droite ; dans les acides aminés du cadre +1, les acides aminés dont le codon contient une base d'ancrage sont également marqués.",
    "analyzeHtmlAnchorRight": "Ancre droite (3′)",
    "analyzeHtmlAnchorsLabel": "Ancres de découpe",
    "analyzeHtmlAnchorsNone": "Sans découpe",
    "analyzeHtmlAppName": "GenePad",
    "analyzeHtmlBases": "Nombre total de bases",
    "analyzeHtmlCount": "Effectif",
    "analyzeHtmlCsvLink": "Voir le tableau CSV pour le récapitulatif complet",
    "analyzeHtmlCsvLinkNote": "(dans le même dossier que ce rapport, ouvrable directement avec Excel)",
    "analyzeHtmlFailAnchor": "Ancre non trouvée",
    "analyzeHtmlFailComplexity": "Faible complexité",
    "analyzeHtmlFailLong": "Trop long",
    "analyzeHtmlFailNBase": "Trop de bases N",
    "analyzeHtmlFailNoOverlap": "Aucun chevauchement (non assemblé)",
    "analyzeHtmlFailOverlapMismatch": "Trop de mésappariements dans la zone de chevauchement",
    "analyzeHtmlFailQuality": "Qualité insuffisante",
    "analyzeHtmlFailShort": "Trop court",
    "analyzeHtmlFailed": "Non passé le filtrage",
    "analyzeHtmlFilesTitle": "Fichiers de séquençage",
    "analyzeHtmlFiltersLabel": "Filtres de lectures",
    "analyzeHtmlFiltersNone": "Non défini",
    "analyzeHtmlFrame1": "Acides aminés du cadre +1",
    "analyzeHtmlFrequency": "Fréquence",
    "analyzeHtmlGc": "Teneur en GC",
    "analyzeHtmlGenerated": "Date de génération",
    "analyzeHtmlGeneratedBy": "Ce rapport a été généré par {{app}}",
    "analyzeHtmlGroupR1": "R1",
    "analyzeHtmlGroupR2": "R2",
    "analyzeHtmlGroupTotal": "Total",
    "analyzeHtmlLength": "Longueur (pb)",
    "analyzeHtmlLoadedOf": "Chargement partiel : {{loaded}} lectures chargées, le fichier complet devrait en contenir {{total}}",
    "analyzeHtmlLowQ": "Q<20",
    "analyzeHtmlMeanLength": "Longueur moyenne des lectures",
    "analyzeHtmlMeanQ": "Qualité moyenne",
    "analyzeHtmlN": "Teneur en N",
    "analyzeHtmlPassed": "Passé le filtrage",
    "analyzeHtmlPathLabel": "Chemin source",
    "analyzeHtmlProcessed": "Lectures analysées",
    "analyzeHtmlQ20to29": "Q20–29",
    "analyzeHtmlQ30": "Q≥30",
    "analyzeHtmlQualityDist": "Distribution de la qualité (histogramme des valeurs Q)",
    "analyzeHtmlQualityTitle": "Statistiques de qualité de séquençage (lectures brutes de la plage)",
    "analyzeHtmlRank": "Rang",
    "analyzeHtmlReadLength": "Longueur de lecture",
    "analyzeHtmlReads": "Nombre de lectures",
    "analyzeHtmlResultTitle": "Résultats de l'analyse",
    "analyzeHtmlScopeFile": "Fichier entier",
    "analyzeHtmlScopeLabel": "Plage d'analyse",
    "analyzeHtmlScopeLoaded": "Chargement actuel uniquement",
    "analyzeHtmlSequence": "Séquence",
    "analyzeHtmlSkipped": "Enregistrements invalides",
    "analyzeHtmlTitle": "Rapport d'analyse de séquences",
    "analyzeHtmlTopChartTitle": "Histogramme des 20 séquences les plus fréquentes (par effectif)",
    "analyzeHtmlTopHint": "Les lectures ayant passé le filtrage sont fusionnées en séquences uniques par identité parfaite de séquence, soit {{total}} au total ({{sci}}), triées par effectif décroissant ; le tableau présente les {{top}} premières ; fréquence = effectif / nombre total de lectures ayant passé le filtrage.",
    "analyzeHtmlTopTitle": "Séquences les plus fréquentes Top {{top}}",
    "analyzeHtmlTotalUnknown": "Chargement partiel : {{loaded}} lectures chargées (nombre total de fichiers inconnu)",
    "analyzeHtmlUnique": "Séquences uniques (unique sequences)",
    "analyzeHtmlVersionLabel": "Version",
    "analyzeOpenFolder": "Ouvrir le dossier",
    "analyzeOpenFolderAskDesc": "Le rapport d'analyse a été enregistré dans :",
    "analyzeOpenFolderAskTitle": "Ouvrir le dossier d'export ?",
    "analyzeProgressScan": "{{done}} / {{total}} lectures analysées",
    "analyzeProgressScanNoTotal": "{{done}} lectures analysées",
    "analyzeResultCounted": "Ont passé le filtre",
    "analyzeResultCountedHint": "Nombre de lectures comptabilisées dans les séquences uniques après normalisation de l'orientation, fenêtre de découpe et tous les filtres de lectures",
    "analyzeResultFailedPrefix": "N'ont pas passé :",
    "analyzeResultProcessed": "Lectures analysées",
    "analyzeResultProcessedHint": "Nombre de lectures réellement analysées dans la plage d'analyse (les fichiers paired comptent une paire pour 1)",
    "analyzeResultProcessedPaired": "Paires de lectures analysées",
    "analyzeResultUnique": "Séquences uniques (unique sequences)",
    "analyzeResultUniqueHint": "Synonyme de unique sequences en analyse NGS : les lectures ayant passé le filtre sont fusionnées si leur séquence est strictement identique ; une même longueur et chaque base identique comptent pour une unique séquence ; ce nombre est le total des unique sequences, et le nombre d'occurrences de chacune correspond à la fréquence dans le tableau du rapport",
    "analyzeScopeFile": "Fichier entier (toutes les lectures)",
    "analyzeScopeLabel": "Plage d'analyse",
    "analyzeScopeLoaded": "Chargement actuel uniquement ({{count}} lectures)",
    "analyzeTitle": "Analyse de séquences",
    "anchorLeftFeature": "Ancre gauche",
    "anchorRightFeature": "Ancre droite",
    "annotAaTip": "{{aa}} · {{codon}} · colonnes {{start}}–{{end}}",
    "annotCdsAa": "{{count}} aa",
    "annotCdsExt": "Zone d'extension du cadre de lecture (cliquer pour sélectionner)",
    "annotCdsNoStop": "Aucun codon stop rencontré, extension en pointillés jusqu'à l'extrémité",
    "annotCdsStop": "Codon stop {{codon}} @ colonne {{col}}",
    "annotHint": "Ajouter une annotation Feature temporaire à la séquence assemblée de la cellule sélectionnée (affichée uniquement dans cette cellule, non écrite dans le fichier). Après avoir sélectionné une séquence, faire un clic droit « Ajouter une annotation locale temporaire » ou cliquer sur ce bouton.",
    "annotRange": "Colonnes {{start}}–{{end}}",
    "askModeDesc": "Avec quel type de données de séquençage ouvrir {{name}} ?",
    "askModeTitle": "Type de séquençage",
    "consensus": "Assemblage",
    "countMismatch": "Nombre de R1/R2 incohérent, appariement selon l'extrémité la plus courte",
    "countingTotal": "Comptage du total…",
    "crossCursor": "Curseur traversant",
    "crossCursorHint": "Une fois activé, la hauteur du curseur traverse toute la fenêtre lors de la sélection de séquences : la même colonne est surlignée simultanément dans plusieurs cellules (facilite la comparaison de plusieurs segments de séquence), et le curseur reste continu lors du défilement vertical. Cliquer sur une zone vide efface la sélection ; un clic droit réduit à une seule cellule (seule une cellule dispose d'un menu contextuel).",
    "ctxAddAnnot": "Ajouter une annotation locale temporaire…",
    "ctxCopyConsensus": "Copier la séquence assemblée",
    "ctxCopyR1": "Copier la séquence R1",
    "ctxCopyR2": "Copier la séquence R2",
    "ctxCopyRaw": "Copier le texte FASTQ brut",
    "ctxCopySelection": "Copier la séquence sélectionnée ({{count}} bp)",
    "ctxDeleteAnnot": "Supprimer l'annotation",
    "ctxEditAnnot": "Modifier l'annotation…",
    "detectedMate": "Fichier paired détecté : {{name}} (présélectionné dans la boîte de sélection de fichier)",
    "expandFull": "Tout afficher (100 %)",
    "expandMore10": "Afficher 10 % de plus",
    "exportCancel": "Annuler l'export",
    "exportCancelled": "Export annulé",
    "exportConfirm": "Exporter",
    "exportContentLabel": "Contenu de l'export",
    "exportContentMerged": "Séquences assemblées (un seul fichier en single-end)",
    "exportContentMergedHint": "Fusionner chaque paire de lectures par chevauchement en une seule séquence pour l'export (même logique que la ligne de référence d'assemblage de la vue, la zone de chevauchement prend R1) ; le fichier de sortie est {nom_fichier}_merged.fastq.gz. Les paires sans chevauchement sont mises bout à bout avec R1 et le complément inverse de R2.",
    "exportContentPaired": "Paired (deux fichiers R1 / R2)",
    "exportDesc": "Exporter les {{count}} lectures actuellement chargées (si un filtre est défini, seules les lectures ayant passé le filtre) au format FASTQ compressé en gzip ({{files}}). Saisir un nom de fichier, puis choisir le dossier de sauvegarde.",
    "exportDescFile": "Réanalyser le fichier entier, appliquer les conditions de découpe/filtrage actuelles à toutes les lectures (exporter toutes les lectures si aucune condition n'est définie) et exporter au format FASTQ compressé en gzip ({{files}}). Saisir un nom de fichier, puis choisir le dossier de sauvegarde.",
    "exportDone": "{{count}} lectures exportées ({{files}}) vers {{dir}}",
    "exportFailed": "Échec de l'export des données découpées",
    "exportFilesMerged": "Single-end après assemblage",
    "exportHint": "Exporter les lectures au format FASTQ compressé en gzip (en paired, écrire deux fichiers .fastq.gz R1 et R2 ; en single-end, uniquement R1 ; en paired, possibilité d'exporter les séquences single-end assemblées). Si une découpe/un filtrage est défini, seules les lectures ayant passé le filtre sont exportées ; sinon toutes sont exportées. Par défaut, exporter le fichier entier, ou uniquement les lectures actuellement chargées.",
    "exportPh": "Nom de fichier (sans extension)",
    "exportProgressCompress": "Compression…",
    "exportProgressScan": "{{done}} / {{total}} traités",
    "exportProgressScanNoTotal": "{{done}} traités",
    "exportScopeFile": "Fichier entier (toutes les lectures)",
    "exportScopeFileReady": "Disponible maintenant",
    "exportScopeLabel": "Plage d'export",
    "exportScopeLoaded": "Chargement actuel uniquement ({{count}} lectures)",
    "exportScopeLoadedWaiting": "Filtrage en cours, disponible une fois terminé",
    "exportTitle": "Exporter les données",
    "exportTrim": "Exporter les séquences traitées",
    "filterApply": "Appliquer le filtre",
    "filterAvgQual": "Qualité moyenne (0=désactivé)",
    "filterComplexity": "Filtre de complexité",
    "filterComplexityShort": "Complexité≥{{th}}",
    "filterComplexityTh": "Seuil (0–1)",
    "filterHint": "Filtre de lectures de type fastp, évalué sur les lectures après découpe et appliqué simultanément au filtrage de la vue et à l'export : les deux extrémités d'une paire doivent passer. Filtre de qualité : élimination si la proportion de bases non conformes (inférieures au seuil) dépasse la limite, si la qualité moyenne est insuffisante ou si le nombre de bases N est trop élevé ; filtre de longueur : élimination si trop court/trop long après découpe ; filtre de complexité : élimination si la proportion de différences entre bases adjacentes est inférieure au seuil (faible complexité).",
    "filterLabel": "Filtre",
    "filterLength": "Filtre de longueur",
    "filterLengthMinShort": "Longueur≥{{min}}",
    "filterLengthShort": "Longueur {{min}}–{{max}}",
    "filterMaxLen": "Longueur max (0=désactivé)",
    "filterMinLen": "Longueur min (bp)",
    "filterNBaseLimit": "Limite de bases N",
    "filterNote": "D'abord la découpe, puis le filtrage ; les deux extrémités d'une paire doivent passer",
    "filterOverlap": "Filtre d'assemblage (paires)",
    "filterOverlapMismatch": "Taux maximal de mésappariements dans la zone de chevauchement",
    "filterOverlapMismatchHint": "Filtrer la paire entière si le taux de mésappariements de la zone de chevauchement du meilleur assemblage dépasse cette valeur (exige une forte correspondance de la zone de chevauchement) ; par défaut 25 % = limite de la recherche d'assemblage, c'est-à-dire sans filtrage supplémentaire",
    "filterOverlapMismatchShort": "Mésappariement de chevauchement ≤{{pct}}%",
    "filterPolyG": "Découpe de la queue polyG",
    "filterPolyGShort": "polyG≥{{n}}",
    "filterPolyMinLen": "Longueur minimale",
    "filterPolyX": "Découpe de la queue polyX",
    "filterPolyXShort": "polyX≥{{n}}",
    "filterQCutShort": "Fenêtre glissante ≥Q{{q}}{{mode}}",
    "filterQualifiedQual": "Seuil de qualité (Q)",
    "filterQuality": "Filtre de qualité",
    "filterQualityCut": "Découpe de qualité par fenêtre glissante",
    "filterQualityCutFront": "Extrémité 5′",
    "filterQualityCutMeanQ": "Q moyen ≥",
    "filterQualityCutRight": "Mode agressif",
    "filterQualityCutRightHint": "S'arrête à la première fenêtre de faible qualité et conserve les bases de bonne qualité dans la fenêtre ; lorsqu'il est activé, remplace la découpe de l'extrémité 3′ (fastp -2/--cut_right)",
    "filterQualityCutTail": "Extrémité 3′",
    "filterQualityCutWindow": "Fenêtre (bp)",
    "filterQualityShort": "Qualité≥{{q}}",
    "filterRequireOverlap": "Ne conserver que les paires assemblées avec succès",
    "filterRequireOverlapHint": "Filtrer la paire entière si aucun chevauchement n'est trouvé et que les lectures sont jointes bout à bout (cohérent avec le comportement par défaut de fastp --merge, qui ne sort que les lectures assemblées avec succès)",
    "filterRequireOverlapShort": "Ne conserver que les paires assemblées",
    "filterReset": "Réinitialiser",
    "filterTitle": "Filtre de lectures",
    "filterTrim": "Découpe à longueur fixe",
    "filterTrimFront1": "Début de R1",
    "filterTrimFront2": "Début de R2",
    "filterTrimFrontAbbr": "Déb.",
    "filterTrimMaxLen": "Longueur de troncature (0=désactivé)",
    "filterTrimMaxLen1": "Troncature de R1 (0=désactivé)",
    "filterTrimMaxLen2": "Troncature de R2 (0=désactivé)",
    "filterTrimMaxLenHint": "Après toutes les autres découpes, tronquer les lectures à cette longueur (fastp --max_len ; 0=sans troncature)",
    "filterTrimShort": "{{v}}",
    "filterTrimTail1": "Fin de R1",
    "filterTrimTail2": "Fin de R2",
    "filterTrimTailAbbr": "Fin",
    "filterUnqualifiedPct": "Limite de lectures non qualifiées (%)",
    "footerLoadedOf": "{{loaded}} / {{total}} chargées",
    "footerReads": "{{count}} lectures",
    "globalSearchCapped": "Limite d'affichage atteinte, seules les {{count}} premières sont listées",
    "globalSearchHint": "Recherche globale (lectures chargées) : ADN = la chaîne de recherche et son complément inverse sont recherchés dans la séquence assemblée et les lignes R1/R2 de chaque lecture ; AA = la séquence assemblée est traduite dans les 6 cadres puis comparée. Appuyer sur Entrée pour lancer la recherche, ←/→ ou les boutons pour naviguer entre les correspondances ; la correspondance actuelle devient la sélection ; un clic droit permet de la copier ou de la définir comme ancre de découpe.",
    "globalSearchPlaceholderAa": "Recherche d'acides aminés dans les 6 cadres sur les lectures chargées (Entrée)…",
    "globalSearchPlaceholderDna": "Rechercher dans les lectures chargées (Entrée)…",
    "globalSearchSearching": "Recherche en cours…",
    "hideQual": "Masquer la qualité de séquençage",
    "lastMate": "Dernier fichier apparié : {{name}}",
    "loadAll": "Tout charger",
    "loadMore10": "Charger 10 % de plus",
    "loadMoreHint": "Ajouter à chaque fois 10 % du total des lectures du fichier (au moins 1 lecture) ; vous pouvez cliquer de façon répétée jusqu'à tout charger. L'analyse de séquences n'a pas besoin de tout charger — « Analyse de séquences » analyse par défaut le fichier entier.",
    "loading": "Analyse · {{count}} lectures chargées",
    "mateEmptyError": "Échec de la validation de l'appariement : le fichier ne peut pas produire de lectures valides ({{reason}}), veuillez resélectionner.",
    "mateMismatchError": "Échec de la validation de l'appariement : les IDs de la première lecture des deux fichiers sont différents ({{r1}} vs {{r2}}), il ne s'agit pas d'un séquençage en paires du même échantillon, veuillez sélectionner l'autre fichier.",
    "modePaired": "Séquençage en paires (sélection manuelle de l'autre fichier)",
    "modePairedPickHint": "Sélectionner R2 manuellement",
    "modePairedReuseHint": "Réutiliser directement la dernière paire",
    "modePairedManual": "Séquençage en paires (fichier spécifié manuellement)",
    "modePairedUseLast": "Séquençage en paires (utiliser la dernière paire)",
    "modeSingle": "Séquençage single-end",
    "multiAutoPair": "Appariement automatique",
    "multiAutoPairDone": "{{count}} paires associées automatiquement selon l'ID de la première lecture, les autres restent en single-end",
    "multiAutoPairFailed": "L'appariement automatique a échoué, veuillez apparier manuellement",
    "multiAutoPairNone": "Aucune combinaison à apparier automatiquement, veuillez apparier manuellement",
    "multiAutoPairing": "Appariement en cours…",
    "multiPairCount": "Paire {{index}}",
    "multiPairDesc": "Les fichiers NGS suivants sont ouverts par défaut en single-end ; pour les apparier, faites glisser les deux fichiers vers la droite pour former une paire (le premier glissé est R1). Annuler laisse ces fichiers fermés.",
    "multiPairDropR1": "Déposer ici le fichier R1…",
    "multiPairEmptyHint": "Déposez des fichiers ici, deux fichiers forment une paire",
    "multiPairIncomplete": "Des paires incomplètes subsistent : déposez l'autre fichier, ou ramenez à gauche le fichier déjà déposé",
    "multiPairNew": "Nouvelle paire : déposer un fichier comme R1",
    "multiPairTitle": "Appariement des fichiers de séquençage NGS",
    "multiPairWaiting": "Déposer l'autre fichier…",
    "multiPairedTitle": "Appariement par paires",
    "multiPrefillAndAutoNote": "{{prefill}} paires préremplies selon la dernière paire utilisée, et {{count}} paires associées automatiquement",
    "multiPrefillNote": "{{count}} paires préremplies selon la dernière paire utilisée",
    "multiSingleEmptyHint": "Tous les fichiers sont appariés",
    "multiSingleTitle": "Ouvrir en single-end",
    "multiValidating": "Validation des paires en cours…",
    "noOverlap": "Aucun chevauchement trouvé, jonction bout à bout",
    "overlap": "Chevauchement {{len}} bp · Identité {{pct}} %",
    "paired": "Séquençage en paires",
    "plainFileHint": "Ce fichier FASTQ est un texte brut décompressé. GenePad peut ouvrir directement les fichiers compressés .fastq.gz/.fq.gz, sans décompression manuelle la prochaine fois.",
    "plainFileHintTitle": "Aucune décompression nécessaire",
    "qualDesc": "Barre de qualité de séquençage FASTQ (colorée par score Q : ≥30 vert / 20–29 ambre / <20 rouge) ; une fois masquée, la ligne de qualité est repliée dans chaque cellule",
    "rawToggle": "Données brutes",
    "readLength": "Longueur de lecture",
    "reads": "Nombre de lectures",
    "reverseReads": "Inversion de séquence",
    "reverseReadsHint": "Affiche la séquence visible sur une ligne (lecture simple, ou ligne courante lorsque la paire est masquée) en reverse-complément complet : bases complémentées et inversées, qualité inversée. Si la reconnaissance d'orientation de rognage est activée, les lectures déjà normalisées seront inversées à nouveau à partir de leur état actuel ; les sélections/annotations temporaires/recherches sont recalculées selon la nouvelle orientation (les annotations temporaires et les recherches sont effacées) ; l'export/le résumé n'est pas affecté.",
    "rfAaTip": "{{aa}} · {{codon}} · colonne {{col}} · cadre {{frame}}",
    "rfHideButton": "Masquer les cadres de lecture",
    "rfHint": "Affiche la traduction à six cadres de la séquence assemblée de chaque cellule (consensus en paires / R1 en simple) selon le cadre de lecture choisi : les cadres positifs sont traduits directement, les cadres négatifs sont traduits en reverse-complément ; les lettres d'acides aminés sont alignées sur la base centrale du codon, les codons d'initiation en vert et les codons stop en rouge (même logique que l'affichage des cadres de lecture dans la vue Séquence du plasmide).",
    "rfShowButton": "Affichage des cadres de lecture",
    "rfStartSuffix": "Codon d'initiation",
    "rfStopSuffix": "Codon stop",
    "sameFileError": "Le fichier de l'autre extrémité sélectionné est identique au fichier principal, veuillez resélectionner.",
    "searchClose": "Fermer la recherche",
    "searchCount": "{{idx}} / {{count}}",
    "searchHintAa": "Recherche d'acides aminés : la séquence assemblée est traduite selon les 6 cadres de lecture (y compris les cadres reverse-complément) puis recherchée ; seules les lignes de cadre correspondantes sont affichées, et les bases correspondantes sont surlignées selon l'orientation du cadre.",
    "searchHintDna": "Recherche d'ADN : recherche de fragments de bases simultanément dans la séquence assemblée de la cellule courante et dans les trois lignes R1/R2 (la requête et son reverse-complément sont recherchés).",
    "searchNext": "Correspondance suivante",
    "searchNoMatch": "Aucune correspondance",
    "searchPlaceholder": "Séquence de bases…",
    "searchPlaceholderAa": "Acides aminés (ex. MGH…) ou avec *",
    "searchPrev": "Correspondance précédente",
    "setAsTrim": "Définir comme ancre de rognage…",
    "showMate": "Afficher l'extrémité appariée (R2)",
    "showQual": "Afficher la qualité de séquençage",
    "single": "Séquençage simple",
    "skipped": "{{count}} enregistrements incomplets ignorés",
    "swapReads": "Échanger R1/R2",
    "swapReadsHint": "Échange l'affichage des paires : le chevauchement est réassemblé en prenant R2 comme brin de référence, la séquence assemblée passe en orientation brin antisens ; la ligne supérieure affiche la séquence originale de R2 (5′→3′), la ligne inférieure affiche R1 en ordre inverse, et les étiquettes sont échangées. Si la reconnaissance d'orientation de rognage est activée, les orientations normalisées de chaque lecture peuvent différer (R1/R2 et R2/R1 mélangés) ; ce commutateur échange cellule par cellule à partir de leur état actuel ; les sélections/annotations temporaires/recherches sont recalculées selon la nouvelle orientation (les annotations temporaires et les recherches sont effacées) ; l'export/le résumé n'est pas affecté.",
    "trimApply": "Rogner",
    "trimClear": "Effacer cette ancre",
    "trimDone": "Réussies {{pass}} / {{total}}",
    "trimHint": "Localise les ancres de rognage gauche/droite sur la séquence assemblée ; conserve la séquence entre le point de départ de l'ancre gauche et le point de fin de l'ancre droite (ancres incluses). Détection automatique de l'orientation : les lectures d'orientation opposée à l'ancre sont échangées R1/R2 en paires, ou reverse-complémentées en simple avant rognage (l'orientation des bibliothèques à adaptateurs de ligature est variable ; pour une ancre unique, l'orientation est déterminée par « correspondance de l'ancre telle quelle »), et des barres d'annotation « ancre gauche/droite » sont ajoutées aux deux extrémités de la fenêtre. Lorsqu'une ancre a plusieurs positions, la gauche prend la plus proche de l'extrémité 5′ et la droite la plus proche de l'extrémité 3′ ; toute lecture dont une ancre définie ne correspond pas est entièrement filtrée, et la boîte de propriétés affiche le nombre de lectures réussies.",
    "trimLabel": "Ancre de rognage",
    "trimLeftPh": "Extrémité gauche (5′)",
    "trimMirrored": "Affichage en miroir",
    "trimMirroredHint": "Le commutateur « Échanger R1/R2 » ou « Inversion de séquence » est activé ; l'affichage actuel est le miroir de l'orientation normalisée ; réappliquer/effacer le rognage ou le filtrage réinitialise ce commutateur.",
    "trimProgress": "Filtrage en cours · Réussies {{pass}} / Évaluées {{done}}",
    "trimRightPh": "Extrémité droite (3′)",
    "trimSideDesc": "Définir le fragment sélectionné de {{count}} bp comme ancre de rognage de quelle extrémité ?",
    "trimSideLeft": "Extrémité gauche (5′)",
    "trimSideReverse": "Reverse-complément",
    "trimSideReverseHint": "Reverse-complémenter le fragment in situ avant de le définir comme ancre (l'orientation de l'ancre suit le sens d'entrée ; pour un fragment sur le brin antisens, inverser d'abord)",
    "trimSideRight": "Extrémité droite (3′)",
    "trimSideTitle": "Position de l'ancre de rognage",
    "truncated": "Fichier volumineux, seules les {{count}} premières lectures sont chargées",
    "truncatedAnalyzeNote": "L'analyse de séquence ne nécessite pas le chargement du fichier entier ; « Analyse de séquence » analyse par défaut le fichier entier",
    "truncatedTotal": "Fichier volumineux, les {{count}} premières lectures sur {{total}} sont chargées",
    "vizToggle": "Vue graphique"
  },
  "fastqProperties": {
    "bases": "Nombre total de bases",
    "computing": "Calcul des statistiques…",
    "encoding": "Encodage de qualité",
    "fileR1": "Fichier (R1)",
    "fileR2": "Fichier apparié (R2)",
    "filterFail_anchor": "Ancre non trouvée {{count}}",
    "filterFail_complexity": "Complexité trop faible {{count}}",
    "filterFail_lengthLong": "Longueur trop grande {{count}}",
    "filterFail_lengthShort": "Longueur trop courte {{count}}",
    "filterFail_nBase": "Trop de bases N {{count}}",
    "filterFail_noOverlap": "Aucun chevauchement {{count}}",
    "filterFail_overlapMismatch": "Trop de mésappariements dans le chevauchement {{count}}",
    "filterFail_quality": "Qualité insuffisante {{count}}",
    "gcContent": "Teneur en GC",
    "group": "Groupe statistique",
    "groupTotal": "Global",
    "meanQuality": "Qualité moyenne",
    "meanQualityTip": "Score de qualité Phred (décodage Phred+33) : plus le score Q est élevé, plus la base est fiable. Taux d'erreur = 10^(-Q/10) — Q20=1 %, Q30=0,1 %, Q40=0,01 %. Les données Illumina présentent souvent une qualité moyenne Q30–37, avec une dégradation naturelle en fin de lecture ; une qualité moyenne Q≥30 indique un séquençage de haute qualité. Quelques bases de faible Q ou une dégradation en fin de lecture sont normales et n'indiquent pas un échec du séquençage.",
    "meanReadLength": "Longueur de lecture moyenne",
    "mode": "Type de séquençage",
    "nContent": "Teneur en N",
    "qualityDist": "Distribution des qualités",
    "readLength": "Longueur de lecture",
    "title": "Propriétés FASTQ",
    "trimFilter": "Filtrage par rognage",
    "trimFilterDone": "Réussis {{pass}} / {{total}}",
    "trimFilterEval": "Réussis {{pass}} (évalués {{done}}/{{total}})"
  },
  "feature": {
    "actions": "Actions",
    "add": "Ajouter",
    "addFeature": "Ajouter une annotation",
    "addSegment": "+ Ajouter un segment",
    "cancel": "Annuler",
    "color": "Couleur",
    "colorPlaceholder": "#RRGGBB",
    "customKeyPlaceholder": "Nom du qualificatif",
    "customQualifier": "Personnalisé…",
    "derivedRange": "Calculé automatiquement à partir des segments",
    "direction": "Direction",
    "editFeature": "Modifier l'annotation",
    "end": "Fin",
    "featureName": "Nom de l'annotation",
    "forward": "→ Sens direct",
    "hide": "Masquer",
    "hideInMap": "Masquer dans la carte et la séquence",
    "hideQualifiers": "Masquer les qualificatifs",
    "length": "Longueur",
    "name": "Nom",
    "noFeatures": "Aucune annotation trouvée",
    "noQualifiers": "Aucun qualificatif",
    "none": "— Aucun",
    "note": "Remarque",
    "notePlaceholder": "Remarque supplémentaire...",
    "position": "Position",
    "qualifierCount": "Qualificatifs ({{count}})",
    "qualifierHint": "Sélectionner, modifier, enregistrer",
    "qualifierValuePlaceholder": "Valeur de {{key}}",
    "qualifiers": "Qualificatifs",
    "range": "Plage",
    "removeSegment": "Supprimer le segment",
    "reverse": "← Sens inverse",
    "save": "Enregistrer",
    "search": "Rechercher une annotation...",
    "segmentColor": "Couleur",
    "segmentName": "Nom",
    "segmentNavNext": "Aller au segment suivant",
    "segmentNavPrev": "Aller au segment précédent",
    "segments": "Segments",
    "selectQualifierFirst": "Veuillez d'abord sélectionner un qualificatif",
    "show": "Afficher",
    "showAminoAcids": "Afficher les acides aminés",
    "showInMap": "Afficher dans la carte et la séquence",
    "showInSequence": "Afficher l'annotation dans la vue de séquence",
    "showQualifiers": "Développer les qualificatifs",
    "showingCount": "Affichage de {{count}} / {{total}} annotations",
    "start": "Début",
    "strand": "Brin",
    "type": "Type"
  },
  "featureDeleteChoice": {
    "message": "La plage sélectionnée ({{count}} pb) correspond exactement à l'annotation « {{name}} ». Voulez-vous supprimer uniquement l'annotation, ou supprimer cette séquence et l'annotation ?",
    "messageMultiple": "La plage sélectionnée ({{count}} pb) correspond exactement à {{featureCount}} annotations ({{names}}). Voulez-vous supprimer uniquement les annotations, ou supprimer cette séquence et ces annotations ?",
    "selectedFeatureOnly": "Supprimer uniquement « {{name}} »",
    "selectedHint": "Vous avez sélectionné « {{name}} ».",
    "sequenceAndFeature": "Supprimer la séquence et l'annotation",
    "title": "Supprimer l'annotation"
  },
  "footer": {
    "bp": "bp",
    "circular": "circulaire",
    "gc": "GC :",
    "linear": "linéaire",
    "plasmidTagsFailed": "Échec de la mise à jour des tags",
    "plasmidTagsSkipped": "Tags automatiques désactivés",
    "plasmidTagsUpdated": "Tags du plasmide mis à jour",
    "selected": "Sélection :",
    "updatingPlasmidInfo": "Mise à jour des informations du plasmide"
  },
  "historyPanel": {
    "autoCollapsed": "Historique profond réduit automatiquement",
    "cancel": "Annuler",
    "circular": "circulaire",
    "classicLayout": "Disposition classique",
    "classicTopLeft": "Disposition classique (actuellement en haut à gauche)",
    "clear": "Effacer l'historique",
    "clearConfirm": "Effacer tout l'historique ?",
    "close": "Fermer le panneau d'historique",
    "collapseBranchHint": "Cliquer pour réduire",
    "confirm": "Confirmer",
    "current": "État actuel",
    "empty": "Aucun historique",
    "emptyDesc": "Les modifications de séquence sont enregistrées automatiquement ici ; après sauvegarde en fichier .gen ou .dna, les versions sauvegardées apparaîtront ici.",
    "expandBranchHint": "Cliquer pour développer +{{count}} entrées d'historique",
    "expandHint": "Cliquer sur un nœud pour développer l'historique supplémentaire",
    "exportFailed": "Échec de l'export de l'image d'historique",
    "exportImage": "Exporter l'image d'historique",
    "linear": "linéaire",
    "loadFailed": "Impossible de lire l'historique des modifications ; repli sur les modifications de cette session.",
    "loading": "Lecture de l'historique des modifications…",
    "newestAtBottom": "Plus récent en bas",
    "nodeCount": "{{count}} nœuds",
    "op": {
      "amplifyFragment": "Amplification PCR",
      "changeMethylation": "Modifier la méthylation",
      "changePhosphorylation": "Modifier la phosphorylation",
      "changeStrandedness": "Modifier le nombre de brins",
      "changeTopology": "Modifier la topologie",
      "digest": "Digestion",
      "flip": "Complément inverse",
      "gatewayBPCloning": "Clonage Gateway BP",
      "gatewayLRCloning": "Clonage Gateway LR",
      "gibsonAssembly": "Assemblage Gibson",
      "goldenGateAssembly": "Assemblage Golden Gate",
      "inFusionCloning": "Clonage In-Fusion",
      "insert": "Insertion",
      "insertFragment": "Insérer un fragment",
      "insertFragments": "Insertion multi-fragments",
      "invalid": "Fichier d'origine",
      "ligateFragments": "Ligation de fragments",
      "makeDna": "Nouvel ADN",
      "makeProtein": "Nouvelle protéine",
      "makeRna": "Nouvel ARN",
      "newFileFromSelection": "Enregistrer la sélection sous",
      "primerDirectedMutagenesis": "Mutagenèse dirigée",
      "remove": "Supprimer",
      "replace": "Remplacer",
      "restrictionCloning": "Clonage par restriction",
      "taCloning": "Clonage TA",
      "topoCloning": "Clonage TOPO",
      "unknown": "Opération"
    },
    "openSnapshot": "Ouvrir cet instantané dans un nouvel onglet/fenêtre",
    "openSnapshotShort": "Ouvrir l'instantané",
    "primers": "Amorces",
    "prune": "Élaguer cette branche",
    "pruneAdvice": "L'historique dépasse 50 entrées ; un élagage est recommandé",
    "pruneConfirm": "Élaguer « {{name}} » et tout l'historique des entrées de même niveau ?",
    "snapshotCount": "{{count}} instantanés",
    "snapshotHint": "Cliquez sur un instantané pour l'ouvrir dans un nouveau document",
    "snapshotRestoreFailed": "Échec de l'écriture de l'instantané dans un fichier temporaire, aucun document ouvert.",
    "title": "Historique"
  },
  "map": {
    "allFeatures": "Toutes",
    "circularMap": "Passer en affichage circulaire",
    "cuts": "Sites de restriction",
    "cutsDisabled": "Trop de sites de restriction ({{count}}), affichage désactivé pour éviter le ralentissement de la carte. Veuillez réduire le pool d'enzymes ou filtrer le schéma",
    "editDisplayName": "Modifier le nom d'affichage",
    "ellipseWidthAxis": "Faites glisser les poignées latérales pour ajuster la largeur de l'anneau de labels, peut dépasser la limite par défaut",
    "enzymes": "Enzymes de restriction",
    "features": "Tableau des annotations",
    "gene": "Carte",
    "hideCuts": "Masquer les sites de restriction ({{count}})",
    "hideEnzymeFilterRow": "Réduire la ligne de filtrage pool/schéma",
    "hideLabels": "Masquer les noms d'annotation ({{count}})",
    "hidePrimers": "Masquer les amorces ({{count}})",
    "labels": "Noms d'annotation",
    "linearMap": "Passer en affichage linéaire",
    "orfHide": "Masquer",
    "orfPredict": "Prédire",
    "primers": "Tableau des amorces",
    "resetView": "Réinitialiser la vue",
    "rfHide": "Masquer les cadres de lecture",
    "rfShow": "Afficher les cadres de lecture",
    "showAllFeatures": "Afficher toutes les annotations",
    "showCuts": "Afficher les sites de restriction ({{count}})",
    "showEnzymeFilterRow": "Développer la ligne de filtrage pool/schéma",
    "showLabels": "Afficher les noms d'annotation ({{count}})",
    "showPrimers": "Afficher les amorces ({{count}})",
    "showTwoRings": "Afficher uniquement les annotations à deux anneaux"
  },
  "orf": {
    "add": "Ajouter",
    "cancel": "Annuler",
    "customCodon": "Codon personnalisé",
    "description": "Configurer les paramètres de prédiction des cadres de lecture ouverts.",
    "forward": "Sens (+)",
    "hideReadingFrames": "Masquer les cadres de lecture",
    "minORFLength": "Longueur minimale de l'ORF (acides aminés)",
    "noCodon": "Veuillez sélectionner au moins un codon d'initiation",
    "reverse": "Antisens (-)",
    "show": "Afficher",
    "showReadingFrames": "Afficher les cadres de lecture",
    "startCodonMode": "Codon d'initiation",
    "startCodons": "Codons d'initiation",
    "strandDirection": "Direction du brin",
    "title": "Prédiction des ORF"
  },
  "plasmidLibrary": {
    "about": "La bibliothèque de plasmides enregistre automatiquement les fichiers de plasmides que vous avez ouverts dans ce programme. Vous pouvez également ajouter des fichiers manuellement via le bouton « Ajouter un fichier ». Les enregistrements de la bibliothèque ne contiennent que des informations d'index et ne copient ni ne modifient vos fichiers originaux.",
    "addFile": "Ajouter un fichier",
    "addTagPlaceholder": "Saisir un tag, appuyer sur Entrée pour ajouter",
    "addToProject": "Ajouter au projet",
    "addToProjectEmpty": "Aucun projet, veuillez d'abord en créer un dans « Gestion des fichiers » à gauche",
    "aiSetupConfigure": "Configurer l'IA",
    "aiSetupDismiss": "Ne plus afficher",
    "aiSetupHint": "L'IA n'est pas encore configurée. Une fois configurée, vous pourrez utiliser l'assistant IA et générer automatiquement des tags lors de l'analyse.",
    "batchCopy": "Copier vers un dossier",
    "batchDelete": "Supprimer les enregistrements",
    "batchDeleteConfirm": "Voulez-vous vraiment supprimer les {{count}} enregistrements sélectionnés de la bibliothèque ? (Les fichiers originaux ne seront pas supprimés)",
    "batchRefresh": "Actualisation IA par lot",
    "batchRefreshAll": "Tout régénérer",
    "batchRefreshMissing": "Actualiser uniquement ceux sans tag",
    "batchRefreshSubmitted": "{{count}} plasmides soumis pour génération en arrière-plan, actualisation automatique une fois terminé.",
    "batchRefreshing": "Génération par lot en cours...",
    "belongingProjects": "Projets d'appartenance",
    "cleanupMissing": "Nettoyer les éléments manquants",
    "cleanupMissingConfirm": "Voulez-vous vraiment supprimer de la bibliothèque les {{count}} enregistrements dont les fichiers sont manquants ? (Les fichiers originaux ne seront pas supprimés)",
    "clearTags": "Effacer les filtres ({{count}})",
    "columns": {
      "lastOpened": "Dernière ouverture",
      "name": "Nom du fichier",
      "path": "Chemin",
      "tags": "Tags"
    },
    "contextOpen": "Ouvrir",
    "contextOpenFolder": "Ouvrir le dossier contenant",
    "contextOpenWith": "Ouvrir avec une autre application",
    "contextOpenWithNone": "Aucune application disponible trouvée",
    "contextRemove": "Retirer de la bibliothèque",
    "copyPath": "Copier le chemin",
    "createTag": "Créer le tag « {{tag}} »",
    "deselectAll": "Tout désélectionner",
    "detailMissing": "Le fichier pointé par cet enregistrement n'existe pas sur le disque. Le chemin a peut-être été déplacé ou supprimé, mais l'enregistrement reste dans la bibliothèque.",
    "empty": "Aucun plasmide correspondant",
    "emptyHint": "La bibliothèque est vide. Cliquez sur « Analyser un dossier » pour sélectionner un répertoire ; le programme analysera récursivement les fichiers de plasmides qu'il contient et les enregistrera dans la bibliothèque.",
    "fileManager": {
      "addedToProject": "{{count}} fichiers ajoutés à « {{name}} »",
      "collapse": "Réduire la gestion des fichiers",
      "createConfirm": "Créer",
      "createdProject": "Projet « {{name}} » créé",
      "deleteConfirm": "Supprimer « {{name}} » ainsi que tous ses sous-dossiers et les enregistrements de fichiers qu'ils contiennent ? Les enregistrements de la bibliothèque et les fichiers sources ne seront pas supprimés.",
      "deleteFolder": "Supprimer le dossier de projet",
      "deletedProject": "Projet « {{name}} » supprimé",
      "dragHint": "Cliquez sur un dossier de projet pour filtrer la liste ; faites glisser les fichiers de droite (sélection multiple possible) vers un dossier de projet pour les classer, ou sélectionnez-en plusieurs puis cliquez sur « Ajouter au projet ».",
      "emptyPaths": "Aucun fichier dans la bibliothèque. Après avoir analysé un dossier ou ouvert des fichiers, ils apparaîtront ici selon leur chemin d'origine.",
      "emptyProjects": "Aucun projet pour le moment. Cliquez sur « Nouveau projet » ci-dessus pour en créer un.",
      "expand": "Développer la gestion des fichiers",
      "fileCount": "{{count}} fichiers",
      "nameHint": "Les dossiers de projet servent à classer les fichiers par projet ; un même fichier peut appartenir à plusieurs projets.",
      "namePlaceholder": "Saisir le nom du dossier…",
      "nameRequired": "Le nom ne peut pas être vide",
      "newProject": "Nouveau projet",
      "newSubfolder": "Nouveau sous-projet",
      "parentHint": "Un sous-projet sera créé sous « {{path}} ».",
      "removedFromProject": "{{count}} fichiers retirés de « {{name}} »",
      "renameConfirm": "Renommer",
      "renameFolder": "Renommer",
      "renamedProject": "Renommé en « {{name}} »",
      "rootAll": "Tous les fichiers",
      "rootProjects": "Tous les projets",
      "tabPaths": "Chemin d'origine",
      "tabProjects": "Classer par projet",
      "teamShared": "Partage d'équipe",
      "teamSharedHint": "Partage d'équipe : fichiers du dossier public du serveur d'équipe, cliquez pour parcourir et télécharger dans la bibliothèque.",
      "title": "Gestion des fichiers",
      "unassigned": "Non classé",
      "unassignedHint": "Non classé : collecte automatiquement les fichiers n'appartenant à aucun projet."
    },
    "fileMissing": "Fichier manquant",
    "fileMissingDisabled": "Le fichier n'existe pas, impossible de l'ouvrir",
    "fileName": "Nom du fichier",
    "filePath": "Chemin",
    "folderFilterDir": "Dossier : {{name}}",
    "folderFilterProject": "Projet : {{name}}",
    "infoPanel": {
      "collapse": "Réduire le panneau de détails",
      "expand": "Développer le panneau de détails",
      "title": "Détails et tags"
    },
    "matchAll": "Tous les critères",
    "missingCount": "{{count}} fichiers manquants",
    "noSelection": "Sélectionnez un plasmide à gauche pour voir les détails",
    "notInAnyProject": "N'appartient à aucun projet",
    "openInFolder": "Afficher dans le dossier",
    "openInProgram": "Ouvrir avec ce programme",
    "plasmidCount": "{{count}} sur {{total}}",
    "regenerateTags": "Générer les étiquettes par IA",
    "removeRecord": "Retirer l'enregistrement (le fichier source ne sera pas supprimé)",
    "removeTag": "Retirer l'étiquette",
    "scanDirectory": "Analyser le dossier",
    "scanResult": "{{scanned}} fichiers analysés, {{added}} ajoutés, {{unchanged}} inchangés ignorés, {{pending}} seront analysés en arrière-plan avec génération d'étiquettes.",
    "scanning": "Analyse en cours...",
    "searchPlaceholder": "Rechercher par nom de fichier ou étiquette...",
    "selectAll": "Tout sélectionner",
    "selectItem": "Sélectionner {{name}}",
    "selectedCount": "{{count}} sélectionné(s)",
    "tagCloud": "Toutes les étiquettes",
    "tagCloudEmpty": "Aucune étiquette pour l'instant. Elles apparaîtront ici après l'analyse d'un dossier ou la génération par IA.",
    "tagCloudHint": "{{tag}} : présent dans {{count}} plasmides (cliquer pour filtrer)",
    "teamBackToMembers": "Retour à la liste des membres",
    "teamBrowseFile": "Parcourir les fichiers",
    "teamCancelRequest": "Retirer",
    "teamCenterButton": "Équipe",
    "teamCenterDescription": "Traiter les demandes de fichiers reçues, suivre les demandes envoyées, télécharger les fichiers que les membres vous ont transmis.",
    "teamCenterTitle": "Centre de demandes d'équipe",
    "teamConflictCount": "{{count}} fichiers sont en conflit avec la version du serveur. Choisissez la version à conserver pour chacun.",
    "teamConflictKeepBoth": "Conserver les deux",
    "teamConflictKeepBothHint": "Enregistrer la version du serveur comme copie locale « xxx (server) », puis écraser le serveur avec la version locale",
    "teamConflictKeepMine": "Écraser avec la mienne",
    "teamConflictKeepMineHint": "Écraser la version du serveur avec la version locale",
    "teamConflictResolved": "Conflit résolu : {{name}}",
    "teamConflictTakeServer": "Prendre la version du serveur",
    "teamConflictTakeServerHint": "Écraser le fichier local avec la version du serveur",
    "teamDecline": "Refuser",
    "teamDownload": "Télécharger",
    "teamDownloadAgain": "Télécharger à nouveau",
    "teamDownloadFailed": "Échec du téléchargement de {{name}} : {{error}}",
    "teamDownloadTitle": "Télécharger sur cet appareil et ajouter à la bibliothèque de fichiers géniques",
    "teamDownloaded": "{{name}} téléchargé vers {{path}}",
    "teamDownloads": "{{count}} téléchargements",
    "teamEmpty": "Le dossier d'équipe ne contient encore aucun fichier, ou aucun résultat ne correspond.",
    "teamFileCount": "{{count}} / {{total}} fichiers",
    "teamFrom": "De",
    "teamFulfill": "Transmettre {{count}} fichiers",
    "teamFulfillDirectHint": "Fichiers locaux associés automatiquement selon les enregistrements de la bibliothèque. Cliquez pour transmettre directement.",
    "teamFulfillDone": "{{count}} fichiers transmis",
    "teamFulfillMissing": "{{count}} fichiers introuvables sur le disque. Veuillez les sélectionner manuellement.",
    "teamFulfillNoFiles": "Veuillez d'abord sélectionner un chemin local pour au moins un fichier",
    "teamFulfillReselect": "Resélectionner les fichiers",
    "teamFulfillStart": "Transmission des fichiers…",
    "teamHiddenList": "Ce membre a masqué la liste de sa bibliothèque",
    "teamInboxEmpty": "La boîte de réception est vide.",
    "teamLibraryCount": "{{count}} fichiers",
    "teamMe": "Moi",
    "teamMemberCount": "{{count}} membres · {{online}} en ligne",
    "teamMembersEmpty": "Aucun autre membre pour l'instant.",
    "teamMembersHint": "Bibliothèques des membres : parcourez les fichiers partagés par les membres de l'équipe et envoyez une demande en un clic.",
    "teamNoConflicts": "Aucun conflit à traiter.",
    "teamNoOutgoing": "Aucune demande envoyée.",
    "teamNoRequests": "Aucune demande reçue.",
    "teamNotifyAnnounce": "Annonce d'équipe reçue",
    "teamNotifyApprovalPending": "Une demande attend votre approbation (traitable via « Approbation de groupe » sur le web)",
    "teamNotifyApproved": "Votre demande a été approuvée, en attente de transmission par le destinataire",
    "teamNotifyCancelled": "{{who}} a retiré sa demande",
    "teamNotifyDeclined": "{{who}} a refusé votre demande",
    "teamNotifyFulfilled": "{{who}} vous a transmis des fichiers",
    "teamNotifyOpen": "Voir",
    "teamNotifyRejected": "Votre demande a été rejetée",
    "teamNotifyRequestNew": "{{who}} vous demande des fichiers",
    "teamNotifyTransferNew": "{{who}} vous a transmis des fichiers",
    "teamOwner": "De",
    "teamPickFilePlaceholder": "Choisir un chemin de fichier local…",
    "teamPublicHint": "Bibliothèque publique : fichiers publiés par les membres dans le dossier d'équipe, téléchargeables et ajoutables directement.",
    "teamRequestAll": "Demander {{count}} éléments en un clic",
    "teamRequestFailed": "Échec de l'envoi de la demande : {{error}}",
    "teamRequestOne": "Demander",
    "teamRequestSent": "{{count}} demandes envoyées à {{name}}",
    "teamRequestSentApproval": "Demande soumise, en attente d'approbation avant transmission au destinataire",
    "teamSearchAcrossPlaceholder": "Rechercher dans la bibliothèque publique et les listes partagées des membres (nom/étiquette/catégorie)",
    "teamSearchNoHit": "Aucun fichier correspondant dans la bibliothèque publique.",
    "teamSearchNoHitMembers": "Aucun fichier correspondant dans les listes partagées des membres.",
    "teamSearchPlaceholder": "Rechercher dans les fichiers partagés de l'équipe (nom/étiquette)",
    "teamSearchResultCount": "Bibliothèque publique : {{pub}} résultats · {{members}} membres avec résultats",
    "teamSearchResultsMembers": "Liste des membres",
    "teamSearchResultsPublic": "Bibliothèque publique",
    "teamShareCopyErrors": "Copier les messages d'erreur",
    "teamShareDone": "{{count}} fichiers déposés dans la bibliothèque publique",
    "teamShareErrorsCopied": "Messages d'erreur copiés",
    "teamShareErrorsCopyFailed": "Échec de la copie, veuillez sélectionner le texte manuellement",
    "teamShareFailedDescription": "Les {{count}} fichiers suivants n'ont pas pu être déposés dans la bibliothèque publique :",
    "teamShareFailedTitle": "Échec du dépôt de certains fichiers",
    "teamShareProgress": "Dépôt en cours {{done}}/{{total}} {{name}}",
    "teamSharedHint": "Les fichiers du dossier partagé de l'équipe sont publiés par les membres de l'équipe ; après téléchargement, ils sont automatiquement ajoutés à la bibliothèque locale de fichiers géniques.",
    "teamStatusCancelled": "Retiré",
    "teamStatusDeclined": "Refusé",
    "teamStatusFulfilled": "Déposé",
    "teamStatusPending": "En attente",
    "teamStatusPendingApproval": "En attente d'approbation",
    "teamStatusRejected": "Rejeté",
    "teamSyncButton": "Synchroniser vers l'espace personnel d'équipe",
    "teamSyncPrivateNote": "L'espace personnel d'équipe n'est accessible qu'avec le compte actuellement connecté.",
    "teamSyncResultTitle": "Résultat de la synchronisation de l'espace personnel",
    "teamSyncing": "Synchronisation…",
    "teamTabInbox": "Boîte de réception",
    "teamTabIncoming": "Demandes reçues",
    "teamTabMembers": "Bibliothèque des membres",
    "teamTabOutgoing": "Demandes envoyées",
    "teamTabPublic": "Bibliothèque publique",
    "teamTransferDownloaded": "Téléchargé",
    "teamViewLibrary": "Voir la liste",
    "title": "Bibliothèque de fichiers géniques",
    "updatingTags": "Génération en cours...",
    "watchFolders": "Dossiers surveillés",
    "watchFoldersAdd": "Ajouter un dossier",
    "watchFoldersEmpty": "Aucun dossier surveillé. Ajoutez un dossier pour synchroniser automatiquement au démarrage.",
    "watchFoldersHint": "Les dossiers surveillés sont analysés automatiquement à chaque ouverture de la bibliothèque de fichiers géniques, afin de maintenir les enregistrements synchronisés avec les fichiers (ajout des nouveaux, suppression des enregistrements disparus).",
    "watchFoldersLastScanned": "Dernière analyse : {{time}}",
    "watchFoldersNeverScanned": "Non analysé",
    "watchFoldersRefresh": "Tout actualiser",
    "watchFoldersRefreshSummary": "{{scanned}} fichiers analysés dans {{folders}} dossiers — {{added}} ajoutés, {{removed}} supprimés, {{unchanged}} inchangés.",
    "watchFoldersRefreshing": "Actualisation...",
    "watchFoldersRemove": "Retirer de la liste de surveillance",
    "watchFoldersTitle": "Dossiers surveillés",
    "watchTypesAdd": "Ajouter un type",
    "watchTypesEmpty": "Aucune configuration de type",
    "watchTypesHint": "Les extensions cochées sont analysées et importées avec les dossiers surveillés. Par défaut, les formats de séquence pris en charge par ce programme sont surveillés ; les fichiers de séquençage FASTQ ne sont pas cochés par défaut. Une fois cochés et activés, une actualisation automatique est effectuée ; vous pouvez ajouter d'autres types.",
    "watchTypesInvalid": "L'extension ne peut contenir que des lettres, des chiffres, des points et des tirets (par ex. .abc ou .tar.gz)",
    "watchTypesPlaceholder": "Saisir l'extension, par ex. abc ou fastq.gz",
    "watchTypesRemove": "Supprimer ce type",
    "watchTypesTitle": "Types de fichiers surveillés"
  },
  "primer": {
    "addPrimer": "Ajouter une amorce",
    "alignmentLegend": "| = correspondance   x = mésappariement   - = gap/surplomb",
    "alignmentPrimerForward": "Amorce 5→3",
    "alignmentPrimerReverse": "Amorce 3←5",
    "anchorSection": "Ancrage 3′",
    "anchorSectionHint": "Nombre de bases à l'extrémité 3′ de l'amorce qui doivent correspondre exactement à la matrice ; correspond aussi à la longueur minimale de chaque bloc d'appariement (les appariements contigus plus courts ne forment pas de bloc de liaison).",
    "antisenseStrand": "Brin antisens",
    "bases": "bases",
    "bindingSites": "Sites de liaison",
    "bindingSitesFiltered": "{{count}} sites de liaison candidats trouvés, mais tous filtrés par les conditions de correspondance actuelles (par ex. correspondance de l'extrémité 3′, longueur minimale d'hybridation ou qualité d'alignement).",
    "bindingSitesTmTooLow": "{{count}} sites de liaison candidats trouvés, mais le Tm le plus élevé est de {{tm}}°C, inférieur au seuil minimal de {{minimum}}°C, donc non affichés comme sites de liaison valides.",
    "cancel": "Annuler",
    "degenerateGapExtend": "Pénalité d'extension de gap dégénéré",
    "degenerateMatchScore": "Score d'appariement dégénéré",
    "del": "Délétion :",
    "deletionScore": "Pénalité de délétion de matrice",
    "descPlaceholder": "Description facultative...",
    "description": "Description",
    "editPrimer": "Modifier l'amorce",
    "filterSection": "Filtrage des sites",
    "forward": "Sens (brin sens)",
    "gapOpen": "Pénalité d'ouverture de gap",
    "gapPower": "Exposant de gap",
    "gc": "GC = {{percent}}%",
    "identity": "Identité :",
    "ins": "Insertion :",
    "match": "Correspondance",
    "matchScore": "Score de correspondance",
    "maxSites": "Nombre max de sites par brin",
    "minIdentity": "Identité minimale (%)",
    "minMatches": "Nombre minimal de correspondances",
    "mismatchScore": "Pénalité de mésappariement",
    "mismatches": "Mésappariements :",
    "name": "Nom",
    "namePlaceholder": "Nom de l'amorce",
    "noBindingSites": "Aucun site de liaison candidat trouvé pour cette amorce sur la matrice actuelle.",
    "paramsButton": "Paramètres de liaison",
    "paramsSummary": "Paramètres de liaison",
    "resetDefaults": "Rétablir les valeurs par défaut",
    "revComp": "Complément inverse",
    "revCompTooltip": "Complément inverse",
    "reverse": "Antisens (brin antisens)",
    "save": "Ajouter une amorce",
    "score": "Score :",
    "scoringSection": "Score d'alignement",
    "scoringSectionHint": "Le score détermine où les segments d'appariement contigus sont interrompus en mésappariements/gaps (segments liés vs non liés).",
    "seedLength": "Longueur de la graine 3′",
    "sequence": "Séquence",
    "sequencePlaceholder": "Saisir la séquence de l'amorce (A, T, C, G...)",
    "site": "Site {{index}}",
    "targetContext": "Contexte cible :",
    "template": "Matrice",
    "tm": "Tm = {{temp}}°C",
    "tooShort": "L'amorce doit comporter au moins 9 pb pour rechercher des sites de liaison",
    "unpaired": "Non apparié",
    "unpairedBases": "Bases non appariées",
    "unpairedBoundary": "Limite non appariée",
    "visibleInSequence": "Visible dans la vue de séquence"
  },
  "primerList": {
    "bindingSites": "Sites de liaison",
    "description": "Description",
    "direction": "Direction",
    "export": "Exporter",
    "name": "Nom",
    "noPrimers": "Aucune amorce trouvée",
    "search": "Rechercher une amorce...",
    "sequence": "Séquence",
    "showingCount": "Affichage de {{count}} / {{total}} amorces",
    "tm": "Tm (°C)"
  },
  "protein": {
    "abs01": "Absorbance 0,1 % (1 mg/mL)",
    "algoDesc": {
      "Bjellqvist": "Bjellqvist et al. (1993, 1994). Tient compte de l'influence des résidus voisins sur les pKa des extrémités. Utilisé par ExPASy Compute pI/Mw.",
      "DTASelect": "Tabb et al. Valeurs standard de DTASelect.",
      "Dawson": "Dawson et al. Données de recherche biochimique. Valeurs NH2/COOH issues de Sillero.",
      "EMBOSS": "Valeurs standard EMBOSS iep / ExPASy Compute pI/Mw.",
      "Grimsley": "Grimsley et al. (Pace & Grimsley, 2009). Valeurs de pKa mesurées expérimentalement.",
      "IPC2_peptide": "Kozlowski (2021). Optimisé par ML avec algorithme d'évolution différentielle sur 119 092 peptides. Précision maximale pour les peptides.",
      "IPC2_protein": "Kozlowski (2021). Optimisé par ML avec algorithme d'évolution différentielle sur 2 324 protéines. Précision maximale pour les protéines, recommandé par défaut.",
      "IPC_peptide": "Kozlowski (2016). Optimisé par algorithme de basin hopping sur un jeu de données de peptides. Échelle peptidique IPC 1.0.",
      "IPC_protein": "Kozlowski (2016). Optimisé par algorithme de basin hopping sur un jeu de données de protéines. Échelle protéique IPC 1.0.",
      "Lehninger": "Valeurs du manuel Principes de biochimie de Lehninger.",
      "Nozaki": "Nozaki & Tanford (1971). Valeurs de référence classiques.",
      "Patrickios": "Patrickios et al. Modèle simplifié : seuls K/R/D/E contribuent à la charge (C, Y, H exclus).",
      "ProMoST": "ProMoST. Modèle de pKa sensible à la position : les résidus chargés utilisent des valeurs de pKa différentes en position N-terminale, centrale et C-terminale.",
      "Rodwell": "Rodwell (1982). Attention : K et R partagent le même pKa (11,5).",
      "Sillero": "Sillero et al. (1990). Référence biochimique classique.",
      "Solomon": "Solomon et al. Valeurs du manuel de chimie organique.",
      "Thurlkill": "Thurlkill et al. (2006). Valeurs de pKa mesurées expérimentalement.",
      "Toseland": "Toseland et al. (2010). Optimisé pour le pH intracellulaire et la force ionique physiologique.",
      "Wikipedia": "Valeurs de pKa des acides aminés standard de Wikipédia."
    },
    "algorithm": "Algorithme",
    "aliphaticIndex": "Indice aliphatique",
    "aminoAcidComposition": "Composition en acides aminés",
    "aromatic": "Aromatiques (F+W+Y)",
    "atomicComposition": "Composition atomique",
    "avgResidueWeight": "Masse moyenne des résidus",
    "basicProperties": "Propriétés de base",
    "carbon": "Carbone (C)",
    "extCoeff": "Coefficient d'extinction (M⁻¹cm⁻¹)",
    "extinctionCoefficient": "Coefficient d'extinction et absorbance (280 nm)",
    "formula": "Formule",
    "fullyOxidized": "Entièrement oxydé",
    "fullyReduced": "Entièrement réduit",
    "gravy": "GRAVY",
    "hideAlgorithms": "Masquer tous les algorithmes",
    "hydrogen": "Hydrogène (H)",
    "hydrophobic": "Hydrophobes (A+V+I+L+M+F+W+P)",
    "instabilityIndex": "Indice d'instabilité",
    "molecularWeight": "Masse moléculaire",
    "negCharged": "Résidus chargés négativement (D+E)",
    "netCharge": "Charge nette à différents pH ({{algo}})",
    "nitrogen": "Azote (N)",
    "oxygen": "Oxygène (O)",
    "polarUncharged": "Polaires non chargés (S+T+N+Q)",
    "posCharged": "Résidus chargés positivement (K+R+H)",
    "proteinLength": "Longueur de la protéine",
    "residueSummary": "Résumé des résidus",
    "showAlgorithms": "Afficher tous les algorithmes",
    "sulfur": "Soufre (S)",
    "sulfurContaining": "Résidus soufrés (C+M)",
    "theoreticalPI": "Point isoélectrique théorique (pI)",
    "title": "Propriétés de la protéine — {{name}}",
    "totalAtoms": "Nombre total d'atomes"
  },
  "readingFrame": {
    "description": "Sélectionnez le cadre de lecture et le codon d'initiation pour une traduction à 6 cadres.",
    "frames": "Cadres de lecture",
    "inReadingFrameOf": "Zone d'extension du cadre de lecture de {{name}}",
    "startCodonMode": "Mise en évidence du codon d'initiation",
    "title": "Affichage des cadres de lecture"
  },
  "recovery": {
    "unsavedSession": "Une session non enregistrée d'une fermeture inattendue précédente a été détectée ({{file}}). Restaurer ?"
  },
  "remoteControl": {
    "aiAssistantNotReady": "Assistant IA (MCP doit d'abord être activé)",
    "aiAssistantReady": "MCP démarré, cliquez sur le bouton ci-dessus pour ouvrir l'assistant IA",
    "aiAssistantWillStart": "Cliquez sur le bouton ci-dessus pour démarrer automatiquement MCP et ouvrir l'assistant IA",
    "aiPrompt": "Invite de connexion IA",
    "aiPromptHint": "Collez le contenu ci-dessous dans la configuration MCP de Cursor / Claude Desktop :",
    "apply": "Appliquer",
    "cancel": "Annuler",
    "endpoint": "Point de terminaison",
    "openAiAssistant": "Ouvrir l'assistant IA",
    "password": "Mot de passe de contrôle à distance",
    "port": "Port",
    "runningHint": "En cours d'exécution : les clients IA peuvent se connecter au point de terminaison ci-dessous",
    "statusError": "Erreur",
    "statusRunning": "Démarré",
    "statusStopped": "Arrêté",
    "title": "Contrôle à distance",
    "toggle": "Contrôle à distance"
  },
  "saveNotification": {
    "cancel": "Annuler",
    "closeUnsavedMessage": "La séquence actuelle contient des modifications non enregistrées. Voulez-vous enregistrer avant de fermer ?",
    "closeUnsavedTitle": "Modifications non enregistrées",
    "closeWithoutSaving": "Fermer sans enregistrer",
    "copied": "Copié",
    "copy": "Copier",
    "copyFailed": "Échec de la copie",
    "fileLockedHint": "Le fichier est utilisé par un autre programme et ne peut pas être écrit :\n{{path}}\nVous pouvez fermer le programme qui le bloque puis réessayer, ou enregistrer le fichier sous un nouveau nom.",
    "fileLockedTitle": "Fichier verrouillé",
    "notification": "Notification",
    "ok": "OK",
    "openFile": "Ouvrir un nouveau fichier",
    "openWithConfirmMessage": "Ouvrir avec une autre application fermera le fichier actuel. Voulez-vous continuer ?",
    "openWithConfirmTitle": "Le fichier actuel sera fermé",
    "openWithDirtyMessage": "Le fichier actuel contient des modifications non enregistrées. Veuillez l'enregistrer avant de l'ouvrir avec une autre application.",
    "openWithDirtyTitle": "Fichier modifié",
    "openWithResultCloseWindow": "Fermer cette fenêtre",
    "openWithResultFail": "Une erreur est survenue lors de l'ouverture du fichier avec {{app}}.",
    "openWithResultFailTitle": "Échec de l'ouverture",
    "openWithResultSuccess": "Le fichier a été ouvert avec succès avec {{app}}.",
    "openWithResultSuccessTitle": "Ouvert avec une autre application",
    "ownerSelf": "Une autre fenêtre GenePad",
    "ownerUnknown": "Impossible d'identifier le programme qui l'utilise (le fichier vient peut-être d'être libéré)",
    "retry": "Réessayer",
    "saveAs": "Enregistrer sous…",
    "saveFailed": "Échec de l'enregistrement",
    "saveSuccess": "Enregistrement réussi",
    "savedTo": "Fichier enregistré dans :",
    "savingTitle": "Enregistrement…"
  },
  "search": {
    "dna": "ADN",
    "matchReverse": "Correspondre au brin inverse",
    "matchWrap": "Correspondance au-delà de l'origine",
    "prot": "Protéine",
    "rna": "ARN",
    "searchDna": "Rechercher une séquence d'ADN...",
    "searchProtein": "Rechercher une séquence protéique...",
    "searchRna": "Rechercher une séquence d'ARN..."
  },
  "sequenceProperties": {
    "accession": "Numéro d'accession",
    "addReference": "+ Ajouter une référence",
    "cancel": "Annuler",
    "circular": "Circulaire",
    "comments": "Commentaires",
    "commentsPlaceholder": "Commentaires supplémentaires...",
    "confirm": "Confirmer",
    "createTag": "Ajouter « {{tag}} »",
    "date": "Date",
    "description": "Description",
    "division": "Division",
    "doubleStranded": "Double brin",
    "keywords": "Mots-clés",
    "length": "Longueur",
    "linear": "Linéaire",
    "moleculeType": "Type de molécule",
    "name": "Nom",
    "noReferences": "Aucune référence",
    "organism": "Organisme",
    "plasmidTags": "Étiquettes de plasmide",
    "refAuthors": "Auteurs",
    "refJournal": "Revue",
    "refPubmed": "ID PubMed",
    "refTitle": "Titre",
    "references": "Références",
    "removeTag": "Supprimer l'étiquette",
    "singleStranded": "Simple brin",
    "source": "Source",
    "strandType": "Type de brin",
    "tabBasic": "Informations de base",
    "tabComment": "Commentaires",
    "tabSource": "Source et références",
    "tagsPlaceholder": "Saisissez une étiquette et appuyez sur Entrée, ou sélectionnez une étiquette existante dans la liste déroulante",
    "tagsRequireFile": "Veuillez d'abord ouvrir ou enregistrer un fichier pour utiliser les étiquettes de plasmide",
    "title": "Propriétés de la séquence",
    "topology": "Topologie",
    "updateTagsWithAi": "Mise à jour IA",
    "updatingTags": "Mise à jour...",
    "version": "Version"
  },
  "sequenceTooltip": {
    "range": "Plage",
    "segment": "Segment",
    "segmentAt": "Position",
    "segmentN": "Segment {{n}}",
    "segments": "Segments",
    "strand": "Brin",
    "strandForward": "Sens direct",
    "strandNone": "Aucun",
    "strandReverse": "Sens inverse",
    "type": "Type"
  },
  "settings": {
    "about": "À propos du programme",
    "aboutIntro": "GenePad est un outil de visualisation et d'édition de séquences d'ADN destiné à la recherche en biologie moléculaire.",
    "aboutPrivacy": "Politique de confidentialité",
    "aboutPrivacyBody": "Ce logiciel collecte par défaut des statistiques d'utilisation anonymes : un identifiant d'installation généré aléatoirement lors du premier lancement (sans lien avec le matériel, le compte ou toute information personnelle), la durée d'utilisation cumulée, la version du programme ainsi que le type de plateforme/système d'exploitation.\n\nLes statistiques sont transmises tous les 7 jours via HTTPS au serveur officiel de GenePad (genepad.pages.dev), uniquement pour compter le nombre d'utilisateurs et la durée d'utilisation, afin de guider l'amélioration du produit.\n\nNous ne collectons, ne stockons ni ne transmettons vos données de séquences, le contenu de vos fichiers ou toute information permettant d'identifier une personne ; les statistiques ne peuvent pas être utilisées pour identifier ou associer un utilisateur spécifique.\n\nVous pouvez à tout moment désactiver les statistiques anonymes via l'interrupteur en bas de cette page ; une fois désactivées, la collecte et la transmission cessent immédiatement.",
    "aboutStats": "Statistiques",
    "aboutTerms": "Conditions d'utilisation",
    "aboutTermsBody": "Ce logiciel (GenePad) est fourni « en l'état », uniquement pour la recherche en biologie moléculaire et l'aide à l'enseignement ; il ne constitue en aucun cas un avis médical, un diagnostic clinique ou une recommandation thérapeutique. Tous les résultats d'analyse basés sur ce logiciel (y compris, sans s'y limiter, l'analyse de séquences, l'analyse d'enzymes de restriction, la conception d'amorces et de CRISPR, le traitement de fichiers FASTQ, etc.) doivent être vérifiés indépendamment avant toute expérience.\n\nCe logiciel est régi par la « Licence d'utilisation non commerciale GenePad » (fournie avec le logiciel) : l'utilisation non commerciale telle que la recherche personnelle, l'enseignement et les institutions de recherche est gratuite ; toute utilisation commerciale nécessite l'obtention préalable d'une licence commerciale distincte. Lors de la redistribution, vous devez conserver l'attribution d'origine, indiquer les modifications et joindre une copie de la licence.\n\nDans toute la mesure permise par la loi applicable, ce logiciel ne fournit aucune garantie expresse ou implicite, y compris, sans s'y limiter, les garanties de qualité marchande, d'adéquation à un usage particulier, d'exactitude et d'absence de contrefaçon ; les auteurs et contributeurs ne sauraient être tenus responsables de tout dommage direct, indirect, accessoire ou consécutif résultant de l'utilisation ou de l'impossibilité d'utiliser ce logiciel.\n\nVous devez utiliser ce logiciel conformément aux lois et règlements de votre pays/région ainsi qu'aux règles de votre institution (y compris les exigences de biosécurité) ; vous êtes seul responsable du contenu des données que vous traitez et de leur légalité ; les droits sur les contenus tiers tels que les données de séquences et les données d'enzymes de restriction appartiennent à leurs propriétaires respectifs.",
    "aiApi": "Paramètres IA",
    "aiTranslate": "Traduction IA",
    "aiTranslateCancel": "Annuler",
    "aiTranslateChunkRetry": "La traduction du segment {{index}} a échoué, nouvelle tentative automatique (tentative {{attempt}}) : {{reason}}",
    "aiTranslateChunkSeparator": "Segment {{index}}/{{total}}",
    "aiTranslateCodeConflict": "Ce code de langue existe déjà ou entre en conflit avec les langues intégrées (en/zh).",
    "aiTranslateConfirm": "Démarrer la traduction",
    "aiTranslateDescription": "Utilisez l'IA configurée pour traduire le fichier de langue chinois intégré vers la langue cible ; une fois la traduction terminée, elle est automatiquement importée et appliquée. Les textes longs sont traduits par segments, et les segments en échec sont automatiquement réessayés, sans devoir tout recommencer.",
    "aiTranslateGarbledDetected": "Certains segments contiennent encore des caractères erronés après les nouvelles tentatives automatiques ; les résultats actuels ont été conservés. Il est recommandé d'exporter le fichier de langue et de le corriger manuellement.",
    "aiTranslateInvalidJson": "L'IA n'a pas renvoyé de JSON valide, veuillez réessayer ou changer de modèle.",
    "aiTranslateLangCode": "Code de langue",
    "aiTranslateLangCodeHint": "Utilisé comme identifiant de fichier (ex. ja, ko, fr), ne doit pas entrer en conflit avec les codes existants en/zh.",
    "aiTranslateLangCodePlaceholder": "Exemple : ja",
    "aiTranslateLangName": "Nom de la langue",
    "aiTranslateLangNamePlaceholder": "Exemple : japonais / Japanese",
    "aiTranslateMissingFields": "Veuillez remplir à la fois le nom de la langue et le code de langue.",
    "aiTranslateNotConfigured": "Aucun modèle IA configuré, veuillez d'abord le configurer dans l'onglet « Paramètres IA ».",
    "aiTranslateOutputLabel": "Contenu de sortie",
    "aiTranslatePartialKept": "Les résultats des segments déjà terminés ont été conservés ; cliquez sur « Retraduire » pour reprendre à partir de l'échec.",
    "aiTranslateProgressLabel": "{{done}}/{{total}} segments terminés",
    "aiTranslateRetry": "Retraduire",
    "aiTranslateStop": "Arrêter la traduction",
    "aiTranslateStopped": "La traduction a été arrêtée, vous pouvez cliquer sur « Retraduire » pour réessayer.",
    "aiTranslateThinking": "Activer la réflexion (plus lent, peut améliorer la qualité)",
    "aiTranslateThinkingLabel": "Processus de réflexion",
    "aiTranslateTitle": "Traduction IA du fichier de langue",
    "aiTranslateTranslating": "Traduction en cours, veuillez patienter...",
    "allAssociated": "Tous les types de fichiers sont définis comme ouverture par défaut. Double-cliquez pour ouvrir avec GenePad.",
    "appearance": "Apparence",
    "checkingStatus": "Vérification de l'état des associations...",
    "colorScheme": "Thème de couleurs",
    "colorSchemeBeige": "Brun",
    "colorSchemeBlue": "Bleu",
    "colorSchemeDescription": "Choisissez votre thème de couleurs préféré",
    "colorSchemePink": "Rose",
    "colorSchemeSlate": "Gris foncé",
    "currentMode": "Mode actuel",
    "default": "Par défaut",
    "description": "Configurer les préférences de l'application",
    "exportLanguage": "Exporter le fichier de langue",
    "fileAssociations": "Associations de fichiers",
    "fileType": "Type de fichier",
    "fileTypeAutoRegistered": "Enregistré automatiquement : les types de fichiers pris en charge disposent de « Ouvrir avec GenePad » dans le menu contextuel. Pour définir GenePad comme ouverture par défaut au double-clic, modifiez les paramètres du système.",
    "fileTypeDescription": "Sélectionnez les types de fichiers à ouvrir par défaut avec GenePad (le menu contextuel « Ouvrir avec GenePad » est automatiquement enregistré à chaque lancement)",
    "fileTypeRegistration": "Enregistrement des types de fichiers",
    "importBuiltInConflict": "« en » et « zh » sont des langues intégrées et ne peuvent pas être écrasées. Veuillez renommer le fichier (par ex. « zh-CN.json ») avant de l'importer.",
    "importError": "Format de fichier de langue invalide",
    "importLanguage": "Importer un fichier de langue",
    "language": "Langue",
    "languageAuto": "Automatique (suivre le système)",
    "languageDescription": "Choisissez la langue de l'application. Vous pouvez également importer des packs de langues personnalisés.",
    "languageExportHint": "Après avoir exporté la configuration linguistique actuelle, vous pouvez modifier vous-même le fichier de traduction avec l'IA pour adapter davantage de langues.",
    "multiWindow": "Multi-fenêtres",
    "nextLaunchMode": "Mode au prochain lancement",
    "nextLaunchTab": "Prochain lancement : mode onglets",
    "nextLaunchWindow": "Prochain lancement : mode multi-fenêtres",
    "noCustomLanguages": "Aucune langue personnalisée importée",
    "noneAssociated": "Aucun type de fichier n'est associé. Veuillez sélectionner et enregistrer ci-dessous.",
    "notAvailable": "Cette fonctionnalité n'est disponible que dans l'application de bureau",
    "of": "/",
    "onboardingTourComplete": "Tout est affiché",
    "onboardingTourDescription": "Bulles d'aide affichées une fois lors de la première ouverture d'un fichier de séquence, complétées par vue. Après réinitialisation, elles seront à nouveau affichées à la prochaine ouverture d'un fichier de séquence.",
    "onboardingTourPartAlignmentSplit": "Bouton de défilement du panneau d'alignement",
    "onboardingTourPartAlways": "Interface générale",
    "onboardingTourPartCds": "Barre d'annotation CDS",
    "onboardingTourPartLibrary": "Bibliothèque de fichiers géniques",
    "onboardingTourPartLibraryRow": "Menu contextuel des fichiers de la bibliothèque",
    "onboardingTourPartMap": "Vue cartographique",
    "onboardingTourPartProperties": "Panneau de propriétés",
    "onboardingTourPartSequence": "Vue de séquence",
    "onboardingTourPending": "À afficher",
    "onboardingTourProgress": "{{shown}}/{{total}} segments affichés",
    "onboardingTourReset": "Réinitialiser le tutoriel",
    "onboardingTourResetDone": "Réinitialisé",
    "onboardingTourTitle": "Tutoriel",
    "quickTools": "Outils rapides",
    "quickToolsAdd": "Ajouter à la barre supérieure",
    "quickToolsApply": "Appliquer",
    "quickToolsDescription": "Organisez les outils à ouvrir en un clic depuis la barre supérieure. La boîte à outils reste toujours visible, aucune configuration nécessaire ici.",
    "quickToolsEmpty": "Aucun outil affiché",
    "quickToolsHidden": "Non affiché",
    "quickToolsHiddenHint": "Disponible uniquement dans la boîte à outils.",
    "quickToolsMoveDown": "Descendre",
    "quickToolsMoveUp": "Monter",
    "quickToolsRemove": "Retirer de la barre supérieure",
    "quickToolsReset": "Réinitialiser",
    "quickToolsShown": "Affiché",
    "quickToolsShownHint": "Affiché dans la barre supérieure, cliquez pour ouvrir.",
    "register": "Enregistrer",
    "registering": "Enregistrement...",
    "removeLanguage": "Supprimer",
    "reregister": "Réenregistrer",
    "selectLanguage": "Choisir la langue",
    "selected": "Sélectionné",
    "shortcutActionAddFeature": "Ajouter une annotation",
    "shortcutActionAddPrimer": "Ajouter une amorce",
    "shortcutActionCopy": "Copier",
    "shortcutActionCut": "Couper",
    "shortcutActionDeleteSelection": "Supprimer la sélection",
    "shortcutActionFind": "Rechercher",
    "shortcutActionPaste": "Coller",
    "shortcutActionSelectAll": "Tout sélectionner",
    "shortcutConflict": "{{combo}} est déjà utilisé par « {{action}} »",
    "shortcutRecording": "Appuyez sur une nouvelle combinaison de touches…",
    "shortcutResetAction": "Rétablir par défaut",
    "shortcuts": "Raccourcis clavier",
    "shortcutsDescription": "Personnalisez les raccourcis clavier de la vue de séquence. Cliquez sur une combinaison puis appuyez sur les nouvelles touches pour la modifier ; appuyez sur Échap pour annuler l'enregistrement. Les raccourcis nécessitent qu'une séquence soit sélectionnée pour fonctionner.",
    "shortcutsResetAll": "Tout rétablir par défaut",
    "tabMode": "Onglets",
    "teamCertMismatchDescription": "Connexion interrompue : le certificat présenté par le serveur ne correspond pas à l'empreinte enregistrée lors de la première connexion. Cela peut être dû à une réinstallation ou un changement de certificat du serveur, ou à une attaque de type « homme du milieu » sur le réseau.",
    "teamCertMismatchHint": "Si vous pouvez confirmer en personne (ou par un canal fiable) que le serveur a bien été réinstallé ou que son certificat a changé, et que les deux empreintes ci-dessous correspondent à celles affichées par l'administrateur du serveur, vous pouvez faire confiance à la nouvelle empreinte ; sinon, ne faites pas confiance et contactez l'administrateur du serveur.",
    "teamCertMismatchTitle": "L'empreinte du certificat du serveur a changé",
    "teamCertObserved": "Empreinte observée cette fois",
    "teamCertRecorded": "Empreinte enregistrée",
    "teamCertTrust": "Faire confiance à la nouvelle empreinte et se reconnecter",
    "teamCertTrusted": "Nouvelle empreinte de certificat approuvée et reconnexion effectuée",
    "teamServer": "Serveur d'équipe",
    "teamServerAccount": "Compte",
    "teamServerAccountHint": "Le compte est créé par l'administrateur de l'équipe côté serveur ; un même compte peut être connecté simultanément sur plusieurs appareils.",
    "teamServerAuthExpired": "La connexion à l'équipe a expiré, veuillez vous reconnecter.",
    "teamServerAutoSync": "Synchronisation automatique vers l'espace personnel",
    "teamServerAutoSyncDescription": "Une fois activée, synchronise automatiquement en arrière-plan la bibliothèque personnelle de fichiers génétiques avec le serveur d'équipe (environ toutes les 5 minutes) ; en cas d'erreur ou de conflit, une fenêtre « Messages d'équipe » s'affiche pour vous alerter, sans avoir à cliquer manuellement sur synchroniser.",
    "teamServerAutoSyncNoticeOff": "Synchronisation automatique désactivée. Vous pouvez toujours synchroniser manuellement depuis l'outil de gestion des fichiers génétiques.",
    "teamServerAutoSyncNoticeOn": "Synchronisation automatique activée : l'espace personnel sera synchronisé silencieusement en arrière-plan (environ toutes les 5 minutes), et une fenêtre « Messages d'équipe » vous alertera en cas d'erreur ou de conflit.",
    "teamServerCurrentTeam": "Actuel",
    "teamServerDownloadDirChange": "Modifier",
    "teamServerDownloadDirDescription": "Les fichiers téléchargés/synchronisés depuis l'équipe (absents en local) sont enregistrés ici.",
    "teamServerDownloadDirReset": "Rétablir par défaut",
    "teamServerDownloadDirTitle": "Emplacement de sauvegarde des fichiers d'équipe",
    "teamServerEnable": "Activer les fonctionnalités d'équipe",
    "teamServerEnableDescription": "Désactivé par défaut. Une fois activé, vous pouvez rejoindre un serveur d'équipe sur le réseau local et utiliser les dossiers partagés d'équipe, la demande de fichiers entre membres et la synchronisation de l'espace personnel.",
    "teamServerJoin": "Rejoindre",
    "teamServerJoinTitle": "Détecter et rejoindre une équipe",
    "teamServerLoginAction": "Se connecter",
    "teamServerLoginConfirm": "Se connecter",
    "teamServerLoginFirst": "Cette équipe ne s'est jamais connectée sur cet appareil",
    "teamServerLoginTo": "Se connecter à {{name}} ({{addr}})",
    "teamServerLogout": "Se déconnecter",
    "teamServerManualPlaceholder": "Saisir l'adresse manuellement (ex. 192.168.1.5 ou http://lab.local:4514)",
    "teamServerNeedRelogin": "Cette équipe nécessite une reconnexion avant de pouvoir basculer",
    "teamServerNoCredentials": "Connexion requise",
    "teamServerOffline": "Hors ligne",
    "teamServerOnline": "En ligne",
    "teamServerOpenWeb": "Ouvrir l'interface web",
    "teamServerOpenWebDescription": "Ouvrir l'interface web du serveur dans le navigateur système (contenu personnel, approbation de groupe et fonctions d'administration)",
    "teamServerPassword": "Mot de passe",
    "teamServerSavedTeams": "Équipes enregistrées (cliquez pour basculer)",
    "teamServerScan": "Détecter les serveurs d'équipe",
    "teamServerScanEmpty": "Aucun serveur d'équipe détecté. Vous pouvez saisir manuellement l'adresse et réessayer, ou demander à l'administrateur de vérifier que le serveur est démarré.",
    "teamServerShareLibrary": "Partager ma liste de fichiers génétiques avec l'équipe",
    "teamServerShareLibraryDescription": "Non partagé par défaut. Une fois activé, les membres de l'équipe peuvent parcourir vos noms de fichiers et vos étiquettes ; le contenu des fichiers n'est pas téléchargeable et doit être demandé via le processus de demande.",
    "teamServerSharingNotice": "Partage activé. La liste des fichiers sera téléversée de manière incrémentielle vers le serveur d'équipe en arrière-plan.",
    "teamServerSourceDiscovered": "Découverte automatique",
    "teamServerSourceProbed": "Détection d'adresse",
    "teamServerSwitch": "Changer d'équipe",
    "teamServerSwitchAction": "Changer",
    "teamServerSwitchHint": "Utiliser le compte mémorisé pour changer directement",
    "teamServerSwitched": "Changé pour {{name}}",
    "teamServerSyncConflictHint": "Des conflits sont à traiter, choisissez chaque entrée dans la boîte de dialogue des résultats de synchronisation de la bibliothèque de fichiers géniques.",
    "teamServerSyncNow": "Synchroniser maintenant",
    "teamServerSyncPrivate": "L'espace personnel n'est accessible qu'avec le compte auquel vous êtes actuellement connecté, les autres membres ne le voient pas.",
    "teamServerSyncSummary": "Nouveaux {{created}} · Mis à jour {{updated}} · Téléchargés {{downloaded}} · Conflits {{conflicts}}",
    "teamServerSyncTitle": "Synchronisation de l'espace personnel d'équipe",
    "teamServerSyncing": "Synchronisation…",
    "teamServerUnsharedNotice": "Partage arrêté, la liste des fichiers sur le serveur sera supprimée en arrière-plan.",
    "teamServerUsername": "Nom d'utilisateur",
    "telemetryDescription": "Tous les 7 jours, un identifiant d'installation aléatoire, la durée d'utilisation cumulée, la version et les informations de plateforme sont envoyés au serveur GenePad, uniquement pour compter le nombre d'utilisateurs et la durée d'utilisation. Aucune séquence, fichier ou information personnelle n'est collecté, et la fonction peut être désactivée à tout moment.",
    "telemetryTitle": "Statistiques d'utilisation anonymes",
    "theme": "Thème",
    "themeDescription": "Choisir clair, sombre ou suivre le thème du système",
    "title": "Paramètres",
    "unregister": "Annuler l'enregistrement",
    "unregistering": "Annulation...",
    "updateCheckFrequency": "Fréquence de vérification",
    "updateCheckFrequencyDescription": "Contrôle l'intervalle de vérification automatique des mises à jour en arrière-plan.",
    "updateDescription": "Vérifier si de nouvelles versions de GenePad sont disponibles.",
    "updateFrequencyDay": "Chaque jour",
    "updateFrequencyHalfYear": "Chaque semestre",
    "updateFrequencyMonth": "Chaque mois",
    "updateFrequencyWeek": "Chaque semaine",
    "updateFrequencyYear": "Chaque année",
    "updates": "Mises à jour",
    "windowMode": "Mode fenêtre",
    "windowModeDescription": "Choisir le mode multi-fenêtres ou onglets, effectif après redémarrage"
  },
  "sidebar": {
    "addEnzymeToList": "Ajouter l'enzyme à la liste",
    "alignmentDesc": "Aligner la séquence avec une séquence de référence",
    "enzymeSettings": "Paramètres des sites de restriction",
    "enzymesDesc": "Pool d'enzymes/schéma de filtrage, ajout d'enzymes à la liste et à la carte, commutateur d'affichage des sites de restriction sur la séquence",
    "hideAlignment": "Masquer l'alignement",
    "hideAllEnzymes": "Tout masquer",
    "hideHistory": "Masquer l'historique",
    "hideMap": "Masquer la carte",
    "hideProperties": "Masquer les propriétés",
    "hideSequence": "Masquer la séquence",
    "historyDesc": "Voir les versions de construction enregistrées précédemment",
    "mapDesc": "Changer ou masquer la carte circulaire du plasmide",
    "mapEnzymeSites": "Sites de restriction de la carte",
    "mapEnzymesStateHidden": "Zone carte : actuellement non affichée",
    "mapEnzymesStateShown": "Zone carte : actuellement affichée",
    "mapSeqExclusive": "Carte et séquence exclusives",
    "mapSeqExclusiveDesc": "N'afficher qu'une seule vue à la fois ; cliquer pour passer à l'écran partagé et ouvrir automatiquement l'autre vue",
    "mapSeqLinked": "Carte et séquence sur le même écran",
    "mapSeqLinkedDesc": "Afficher les deux vues à la fois ; cliquer pour passer en mode exclusif (conserver la carte, fermer la séquence)",
    "orfDesc": "Prédire les cadres de lecture ouverts dans la séquence",
    "orfPrediction": "Prédiction des ORF",
    "propertiesDesc": "Voir et modifier les métadonnées de la séquence",
    "readingFrame": "Cadre de lecture",
    "readingFrameDesc": "Afficher la traduction des 6 cadres de la séquence",
    "sequenceAlignment": "Alignement de séquences",
    "sequenceDesc": "Changer ou masquer le visualiseur de séquence linéaire",
    "sequenceEnzymeSites": "Sites de restriction de la séquence",
    "sequenceEnzymesStateHidden": "Zone séquence : actuellement non affichée",
    "sequenceEnzymesStateShown": "Zone séquence : actuellement affichée",
    "settingsDesc": "Configurer les préférences de l'application",
    "showAllEnzymes": "Tout afficher",
    "showHistory": "Afficher l'historique",
    "showMap": "Afficher la carte",
    "showProperties": "Afficher les propriétés",
    "showSequence": "Afficher la séquence"
  },
  "strandDialog": {
    "bottomStrand": "Utiliser le brin inférieur (5′→3′)",
    "cancel": "Annuler",
    "description": "Quel brin utiliser comme séquence d'amorce ?",
    "title": "Choisir le brin",
    "topStrand": "Utiliser le brin supérieur (5′→3′)"
  },
  "teamDeliver": {
    "confirm": "Livrer {{count}} fichiers",
    "done": "Livré à {{name}}",
    "hint": "Choisir un membre et livrer les {{count}} fichiers enregistrés dans sa boîte de réception.",
    "noMembers": "Aucun membre à qui livrer",
    "searchPlaceholder": "Rechercher un membre",
    "title": "Livrer à un membre spécifié"
  },
  "teamInbox": {
    "authExpiredDescription": "Le serveur a défini une durée de validité de connexion, le jeton actuel a expiré. Veuillez vous reconnecter ci-dessous pour rétablir les fonctionnalités d'équipe.",
    "authExpiredTitle": "Jeton de connexion expiré",
    "clearAll": "Tout effacer",
    "downloadedHint": "Le fichier a été téléchargé et ajouté à la « Non classé » de la bibliothèque de fichiers géniques. Vous pouvez ouvrir l'outil de gestion des fichiers géniques pour le consulter.",
    "downloadedTitle": "Téléchargé · En attente de consultation",
    "loginDescription": "Saisissez votre identifiant et mot de passe pour vous connecter au serveur d'équipe (le compte est créé par l'administrateur côté serveur).",
    "loginTitle": "Connexion à l'équipe",
    "markAllRead": "Tout marquer comme lu",
    "noNotifications": "Aucune notification.",
    "notConnected": "Non connecté au serveur d'équipe",
    "notificationsTitle": "Notifications",
    "notifyAnnounce": "Annonce d'équipe",
    "notifyCancelled": "Demande annulée",
    "notifyDeclined": "Demande refusée",
    "notifyFulfilled": "Livraison de fichier reçue",
    "notifyRequestNew": "Demande de fichier reçue",
    "notifyTransferNew": "Envoi d'un membre reçu",
    "pendingRequests": "Demandes reçues",
    "relogin": "Se reconnecter",
    "reloginDone": "Reconnecté à l'équipe",
    "requireLogin": "Connectez-vous à l'équipe pour consulter.",
    "revealInDir": "Dossier contenant",
    "syncIssueTitle": "Problème de synchronisation automatique",
    "title": "Messages d'équipe"
  },
  "teamSync": {
    "keepBoth": "Conserver les deux",
    "keepMine": "Utiliser ma version",
    "takeServer": "Utiliser la version du serveur"
  },
  "themetoggle": {
    "dark": "Mode sombre",
    "light": "Mode clair",
    "system": "Suivre le système"
  },
  "toolbar": {
    "addFeature": "Ajouter une annotation",
    "addFeatureAutoSelection": "Annoter automatiquement la séquence sélectionnée",
    "addFeatureAutoWhole": "Annoter automatiquement toute la séquence",
    "addFeatureManual": "Ajouter une annotation",
    "addPrimer": "Ajouter une amorce",
    "antisense35": "Brin antisens 3′→5′",
    "antisense53": "Brin antisens 5′→3′",
    "checkUpdate": "Vérifier les mises à jour",
    "copy": "Copier",
    "copyAntisense": "Copier le brin antisens",
    "copySense": "Copier le brin sens",
    "copySequence": "Copier la séquence",
    "cut": "Couper",
    "delete": "Supprimer",
    "deliverToMember": "Livrer à un membre spécifié",
    "deliverToPublic": "Livrer à la bibliothèque publique",
    "fileAssociation": "Association de fichiers",
    "groupOther": "Autre",
    "groupRecommended": "Recommandé",
    "new": "Nouveau",
    "noRecentFiles": "Aucun fichier récent",
    "open": "Ouvrir",
    "openOtherFile": "Ouvrir un autre fichier...",
    "openWith": "Ouvrir avec",
    "openWithBrowse": "Choisir une autre application…",
    "openWithDefault": "Ouvrir dans le dossier",
    "openWithLoading": "Chargement…",
    "openWithNoFile": "Veuillez d'abord enregistrer le fichier avant de l'ouvrir",
    "openWithOther": "Autres modes d'ouverture",
    "paste": "Coller",
    "properties": "Propriétés",
    "recentlyOpened": "Récemment ouverts",
    "redo": "Rétablir",
    "save": "Enregistrer",
    "saveAs": "Enregistrer sous",
    "saveAsDnaConvert": "SnapGene DNA (.dna, conversion U→T)",
    "saveAsFasta": "Fichier FASTA (.fasta)",
    "saveAsGen": "Fichier GenePad (.gen)",
    "saveAsGenbank": "Fichier GenBank (.gb)",
    "saveAsGjson": "Fichier GJSON (.gjson)",
    "saveAsRnaConvert": "SnapGene RNA (.rna, conversion T→U)",
    "saveAsSnapgene": "Fichier SnapGene (.dna)",
    "saveAsSnapgeneProt": "Fichier SnapGene protéine (.prot)",
    "saveAsSnapgeneRna": "Fichier SnapGene RNA (.rna)",
    "sectionAnnotate": "Annotation",
    "sectionEdit": "Édition",
    "sectionFile": "Fichier",
    "selectAll": "Tout sélectionner",
    "sense35": "Brin sens 3′→5′",
    "sense53": "Brin sens 5′→3′",
    "shareDirtyMessage": "Le partage utilisera la version enregistrée sur le disque (sans les modifications non enregistrées). Pour partager le contenu le plus récent, veuillez annuler et enregistrer le fichier, puis partager à nouveau.",
    "shareDirtyTitle": "Le fichier contient des modifications non enregistrées",
    "shareFailed": "Échec du partage : {{message}}",
    "shareSavedVersion": "Partager la version enregistrée",
    "shareToApps": "Partager via d'autres applications",
    "shareUnsavedMessage": "Ce fichier n'a pas encore été enregistré sur le disque. Veuillez d'abord l'enregistrer avant de le partager.",
    "shareUnsavedTitle": "Fichier non enregistré",
    "teamDeliverFailed": "Échec de livraison de {{count}} fichier(s)",
    "teamDeliverPublicDone": "{{count}} fichier(s) livré(s) à la bibliothèque publique",
    "teamMenuHint": "Livrer au serveur d'équipe",
    "tooltipAddFeature": "Ajouter une annotation à la région sélectionnée",
    "tooltipAddPrimer": "Ajouter une amorce",
    "tooltipCut": "Couper",
    "tooltipDelete": "Supprimer",
    "tooltipFileAssoc": "Association de format de fichier",
    "tooltipOpenWith": "Choisir le mode d'ouverture",
    "tooltipPaste": "Coller",
    "tooltipProperties": "Afficher et modifier les propriétés de la séquence",
    "tooltipSelectAll": "Tout sélectionner (Ctrl+A)",
    "tooltipShare": "Partager le fichier",
    "tooltipTutorial": "Ouvrir le tutoriel NGS dans le navigateur (genepad.cn/ngs)",
    "tutorial": "Tutoriel",
    "undo": "Annuler",
    "updateAvailable": "Une nouvelle version est disponible"
  },
  "tools": {
    "aiAssistant": "Assistant IA",
    "aminoAcidTable": "Table des acides aminés",
    "categories": {
      "experiment": "Expérimentation et analyse",
      "sequence": "Séquence et traduction",
      "smart": "Outils intelligents"
    },
    "codonOptimization": "Optimisation des codons",
    "codonTable": "Table des codons",
    "electrophoresis": "Simulation d'électrophorèse",
    "enzymeLibrary": "Bibliothèque d'enzymes de restriction",
    "molecularCloning": "Simulation de clonage moléculaire",
    "plasmidLibrary": "Bibliothèque de fichiers géniques",
    "toolbox": "Boîte à outils"
  },
  "tour": {
    "addFeatureBody": "Ajoutez ici des annotations à la séquence : sélectionnez d'abord une plage de bases dans la vue de séquence, puis choisissez « Ajouter une annotation » ; ou utilisez « Détection automatique des éléments courants », le programme identifiera automatiquement le squelette du vecteur, le promoteur, le gène de résistance et autres éléments courants.",
    "addFeatureTitle": "Ajouter une annotation",
    "aiAssistantBody": "L'assistant IA peut vous aider à rechercher dans les bases de données de plasmides, consulter et modifier des séquences, ajouter des annotations, concevoir des amorces, etc. ; configurez d'abord la clé API et sélectionnez un modèle dans Paramètres → Assistant IA pour l'utiliser.",
    "aiAssistantTitle": "Assistant IA",
    "alignmentBody": "Cliquez ici pour ouvrir le panneau d'alignement de séquences à droite, alignez et comparez d'autres séquences avec la séquence actuelle, visualisez les différences et les régions identiques ; cliquez à nouveau pour le replier.",
    "alignmentTitle": "Alignement de séquences",
    "cdsBody": "Il s'agit d'une annotation de région codante CDS. Faites un clic droit sur la barre d'annotations de la vue de séquence pour modifier, supprimer, consulter les propriétés de la protéine, effectuer une optimisation des codons, etc. ; double-cliquez pour ouvrir directement la fenêtre d'édition.",
    "cdsTitle": "Menu contextuel d'annotation",
    "dividerBody": "Faites glisser cette barre de séparation entre la carte et la vue de séquence pour ajuster librement la proportion d'affichage des deux ; en faisant glisser la barre jusqu'au bord, la vue correspondante se replie, rouvrez-la depuis la barre d'outils de gauche si nécessaire.",
    "dividerTitle": "Ajuster la proportion des vues",
    "done": "Commencer",
    "enzymeSettingsBody": "Gérez ici les sites de restriction : les deux listes déroulantes « Pool d'enzymes actuel / Schéma de filtrage » déterminent l'ensemble des enzymes affichées (synchronisé avec la barre d'outils en bas de la carte), les boutons ci-dessous activent ou désactivent les sites de restriction dans la carte et la vue de séquence, et vous pouvez également ouvrir la bibliothèque d'enzymes ici.",
    "enzymeSettingsTitle": "Paramètres des sites de restriction",
    "enzymesBody": "Cliquez sur le bouton en forme de ciseaux pour afficher les sites de restriction sur la carte. Les listes déroulantes « Pool d'enzymes actuel / Schéma de filtrage » permettent de filtrer l'ensemble des enzymes utilisées par groupe fonctionnel ; la liste des enzymes de restriction peut être triée par prix par réaction, pour vous aider à choisir des enzymes économiques.",
    "enzymesTitle": "Enzymes de restriction et pools d'enzymes",
    "later": "Plus tard",
    "libAiRefreshBody": "Ce bouton à côté de l'en-tête de la liste « Tags » permet de générer des tags par IA pour les fichiers de la bibliothèque : choisissez « Rafraîchir uniquement ceux sans tag » ou « Tout régénérer » ; la tâche s'exécute en arrière-plan et la liste se met à jour automatiquement une fois terminée. Configurez d'abord le modèle dans « Paramètres IA » avant utilisation.",
    "libAiRefreshTitle": "Rafraîchissement des tags par IA",
    "libInfoBody": "Le panneau de droite regroupe le nom, le chemin, les tags et le projet du fichier sélectionné : les tags peuvent être ajoutés ou supprimés directement, ou cliquez sur « Générer les tags par IA » pour réécrire les tags du fichier actuel.",
    "libInfoTitle": "Détails du fichier",
    "libListBody": "La liste centrale répertorie chaque fichier génétique que vous avez ouvert, les fichiers découverts dans les dossiers surveillés sont également ajoutés automatiquement. Double-cliquez sur une ligne pour ouvrir le fichier, cochez la case en début de ligne pour des opérations par lot.",
    "libListTitle": "Liste des fichiers génétiques",
    "libPathsBody": "Basculez vers l'onglet « Chemin d'origine », les fichiers sont organisés selon l'arborescence réelle sur le disque : cliquez sur un dossier, la liste centrale n'affiche que les fichiers de ce répertoire ; cliquez sur le nœud racine « Tous les fichiers » pour tout réafficher.",
    "libPathsTitle": "Classer par chemin d'origine",
    "libProjectsBody": "La « Gestion des fichiers » à gauche classe par défaut par projet : cliquez sur « Nouveau projet » pour créer votre propre projet, faites glisser les fichiers de la liste centrale sur un dossier de projet pour les classer ; « Non classés » regroupe les fichiers sans projet. Cliquez sur un projet, la liste centrale n'affiche que ses fichiers.",
    "libProjectsTitle": "Classer par projet",
    "libRowBody": "Le premier fichier de la liste a été sélectionné pour vous. Faites un clic droit sur une ligne de fichier pour l'ouvrir, l'ouvrir avec une autre application, ouvrir son dossier, le partager via une autre application, le déposer dans la bibliothèque publique ou l'envoyer à un membre spécifique après connexion à l'équipe, ou le retirer de la bibliothèque ; double-cliquez sur la ligne pour ouvrir directement le fichier.",
    "libRowTitle": "Menu contextuel de fichier",
    "libScanBody": "Cliquez sur « Scanner un dossier » pour choisir un dossier, les fichiers génétiques qu'il contient (y compris les sous-dossiers) seront ajoutés en une seule fois ; c'est l'étape la plus pratique pour importer des fichiers existants sur le disque dans la bibliothèque pour la première fois.",
    "libScanTitle": "Scanner un dossier",
    "libSearchBody": "Saisissez un nom, un chemin ou un mot-clé de tag dans la zone de recherche (séparez plusieurs mots par des espaces), la liste se filtre instantanément ; effacez les mots-clés pour tout réafficher, ou utilisez le nuage de tags à droite pour affiner davantage.",
    "libSearchTitle": "Recherche",
    "libTagsBody": "Le nuage de tags regroupe tous les tags de la portée actuelle, la taille de police augmente avec la fréquence d'utilisation ; cliquez sur un tag pour filtrer les fichiers, cliquez à nouveau pour annuler. Lorsque plusieurs tags sont sélectionnés, cochez « Satisfaire tous » pour exiger que les fichiers possèdent tous les tags.",
    "libTagsTitle": "Nuage de tags",
    "libTeamBody": "Après connexion au serveur d'équipe, cliquez ici pour ouvrir le centre d'équipe : traiter les demandes reçues, consulter les dépôts et les annonces ; le bouton adjacent « Synchroniser vers l'espace personnel d'équipe » sauvegarde les fichiers de la bibliothèque dans votre espace d'équipe, et la catégorie « Partage d'équipe » apparaît également dans la gestion des fichiers à gauche.",
    "libTeamTitle": "Équipe",
    "libWatchBody": "Après avoir ajouté des dossiers fréquents à la surveillance, chaque ouverture de la bibliothèque synchronise automatiquement : les nouveaux fichiers sont ajoutés, les fichiers disparus sont nettoyés ; vous pouvez ajouter ou supprimer les extensions surveillées.",
    "libWatchTitle": "Surveiller les dossiers",
    "libraryBody": "Ouvrez la bibliothèque de fichiers génétiques pour gérer centralement les fichiers génétiques sur le disque : scan automatique des dossiers surveillés, recherche de plasmides par tags ; les fichiers de la bibliothèque peuvent être ouverts, partagés ou envoyés aux membres de l'équipe en un clic.",
    "libraryTitle": "Bibliothèque de fichiers génétiques",
    "mapLabelsBody": "La carte n'affiche par défaut que les blocs de couleur des éléments. Cliquez sur ce bouton de libellé pour afficher les noms d'annotations sur la carte, cliquez à nouveau pour les masquer.",
    "mapLabelsTitle": "Noms d'annotations sur la carte",
    "mapSeqLinkBody": "Basculez l'affichage de la carte et de la séquence en mode exclusif, ou revenez du mode exclusif au mode d'affichage libre des deux.",
    "mapSeqLinkTitle": "Affichage simultané carte/séquence",
    "next": "Suivant",
    "openWithBody": "Vous souhaitez consulter le fichier actuel avec un autre logiciel comme SnapGene ? Cliquez ici pour choisir le mode d'ouverture ; en cas de modifications non enregistrées, une invite vous demandera de les traiter d'abord.",
    "openWithTitle": "Ouvrir avec une autre application",
    "prev": "Précédent",
    "pro": "Ignorer toutes les astuces du tutoriel",
    "proConfirmBody": "Les étapes de guidage restantes ne seront plus affichées. Pour les revoir, réinitialisez dans Paramètres → Apparence → Tutoriel débutant, elles réapparaîtront à la prochaine ouverture.",
    "proConfirmLeave": "Ignorer le tutoriel",
    "proConfirmStay": "Continuer le tutoriel",
    "proConfirmTitle": "Ignorer le tutoriel débutant ?",
    "propertiesOpenBody": "Les métadonnées de la séquence telles que le nom, la longueur, la topologie, les annotations et les amorces sont regroupées dans le panneau de propriétés (masqué par défaut). Cliquez sur ce bouton « Propriétés » dans la barre latérale pour l'ouvrir ; une fois ouvert, le tutoriel présentera le panneau lui-même.",
    "propertiesOpenTitle": "Ouvrir le panneau de propriétés",
    "railBody": "Cette colonne de boutons à gauche sert à afficher/masquer les différentes vues : carte, séquence, sites de restriction, alignement et panneau de propriétés se basculent ici.",
    "railTitle": "Barre d'outils latérale",
    "selectionBody": "Les 20 premières bases de la séquence ont été sélectionnées pour vous. Faites un clic droit sur la séquence sélectionnée pour de nombreuses actions : copier, remplacer, supprimer, ajouter une annotation ou une amorce, concevoir un sgRNA, lancer BLAST, simulation d'électrophorèse, etc.",
    "selectionTitle": "Menu contextuel de séquence",
    "sequenceToggleBody": "Ce bouton à gauche sert à replier et restaurer la vue de séquence : lorsque la séquence est affichée, le bouton indique « Masquer la séquence », cliquez pour la replier et libérer tout l'espace pour la carte ; une fois replié, il devient « Afficher la séquence », cliquez à nouveau pour la restaurer. Le bouton de la carte au-dessus fonctionne de même, au moins une des deux vues doit être conservée.",
    "sequenceToggleTitle": "Masquer / Afficher la vue de séquence",
    "settingsBody": "Ce bouton en bas à gauche ouvre les paramètres : thème d'apparence, organisation des outils rapides, configuration de l'assistant IA, serveur d'équipe, etc. ; les interrupteurs IA comme « Génération automatique des tags de plasmide » s'y trouvent aussi, et le tutoriel débutant peut également être réinitialisé ici.",
    "settingsTitle": "Paramètres",
    "shareBody": "Envoyez le document génétique actuel à d'autres personnes via WeChat, e-mail ou d'autres applications",
    "shareTitle": "Partager",
    "stepOf": "{{current}}/{{total}}",
    "tagsBody": "Les tags servent à rechercher et classer les plasmides dans la bibliothèque de fichiers génétiques : cliquez sur « + » pour saisir un tag vous-même, « Mise à jour des tags par IA » à droite permet de les générer en un clic ; après avoir activé « Génération automatique des tags de plasmide » dans Paramètres → Assistant IA, les tags seront automatiquement mis à jour en arrière-plan à chaque ouverture d'un plasmide.",
    "tagsTitle": "Tags de plasmide",
    "toolboxBody": "Ce bouton en forme de mallette en haut est la boîte à outils, qui regroupe tous les outils intégrés : bibliothèque d'enzymes de restriction, optimisation des codons, simulation d'électrophorèse, simulation de clonage moléculaire, etc., classés par catégorie ; les outils fréquents peuvent être ajoutés à la barre d'outils rapide adjacente pour un accès en un clic.",
    "toolboxTitle": "Boîte à outils",
    "wheelToggleBody": "Ce bouton détermine la direction dans laquelle la vue se déplace lorsque vous faites défiler la molette dans la zone de séquence : flèches gauche/droite = la molette fait défiler horizontalement ; un clic bascule sur flèches haut/bas = la molette fait défiler verticalement. Le panneau d'alignement en bas à gauche possède le même bouton ; chaque panneau mémorise son propre choix, et les fichiers ouverts ultérieurement le reprennent.",
    "wheelToggleTitle": "Basculer le sens de défilement"
  },
  "update": {
    "aiTranslateFailed": "Traduction échouée : {{error}}",
    "aiTranslateNotConfigured": "Pour traduire le journal des mises à jour dans la langue actuelle, veuillez d'abord configurer l'assistant IA dans les paramètres.",
    "aiTranslateRetry": "Retraduire",
    "aiTranslateRunning": "Traduction en cours...",
    "aiTranslateSection": "Traduction IA",
    "aiTranslateStart": "Traduire",
    "aiTranslateStop": "Arrêter",
    "aiTranslateStopped": "Traduction arrêtée.",
    "changelogLoadError": "Échec de la récupération du journal des mises à jour",
    "changelogTitle": "Journal des mises à jour",
    "checkingForUpdates": "Vérification des mises à jour...",
    "currentVersion": "Version actuelle",
    "description": "Version actuelle {{current}}, dernière version {{latest}}",
    "download": "Télécharger maintenant",
    "downloadError": "Échec de la vérification des mises à jour",
    "downloadingUpdate": "Téléchargement {{percent}} %",
    "downloadingUpdateNoSize": "Téléchargement...",
    "installConfirming": "En attente de confirmation...",
    "installFailed": "Échec de la mise à jour : {{error}}",
    "installFailedHint": "Vous pouvez également télécharger et installer manuellement depuis le site officiel.",
    "installNow": "Mettre à jour maintenant",
    "installWithoutSaving": "Mettre à jour sans enregistrer",
    "installingUpdate": "Installation en cours, l'application va se fermer ou redémarrer...",
    "loadingNotes": "Chargement du journal des mises à jour...",
    "noContext": "Aucune information de mise à jour reçue.",
    "originalNotes": "Texte original",
    "platform": "Plateforme actuelle",
    "releaseNotes": "Contenu de la mise à jour",
    "retryInstall": "Réessayer la mise à jour",
    "saveAndInstall": "Enregistrer et mettre à jour",
    "skipVersion": "Ignorer cette version",
    "title": "Nouvelle version disponible",
    "unknownPlatform": "Plateforme inconnue",
    "unsavedBeforeUpdateMessage": "Voulez-vous enregistrer les documents non enregistrés avant la mise à jour ?",
    "unsavedBeforeUpdateTitle": "Documents non enregistrés",
    "upToDate": "Vous êtes à jour",
    "updateAvailable": "Une nouvelle version est disponible",
    "viewChangelog": "Voir les dernières mises à jour",
    "visitWebsite": "Visiter le site web"
  }
}