/// /// Generated file. Do not edit. /// // coverage:ignore-file // ignore_for_file: type=lint, unused_import // dart format off import 'package:flutter/widgets.dart'; import 'package:intl/intl.dart'; import 'package:slang/generated.dart'; import 'strings.g.dart'; // Path: class TranslationsFr extends Translations with BaseTranslations { /// You can call this constructor and build your own translation instance of this locale. /// Constructing via the enum [AppLocale.build] is preferred. TranslationsFr({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata? meta}) : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), $meta = meta ?? TranslationMetadata( locale: AppLocale.fr, overrides: overrides ?? {}, cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver, ), super(cardinalResolver: cardinalResolver, ordinalResolver: ordinalResolver) { super.$meta.setFlatMapFunction($meta.getTranslation); // copy base translations to super.$meta $meta.setFlatMapFunction(_flatMapFunction); } /// Metadata for the translations of . @override final TranslationMetadata $meta; /// Access flat map @override dynamic operator[](String key) => $meta.getTranslation(key) ?? super.$meta.getTranslation(key); late final TranslationsFr _root = this; // ignore: unused_field @override TranslationsFr $copyWith({TranslationMetadata? meta}) => TranslationsFr(meta: meta ?? this.$meta); // Translations @override late final _Translations$avatar$fr avatar = _Translations$avatar$fr._(_root); @override late final _Translations$favorites$fr favorites = _Translations$favorites$fr._(_root); @override late final _Translations$seedSaving$fr seedSaving = _Translations$seedSaving$fr._(_root); @override late final _Translations$calendar$fr calendar = _Translations$calendar$fr._(_root); @override late final _Translations$app$fr app = _Translations$app$fr._(_root); @override late final _Translations$bootstrap$fr bootstrap = _Translations$bootstrap$fr._(_root); @override late final _Translations$common$fr common = _Translations$common$fr._(_root); @override late final _Translations$home$fr home = _Translations$home$fr._(_root); @override late final _Translations$photo$fr photo = _Translations$photo$fr._(_root); @override late final _Translations$menu$fr menu = _Translations$menu$fr._(_root); @override late final _Translations$settings$fr settings = _Translations$settings$fr._(_root); @override late final _Translations$backup$fr backup = _Translations$backup$fr._(_root); @override late final _Translations$about$fr about = _Translations$about$fr._(_root); @override late final _Translations$intro$fr intro = _Translations$intro$fr._(_root); @override late final _Translations$inventory$fr inventory = _Translations$inventory$fr._(_root); @override late final _Translations$draft$fr draft = _Translations$draft$fr._(_root); @override late final _Translations$quickAdd$fr quickAdd = _Translations$quickAdd$fr._(_root); @override late final _Translations$detail$fr detail = _Translations$detail$fr._(_root); @override late final _Translations$germination$fr germination = _Translations$germination$fr._(_root); @override late final _Translations$viability$fr viability = _Translations$viability$fr._(_root); @override late final _Translations$editVariety$fr editVariety = _Translations$editVariety$fr._(_root); @override late final _Translations$addLot$fr addLot = _Translations$addLot$fr._(_root); @override late final _Translations$harvest$fr harvest = _Translations$harvest$fr._(_root); @override late final _Translations$lotType$fr lotType = _Translations$lotType$fr._(_root); @override late final _Translations$presentation$fr presentation = _Translations$presentation$fr._(_root); @override late final _Translations$provenance$fr provenance = _Translations$provenance$fr._(_root); @override late final _Translations$abundance$fr abundance = _Translations$abundance$fr._(_root); @override late final _Translations$share$fr share = _Translations$share$fr._(_root); @override late final _Translations$printLabels$fr printLabels = _Translations$printLabels$fr._(_root); @override late final _Translations$cropCalendar$fr cropCalendar = _Translations$cropCalendar$fr._(_root); @override late final _Translations$needsReproduction$fr needsReproduction = _Translations$needsReproduction$fr._(_root); @override late final _Translations$preservation$fr preservation = _Translations$preservation$fr._(_root); @override late final _Translations$conditionCheck$fr conditionCheck = _Translations$conditionCheck$fr._(_root); @override late final _Translations$desiccant$fr desiccant = _Translations$desiccant$fr._(_root); @override late final _Translations$unit$fr unit = _Translations$unit$fr._(_root); @override late final _Translations$market$fr market = _Translations$market$fr._(_root); @override late final _Translations$profile$fr profile = _Translations$profile$fr._(_root); @override late final _Translations$chatList$fr chatList = _Translations$chatList$fr._(_root); @override late final _Translations$chat$fr chat = _Translations$chat$fr._(_root); @override late final _Translations$trust$fr trust = _Translations$trust$fr._(_root); @override late final _Translations$yourPeople$fr yourPeople = _Translations$yourPeople$fr._(_root); @override late final _Translations$ratings$fr ratings = _Translations$ratings$fr._(_root); @override late final _Translations$notifications$fr notifications = _Translations$notifications$fr._(_root); @override late final _Translations$plantare$fr plantare = _Translations$plantare$fr._(_root); @override late final _Translations$handover$fr handover = _Translations$handover$fr._(_root); @override late final _Translations$sale$fr sale = _Translations$sale$fr._(_root); @override late final _Translations$legal$fr legal = _Translations$legal$fr._(_root); @override late final _Translations$marketGate$fr marketGate = _Translations$marketGate$fr._(_root); @override late final _Translations$report$fr report = _Translations$report$fr._(_root); @override late final _Translations$block$fr block = _Translations$block$fr._(_root); } // Path: avatar class _Translations$avatar$fr extends Translations$avatar$en { _Translations$avatar$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Votre photo ou avatar'; @override String get fromPhoto => 'Prendre ou choisir une photo'; @override String get illustration => 'Ou choisir une illustration'; @override String get remove => 'Supprimer'; } // Path: favorites class _Translations$favorites$fr extends Translations$favorites$en { _Translations$favorites$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Favoris'; @override String get empty => 'Pas encore de favoris. Enregistrez les offres que vous aimez du marché.'; @override String get save => 'Ajouter aux favoris'; @override String get remove => 'Retirer des favoris'; @override String get unavailable => 'Plus disponible'; } // Path: seedSaving class _Translations$seedSaving$fr extends Translations$seedSaving$en { _Translations$seedSaving$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Conserver sa semence'; @override String get subtitle => 'Ce qu\'il faut pour garder la variété fidèle'; @override String get lifeCycle => 'Cycle'; @override String get cycleAnnual => 'Annuelle'; @override String get cycleBiennial => 'Bisannuelle — graines la 2e année'; @override String get cyclePerennial => 'Vivace'; @override String get pollination => 'Pollinisation'; @override String get pollSelf => 'Autoféconde'; @override String get pollCross => 'Se croise avec d\'autres'; @override String get pollMixed => 'S\'autoféconde, parfois se croise'; @override String get byInsect => 'par les insectes'; @override String get byWind => 'par le vent'; @override String get isolation => 'À isoler'; @override String isolationRange({required Object min, required Object max}) => '${min}–${max} m des autres variétés'; @override String isolationSingle({required Object min}) => '${min} m des autres variétés'; @override String get plants => 'Préserver plusieurs plantes'; @override String plantsValue({required Object n}) => 'D\'au moins ${n} plantes'; @override String get processing => 'Nettoyer la semence'; @override String get procDry => 'Semence sèche (dépiquage)'; @override String get procWet => 'Semence humide (fermentation et rinçage)'; @override String get difficulty => 'Difficulté'; @override String get diffEasy => 'Facile'; @override String get diffMedium => 'Moyen'; @override String get diffHard => 'Difficile'; @override String get advisory => 'Guide général — adaptez-le à votre climat et à votre variété.'; @override String get sourcePrefix => 'Source'; } // Path: calendar class _Translations$calendar$fr extends Translations$calendar$en { _Translations$calendar$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Ce mois'; @override String get filterChip => 'Ce mois'; @override String get selfNote => 'Ce que vous avez noté dans vos variétés.'; @override String nothing({required Object month}) => 'Rien noté pour ${month}.'; } // Path: app class _Translations$app$fr extends Translations$app$en { _Translations$app$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Tane'; } // Path: bootstrap class _Translations$bootstrap$fr extends Translations$bootstrap$en { _Translations$bootstrap$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get failed => 'Tane n\'a pas pu démarrer'; @override String get retry => 'Réessayer'; } // Path: common class _Translations$common$fr extends Translations$common$en { _Translations$common$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get save => 'Enregistrer'; @override String get cancel => 'Annuler'; @override String get delete => 'Supprimer'; @override String get edit => 'Modifier'; @override String get type => 'Type'; @override String get offline => 'Vous êtes hors ligne — le partage est en pause'; } // Path: home class _Translations$home$fr extends Translations$home$en { _Translations$home$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get tagline => 'Partagez et cultivez des graines locales'; @override String get openMarket => 'Marché'; @override String get openMarketSubtitle => 'Découvrez et partagez des graines à proximité'; @override String get yourInventory => 'Votre inventaire'; @override String get yourInventorySubtitle => 'Gérez vos graines'; } // Path: photo class _Translations$photo$fr extends Translations$photo$en { _Translations$photo$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get camera => 'Prendre une photo'; @override String get gallery => 'Choisir de la galerie'; @override String get setAsCover => 'Mettre en couverture'; @override String get isCover => 'Photo de couverture'; @override String get deleteConfirm => 'Supprimer cette photo ?'; } // Path: menu class _Translations$menu$fr extends Translations$menu$en { _Translations$menu$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get tagline => 'votre grainothèque'; @override String get inventory => 'Inventaire'; @override String get market => 'Marché'; @override String get profile => 'Votre profil'; @override String get chat => 'Messages'; @override String get wishlist => 'Favoris'; @override String get following => 'Abonnements'; @override String get plantares => 'Plantares'; @override String get sales => 'Ventes'; @override String get calendar => 'Calendrier'; @override String get settings => 'Paramètres'; } // Path: settings class _Translations$settings$fr extends Translations$settings$en { _Translations$settings$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get language => 'Langue'; @override String get systemLanguage => 'Langue du système'; @override String get langEs => 'Español'; @override String get langEn => 'English'; @override String get langPt => 'Português'; @override String get langPtBr => 'Português (Brasil)'; @override String get langAst => 'Asturianu'; @override String get langFr => 'Français'; @override String get langDe => 'Deutsch'; @override String get langJa => '日本語'; @override String get about => 'À propos'; @override String get aboutText => 'Inventaire local-first et chiffré pour les semences traditionnelles. AGPL-3.0.'; @override String get aboutOpen => 'À propos de Tane'; } // Path: backup class _Translations$backup$fr extends Translations$backup$en { _Translations$backup$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Sauvegarde & restauration'; @override String get autoBackupTitle => 'Sauvegardes automatiques'; @override String autoBackupLast({required Object date, required Object days}) => 'Dernière copie ${date} · tous les ${days} jours'; @override String autoBackupNone({required Object days}) => 'Une copie est conservée automatiquement tous les ${days} jours'; @override String get exportJson => 'Enregistrer une sauvegarde'; @override String get exportJsonSubtitle => 'Une copie complète à conserver précieusement, restaurer plus tard ou transférer sur un autre appareil'; @override String get importJson => 'Restaurer une sauvegarde'; @override String get importJsonSubtitle => 'Récupérez une copie enregistrée — rien ne sera dupliqué'; @override String get exportCsv => 'Exporter vers un tableur'; @override String get exportCsvSubtitle => 'Une liste simple pour Excel ou LibreOffice — sans photos'; @override String get importCsv => 'Importer une liste'; @override String get importCsvSubtitle => 'Ajoutez des entrées depuis un tableur'; @override String get importConfirmTitle => 'Restaurer une sauvegarde ?'; @override String get importConfirmBody => 'Les entrées fusionnent avec votre inventaire ; si une entrée existe des deux côtés, c\'est la version la plus récente qui gagne. Rien ne sera dupliqué.'; @override String get importCsvConfirmTitle => 'Importer une liste ?'; @override String get importCsvConfirmBody => 'Chaque ligne est ajoutée comme une nouvelle entrée. Cela ne fusionne ni ne remplace, donc importer le même fichier deux fois l\'ajoute deux fois.'; @override String get importAction => 'Importer'; @override String get exportSaved => 'Copie enregistrée'; @override String get cancelled => 'Annulé'; @override String importDone({required Object added, required Object updated}) => 'Importé : ${added} nouvelles, ${updated} actualisées'; @override String importCsvDone({required Object count}) => 'Ajoutées ${count} entrées'; @override String get importFailed => 'Ce fichier n\'a pas pu être lu comme une sauvegarde Tane'; @override String get failed => 'Quelque chose s\'est mal passé'; @override String get recoveryTitle => 'Votre code de récupération'; @override String get recoverySubtitle => 'Imprimez-le et gardez-le en sécurité — il ouvre vos sauvegardes sur un nouvel appareil'; @override String get recoveryIntro => 'Ce code ouvre vos sauvegardes et retrouve votre grainothèque sur n\'importe quel appareil. Conservez deux copies imprimées en lieux sûrs, comme votre meilleure graine. Quiconque l\'obtient peut lire vos sauvegardes, alors ne le partagez avec personne.'; @override String get recoveryCopy => 'Copier'; @override String get recoverySave => 'Enregistrer la feuille'; @override String get recoverySheetTitle => 'Tane — votre feuille de récupération'; @override String get recoveryPromptTitle => 'Entrez votre code de récupération'; @override String get recoveryPromptBody => 'Cette sauvegarde a été enregistrée avec un autre code. Entrez le code de votre feuille de récupération pour l\'ouvrir.'; @override String get recoveryWrongCode => 'Ce code n\'ouvre pas cette sauvegarde'; } // Path: about class _Translations$about$fr extends Translations$about$en { _Translations$about$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'À propos'; @override String get kanji => '種'; @override String get tagline => 'Une app local-first et décentralisée pour gérer et partager des semences et plantules traditionnelles.'; @override String get intro => 'Tane (種, « graine » en japonais) aide les gens et les collectifs à gérer un inventaire bienveillant de leur grainothèque, décider ce qu\'ils offrent et le partager localement — sans intermédiaire central qui pourrait contrôler, censurer ou être poursuivi pour cela. Son nom vient de tanemaki (種まき), « semer / disperser des graines ». L\'objectif est à la fois pratique et politique : soutenir les variétés de semences traditionnelles et résister au monopole des semenciers.'; @override String get heritage => 'Le nom honore les anciennes traditions d\'entraide japonaises autour du riz — yui (travail communautaire partagé) et tanomoshi (caisses de secours mutuel) — qui ont inspiré le document Plantare, la « monnaie communautaire pour l\'échange de semences » (BAH-Semillero, 2009, CC-BY-SA). Tane est le Plantare numérique.'; @override String get version => 'Version'; @override String get license => 'Licence'; @override String get licenseValue => 'AGPL-3.0'; @override String get website => 'Site web'; @override String get sourceCode => 'Code source'; @override String get translate => 'Aider à traduire'; @override String get translateSubtitle => 'Aidez à traduire Tane dans votre langue'; @override String get openSourceLicenses => 'Licences open source'; @override String get openSourceLicensesSubtitle => 'Bibliothèques tiers et leurs licences'; @override String copyright({required Object years}) => '© ${years} Association Comunes, sous AGPLv3'; } // Path: intro class _Translations$intro$fr extends Translations$intro$en { _Translations$intro$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get skip => 'Passer'; @override String get next => 'Suivant'; @override String get start => 'Commencer'; @override String get menuEntry => 'Comment fonctionne Tane'; @override late final _Translations$intro$slides$fr slides = _Translations$intro$slides$fr._(_root); } // Path: inventory class _Translations$inventory$fr extends Translations$inventory$en { _Translations$inventory$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Inventaire'; @override String get searchHint => 'Rechercher des graines'; @override String get empty => 'Pas encore de graines. Appuyez sur + pour ajouter votre première.'; @override String get noMatches => 'Aucune graine ne correspond à vos filtres.'; @override String get clearFilters => 'Effacer les filtres'; @override String get uncategorized => 'Non catégorisé'; @override String get needsReproductionFilter => 'À multiplier'; @override String get loadError => 'Impossible d\'ouvrir votre grainothèque. Elle était peut-être occupée — réessayez.'; @override String get retry => 'Réessayer'; } // Path: draft class _Translations$draft$fr extends Translations$draft$en { _Translations$draft$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get capture => 'Capturer des photos'; @override String captured({required Object n}) => '${n} capturée(s) à cataloguer'; @override String get triageTitle => 'À cataloguer'; @override String triageCount({required Object n}) => '${n} à cataloguer'; @override String get untitled => 'Sans titre'; @override String get nameField => 'Nommez cette graine'; @override String get nameHint => 'Qu\'est-ce que c\'est ?'; @override String get suggestFromPhoto => 'Suggérer un nom depuis la photo'; @override String get discard => 'Abandonner'; } // Path: quickAdd class _Translations$quickAdd$fr extends Translations$quickAdd$en { _Translations$quickAdd$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Ajouter une graine'; @override String get labelField => 'Nom'; @override String get labelRequired => 'Donnez-lui un nom'; @override String get addPhoto => 'Ajouter une photo'; @override String get quantity => 'Combien ?'; @override String get more => 'Ajouter plus…'; @override String get save => 'Enregistrer'; @override String get saveAndAddAnother => 'Enregistrer et ajouter une autre'; @override String addedCount({required Object n}) => '${n} ajoutée(s)'; @override String get cancel => 'Annuler'; } // Path: detail class _Translations$detail$fr extends Translations$detail$en { _Translations$detail$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get notFound => 'Cette graine n\'est plus ici.'; @override String get lots => 'Lots'; @override String get noLots => 'Pas encore de lots.'; @override String get names => 'Aussi connue sous le nom de'; @override String get addName => 'Ajouter un nom'; @override String get links => 'Liens'; @override String get addLink => 'Ajouter un lien'; @override String get linkUrl => 'URL'; @override String get linkTitle => 'Titre (optionnel)'; @override String get reference => 'En savoir plus'; @override String get refGbif => 'GBIF'; @override String get refWikipedia => 'Wikipedia'; @override String get refWikispecies => 'Wikispecies'; @override String get notes => 'Notes'; @override String get addLot => 'Ajouter un lot'; @override String get editLot => 'Modifier le lot'; @override String get deleteConfirm => 'Supprimer cette graine ?'; @override String year({required Object year}) => 'Année ${year}'; @override String get noYear => 'Année inconnue'; } // Path: germination class _Translations$germination$fr extends Translations$germination$en { _Translations$germination$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Germination'; @override String get add => 'Ajouter un test'; @override String get sampleSize => 'Échantillon'; @override String get germinated => 'Germinées'; @override String get none => 'Pas encore de tests de germination.'; @override String result({required Object percent}) => '${percent}%'; } // Path: viability class _Translations$viability$fr extends Translations$viability$en { _Translations$viability$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get expiringSoon => 'Utilisez-la ou multipliez-la cette saison'; @override String expiringSoonYears({required Object years}) => 'Utilisez-la ou multipliez-la cette saison · se garde ~${years} an(s)'; @override String get expired => 'Au-delà de la viabilité typique — à multiplier'; @override String expiredYears({required Object years}) => 'Au-delà de la viabilité typique (~${years} an(s)) — à multiplier'; } // Path: editVariety class _Translations$editVariety$fr extends Translations$editVariety$en { _Translations$editVariety$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Modifier la graine'; @override String get name => 'Nom'; @override String get category => 'Catégorie'; @override String get notes => 'Notes'; @override String get species => 'Espèce (du catalogue)'; @override String get speciesHint => 'Rechercher une espèce…'; @override String get speciesSuggested => 'Suggérée par le nom'; @override String get organic => 'Biologique'; @override String get organicHint => 'Cultivée de manière biologique (bio)'; } // Path: addLot class _Translations$addLot$fr extends Translations$addLot$en { _Translations$addLot$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Ajouter un lot'; @override String get year => 'Date de récolte'; @override String get quantity => 'Combien ?'; @override String get amount => 'Quantité'; } // Path: harvest class _Translations$harvest$fr extends Translations$harvest$en { _Translations$harvest$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get pickTitle => 'Sélectionnez le mois / l\'année'; @override String get anyMonth => 'N\'importe quel mois'; @override String get noDate => 'Définir la date de récolte'; @override List get monthNames => [ 'janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre', ]; } // Path: lotType class _Translations$lotType$fr extends Translations$lotType$en { _Translations$lotType$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get seed => 'Graines'; @override String get plant => 'Plante'; @override String get seedling => 'Plantule'; @override String get tree => 'Arbre / arbuste'; @override String get bulb => 'Bulbe / tubercule'; @override String get cutting => 'Bouture'; } // Path: presentation class _Translations$presentation$fr extends Translations$presentation$en { _Translations$presentation$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Emballage'; @override String get none => 'Non spécifié'; @override String get pot => 'Pot'; @override String get tray => 'Plateau'; @override String get plug => 'Alvéole'; @override String get bareRoot => 'Racines nues'; @override String get rootBall => 'Motte'; } // Path: provenance class _Translations$provenance$fr extends Translations$provenance$en { _Translations$provenance$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get section => 'D\'où elle vient'; @override String get seedsFrom => 'Graines de'; @override String get seedsFromHint => 'Qui les a cultivées ou données'; @override String get place => 'Lieu'; @override String get placeHint => 'D\'où elles viennent (avec région)'; @override String get addSeedsFrom => 'Graines de'; @override String get addPlace => 'Lieu'; } // Path: abundance class _Translations$abundance$fr extends Translations$abundance$en { _Translations$abundance$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get add => 'Combien j\'en ai'; @override String get title => 'Combien j\'en ai'; @override String get none => 'Non défini'; @override String get plentyToShare => 'De quoi partager généreusement'; @override String get enoughToShare => 'Assez pour partager un peu'; @override String get enoughForMe => 'Assez pour moi'; @override String get runningLow => 'Ça commence à manquer'; } // Path: share class _Translations$share$fr extends Translations$share$en { _Translations$share$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get add => 'La partagez-vous ?'; @override String get title => 'La partagez-vous ?'; @override String get nudge => 'Vous en avez beaucoup — vous pourriez en partager.'; @override String get price => 'Prix'; @override String get priceHint => 'Laissez vide pour en discuter plus tard'; @override String get private => 'Juste pour moi'; @override String get gift => 'À donner'; @override String get exchange => 'À échanger'; @override String get sell => 'À vendre'; @override String get filterChip => 'Je partage'; @override String get printCatalog => 'Imprimer ce que je partage'; @override String get catalogTitle => 'Ce que je partage'; @override String get catalogSaved => 'Catalogue enregistré'; @override String get cancelled => 'Annulé'; } // Path: printLabels class _Translations$printLabels$fr extends Translations$printLabels$en { _Translations$printLabels$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get action => 'Imprimer les étiquettes'; @override String get title => 'Imprimer les étiquettes'; @override String get selectHint => 'Choisissez les graines pour lesquelles imprimer les étiquettes'; @override String get selectAll => 'Tout sélectionner'; @override String selected({required Object n}) => '${n} sélectionnée(s)'; @override String get none => 'Sélectionnez d\'abord les graines'; @override String get format => 'Taille d\'étiquette'; @override String get formatStickers => 'Petits autocollants'; @override String get formatStickersHint => 'Beaucoup de petites étiquettes par page — à coller sur les sachets'; @override String get formatCards => 'Grandes cartes'; @override String get formatCardsHint => 'Moins d\'étiquettes, plus grandes — pour les pots et boîtes'; @override String count({required Object n}) => '${n} étiquette(s)'; @override String get save => 'Enregistrer les étiquettes'; @override String get saved => 'Étiquettes enregistrées'; @override String get cancelled => 'Annulé'; } // Path: cropCalendar class _Translations$cropCalendar$fr extends Translations$cropCalendar$en { _Translations$cropCalendar$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get add => 'Calendrier de culture'; @override String get title => 'Calendrier de culture'; @override String get sow => 'Semis'; @override String get transplant => 'Repiquage'; @override String get flowering => 'Floraison'; @override String get fruiting => 'Fructification'; @override String get seedHarvest => 'Récolte de semences'; @override String get editorHint => 'Notez les mois typiques pour cette variété dans votre région — ce sont vos propres notes.'; @override String get unset => '—'; } // Path: needsReproduction class _Translations$needsReproduction$fr extends Translations$needsReproduction$en { _Translations$needsReproduction$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get label => 'À multiplier cette saison'; @override String get hint => 'Cultivez-la avant que la semence ne manque'; @override String get badge => 'À multiplier'; } // Path: preservation class _Translations$preservation$fr extends Translations$preservation$en { _Translations$preservation$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get add => 'Comment c\'est conservé'; @override String get title => 'Comment c\'est conservé'; @override String get none => 'Non spécifié'; @override String get jarWithDesiccant => 'Pot avec dessiccant'; @override String get glassJar => 'Pot en verre'; @override String get paperEnvelope => 'Enveloppe en papier'; @override String get paperBag => 'Sac en papier'; @override String get plasticBag => 'Sac en plastique'; } // Path: conditionCheck class _Translations$conditionCheck$fr extends Translations$conditionCheck$en { _Translations$conditionCheck$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get advanced => 'Conservation et détails de la grainothèque'; @override String get title => 'Contrôles de conservation'; @override String get add => 'Ajouter un contrôle'; @override String get containers => 'Pots / récipients'; @override String get desiccant => 'Dessiccant'; @override String get none => 'Pas encore de contrôles.'; @override String summary({required Object count, required Object state}) => '${count} pot(s) · ${state}'; } // Path: desiccant class _Translations$desiccant$fr extends Translations$desiccant$en { _Translations$desiccant$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get none => 'Aucun'; @override String get add => 'En ajouter'; @override String get replace => 'À changer'; @override String get dry => 'Bleu — sec'; @override String get fresh => 'Fraîchement mis'; } // Path: unit class _Translations$unit$fr extends Translations$unit$en { _Translations$unit$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get aFew => 'quelques'; @override String get some => 'quelques'; @override String get plenty => 'beaucoup'; @override String get pinch => 'une pincée'; @override late final _Translations$unit$handful$fr handful = _Translations$unit$handful$fr._(_root); @override late final _Translations$unit$teaspoon$fr teaspoon = _Translations$unit$teaspoon$fr._(_root); @override late final _Translations$unit$spoon$fr spoon = _Translations$unit$spoon$fr._(_root); @override late final _Translations$unit$cup$fr cup = _Translations$unit$cup$fr._(_root); @override late final _Translations$unit$jar$fr jar = _Translations$unit$jar$fr._(_root); @override late final _Translations$unit$sack$fr sack = _Translations$unit$sack$fr._(_root); @override late final _Translations$unit$packet$fr packet = _Translations$unit$packet$fr._(_root); @override late final _Translations$unit$cob$fr cob = _Translations$unit$cob$fr._(_root); @override late final _Translations$unit$pod$fr pod = _Translations$unit$pod$fr._(_root); @override late final _Translations$unit$ear$fr ear = _Translations$unit$ear$fr._(_root); @override late final _Translations$unit$head$fr head = _Translations$unit$head$fr._(_root); @override late final _Translations$unit$fruit$fr fruit = _Translations$unit$fruit$fr._(_root); @override late final _Translations$unit$bulb$fr bulb = _Translations$unit$bulb$fr._(_root); @override late final _Translations$unit$tuber$fr tuber = _Translations$unit$tuber$fr._(_root); @override late final _Translations$unit$seedHead$fr seedHead = _Translations$unit$seedHead$fr._(_root); @override late final _Translations$unit$bunch$fr bunch = _Translations$unit$bunch$fr._(_root); @override late final _Translations$unit$plant$fr plant = _Translations$unit$plant$fr._(_root); @override late final _Translations$unit$pot$fr pot = _Translations$unit$pot$fr._(_root); @override late final _Translations$unit$tray$fr tray = _Translations$unit$tray$fr._(_root); @override late final _Translations$unit$seedling$fr seedling = _Translations$unit$seedling$fr._(_root); @override late final _Translations$unit$tree$fr tree = _Translations$unit$tree$fr._(_root); @override late final _Translations$unit$cutting$fr cutting = _Translations$unit$cutting$fr._(_root); @override late final _Translations$unit$grams$fr grams = _Translations$unit$grams$fr._(_root); @override late final _Translations$unit$count$fr count = _Translations$unit$count$fr._(_root); } // Path: market class _Translations$market$fr extends Translations$market$en { _Translations$market$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Graines près de vous'; @override String get subtitle => 'Ce que les autres partagent à proximité'; @override String get notSetUp => 'Le partage n\'est pas encore configuré'; @override String get notSetUpBody => 'Activez le partage pour voir et donner des graines aux gens à proximité. C\'est volontairement approximatif — votre zone, jamais votre adresse exacte.'; @override String get setUp => 'Configurer le partage'; @override String get cantReach => 'Impossible de se connecter aux serveurs communautaires en ce moment'; @override String get cantReachBody => 'Réessayez, ou vérifiez les serveurs sous Configuration avancée.'; @override String get retry => 'Réessayer'; @override String get setArea => 'Définir votre zone'; @override String get setAreaBody => 'Dites au marché approximativement où vous êtes pour voir les graines à proximité.'; @override String get searching => 'Recherche autour de votre zone…'; @override String get empty => 'Aucune graine n\'est encore partagée près de vous'; @override String get searchHint => 'Rechercher parmi ces graines'; @override String get noMatches => 'Aucune graine partagée ne correspond à votre recherche'; @override String get near => 'Près de vous'; @override String get contact => 'Message'; @override String get mine => 'Vous'; @override String get configTitle => 'Configuration du partage'; @override String get setupIntro => 'Le partage avec les gens à proximité est optionnel. Définissez simplement votre zone approximative — ce que vous offrez passe par des serveurs communautaires, tenus par des personnes et des collectifs et non par une entreprise, pour que d\'autres près de chez vous puissent le trouver.'; @override String get areaLabel => 'Votre zone'; @override String get areaHelp => 'Gardée approximative volontairement — votre zone, jamais un point exact.'; @override String get areaSet => 'Votre zone est définie — approximative, jamais votre point exact'; @override String get areaNotSet => 'Zone non définie — utilisez votre position, ou ajoutez un code sous Avancé'; @override String get advanced => 'Avancé'; @override String get areaCodeLabel => 'Code de zone'; @override String get areaCodeHint => 'Un code court comme sp3e9 — pas un nom de lieu'; @override String get serversLabel => 'Serveurs communautaires'; @override String get serversHelp => 'Choisissez les serveurs à utiliser. Laissez les valeurs par défaut si vous n\'êtes pas sûr.'; @override String get serversAdvanced => 'Ajouter un autre serveur'; @override String get serverAddress => 'Adresse du serveur'; @override String get serverInvalid => 'Entrez une adresse valide (wss://…)'; @override String get save => 'Enregistrer'; @override String get saved => 'Enregistré'; @override String get wanted => 'Recherché'; @override String get shareMine => 'Partager mes graines'; @override String sharedCount({required Object n}) => '${n} graines partagées'; @override String get nothingToShare => 'Marquez d\'abord certaines graines à donner, échanger ou vendre'; @override String get useLocation => 'Utiliser ma position approximative'; @override String get locationFailed => 'Impossible d\'obtenir votre position — vérifiez que la localisation est activée et la permission accordée'; @override String get queued => 'Enregistré — nous partagerons cela quand vous serez connecté'; @override String get shareFailed => 'Impossible de se connecter aux serveurs communautaires — vos graines n\'ont pas été partagées. Réessayez dans un instant.'; @override String get rangeLabel => 'Jusqu\'où chercher'; @override String get rangeNear => 'Très proche'; @override String get rangeArea => 'Autour d\'ici'; @override String get rangeRegion => 'Ma région'; @override String get sharedBy => 'Partagé par'; @override String get noProfile => 'Cette personne n\'a pas encore partagé son profil'; @override String get copyId => 'Copier le code'; @override String get idCopied => 'Code copié'; @override String get photo => 'Photo'; } // Path: profile class _Translations$profile$fr extends Translations$profile$en { _Translations$profile$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Votre profil'; @override String get name => 'Nom d\'affichage'; @override String get nameHint => 'Comment les autres vous voient'; @override String get about => 'À propos'; @override String get aboutHint => 'Une courte ligne — ce que vous cultivez, où'; @override String get g1 => 'Adresse Ğ1 (optionnel)'; @override String get g1Hint => 'Pour que les gens puissent vous payer en Ğ1 — séparé de votre clé'; @override String get yourId => 'Votre identité'; @override String get idHelp => 'Partagez-la pour que les gens vous reconnaissent'; @override String get copy => 'Copier'; @override String get copied => 'Copié'; @override String get save => 'Enregistrer'; @override String get saved => 'Profil enregistré'; @override String get identities => 'Vos identités'; @override String get identitiesHelp => 'Gardez des identités séparées — chacune avec ses propres messages et contacts. Elles proviennent toutes de votre unique sauvegarde, donc changer n\'ajoute rien à retenir.'; @override String identityLabel({required Object n}) => 'Identité ${n}'; @override String get current => 'En cours d\'utilisation'; @override String get newIdentity => 'Nouvelle identité'; @override String get switchTitle => 'Changer d\'identité ?'; @override String get switchBody => 'Les messages et contacts sont conservés séparément pour chaque identité. Vous pouvez revenir en arrière à tout moment.'; @override String get switchAction => 'Changer'; } // Path: chatList class _Translations$chatList$fr extends Translations$chatList$en { _Translations$chatList$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Messages'; @override String get empty => 'Pas encore de conversations. Envoyez un message à quelqu\'un depuis le marché.'; } // Path: chat class _Translations$chat$fr extends Translations$chat$en { _Translations$chat$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Messages'; @override String get hint => 'Écrivez un message…'; @override String get send => 'Envoyer'; @override String get empty => 'Pas encore de messages — dites bonjour'; @override String get offline => 'Configurez le partage pour envoyer des messages'; @override String get payG1 => 'Payer en Ğ1'; @override String get g1Copied => 'Adresse Ğ1 copiée — collez-la dans votre portefeuille'; @override String get today => 'Aujourd\'hui'; @override String get yesterday => 'Hier'; @override String get sendError => 'Impossible d\'envoyer — vérifiez votre connexion'; @override String get noLinks => 'Les liens ne sont pas autorisés dans les messages'; } // Path: trust class _Translations$trust$fr extends Translations$trust$en { _Translations$trust$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get none => 'Personne ne les cautionne encore'; @override String count({required Object n}) => 'Cautionnée par ${n}'; @override String get vouch => 'Je connais cette personne'; @override String get vouched => 'Vous la cautionnez'; @override String get circle => 'Dans votre cercle'; } // Path: yourPeople class _Translations$yourPeople$fr extends Translations$yourPeople$en { _Translations$yourPeople$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Vos contacts'; @override String get help => 'Les gens que vous connaissez et cautionnez, et les gens qui vous cautionnent.'; @override String get youVouchFor => 'Vous cautionnez'; @override String get vouchesForYou => 'Ils vous cautionnent'; @override String get youVouchForEmpty => 'Vous ne cautionnez personne pour l\'instant. Quand vous rencontrez quelqu\'un, ouvrez votre conversation avec lui et appuyez sur « Je connais cette personne ».'; @override String get vouchesForYouEmpty => 'Personne ne vous cautionne pour l\'instant'; @override String get revoke => 'Arrêter de cautionner'; @override String get revokeConfirm => 'Arrêter de cautionner cette personne ?'; @override String get offline => 'Vous êtes hors ligne — réessayez quand vous êtes connecté'; } // Path: ratings class _Translations$ratings$fr extends Translations$ratings$en { _Translations$ratings$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get rate => 'Évaluer cette personne'; @override String get edit => 'Modifier votre évaluation'; @override String get commentHint => 'Comment ça s\'est passé ? (optionnel)'; @override String fromYourCircle({required Object n}) => '${n} de gens que vous connaissez'; @override String get retract => 'Retirer votre évaluation'; @override String get saved => 'Évaluation enregistrée'; } // Path: notifications class _Translations$notifications$fr extends Translations$notifications$en { _Translations$notifications$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String newMessageFrom({required Object name}) => 'Nouveau message de ${name}'; } // Path: plantare class _Translations$plantare$fr extends Translations$plantare$en { _Translations$plantare$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Plantares'; @override String get help => 'Un Plantare est un engagement à multiplier une semence et en rendre une partie — comment une variété continue son voyage de main en main. Ce n\'est pas une vente.'; @override String get add => 'Ajouter un engagement'; @override String get empty => 'Pas encore d\'engagements. Quand vous partagez ou recevez une graine avec la promesse de la cultiver et d\'en renvoyer une partie, notez-le ici.'; @override String get iReturn => 'Je la multiplie et la rends'; @override String get owedToMe => 'Ils m\'en renvoient'; @override String get direction => 'Qui multiplie et rend'; @override String get counterparty => 'Avec qui ?'; @override String get counterpartyHint => 'Une personne ou un collectif (optionnel)'; @override String get owed => 'Qu\'est-ce qui revient ?'; @override String get owedHint => 'p. ex. une poignée la saison prochaine (optionnel)'; @override String get note => 'Note (optionnel)'; @override String get save => 'Enregistrer'; @override String get markReturned => 'Marquer comme rendu'; @override String get markForgiven => 'Clore l\'engagement'; @override String get reopen => 'Rouvrir'; @override String get delete => 'Retirer'; @override String get statusReturned => 'Rendu'; @override String get statusForgiven => 'Clôturé'; @override String get openSection => 'En attente'; @override String get settledSection => 'Fermés'; @override String get removeConfirm => 'Retirer cet engagement ?'; } // Path: handover class _Translations$handover$fr extends Translations$handover$en { _Translations$handover$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Graines échangées'; @override String get help => 'Un cadeau, un échange ou une vente — notez-le, avec une promesse de retour ou pas.'; @override String get iGave => 'J\'ai donné des graines'; @override String get iReceived => 'J\'ai reçu des graines'; @override String get whichLot => 'Quel lot ?'; @override String get howMuch => 'Combien ?'; @override String get allOfIt => 'Tout'; @override String get partOfIt => 'Une partie'; @override String get paymentChip => 'Il y a eu un échange d\'argent'; @override String get promiseGave => 'Ils me renverront de la graine'; @override String get promiseReceived => 'Je rendrai de la graine'; } // Path: sale class _Translations$sale$fr extends Translations$sale$en { _Translations$sale$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Ventes'; @override String get help => 'Enregistrez les graines que vous avez vendues ou achetées — argent, Ğ1, ou n\'importe quelle monnaie. Un modèle distinct d\'un cadeau ou d\'un Plantare. Aucune commission n\'est jamais prélevée sur les graines.'; @override String get add => 'Enregistrer une vente'; @override String get empty => 'Pas encore de ventes. Notez ici ce que vous vendez ou achetez.'; @override String get iSold => 'J\'ai vendu'; @override String get iBought => 'J\'ai acheté'; @override String get direction => 'Vendu ou acheté ?'; @override String get counterparty => 'Avec qui ?'; @override String get counterpartyHint => 'Une personne ou un collectif (optionnel)'; @override String get amount => 'Montant'; @override String get currency => 'Monnaie'; @override String get currencyHint => '€, Ğ1, heures… (optionnel)'; @override String get hours => 'heures'; @override String get note => 'Note (optionnel)'; @override String get save => 'Enregistrer'; @override String get delete => 'Retirer'; @override String get removeConfirm => 'Retirer cette vente ?'; } // Path: legal class _Translations$legal$fr extends Translations$legal$en { _Translations$legal$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Confidentialité & règles'; @override String get subtitle => 'Votre confidentialité, les règles du marché et le partage légal de semences'; @override String get privacyTitle => 'Votre confidentialité'; @override String get privacyBody => 'Tane fonctionne sans compte, et tout ce que vous enregistrez reste sur votre appareil, chiffré. Il n\'y a pas de publicités, pas de trackers, et pas de serveur Tane.\n\nRien n\'est partagé sauf si vous le choisissez : quand vous publiez une offre ou votre profil, ou envoyez un message, cela passe par des serveurs gérés par la communauté. Les offres ne portent qu\'une zone approximative — jamais votre adresse.\n\nCe que vous publiez est public, et des copies peuvent rester même après l\'avoir retiré — alors partagez avec prudence.'; @override String get rulesTitle => 'Les règles du jeu'; @override String get rulesBody => 'Tane est un outil, pas un magasin : les échanges sont convenus directement entre les gens, et personne ne prend de commission. Cela signifie aussi que vous êtes responsable de ce que vous offrez et envoyez.\n\nSur le marché : soyez honnête avec vos graines, n\'offrez que ce que vous pouvez partager, traitez les gens bien et ne faites pas de spam. Vous pouvez bloquer n\'importe qui et signaler les offres ou les gens qui enfreignent les règles — les signalements sont traités sur les serveurs communautaires.'; @override String get seedsTitle => 'À propos du partage de semences et de plants'; @override String get seedsBody => 'Donner et échanger des graines entre amateurs est largement reconnu dans la plupart des pays. La vente peut être différente : dans de nombreux endroits, vendre des graines de variétés non officiellement enregistrées est restreint — vérifiez votre législation locale avant de demander un prix.\n\nEnvoyer des graines dans un autre pays est souvent restreint aussi, et les variétés protégées commercialement ne peuvent pas être reproduites sans permission. En cas de doute, gardez-le local et faites-en un cadeau.\n\nCela vaut aussi pour les plants et jeunes plantes, mais une plante vivante peut être soumise à des règles de transport et phytosanitaires plus strictes que les graines : la déplacer entre régions ou pays peut nécessiter des contrôles supplémentaires.'; @override String get readFull => 'Lire les documents complets en ligne'; } // Path: marketGate class _Translations$marketGate$fr extends Translations$marketGate$en { _Translations$marketGate$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Avant de rejoindre le marché'; @override String get intro => 'Le marché est un espace partagé entre voisins. En continuant, vous acceptez quelques règles simples :'; @override String get ruleHonest => 'Soyez honnête avec les graines que vous offrez'; @override String get ruleLegal => 'Partagez uniquement ce que vous êtes autorisé à partager où vous vivez'; @override String get ruleRespect => 'Traitez les gens bien — pas de spam, pas d\'abus'; @override String get publicNote => 'Ce que vous publiez ici est public, et des copies peuvent rester même si vous le retirez plus tard.'; @override String get viewLegal => 'Confidentialité & règles'; @override String get accept => 'J\'accepte'; @override String get decline => 'Pas maintenant'; } // Path: report class _Translations$report$fr extends Translations$report$en { _Translations$report$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get offer => 'Signaler cette offre'; @override String get person => 'Signaler cette personne'; @override String get title => 'Signaler'; @override String get prompt => 'Qu\'est-ce qui ne va pas ?'; @override String get reasonSpam => 'Spam ou escroquerie'; @override String get reasonAbuse => 'Abusif ou irrespectueux'; @override String get reasonIllegal => 'Graines qui ne devraient pas être offertes'; @override String get reasonOther => 'Autre chose'; @override String get detailsHint => 'Ajouter des détails (optionnel)'; @override String get send => 'Envoyer le signalement'; @override String get sentHidden => 'Signalement envoyé — vous ne verrez plus cela'; @override String get failed => 'Impossible d\'envoyer le signalement — vérifiez votre connexion'; @override String get alsoBlock => 'Bloquer aussi cette personne'; } // Path: block class _Translations$block$fr extends Translations$block$en { _Translations$block$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get action => 'Bloquer cette personne'; @override String get confirmTitle => 'Bloquer cette personne ?'; @override String get confirmBody => 'Vous ne verrez plus ses offres ou messages. Vous pouvez la débloquer plus tard sous Personnes bloquées dans la configuration du partage.'; @override String get confirm => 'Bloquer'; @override String get blockedToast => 'Personne bloquée — ses offres et messages sont cachés'; @override String get manageTitle => 'Personnes bloquées'; @override String get manageEmpty => 'Vous n\'avez bloqué personne'; @override String get unblock => 'Débloquer'; } // Path: intro.slides class _Translations$intro$slides$fr extends Translations$intro$slides$en { _Translations$intro$slides$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override late final _Translations$intro$slides$welcome$fr welcome = _Translations$intro$slides$welcome$fr._(_root); @override late final _Translations$intro$slides$inventory$fr inventory = _Translations$intro$slides$inventory$fr._(_root); @override late final _Translations$intro$slides$privacy$fr privacy = _Translations$intro$slides$privacy$fr._(_root); @override late final _Translations$intro$slides$share$fr share = _Translations$intro$slides$share$fr._(_root); @override late final _Translations$intro$slides$plantare$fr plantare = _Translations$intro$slides$plantare$fr._(_root); } // Path: unit.handful class _Translations$unit$handful$fr extends Translations$unit$handful$en { _Translations$unit$handful$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'poignée'; @override String get plural => 'poignées'; } // Path: unit.teaspoon class _Translations$unit$teaspoon$fr extends Translations$unit$teaspoon$en { _Translations$unit$teaspoon$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'cuillère à café'; @override String get plural => 'cuillères à café'; } // Path: unit.spoon class _Translations$unit$spoon$fr extends Translations$unit$spoon$en { _Translations$unit$spoon$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'cuillère'; @override String get plural => 'cuillères'; } // Path: unit.cup class _Translations$unit$cup$fr extends Translations$unit$cup$en { _Translations$unit$cup$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'tasse'; @override String get plural => 'tasses'; } // Path: unit.jar class _Translations$unit$jar$fr extends Translations$unit$jar$en { _Translations$unit$jar$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'pot'; @override String get plural => 'pots'; } // Path: unit.sack class _Translations$unit$sack$fr extends Translations$unit$sack$en { _Translations$unit$sack$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'sac'; @override String get plural => 'sacs'; } // Path: unit.packet class _Translations$unit$packet$fr extends Translations$unit$packet$en { _Translations$unit$packet$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'sachet'; @override String get plural => 'sachets'; } // Path: unit.cob class _Translations$unit$cob$fr extends Translations$unit$cob$en { _Translations$unit$cob$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'épi'; @override String get plural => 'épis'; } // Path: unit.pod class _Translations$unit$pod$fr extends Translations$unit$pod$en { _Translations$unit$pod$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'gousse'; @override String get plural => 'gousses'; } // Path: unit.ear class _Translations$unit$ear$fr extends Translations$unit$ear$en { _Translations$unit$ear$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'épi'; @override String get plural => 'épis'; } // Path: unit.head class _Translations$unit$head$fr extends Translations$unit$head$en { _Translations$unit$head$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'capitule'; @override String get plural => 'capitules'; } // Path: unit.fruit class _Translations$unit$fruit$fr extends Translations$unit$fruit$en { _Translations$unit$fruit$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'fruit'; @override String get plural => 'fruits'; } // Path: unit.bulb class _Translations$unit$bulb$fr extends Translations$unit$bulb$en { _Translations$unit$bulb$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'bulbe'; @override String get plural => 'bulbes'; } // Path: unit.tuber class _Translations$unit$tuber$fr extends Translations$unit$tuber$en { _Translations$unit$tuber$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'tubercule'; @override String get plural => 'tubercules'; } // Path: unit.seedHead class _Translations$unit$seedHead$fr extends Translations$unit$seedHead$en { _Translations$unit$seedHead$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'tête de graines'; @override String get plural => 'têtes de graines'; } // Path: unit.bunch class _Translations$unit$bunch$fr extends Translations$unit$bunch$en { _Translations$unit$bunch$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'botte'; @override String get plural => 'bottes'; } // Path: unit.plant class _Translations$unit$plant$fr extends Translations$unit$plant$en { _Translations$unit$plant$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'plante'; @override String get plural => 'plantes'; } // Path: unit.pot class _Translations$unit$pot$fr extends Translations$unit$pot$en { _Translations$unit$pot$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'pot'; @override String get plural => 'pots'; } // Path: unit.tray class _Translations$unit$tray$fr extends Translations$unit$tray$en { _Translations$unit$tray$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'plateau'; @override String get plural => 'plateaux'; } // Path: unit.seedling class _Translations$unit$seedling$fr extends Translations$unit$seedling$en { _Translations$unit$seedling$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'plantule'; @override String get plural => 'plantules'; } // Path: unit.tree class _Translations$unit$tree$fr extends Translations$unit$tree$en { _Translations$unit$tree$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'arbre'; @override String get plural => 'arbres'; } // Path: unit.cutting class _Translations$unit$cutting$fr extends Translations$unit$cutting$en { _Translations$unit$cutting$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'bouture'; @override String get plural => 'boutures'; } // Path: unit.grams class _Translations$unit$grams$fr extends Translations$unit$grams$en { _Translations$unit$grams$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'gramme'; @override String get plural => 'grammes'; } // Path: unit.count class _Translations$unit$count$fr extends Translations$unit$count$en { _Translations$unit$count$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get singular => 'graine'; @override String get plural => 'graines'; } // Path: intro.slides.welcome class _Translations$intro$slides$welcome$fr extends Translations$intro$slides$welcome$en { _Translations$intro$slides$welcome$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'La graine qui vous a menés ici'; @override String get body => 'Chaque semence traditionnelle est une lettre écrite par des milliers de générations, passée de main en main. Nous sommes ce que nous sommes grâce à ce partage.'; } // Path: intro.slides.inventory class _Translations$intro$slides$inventory$fr extends Translations$intro$slides$inventory$en { _Translations$intro$slides$inventory$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Votre grainothèque, dans votre poche'; @override String get body => 'Notez ce que vous avez, de quelle année, combien et d\'où ça vient — avec le nom que vous utilisez. Une photo et un nom suffisent pour commencer.'; } // Path: intro.slides.privacy class _Translations$intro$slides$privacy$fr extends Translations$intro$slides$privacy$en { _Translations$intro$slides$privacy$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Vôtre, et uniquement vôtre'; @override String get body => 'Pas de compte, pas d\'internet, pas de trackers. Vos données vivent chiffrées sur votre appareil, et seul ce que vous choisissez est partagé.'; } // Path: intro.slides.share class _Translations$intro$slides$share$fr extends Translations$intro$slides$share$en { _Translations$intro$slides$share$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Partager, comme cela s\'est toujours fait'; @override String get body => 'Offrez ce que vous avez en excédent — cadeau, échange ou vente — et laissez quelqu\'un à proximité le trouver. Seule la distance approximative est affichée, jamais votre adresse ; vous fermez le marché en personne.'; } // Path: intro.slides.plantare class _Translations$intro$slides$plantare$fr extends Translations$intro$slides$plantare$en { _Translations$intro$slides$plantare$fr._(TranslationsFr root) : this._root = root, super.internal(root); final TranslationsFr _root; // ignore: unused_field // Translations @override String get title => 'Semer c\'est multiplier'; @override String get body => 'Avec un Plantare, celui qui reçoit la graine promet d\'en renvoyer plus tard. Et comme renvoyer signifie la cultiver, chaque prêt multiplie le bien commun.'; } /// The flat map containing all translations for locale . /// Only for edge cases! For simple maps, use the map function of this library. /// /// The Dart AOT compiler has issues with very large switch statements, /// so the map is split into smaller functions (512 entries each). extension on TranslationsFr { dynamic _flatMapFunction(String path) { return switch (path) { 'avatar.title' => 'Votre photo ou avatar', 'avatar.fromPhoto' => 'Prendre ou choisir une photo', 'avatar.illustration' => 'Ou choisir une illustration', 'avatar.remove' => 'Supprimer', 'favorites.title' => 'Favoris', 'favorites.empty' => 'Pas encore de favoris. Enregistrez les offres que vous aimez du marché.', 'favorites.save' => 'Ajouter aux favoris', 'favorites.remove' => 'Retirer des favoris', 'favorites.unavailable' => 'Plus disponible', 'seedSaving.title' => 'Conserver sa semence', 'seedSaving.subtitle' => 'Ce qu\'il faut pour garder la variété fidèle', 'seedSaving.lifeCycle' => 'Cycle', 'seedSaving.cycleAnnual' => 'Annuelle', 'seedSaving.cycleBiennial' => 'Bisannuelle — graines la 2e année', 'seedSaving.cyclePerennial' => 'Vivace', 'seedSaving.pollination' => 'Pollinisation', 'seedSaving.pollSelf' => 'Autoféconde', 'seedSaving.pollCross' => 'Se croise avec d\'autres', 'seedSaving.pollMixed' => 'S\'autoféconde, parfois se croise', 'seedSaving.byInsect' => 'par les insectes', 'seedSaving.byWind' => 'par le vent', 'seedSaving.isolation' => 'À isoler', 'seedSaving.isolationRange' => ({required Object min, required Object max}) => '${min}–${max} m des autres variétés', 'seedSaving.isolationSingle' => ({required Object min}) => '${min} m des autres variétés', 'seedSaving.plants' => 'Préserver plusieurs plantes', 'seedSaving.plantsValue' => ({required Object n}) => 'D\'au moins ${n} plantes', 'seedSaving.processing' => 'Nettoyer la semence', 'seedSaving.procDry' => 'Semence sèche (dépiquage)', 'seedSaving.procWet' => 'Semence humide (fermentation et rinçage)', 'seedSaving.difficulty' => 'Difficulté', 'seedSaving.diffEasy' => 'Facile', 'seedSaving.diffMedium' => 'Moyen', 'seedSaving.diffHard' => 'Difficile', 'seedSaving.advisory' => 'Guide général — adaptez-le à votre climat et à votre variété.', 'seedSaving.sourcePrefix' => 'Source', 'calendar.title' => 'Ce mois', 'calendar.filterChip' => 'Ce mois', 'calendar.selfNote' => 'Ce que vous avez noté dans vos variétés.', 'calendar.nothing' => ({required Object month}) => 'Rien noté pour ${month}.', 'app.title' => 'Tane', 'bootstrap.failed' => 'Tane n\'a pas pu démarrer', 'bootstrap.retry' => 'Réessayer', 'common.save' => 'Enregistrer', 'common.cancel' => 'Annuler', 'common.delete' => 'Supprimer', 'common.edit' => 'Modifier', 'common.type' => 'Type', 'common.offline' => 'Vous êtes hors ligne — le partage est en pause', 'home.tagline' => 'Partagez et cultivez des graines locales', 'home.openMarket' => 'Marché', 'home.openMarketSubtitle' => 'Découvrez et partagez des graines à proximité', 'home.yourInventory' => 'Votre inventaire', 'home.yourInventorySubtitle' => 'Gérez vos graines', 'photo.camera' => 'Prendre une photo', 'photo.gallery' => 'Choisir de la galerie', 'photo.setAsCover' => 'Mettre en couverture', 'photo.isCover' => 'Photo de couverture', 'photo.deleteConfirm' => 'Supprimer cette photo ?', 'menu.tagline' => 'votre grainothèque', 'menu.inventory' => 'Inventaire', 'menu.market' => 'Marché', 'menu.profile' => 'Votre profil', 'menu.chat' => 'Messages', 'menu.wishlist' => 'Favoris', 'menu.following' => 'Abonnements', 'menu.plantares' => 'Plantares', 'menu.sales' => 'Ventes', 'menu.calendar' => 'Calendrier', 'menu.settings' => 'Paramètres', 'settings.language' => 'Langue', 'settings.systemLanguage' => 'Langue du système', 'settings.langEs' => 'Español', 'settings.langEn' => 'English', 'settings.langPt' => 'Português', 'settings.langPtBr' => 'Português (Brasil)', 'settings.langAst' => 'Asturianu', 'settings.langFr' => 'Français', 'settings.langDe' => 'Deutsch', 'settings.langJa' => '日本語', 'settings.about' => 'À propos', 'settings.aboutText' => 'Inventaire local-first et chiffré pour les semences traditionnelles. AGPL-3.0.', 'settings.aboutOpen' => 'À propos de Tane', 'backup.title' => 'Sauvegarde & restauration', 'backup.autoBackupTitle' => 'Sauvegardes automatiques', 'backup.autoBackupLast' => ({required Object date, required Object days}) => 'Dernière copie ${date} · tous les ${days} jours', 'backup.autoBackupNone' => ({required Object days}) => 'Une copie est conservée automatiquement tous les ${days} jours', 'backup.exportJson' => 'Enregistrer une sauvegarde', 'backup.exportJsonSubtitle' => 'Une copie complète à conserver précieusement, restaurer plus tard ou transférer sur un autre appareil', 'backup.importJson' => 'Restaurer une sauvegarde', 'backup.importJsonSubtitle' => 'Récupérez une copie enregistrée — rien ne sera dupliqué', 'backup.exportCsv' => 'Exporter vers un tableur', 'backup.exportCsvSubtitle' => 'Une liste simple pour Excel ou LibreOffice — sans photos', 'backup.importCsv' => 'Importer une liste', 'backup.importCsvSubtitle' => 'Ajoutez des entrées depuis un tableur', 'backup.importConfirmTitle' => 'Restaurer une sauvegarde ?', 'backup.importConfirmBody' => 'Les entrées fusionnent avec votre inventaire ; si une entrée existe des deux côtés, c\'est la version la plus récente qui gagne. Rien ne sera dupliqué.', 'backup.importCsvConfirmTitle' => 'Importer une liste ?', 'backup.importCsvConfirmBody' => 'Chaque ligne est ajoutée comme une nouvelle entrée. Cela ne fusionne ni ne remplace, donc importer le même fichier deux fois l\'ajoute deux fois.', 'backup.importAction' => 'Importer', 'backup.exportSaved' => 'Copie enregistrée', 'backup.cancelled' => 'Annulé', 'backup.importDone' => ({required Object added, required Object updated}) => 'Importé : ${added} nouvelles, ${updated} actualisées', 'backup.importCsvDone' => ({required Object count}) => 'Ajoutées ${count} entrées', 'backup.importFailed' => 'Ce fichier n\'a pas pu être lu comme une sauvegarde Tane', 'backup.failed' => 'Quelque chose s\'est mal passé', 'backup.recoveryTitle' => 'Votre code de récupération', 'backup.recoverySubtitle' => 'Imprimez-le et gardez-le en sécurité — il ouvre vos sauvegardes sur un nouvel appareil', 'backup.recoveryIntro' => 'Ce code ouvre vos sauvegardes et retrouve votre grainothèque sur n\'importe quel appareil. Conservez deux copies imprimées en lieux sûrs, comme votre meilleure graine. Quiconque l\'obtient peut lire vos sauvegardes, alors ne le partagez avec personne.', 'backup.recoveryCopy' => 'Copier', 'backup.recoverySave' => 'Enregistrer la feuille', 'backup.recoverySheetTitle' => 'Tane — votre feuille de récupération', 'backup.recoveryPromptTitle' => 'Entrez votre code de récupération', 'backup.recoveryPromptBody' => 'Cette sauvegarde a été enregistrée avec un autre code. Entrez le code de votre feuille de récupération pour l\'ouvrir.', 'backup.recoveryWrongCode' => 'Ce code n\'ouvre pas cette sauvegarde', 'about.title' => 'À propos', 'about.kanji' => '種', 'about.tagline' => 'Une app local-first et décentralisée pour gérer et partager des semences et plantules traditionnelles.', 'about.intro' => 'Tane (種, « graine » en japonais) aide les gens et les collectifs à gérer un inventaire bienveillant de leur grainothèque, décider ce qu\'ils offrent et le partager localement — sans intermédiaire central qui pourrait contrôler, censurer ou être poursuivi pour cela. Son nom vient de tanemaki (種まき), « semer / disperser des graines ». L\'objectif est à la fois pratique et politique : soutenir les variétés de semences traditionnelles et résister au monopole des semenciers.', 'about.heritage' => 'Le nom honore les anciennes traditions d\'entraide japonaises autour du riz — yui (travail communautaire partagé) et tanomoshi (caisses de secours mutuel) — qui ont inspiré le document Plantare, la « monnaie communautaire pour l\'échange de semences » (BAH-Semillero, 2009, CC-BY-SA). Tane est le Plantare numérique.', 'about.version' => 'Version', 'about.license' => 'Licence', 'about.licenseValue' => 'AGPL-3.0', 'about.website' => 'Site web', 'about.sourceCode' => 'Code source', 'about.translate' => 'Aider à traduire', 'about.translateSubtitle' => 'Aidez à traduire Tane dans votre langue', 'about.openSourceLicenses' => 'Licences open source', 'about.openSourceLicensesSubtitle' => 'Bibliothèques tiers et leurs licences', 'about.copyright' => ({required Object years}) => '© ${years} Association Comunes, sous AGPLv3', 'intro.skip' => 'Passer', 'intro.next' => 'Suivant', 'intro.start' => 'Commencer', 'intro.menuEntry' => 'Comment fonctionne Tane', 'intro.slides.welcome.title' => 'La graine qui vous a menés ici', 'intro.slides.welcome.body' => 'Chaque semence traditionnelle est une lettre écrite par des milliers de générations, passée de main en main. Nous sommes ce que nous sommes grâce à ce partage.', 'intro.slides.inventory.title' => 'Votre grainothèque, dans votre poche', 'intro.slides.inventory.body' => 'Notez ce que vous avez, de quelle année, combien et d\'où ça vient — avec le nom que vous utilisez. Une photo et un nom suffisent pour commencer.', 'intro.slides.privacy.title' => 'Vôtre, et uniquement vôtre', 'intro.slides.privacy.body' => 'Pas de compte, pas d\'internet, pas de trackers. Vos données vivent chiffrées sur votre appareil, et seul ce que vous choisissez est partagé.', 'intro.slides.share.title' => 'Partager, comme cela s\'est toujours fait', 'intro.slides.share.body' => 'Offrez ce que vous avez en excédent — cadeau, échange ou vente — et laissez quelqu\'un à proximité le trouver. Seule la distance approximative est affichée, jamais votre adresse ; vous fermez le marché en personne.', 'intro.slides.plantare.title' => 'Semer c\'est multiplier', 'intro.slides.plantare.body' => 'Avec un Plantare, celui qui reçoit la graine promet d\'en renvoyer plus tard. Et comme renvoyer signifie la cultiver, chaque prêt multiplie le bien commun.', 'inventory.title' => 'Inventaire', 'inventory.searchHint' => 'Rechercher des graines', 'inventory.empty' => 'Pas encore de graines. Appuyez sur + pour ajouter votre première.', 'inventory.noMatches' => 'Aucune graine ne correspond à vos filtres.', 'inventory.clearFilters' => 'Effacer les filtres', 'inventory.uncategorized' => 'Non catégorisé', 'inventory.needsReproductionFilter' => 'À multiplier', 'inventory.loadError' => 'Impossible d\'ouvrir votre grainothèque. Elle était peut-être occupée — réessayez.', 'inventory.retry' => 'Réessayer', 'draft.capture' => 'Capturer des photos', 'draft.captured' => ({required Object n}) => '${n} capturée(s) à cataloguer', 'draft.triageTitle' => 'À cataloguer', 'draft.triageCount' => ({required Object n}) => '${n} à cataloguer', 'draft.untitled' => 'Sans titre', 'draft.nameField' => 'Nommez cette graine', 'draft.nameHint' => 'Qu\'est-ce que c\'est ?', 'draft.suggestFromPhoto' => 'Suggérer un nom depuis la photo', 'draft.discard' => 'Abandonner', 'quickAdd.title' => 'Ajouter une graine', 'quickAdd.labelField' => 'Nom', 'quickAdd.labelRequired' => 'Donnez-lui un nom', 'quickAdd.addPhoto' => 'Ajouter une photo', 'quickAdd.quantity' => 'Combien ?', 'quickAdd.more' => 'Ajouter plus…', 'quickAdd.save' => 'Enregistrer', 'quickAdd.saveAndAddAnother' => 'Enregistrer et ajouter une autre', 'quickAdd.addedCount' => ({required Object n}) => '${n} ajoutée(s)', 'quickAdd.cancel' => 'Annuler', 'detail.notFound' => 'Cette graine n\'est plus ici.', 'detail.lots' => 'Lots', 'detail.noLots' => 'Pas encore de lots.', 'detail.names' => 'Aussi connue sous le nom de', 'detail.addName' => 'Ajouter un nom', 'detail.links' => 'Liens', 'detail.addLink' => 'Ajouter un lien', 'detail.linkUrl' => 'URL', 'detail.linkTitle' => 'Titre (optionnel)', 'detail.reference' => 'En savoir plus', 'detail.refGbif' => 'GBIF', 'detail.refWikipedia' => 'Wikipedia', 'detail.refWikispecies' => 'Wikispecies', 'detail.notes' => 'Notes', 'detail.addLot' => 'Ajouter un lot', 'detail.editLot' => 'Modifier le lot', 'detail.deleteConfirm' => 'Supprimer cette graine ?', 'detail.year' => ({required Object year}) => 'Année ${year}', 'detail.noYear' => 'Année inconnue', 'germination.title' => 'Germination', 'germination.add' => 'Ajouter un test', 'germination.sampleSize' => 'Échantillon', 'germination.germinated' => 'Germinées', 'germination.none' => 'Pas encore de tests de germination.', 'germination.result' => ({required Object percent}) => '${percent}%', 'viability.expiringSoon' => 'Utilisez-la ou multipliez-la cette saison', 'viability.expiringSoonYears' => ({required Object years}) => 'Utilisez-la ou multipliez-la cette saison · se garde ~${years} an(s)', 'viability.expired' => 'Au-delà de la viabilité typique — à multiplier', 'viability.expiredYears' => ({required Object years}) => 'Au-delà de la viabilité typique (~${years} an(s)) — à multiplier', 'editVariety.title' => 'Modifier la graine', 'editVariety.name' => 'Nom', 'editVariety.category' => 'Catégorie', 'editVariety.notes' => 'Notes', 'editVariety.species' => 'Espèce (du catalogue)', 'editVariety.speciesHint' => 'Rechercher une espèce…', 'editVariety.speciesSuggested' => 'Suggérée par le nom', 'editVariety.organic' => 'Biologique', 'editVariety.organicHint' => 'Cultivée de manière biologique (bio)', 'addLot.title' => 'Ajouter un lot', 'addLot.year' => 'Date de récolte', 'addLot.quantity' => 'Combien ?', 'addLot.amount' => 'Quantité', 'harvest.pickTitle' => 'Sélectionnez le mois / l\'année', 'harvest.anyMonth' => 'N\'importe quel mois', 'harvest.noDate' => 'Définir la date de récolte', 'harvest.monthNames.0' => 'janvier', 'harvest.monthNames.1' => 'février', 'harvest.monthNames.2' => 'mars', 'harvest.monthNames.3' => 'avril', 'harvest.monthNames.4' => 'mai', 'harvest.monthNames.5' => 'juin', 'harvest.monthNames.6' => 'juillet', 'harvest.monthNames.7' => 'août', 'harvest.monthNames.8' => 'septembre', 'harvest.monthNames.9' => 'octobre', 'harvest.monthNames.10' => 'novembre', 'harvest.monthNames.11' => 'décembre', 'lotType.seed' => 'Graines', 'lotType.plant' => 'Plante', 'lotType.seedling' => 'Plantule', 'lotType.tree' => 'Arbre / arbuste', 'lotType.bulb' => 'Bulbe / tubercule', 'lotType.cutting' => 'Bouture', 'presentation.title' => 'Emballage', 'presentation.none' => 'Non spécifié', 'presentation.pot' => 'Pot', 'presentation.tray' => 'Plateau', 'presentation.plug' => 'Alvéole', 'presentation.bareRoot' => 'Racines nues', 'presentation.rootBall' => 'Motte', 'provenance.section' => 'D\'où elle vient', 'provenance.seedsFrom' => 'Graines de', 'provenance.seedsFromHint' => 'Qui les a cultivées ou données', 'provenance.place' => 'Lieu', 'provenance.placeHint' => 'D\'où elles viennent (avec région)', 'provenance.addSeedsFrom' => 'Graines de', 'provenance.addPlace' => 'Lieu', 'abundance.add' => 'Combien j\'en ai', 'abundance.title' => 'Combien j\'en ai', 'abundance.none' => 'Non défini', 'abundance.plentyToShare' => 'De quoi partager généreusement', 'abundance.enoughToShare' => 'Assez pour partager un peu', 'abundance.enoughForMe' => 'Assez pour moi', 'abundance.runningLow' => 'Ça commence à manquer', 'share.add' => 'La partagez-vous ?', 'share.title' => 'La partagez-vous ?', 'share.nudge' => 'Vous en avez beaucoup — vous pourriez en partager.', 'share.price' => 'Prix', 'share.priceHint' => 'Laissez vide pour en discuter plus tard', 'share.private' => 'Juste pour moi', 'share.gift' => 'À donner', 'share.exchange' => 'À échanger', 'share.sell' => 'À vendre', 'share.filterChip' => 'Je partage', 'share.printCatalog' => 'Imprimer ce que je partage', 'share.catalogTitle' => 'Ce que je partage', 'share.catalogSaved' => 'Catalogue enregistré', 'share.cancelled' => 'Annulé', 'printLabels.action' => 'Imprimer les étiquettes', 'printLabels.title' => 'Imprimer les étiquettes', 'printLabels.selectHint' => 'Choisissez les graines pour lesquelles imprimer les étiquettes', 'printLabels.selectAll' => 'Tout sélectionner', 'printLabels.selected' => ({required Object n}) => '${n} sélectionnée(s)', 'printLabels.none' => 'Sélectionnez d\'abord les graines', 'printLabels.format' => 'Taille d\'étiquette', 'printLabels.formatStickers' => 'Petits autocollants', 'printLabels.formatStickersHint' => 'Beaucoup de petites étiquettes par page — à coller sur les sachets', 'printLabels.formatCards' => 'Grandes cartes', 'printLabels.formatCardsHint' => 'Moins d\'étiquettes, plus grandes — pour les pots et boîtes', 'printLabels.count' => ({required Object n}) => '${n} étiquette(s)', 'printLabels.save' => 'Enregistrer les étiquettes', 'printLabels.saved' => 'Étiquettes enregistrées', 'printLabels.cancelled' => 'Annulé', 'cropCalendar.add' => 'Calendrier de culture', 'cropCalendar.title' => 'Calendrier de culture', 'cropCalendar.sow' => 'Semis', 'cropCalendar.transplant' => 'Repiquage', 'cropCalendar.flowering' => 'Floraison', 'cropCalendar.fruiting' => 'Fructification', 'cropCalendar.seedHarvest' => 'Récolte de semences', 'cropCalendar.editorHint' => 'Notez les mois typiques pour cette variété dans votre région — ce sont vos propres notes.', 'cropCalendar.unset' => '—', 'needsReproduction.label' => 'À multiplier cette saison', 'needsReproduction.hint' => 'Cultivez-la avant que la semence ne manque', 'needsReproduction.badge' => 'À multiplier', 'preservation.add' => 'Comment c\'est conservé', 'preservation.title' => 'Comment c\'est conservé', 'preservation.none' => 'Non spécifié', 'preservation.jarWithDesiccant' => 'Pot avec dessiccant', 'preservation.glassJar' => 'Pot en verre', 'preservation.paperEnvelope' => 'Enveloppe en papier', 'preservation.paperBag' => 'Sac en papier', 'preservation.plasticBag' => 'Sac en plastique', 'conditionCheck.advanced' => 'Conservation et détails de la grainothèque', 'conditionCheck.title' => 'Contrôles de conservation', 'conditionCheck.add' => 'Ajouter un contrôle', 'conditionCheck.containers' => 'Pots / récipients', 'conditionCheck.desiccant' => 'Dessiccant', 'conditionCheck.none' => 'Pas encore de contrôles.', 'conditionCheck.summary' => ({required Object count, required Object state}) => '${count} pot(s) · ${state}', 'desiccant.none' => 'Aucun', 'desiccant.add' => 'En ajouter', 'desiccant.replace' => 'À changer', 'desiccant.dry' => 'Bleu — sec', 'desiccant.fresh' => 'Fraîchement mis', 'unit.aFew' => 'quelques', 'unit.some' => 'quelques', 'unit.plenty' => 'beaucoup', 'unit.pinch' => 'une pincée', 'unit.handful.singular' => 'poignée', 'unit.handful.plural' => 'poignées', 'unit.teaspoon.singular' => 'cuillère à café', 'unit.teaspoon.plural' => 'cuillères à café', 'unit.spoon.singular' => 'cuillère', 'unit.spoon.plural' => 'cuillères', 'unit.cup.singular' => 'tasse', 'unit.cup.plural' => 'tasses', 'unit.jar.singular' => 'pot', 'unit.jar.plural' => 'pots', 'unit.sack.singular' => 'sac', 'unit.sack.plural' => 'sacs', 'unit.packet.singular' => 'sachet', 'unit.packet.plural' => 'sachets', 'unit.cob.singular' => 'épi', 'unit.cob.plural' => 'épis', 'unit.pod.singular' => 'gousse', 'unit.pod.plural' => 'gousses', 'unit.ear.singular' => 'épi', 'unit.ear.plural' => 'épis', 'unit.head.singular' => 'capitule', 'unit.head.plural' => 'capitules', 'unit.fruit.singular' => 'fruit', 'unit.fruit.plural' => 'fruits', 'unit.bulb.singular' => 'bulbe', 'unit.bulb.plural' => 'bulbes', 'unit.tuber.singular' => 'tubercule', 'unit.tuber.plural' => 'tubercules', 'unit.seedHead.singular' => 'tête de graines', 'unit.seedHead.plural' => 'têtes de graines', 'unit.bunch.singular' => 'botte', 'unit.bunch.plural' => 'bottes', 'unit.plant.singular' => 'plante', 'unit.plant.plural' => 'plantes', 'unit.pot.singular' => 'pot', 'unit.pot.plural' => 'pots', 'unit.tray.singular' => 'plateau', 'unit.tray.plural' => 'plateaux', 'unit.seedling.singular' => 'plantule', 'unit.seedling.plural' => 'plantules', 'unit.tree.singular' => 'arbre', 'unit.tree.plural' => 'arbres', 'unit.cutting.singular' => 'bouture', 'unit.cutting.plural' => 'boutures', 'unit.grams.singular' => 'gramme', 'unit.grams.plural' => 'grammes', 'unit.count.singular' => 'graine', 'unit.count.plural' => 'graines', 'market.title' => 'Graines près de vous', 'market.subtitle' => 'Ce que les autres partagent à proximité', 'market.notSetUp' => 'Le partage n\'est pas encore configuré', 'market.notSetUpBody' => 'Activez le partage pour voir et donner des graines aux gens à proximité. C\'est volontairement approximatif — votre zone, jamais votre adresse exacte.', 'market.setUp' => 'Configurer le partage', 'market.cantReach' => 'Impossible de se connecter aux serveurs communautaires en ce moment', 'market.cantReachBody' => 'Réessayez, ou vérifiez les serveurs sous Configuration avancée.', 'market.retry' => 'Réessayer', 'market.setArea' => 'Définir votre zone', 'market.setAreaBody' => 'Dites au marché approximativement où vous êtes pour voir les graines à proximité.', 'market.searching' => 'Recherche autour de votre zone…', 'market.empty' => 'Aucune graine n\'est encore partagée près de vous', 'market.searchHint' => 'Rechercher parmi ces graines', 'market.noMatches' => 'Aucune graine partagée ne correspond à votre recherche', 'market.near' => 'Près de vous', 'market.contact' => 'Message', 'market.mine' => 'Vous', 'market.configTitle' => 'Configuration du partage', 'market.setupIntro' => 'Le partage avec les gens à proximité est optionnel. Définissez simplement votre zone approximative — ce que vous offrez passe par des serveurs communautaires, tenus par des personnes et des collectifs et non par une entreprise, pour que d\'autres près de chez vous puissent le trouver.', 'market.areaLabel' => 'Votre zone', 'market.areaHelp' => 'Gardée approximative volontairement — votre zone, jamais un point exact.', 'market.areaSet' => 'Votre zone est définie — approximative, jamais votre point exact', 'market.areaNotSet' => 'Zone non définie — utilisez votre position, ou ajoutez un code sous Avancé', 'market.advanced' => 'Avancé', 'market.areaCodeLabel' => 'Code de zone', 'market.areaCodeHint' => 'Un code court comme sp3e9 — pas un nom de lieu', 'market.serversLabel' => 'Serveurs communautaires', 'market.serversHelp' => 'Choisissez les serveurs à utiliser. Laissez les valeurs par défaut si vous n\'êtes pas sûr.', 'market.serversAdvanced' => 'Ajouter un autre serveur', 'market.serverAddress' => 'Adresse du serveur', 'market.serverInvalid' => 'Entrez une adresse valide (wss://…)', 'market.save' => 'Enregistrer', 'market.saved' => 'Enregistré', 'market.wanted' => 'Recherché', 'market.shareMine' => 'Partager mes graines', 'market.sharedCount' => ({required Object n}) => '${n} graines partagées', 'market.nothingToShare' => 'Marquez d\'abord certaines graines à donner, échanger ou vendre', 'market.useLocation' => 'Utiliser ma position approximative', 'market.locationFailed' => 'Impossible d\'obtenir votre position — vérifiez que la localisation est activée et la permission accordée', 'market.queued' => 'Enregistré — nous partagerons cela quand vous serez connecté', 'market.shareFailed' => 'Impossible de se connecter aux serveurs communautaires — vos graines n\'ont pas été partagées. Réessayez dans un instant.', 'market.rangeLabel' => 'Jusqu\'où chercher', 'market.rangeNear' => 'Très proche', 'market.rangeArea' => 'Autour d\'ici', 'market.rangeRegion' => 'Ma région', 'market.sharedBy' => 'Partagé par', 'market.noProfile' => 'Cette personne n\'a pas encore partagé son profil', 'market.copyId' => 'Copier le code', 'market.idCopied' => 'Code copié', 'market.photo' => 'Photo', 'profile.title' => 'Votre profil', 'profile.name' => 'Nom d\'affichage', 'profile.nameHint' => 'Comment les autres vous voient', 'profile.about' => 'À propos', 'profile.aboutHint' => 'Une courte ligne — ce que vous cultivez, où', 'profile.g1' => 'Adresse Ğ1 (optionnel)', 'profile.g1Hint' => 'Pour que les gens puissent vous payer en Ğ1 — séparé de votre clé', 'profile.yourId' => 'Votre identité', 'profile.idHelp' => 'Partagez-la pour que les gens vous reconnaissent', 'profile.copy' => 'Copier', 'profile.copied' => 'Copié', 'profile.save' => 'Enregistrer', 'profile.saved' => 'Profil enregistré', 'profile.identities' => 'Vos identités', 'profile.identitiesHelp' => 'Gardez des identités séparées — chacune avec ses propres messages et contacts. Elles proviennent toutes de votre unique sauvegarde, donc changer n\'ajoute rien à retenir.', 'profile.identityLabel' => ({required Object n}) => 'Identité ${n}', 'profile.current' => 'En cours d\'utilisation', 'profile.newIdentity' => 'Nouvelle identité', 'profile.switchTitle' => 'Changer d\'identité ?', 'profile.switchBody' => 'Les messages et contacts sont conservés séparément pour chaque identité. Vous pouvez revenir en arrière à tout moment.', 'profile.switchAction' => 'Changer', 'chatList.title' => 'Messages', 'chatList.empty' => 'Pas encore de conversations. Envoyez un message à quelqu\'un depuis le marché.', 'chat.title' => 'Messages', 'chat.hint' => 'Écrivez un message…', 'chat.send' => 'Envoyer', 'chat.empty' => 'Pas encore de messages — dites bonjour', 'chat.offline' => 'Configurez le partage pour envoyer des messages', 'chat.payG1' => 'Payer en Ğ1', 'chat.g1Copied' => 'Adresse Ğ1 copiée — collez-la dans votre portefeuille', 'chat.today' => 'Aujourd\'hui', 'chat.yesterday' => 'Hier', 'chat.sendError' => 'Impossible d\'envoyer — vérifiez votre connexion', 'chat.noLinks' => 'Les liens ne sont pas autorisés dans les messages', 'trust.none' => 'Personne ne les cautionne encore', 'trust.count' => ({required Object n}) => 'Cautionnée par ${n}', 'trust.vouch' => 'Je connais cette personne', 'trust.vouched' => 'Vous la cautionnez', 'trust.circle' => 'Dans votre cercle', 'yourPeople.title' => 'Vos contacts', 'yourPeople.help' => 'Les gens que vous connaissez et cautionnez, et les gens qui vous cautionnent.', 'yourPeople.youVouchFor' => 'Vous cautionnez', 'yourPeople.vouchesForYou' => 'Ils vous cautionnent', 'yourPeople.youVouchForEmpty' => 'Vous ne cautionnez personne pour l\'instant. Quand vous rencontrez quelqu\'un, ouvrez votre conversation avec lui et appuyez sur « Je connais cette personne ».', 'yourPeople.vouchesForYouEmpty' => 'Personne ne vous cautionne pour l\'instant', 'yourPeople.revoke' => 'Arrêter de cautionner', 'yourPeople.revokeConfirm' => 'Arrêter de cautionner cette personne ?', 'yourPeople.offline' => 'Vous êtes hors ligne — réessayez quand vous êtes connecté', 'ratings.rate' => 'Évaluer cette personne', 'ratings.edit' => 'Modifier votre évaluation', 'ratings.commentHint' => 'Comment ça s\'est passé ? (optionnel)', 'ratings.fromYourCircle' => ({required Object n}) => '${n} de gens que vous connaissez', 'ratings.retract' => 'Retirer votre évaluation', 'ratings.saved' => 'Évaluation enregistrée', 'notifications.newMessageFrom' => ({required Object name}) => 'Nouveau message de ${name}', 'plantare.title' => 'Plantares', 'plantare.help' => 'Un Plantare est un engagement à multiplier une semence et en rendre une partie — comment une variété continue son voyage de main en main. Ce n\'est pas une vente.', 'plantare.add' => 'Ajouter un engagement', 'plantare.empty' => 'Pas encore d\'engagements. Quand vous partagez ou recevez une graine avec la promesse de la cultiver et d\'en renvoyer une partie, notez-le ici.', 'plantare.iReturn' => 'Je la multiplie et la rends', 'plantare.owedToMe' => 'Ils m\'en renvoient', 'plantare.direction' => 'Qui multiplie et rend', 'plantare.counterparty' => 'Avec qui ?', 'plantare.counterpartyHint' => 'Une personne ou un collectif (optionnel)', 'plantare.owed' => 'Qu\'est-ce qui revient ?', 'plantare.owedHint' => 'p. ex. une poignée la saison prochaine (optionnel)', 'plantare.note' => 'Note (optionnel)', 'plantare.save' => 'Enregistrer', 'plantare.markReturned' => 'Marquer comme rendu', 'plantare.markForgiven' => 'Clore l\'engagement', 'plantare.reopen' => 'Rouvrir', 'plantare.delete' => 'Retirer', 'plantare.statusReturned' => 'Rendu', 'plantare.statusForgiven' => 'Clôturé', 'plantare.openSection' => 'En attente', 'plantare.settledSection' => 'Fermés', 'plantare.removeConfirm' => 'Retirer cet engagement ?', 'handover.title' => 'Graines échangées', 'handover.help' => 'Un cadeau, un échange ou une vente — notez-le, avec une promesse de retour ou pas.', 'handover.iGave' => 'J\'ai donné des graines', 'handover.iReceived' => 'J\'ai reçu des graines', 'handover.whichLot' => 'Quel lot ?', 'handover.howMuch' => 'Combien ?', 'handover.allOfIt' => 'Tout', 'handover.partOfIt' => 'Une partie', 'handover.paymentChip' => 'Il y a eu un échange d\'argent', 'handover.promiseGave' => 'Ils me renverront de la graine', 'handover.promiseReceived' => 'Je rendrai de la graine', 'sale.title' => 'Ventes', 'sale.help' => 'Enregistrez les graines que vous avez vendues ou achetées — argent, Ğ1, ou n\'importe quelle monnaie. Un modèle distinct d\'un cadeau ou d\'un Plantare. Aucune commission n\'est jamais prélevée sur les graines.', 'sale.add' => 'Enregistrer une vente', 'sale.empty' => 'Pas encore de ventes. Notez ici ce que vous vendez ou achetez.', 'sale.iSold' => 'J\'ai vendu', 'sale.iBought' => 'J\'ai acheté', _ => null, } ?? switch (path) { 'sale.direction' => 'Vendu ou acheté ?', 'sale.counterparty' => 'Avec qui ?', 'sale.counterpartyHint' => 'Une personne ou un collectif (optionnel)', 'sale.amount' => 'Montant', 'sale.currency' => 'Monnaie', 'sale.currencyHint' => '€, Ğ1, heures… (optionnel)', 'sale.hours' => 'heures', 'sale.note' => 'Note (optionnel)', 'sale.save' => 'Enregistrer', 'sale.delete' => 'Retirer', 'sale.removeConfirm' => 'Retirer cette vente ?', 'legal.title' => 'Confidentialité & règles', 'legal.subtitle' => 'Votre confidentialité, les règles du marché et le partage légal de semences', 'legal.privacyTitle' => 'Votre confidentialité', 'legal.privacyBody' => 'Tane fonctionne sans compte, et tout ce que vous enregistrez reste sur votre appareil, chiffré. Il n\'y a pas de publicités, pas de trackers, et pas de serveur Tane.\n\nRien n\'est partagé sauf si vous le choisissez : quand vous publiez une offre ou votre profil, ou envoyez un message, cela passe par des serveurs gérés par la communauté. Les offres ne portent qu\'une zone approximative — jamais votre adresse.\n\nCe que vous publiez est public, et des copies peuvent rester même après l\'avoir retiré — alors partagez avec prudence.', 'legal.rulesTitle' => 'Les règles du jeu', 'legal.rulesBody' => 'Tane est un outil, pas un magasin : les échanges sont convenus directement entre les gens, et personne ne prend de commission. Cela signifie aussi que vous êtes responsable de ce que vous offrez et envoyez.\n\nSur le marché : soyez honnête avec vos graines, n\'offrez que ce que vous pouvez partager, traitez les gens bien et ne faites pas de spam. Vous pouvez bloquer n\'importe qui et signaler les offres ou les gens qui enfreignent les règles — les signalements sont traités sur les serveurs communautaires.', 'legal.seedsTitle' => 'À propos du partage de semences et de plants', 'legal.seedsBody' => 'Donner et échanger des graines entre amateurs est largement reconnu dans la plupart des pays. La vente peut être différente : dans de nombreux endroits, vendre des graines de variétés non officiellement enregistrées est restreint — vérifiez votre législation locale avant de demander un prix.\n\nEnvoyer des graines dans un autre pays est souvent restreint aussi, et les variétés protégées commercialement ne peuvent pas être reproduites sans permission. En cas de doute, gardez-le local et faites-en un cadeau.\n\nCela vaut aussi pour les plants et jeunes plantes, mais une plante vivante peut être soumise à des règles de transport et phytosanitaires plus strictes que les graines : la déplacer entre régions ou pays peut nécessiter des contrôles supplémentaires.', 'legal.readFull' => 'Lire les documents complets en ligne', 'marketGate.title' => 'Avant de rejoindre le marché', 'marketGate.intro' => 'Le marché est un espace partagé entre voisins. En continuant, vous acceptez quelques règles simples :', 'marketGate.ruleHonest' => 'Soyez honnête avec les graines que vous offrez', 'marketGate.ruleLegal' => 'Partagez uniquement ce que vous êtes autorisé à partager où vous vivez', 'marketGate.ruleRespect' => 'Traitez les gens bien — pas de spam, pas d\'abus', 'marketGate.publicNote' => 'Ce que vous publiez ici est public, et des copies peuvent rester même si vous le retirez plus tard.', 'marketGate.viewLegal' => 'Confidentialité & règles', 'marketGate.accept' => 'J\'accepte', 'marketGate.decline' => 'Pas maintenant', 'report.offer' => 'Signaler cette offre', 'report.person' => 'Signaler cette personne', 'report.title' => 'Signaler', 'report.prompt' => 'Qu\'est-ce qui ne va pas ?', 'report.reasonSpam' => 'Spam ou escroquerie', 'report.reasonAbuse' => 'Abusif ou irrespectueux', 'report.reasonIllegal' => 'Graines qui ne devraient pas être offertes', 'report.reasonOther' => 'Autre chose', 'report.detailsHint' => 'Ajouter des détails (optionnel)', 'report.send' => 'Envoyer le signalement', 'report.sentHidden' => 'Signalement envoyé — vous ne verrez plus cela', 'report.failed' => 'Impossible d\'envoyer le signalement — vérifiez votre connexion', 'report.alsoBlock' => 'Bloquer aussi cette personne', 'block.action' => 'Bloquer cette personne', 'block.confirmTitle' => 'Bloquer cette personne ?', 'block.confirmBody' => 'Vous ne verrez plus ses offres ou messages. Vous pouvez la débloquer plus tard sous Personnes bloquées dans la configuration du partage.', 'block.confirm' => 'Bloquer', 'block.blockedToast' => 'Personne bloquée — ses offres et messages sont cachés', 'block.manageTitle' => 'Personnes bloquées', 'block.manageEmpty' => 'Vous n\'avez bloqué personne', 'block.unblock' => 'Débloquer', _ => null, }; } }