///
/// 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: <root>
class TranslationsFr extends Translations with BaseTranslations<AppLocale, Translations> {
	/// You can call this constructor and build your own translation instance of this locale.
	/// Constructing via the enum [AppLocale.build] is preferred.
	TranslationsFr({Map<String, Node>? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver, TranslationMetadata<AppLocale, Translations>? 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 <fr>.
	@override final TranslationMetadata<AppLocale, Translations> $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<AppLocale, Translations>? meta}) => TranslationsFr(meta: meta ?? this.$meta);

	// Translations
	@override late final _Translations$app$fr app = _Translations$app$fr._(_root);
	@override late final _Translations$auth$fr auth = _Translations$auth$fr._(_root);
	@override late final _Translations$common$fr common = _Translations$common$fr._(_root);
	@override late final _Translations$screens$fr screens = _Translations$screens$fr._(_root);
	@override late final _Translations$update$fr update = _Translations$update$fr._(_root);
	@override late final _Translations$settings$fr settings = _Translations$settings$fr._(_root);
	@override late final _Translations$search$fr search = _Translations$search$fr._(_root);
	@override late final _Translations$hotkeys$fr hotkeys = _Translations$hotkeys$fr._(_root);
	@override late final _Translations$fileInfo$fr fileInfo = _Translations$fileInfo$fr._(_root);
	@override late final _Translations$mediaMenu$fr mediaMenu = _Translations$mediaMenu$fr._(_root);
	@override late final _Translations$rateSheet$fr rateSheet = _Translations$rateSheet$fr._(_root);
	@override late final _Translations$accessibility$fr accessibility = _Translations$accessibility$fr._(_root);
	@override late final _Translations$tooltips$fr tooltips = _Translations$tooltips$fr._(_root);
	@override late final _Translations$audioTracks$fr audioTracks = _Translations$audioTracks$fr._(_root);
	@override late final _Translations$videoControls$fr videoControls = _Translations$videoControls$fr._(_root);
	@override late final _Translations$messages$fr messages = _Translations$messages$fr._(_root);
	@override late final _Translations$subtitlingStyling$fr subtitlingStyling = _Translations$subtitlingStyling$fr._(_root);
	@override late final _Translations$mpvConfig$fr mpvConfig = _Translations$mpvConfig$fr._(_root);
	@override late final _Translations$dialog$fr dialog = _Translations$dialog$fr._(_root);
	@override late final _Translations$profiles$fr profiles = _Translations$profiles$fr._(_root);
	@override late final _Translations$connections$fr connections = _Translations$connections$fr._(_root);
	@override late final _Translations$discover$fr discover = _Translations$discover$fr._(_root);
	@override late final _Translations$errors$fr errors = _Translations$errors$fr._(_root);
	@override late final _Translations$libraries$fr libraries = _Translations$libraries$fr._(_root);
	@override late final _Translations$about$fr about = _Translations$about$fr._(_root);
	@override late final _Translations$serverSelection$fr serverSelection = _Translations$serverSelection$fr._(_root);
	@override late final _Translations$hubDetail$fr hubDetail = _Translations$hubDetail$fr._(_root);
	@override late final _Translations$logs$fr logs = _Translations$logs$fr._(_root);
	@override late final _Translations$licenses$fr licenses = _Translations$licenses$fr._(_root);
	@override late final _Translations$navigation$fr navigation = _Translations$navigation$fr._(_root);
	@override late final _Translations$explore$fr explore = _Translations$explore$fr._(_root);
	@override late final _Translations$liveTv$fr liveTv = _Translations$liveTv$fr._(_root);
	@override late final _Translations$collections$fr collections = _Translations$collections$fr._(_root);
	@override late final _Translations$playlists$fr playlists = _Translations$playlists$fr._(_root);
	@override late final _Translations$music$fr music = _Translations$music$fr._(_root);
	@override late final _Translations$watchTogether$fr watchTogether = _Translations$watchTogether$fr._(_root);
	@override late final _Translations$downloads$fr downloads = _Translations$downloads$fr._(_root);
	@override late final _Translations$shaders$fr shaders = _Translations$shaders$fr._(_root);
	@override late final _Translations$companionRemote$fr companionRemote = _Translations$companionRemote$fr._(_root);
	@override late final _Translations$videoSettings$fr videoSettings = _Translations$videoSettings$fr._(_root);
	@override late final _Translations$performanceOverlay$fr performanceOverlay = _Translations$performanceOverlay$fr._(_root);
	@override late final _Translations$externalPlayer$fr externalPlayer = _Translations$externalPlayer$fr._(_root);
	@override late final _Translations$metadataEdit$fr metadataEdit = _Translations$metadataEdit$fr._(_root);
	@override late final _Translations$matchScreen$fr matchScreen = _Translations$matchScreen$fr._(_root);
	@override late final _Translations$serverTasks$fr serverTasks = _Translations$serverTasks$fr._(_root);
	@override late final _Translations$trakt$fr trakt = _Translations$trakt$fr._(_root);
	@override late final _Translations$seerr$fr seerr = _Translations$seerr$fr._(_root);
	@override late final _Translations$services$fr services = _Translations$services$fr._(_root);
	@override late final _Translations$addServer$fr addServer = _Translations$addServer$fr._(_root);
}

// 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 => 'Plezy';
}

// Path: auth
class _Translations$auth$fr extends Translations$auth$en {
	_Translations$auth$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get signInWithPlex => 'Se connecter avec Plex';
	@override String get showQRCode => 'Afficher le code QR';
	@override String get authenticate => 'S\'authentifier';
	@override String get authenticationTimeout => 'Délai d\'authentification expiré. Veuillez réessayer.';
	@override String get scanQRToSignIn => 'Scannez ce QR code pour vous connecter';
	@override String get waitingForAuth => 'En attente d\'authentification...\nConnectez-vous depuis votre navigateur.';
	@override String get useBrowser => 'Utiliser le navigateur';
	@override String get or => 'ou';
	@override String get connectToJellyfin => 'Se connecter à Jellyfin';
	@override String get useQuickConnect => 'Utiliser Quick Connect';
	@override String get quickConnectInstructions => 'Ouvrez Quick Connect dans Jellyfin et saisissez ce code.';
	@override String get quickConnectWaiting => 'En attente d\'approbation…';
	@override String get quickConnectCancel => 'Annuler';
	@override String get quickConnectExpired => 'Quick Connect a expiré. Réessayez.';
	@override String get localDataRecoveryRequired => 'Plezy n’a pas pu récupérer en toute sécurité les données locales de connexion et de lecture en attente. Veuillez vous reconnecter.';
}

// 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 cancel => 'Annuler';
	@override String get save => 'Enregistrer';
	@override String get close => 'Fermer';
	@override String get clear => 'Effacer';
	@override String get reset => 'Réinitialiser';
	@override String get later => 'Plus tard';
	@override String get submit => 'Soumettre';
	@override String get confirm => 'Confirmer';
	@override String get retry => 'Réessayer';
	@override String get logout => 'Se déconnecter';
	@override String get unknown => 'Inconnu';
	@override String get refresh => 'Rafraîchir';
	@override String get yes => 'Oui';
	@override String get no => 'Non';
	@override String get delete => 'Supprimer';
	@override String get edit => 'Modifier';
	@override String get shuffle => 'Mélanger';
	@override String get addTo => 'Ajouter à…';
	@override String get createNew => 'Créer';
	@override String get connect => 'Se connecter';
	@override String get disconnect => 'Se déconnecter';
	@override String get play => 'Lire';
	@override String get pause => 'Pause';
	@override String get resume => 'Reprendre';
	@override String get error => 'Erreur';
	@override String get search => 'Rechercher';
	@override String get home => 'Accueil';
	@override String get back => 'Retour';
	@override String get settings => 'Paramètres';
	@override String get mute => 'Couper le son';
	@override String get ok => 'OK';
	@override String get off => 'Désactivé';
	@override String seasonNumber({required Object number}) => 'Saison ${number}';
	@override String episodeNumberTitle({required Object number, required Object title}) => 'Épisode ${number} – ${title}';
	@override String chapterNumber({required Object number}) => 'Chapitre ${number}';
	@override String get reconnect => 'Se reconnecter';
	@override String get viewAll => 'Tout afficher';
	@override String get checkingNetwork => 'Vérification du réseau...';
	@override String get loadingServers => 'Chargement des serveurs...';
	@override String get connectingToServers => 'Connexion aux serveurs...';
	@override String get startingOfflineMode => 'Démarrage en mode hors ligne…';
	@override String get loading => 'Chargement...';
	@override String get fullscreen => 'Plein écran';
	@override String get exitFullscreen => 'Quitter le plein écran';
	@override String get pressBackAgainToExit => 'Appuyez à nouveau sur retour pour quitter';
}

// Path: screens
class _Translations$screens$fr extends Translations$screens$en {
	_Translations$screens$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get licenses => 'Licences';
	@override String get switchProfile => 'Changer de profil';
	@override String get subtitleStyling => 'Configuration des sous-titres';
	@override String get mpvConfig => 'mpv.conf';
	@override String get logs => 'Journaux';
}

// Path: update
class _Translations$update$fr extends Translations$update$en {
	_Translations$update$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get available => 'Mise à jour disponible';
	@override String versionAvailable({required Object version}) => 'Version ${version} disponible';
	@override String currentVersion({required Object version}) => 'Actuelle : ${version}';
	@override String get skipVersion => 'Ignorer cette version';
	@override String get viewRelease => 'Voir les notes de version';
	@override String get latestVersion => 'Vous utilisez la dernière version';
	@override String get checkFailed => 'Échec de la vérification des mises à jour';
}

// 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 title => 'Paramètres';
	@override String get supportDeveloper => 'Soutenir Plezy';
	@override String get supportDeveloperDescription => 'Faites un don via Liberapay pour financer le développement';
	@override String get language => 'Langue';
	@override String get theme => 'Thème';
	@override String get appearance => 'Apparence';
	@override String get videoPlayback => 'Lecture vidéo';
	@override String get videoPlaybackDescription => 'Configurer le comportement de lecture';
	@override String get advanced => 'Avancé';
	@override String get episodePosterMode => 'Style de l’affiche de l’épisode';
	@override String get seriesPoster => 'Affiche de la série';
	@override String get seasonPoster => 'Affiche de la saison';
	@override String get episodeThumbnail => 'Miniature';
	@override String get showHeroSectionDescription => 'Afficher le carrousel de contenu en vedette sur l\'écran d\'accueil';
	@override String get secondsLabel => 'Secondes';
	@override String get minutesLabel => 'Minutes';
	@override String get secondsShort => 's';
	@override String get minutesShort => 'm';
	@override String durationHint({required Object min, required Object max}) => 'Saisissez la durée (${min}–${max})';
	@override String get systemTheme => 'Système';
	@override String get lightTheme => 'Clair';
	@override String get darkTheme => 'Sombre';
	@override String get oledTheme => 'OLED';
	@override String get libraryDensity => 'Densité des bibliothèques';
	@override String get compact => 'Compact';
	@override String get comfortable => 'Confortable';
	@override String get tvCornerSpotlightBackdrop => 'Illustration en vedette dans le coin';
	@override String get tvCornerSpotlightBackdropDescription => 'Afficher l’illustration en vedette dans le coin supérieur droit plutôt qu’en plein écran';
	@override String get viewMode => 'Mode d\'affichage';
	@override String get gridView => 'Grille';
	@override String get listView => 'Liste';
	@override String get showHeroSection => 'Afficher la section à la une';
	@override String get continueWatchingAction => 'Action de « Continuer à regarder »';
	@override String get continueWatchingPlay => 'Lire';
	@override String get continueWatchingDetails => 'Ouvrir les détails';
	@override String get episodeAction => 'Action des épisodes';
	@override String get episodePlay => 'Lire';
	@override String get episodeDetails => 'Ouvrir les détails';
	@override String get useGlobalHubs => 'Utiliser la mise en page d\'accueil';
	@override String get useGlobalHubsDescription => 'Afficher des hubs d\'accueil unifiés. Sinon, utiliser les recommandations de bibliothèque.';
	@override String get showServerNameOnHubs => 'Afficher le nom du serveur sur les hubs';
	@override String get showServerNameOnHubsDescription => 'Toujours afficher les noms des serveurs dans les titres des hubs.';
	@override String get groupLibrariesByServer => 'Grouper les bibliothèques par serveur';
	@override String get groupLibrariesByServerDescription => 'Regrouper les bibliothèques de la barre latérale par serveur multimédia.';
	@override String get alwaysKeepSidebarOpen => 'Toujours garder la barre latérale ouverte';
	@override String get alwaysKeepSidebarOpenDescription => 'La barre latérale reste étendue et la zone de contenu s\'adapte';
	@override String get showUnwatchedCount => 'Afficher le nombre d’éléments non vus';
	@override String get showUnwatchedCountDescription => 'Afficher le nombre d’épisodes non vus pour les séries et les saisons';
	@override String get showEpisodeNumberOnCards => 'Afficher le numéro de l’épisode sur les cartes';
	@override String get showEpisodeNumberOnCardsDescription => 'Afficher les numéros de saison et d’épisode sur les cartes d’épisode';
	@override String get showSeasonPostersOnTabs => 'Afficher les affiches de saison sur les onglets';
	@override String get showSeasonPostersOnTabsDescription => 'Afficher l’affiche de chaque saison au-dessus de son onglet';
	@override String get tvFullCardLayout => 'Cartes TV plein format';
	@override String get tvFullCardLayoutDescription => 'Utiliser des cartes TV composées uniquement d’une image, avec le nom des acteurs en surimpression';
	@override String get focusGlow => 'Halo de sélection';
	@override String get focusGlowDescription => 'Afficher un léger halo autour de la carte sélectionnée';
	@override String get visualEffects => 'Effets visuels';
	@override String get visualEffectsAuto => 'Automatique';
	@override String get visualEffectsAutoDescription => 'Réduire automatiquement les effets sur les appareils peu puissants';
	@override String get visualEffectsFull => 'Complets';
	@override String get visualEffectsReduced => 'Réduits';
	@override String get visualEffectsReducedDescription => 'Moins d’animations et d’illustrations de plus faible résolution';
	@override String get hideSpoilers => 'Masquer les spoilers des épisodes non vus';
	@override String get hideSpoilersDescription => 'Flouter les miniatures et descriptions des épisodes non vus';
	@override String get playerBackend => 'Moteur de lecture';
	@override String get exoPlayer => 'ExoPlayer';
	@override String get mpv => 'mpv';
	@override String get hardwareDecoding => 'Décodage matériel';
	@override String get hardwareDecodingDescription => 'Utiliser l’accélération matérielle lorsqu’elle est disponible';
	@override String get bufferSize => 'Taille du tampon';
	@override String bufferSizeMB({required Object size}) => '${size} Mo';
	@override String get bufferSizeAuto => 'Automatique (recommandé)';
	@override String bufferSizeWarning({required Object heap, required Object size}) => '${heap} Mo de mémoire disponible. Un tampon de ${size} Mo peut affecter la lecture.';
	@override String get defaultQualityTitle => 'Qualité par défaut';
	@override String get musicQualityTitle => 'Qualité de la musique';
	@override String get subtitleStyling => 'Style des sous-titres';
	@override String get subtitleStylingDescription => 'Personnaliser l’apparence des sous-titres';
	@override String get smallSkipDuration => 'Durée du saut court';
	@override String get largeSkipDuration => 'Durée du saut long';
	@override String get rewindOnResume => 'Rembobiner à la reprise';
	@override String secondsUnit({required Object seconds}) => '${seconds} secondes';
	@override String get defaultSleepTimer => 'Minuterie de mise en veille par défaut';
	@override String minutesUnit({required Object minutes}) => '${minutes} minutes';
	@override String get rememberTrackSelections => 'Mémoriser les pistes choisies pour chaque série ou film';
	@override String get rememberTrackSelectionsDescription => 'Mémoriser les choix audio et sous-titres par titre';
	@override String get showChapterMarkersOnTimeline => 'Afficher les marqueurs de chapitres sur la barre de lecture';
	@override String get showChapterMarkersOnTimelineDescription => 'Segmenter la barre de lecture aux limites des chapitres';
	@override String get clickVideoTogglesPlayback => 'Cliquer sur la vidéo pour alterner entre lecture et pause';
	@override String get clickVideoTogglesPlaybackDescription => 'Cliquer sur la vidéo pour lire ou mettre en pause plutôt que d’afficher les commandes';
	@override String get videoPlayerControls => 'Commandes du lecteur vidéo';
	@override String get keyboardShortcuts => 'Raccourcis clavier';
	@override String get keyboardShortcutsDescription => 'Personnaliser les raccourcis clavier';
	@override String get videoPlayerNavigation => 'Navigation dans le lecteur vidéo';
	@override String get videoPlayerNavigationDescription => 'Utiliser les touches fléchées pour parcourir les commandes du lecteur vidéo';
	@override String get watchTogetherRelay => 'Relais pour Regarder ensemble';
	@override String get watchTogetherRelayDescription => 'Définir un relais personnalisé. Tous les participants doivent utiliser le même serveur.';
	@override String get watchTogetherRelayHint => 'https://mon-relais.exemple.fr';
	@override String get watchTogetherRelayInvalid => 'Saisissez une URL de base HTTP ou HTTPS valide pour le relais.';
	@override String get crashReporting => 'Rapports de plantage';
	@override String get crashReportingDescription => 'Envoyer des rapports de plantage pour améliorer l\'application';
	@override String get debugLogging => 'Journalisation de débogage';
	@override String get debugLoggingDescription => 'Activer la journalisation détaillée pour le dépannage';
	@override String get viewLogs => 'Voir les journaux';
	@override String get viewLogsDescription => 'Voir les journaux de l’application';
	@override String get resetSettings => 'Réinitialiser les paramètres';
	@override String get resetSettingsDescription => 'Restaurer les paramètres par défaut. Action irréversible.';
	@override String get resetSettingsSuccess => 'Réinitialisation des paramètres réussie';
	@override String get backup => 'Sauvegarde';
	@override String get exportSettings => 'Exporter les paramètres';
	@override String get exportSettingsDescription => 'Enregistrer vos préférences dans un fichier';
	@override String get exportSettingsSuccess => 'Paramètres exportés';
	@override String get importSettings => 'Importer les paramètres';
	@override String get importSettingsDescription => 'Restaurer les préférences depuis un fichier';
	@override String get importSettingsConfirm => 'Cela remplacera vos paramètres actuels. Continuer ?';
	@override String get importSettingsSuccess => 'Paramètres importés';
	@override String get importSettingsInvalidFile => 'Ce fichier n’est pas une exportation valide des paramètres de Plezy';
	@override String get importSettingsNoUser => 'Connectez-vous avant d’importer les paramètres';
	@override String get shortcutsReset => 'Raccourcis réinitialisés aux valeurs par défaut';
	@override String get about => 'À propos';
	@override String get aboutDescription => 'Informations sur l\'application et licences';
	@override String get updates => 'Mises à jour';
	@override String get updateAvailable => 'Mise à jour disponible';
	@override String get checkForUpdates => 'Vérifier les mises à jour';
	@override String get autoCheckUpdatesOnStartup => 'Vérifier automatiquement les mises à jour au démarrage';
	@override String get autoCheckUpdatesOnStartupDescription => 'Notifier au lancement quand une mise à jour est disponible';
	@override String get validationErrorEnterNumber => 'Veuillez saisir un nombre valide';
	@override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'La durée doit être comprise entre ${min} et ${max} ${unit}';
	@override String shortcutAlreadyAssigned({required Object action}) => 'Raccourci déjà attribué à ${action}';
	@override String shortcutUpdated({required Object action}) => 'Raccourci mis à jour pour ${action}';
	@override String get saveFailed => 'Impossible d’enregistrer les modifications. Réessayez.';
	@override String get autoSkip => 'Saut automatique';
	@override String get autoSkipIntro => 'Passer automatiquement l’introduction';
	@override String get autoSkipIntroDescription => 'Passer automatiquement les marqueurs d’introduction après quelques secondes';
	@override String get autoSkipCredits => 'Passer automatiquement le générique';
	@override String get autoSkipCreditsDescription => 'Passer automatiquement le générique et lire l’épisode suivant';
	@override String get forceSkipMarkerFallback => 'Forcer les marqueurs de secours';
	@override String get forceSkipMarkerFallbackDescription => 'Utiliser les motifs des titres de chapitre même lorsque Plex fournit des marqueurs';
	@override String get autoSkipDelay => 'Délai avant le saut automatique';
	@override String autoSkipDelayDescription({required Object seconds}) => 'Attendre ${seconds} secondes avant le saut automatique';
	@override String get introPattern => 'Motif du marqueur d’introduction';
	@override String get introPatternDescription => 'Expression régulière permettant de reconnaître les marqueurs d’introduction dans les titres de chapitre';
	@override String get creditsPattern => 'Motif du marqueur de générique';
	@override String get creditsPatternDescription => 'Expression régulière permettant de reconnaître les marqueurs de générique dans les titres de chapitre';
	@override String get invalidRegex => 'Expression régulière invalide';
	@override String get regex => 'Expression régulière';
	@override String get downloads => 'Téléchargements';
	@override String get downloadLocationDescription => 'Choisir où stocker le contenu téléchargé';
	@override String get downloadLocationDefault => 'Par défaut (stockage de l\'application)';
	@override String get downloadLocationCustom => 'Emplacement personnalisé';
	@override String get selectFolder => 'Sélectionner un dossier';
	@override String get resetToDefault => 'Réinitialiser les paramètres par défaut';
	@override String currentPath({required Object path}) => 'Actuel : ${path}';
	@override String get downloadLocationChanged => 'Emplacement de téléchargement modifié';
	@override String get downloadLocationReset => 'Emplacement de téléchargement réinitialisé à la valeur par défaut';
	@override String get downloadLocationInvalid => 'Le dossier sélectionné n\'est pas accessible en écriture';
	@override String get downloadLocationPickerUnavailable => 'La sélection de dossier n’est pas disponible sur cet appareil';
	@override String get downloadOnWifiOnly => 'Télécharger uniquement en Wi-Fi';
	@override String get downloadOnWifiOnlyDescription => 'Empêcher les téléchargements via les données mobiles';
	@override String get autoRemoveWatchedDownloads => 'Supprimer automatiquement les téléchargements vus';
	@override String get autoRemoveWatchedDownloadsDescription => 'Supprimer automatiquement les téléchargements vus';
	@override String get cellularDownloadBlocked => 'Les téléchargements sont bloqués sur le réseau mobile. Utilisez le Wi-Fi ou modifiez ce paramètre.';
	@override String get maxVolume => 'Volume maximal';
	@override String get maxVolumeDescription => 'Autoriser l\'augmentation du volume au-delà de 100 % pour les médias silencieux';
	@override String maxVolumePercent({required Object percent}) => '${percent}%';
	@override String get discordRichPresence => 'Discord Rich Presence';
	@override String get discordRichPresenceDescription => 'Afficher sur Discord ce que vous regardez';
	@override String get services => 'Services';
	@override String get servicesDescription => 'Connecter Trakt, MyAnimeList, Seerr et d’autres services';
	@override String get manageLibrariesDescription => 'Réorganiser et masquer les bibliothèques';
	@override String get companionRemoteServer => 'Serveur de télécommande';
	@override String get companionRemoteServerDescription => 'Autoriser les appareils mobiles de votre réseau à contrôler cette application';
	@override String get autoPip => 'Mode image dans l’image automatique';
	@override String get autoPipDescription => 'Passer en mode image dans l’image si vous quittez l’application pendant la lecture';
	@override String get matchContentFrameRate => 'Adapter la fréquence d’images au contenu';
	@override String get matchContentFrameRateDescription => 'Adapter la fréquence de rafraîchissement de l’écran au contenu vidéo';
	@override String get matchRefreshRate => 'Adapter la fréquence de rafraîchissement';
	@override String get matchRefreshRateDescription => 'Adapter la fréquence d\'affichage en plein écran';
	@override String get matchDynamicRange => 'Adapter la plage dynamique';
	@override String get matchDynamicRangeDescription => 'Activer HDR pour le contenu HDR, puis revenir en SDR';
	@override String get displaySwitchDelay => 'Délai de changement d\'affichage';
	@override String get tunneledPlayback => 'Lecture tunnelée';
	@override String get tunneledPlaybackDescription => 'Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.';
	@override String get audioPassthrough => 'Transmission audio directe';
	@override String get audioPassthroughDescription => 'Envoyer l’audio Dolby/DTS à votre ampli ou téléviseur sans le réencoder afin de préserver le son surround. Désactivez cette option en l’absence de son.';
	@override String get audioPassthroughDescriptionAppleTv => 'Utiliser le décodeur Dolby natif d’Apple pour le Dolby Digital Plus, y compris Atmos. Le DTS et le TrueHD sont toujours lus en PCM multicanal. Désactivez cette option en l’absence de son.';
	@override String get audioDownmix => 'Conversion en stéréo';
	@override String get audioDownmixDescription => 'Convertir le son surround en deux canaux pour les enceintes stéréo ou le casque';
	@override String get downmixCenterBoost => 'Renforcement du canal central';
	@override String downmixCenterBoostValue({required Object db}) => '${db} dB';
	@override String get downmixCenterBoostLabel => 'Renforcement (dB)';
	@override String get downmixCenterBoostShort => 'dB';
	@override String get audioDownmixNormalize => 'Normaliser le volume lors de la conversion en stéréo';
	@override String get audioDownmixNormalizeDescription => 'Atténuer le mixage pour éviter la saturation. Désactivez cette option pour conserver le volume d’origine, au risque de déformer les scènes bruyantes.';
	@override String get atmosDiagnostics => 'Test de sortie Atmos';
	@override String get atmosDiagnosticsDescription => 'Diagnostiquer la sortie Dolby Atmos en lisant des signaux de test via le lecteur système';
	@override String get atmosTestHlsAtmos => 'Flux Atmos d\'Apple';
	@override String get atmosTestHlsAtmosDescription => 'Flux Dolby Atmos réputé fiable. L\'ampli devrait afficher Dolby Atmos.';
	@override String get atmosTestHlsControl => 'Flux surround d\'Apple';
	@override String get atmosTestHlsControlDescription => 'Flux témoin sans Atmos. L\'ampli devrait afficher du surround sans Atmos.';
	@override String get atmosTestRawStream => 'Flux EAC3 brut';
	@override String get atmosTestRawStreamDescription => 'Diffuse le fichier de test exactement comme la lecture Atmos du lecteur. Nécessite l\'URL du fichier de test.';
	@override String get atmosTestRawFile => 'Fichier EAC3 brut';
	@override String get atmosTestRawFileDescription => 'Lit le fichier de test avec une longueur connue. Nécessite l\'URL du fichier de test.';
	@override String get atmosTestAsbarNative => 'Moteur de rendu à tampon d\'échantillons (natif)';
	@override String get atmosTestAsbarNativeDescription => 'Transmet l\'audio compressé intact du fichier directement au moteur de rendu du système. Nécessite l\'URL du fichier de test.';
	@override String get atmosTestAsbarGenerated => 'Moteur de rendu à tampon d\'échantillons (reconstruit)';
	@override String get atmosTestAsbarGeneratedDescription => 'Identique, mais avec la description audio reconstruite comme à la lecture. Nécessite l\'URL du fichier de test.';
	@override String get atmosTestSessionMode => 'Utiliser le mode lecture de films';
	@override String get atmosTestSessionModeDescription => 'Désactivé utilise le mode documenté par Dolby. Activé utilise le mode précédent.';
	@override String get atmosTestShowRoutePicker => 'Choisir la sortie AirPlay';
	@override String get atmosTestHideRoutePicker => 'Masquer le sélecteur AirPlay';
	@override String get atmosTestRoutePickerDescription => 'Envoie le test vers un récepteur AirPlay. Seul AirPlay indique le mode audio retenu.';
	@override String get atmosTestStop => 'Arrêter le test';
	@override String get atmosTestUrl => 'URL du fichier de test';
	@override String get atmosTestUrlDescription => 'URL HTTP d\'un fichier .ec3 Dolby Atmos brut (extrait par ex. avec ffmpeg)';
	@override String get atmosTestUrlMissing => 'Définissez d\'abord l\'URL du fichier de test';
	@override String get atmosTestStatus => 'État';
	@override String get dvConversionMode => 'Conversion Dolby Vision';
	@override String get dvConversionModeDescription => 'Choisir comment ExoPlayer gère les fichiers Dolby Vision de profil 7.';
	@override String get dvConversionAuto => 'Auto';
	@override String get dvConversionNative => 'Natif / désactivé';
	@override String get dvConversionDv81 => 'P7 → P8.1';
	@override String get dvConversionHevcStrip => 'P7 → HEVC';
	@override String get dvConversionAutoDescription => 'Utiliser la détection des capacités de l’appareil et le comportement de repli normal';
	@override String get dvConversionNativeDescription => 'Forcer le DV7 natif et bloquer la nouvelle tentative de conversion DV';
	@override String get dvConversionDv81Description => 'Forcer la conversion RPU intégrée vers le profil 8.1 de Dolby Vision';
	@override String get dvConversionHevcStripDescription => 'Supprimer les couches RPU/EL Dolby Vision et présenter du HEVC simple';
	@override String get requireProfileSelectionOnOpen => 'Demander le profil à l\'ouverture';
	@override String get requireProfileSelectionOnOpenDescription => 'Afficher la sélection de profil à chaque ouverture de l\'application';
	@override String get forceTvMode => 'Forcer le mode TV';
	@override String get forceTvModeDescription => 'Forcer l’interface TV sur les appareils qui ne sont pas détectés automatiquement. Redémarrage requis.';
	@override String get startInFullscreen => 'Démarrer en plein écran';
	@override String get startInFullscreenDescription => 'Ouvrir Plezy en mode plein écran au lancement';
	@override String get exitFullscreenOnPlayerClose => 'Quitter le plein écran à la fermeture du lecteur';
	@override String get exitFullscreenOnPlayerCloseDescription => 'Quitter automatiquement le plein écran lors de la fermeture du lecteur vidéo';
	@override String get autoHidePerformanceOverlay => 'Masquer automatiquement les données de performance';
	@override String get autoHidePerformanceOverlayDescription => 'Masquer progressivement les données de performance avec les commandes de lecture';
	@override String get showNavBarLabels => 'Afficher les libellés de la barre de navigation';
	@override String get showNavBarLabelsDescription => 'Afficher les libellés sous les icônes de la barre de navigation';
	@override String get startupSection => 'Section de démarrage';
	@override String get liveTvDefaultFavorites => 'Chaînes favorites par défaut';
	@override String get liveTvDefaultFavoritesDescription => 'Afficher uniquement les chaînes favorites à l\'ouverture de la TV en direct';
	@override String get display => 'Affichage';
	@override String get homeScreen => 'Écran d\'accueil';
	@override String get navigation => 'Navigation';
	@override String get window => 'Fenêtre';
	@override String get content => 'Contenu';
	@override String get player => 'Lecteur';
	@override String get subtitlesAndConfig => 'Sous-titres et configuration';
	@override String get seekAndTiming => 'Déplacement et minutage';
	@override String get behavior => 'Comportement';
}

// Path: search
class _Translations$search$fr extends Translations$search$en {
	_Translations$search$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get hint => 'Rechercher des films, des séries, de la musique...';
	@override String get tryDifferentTerm => 'Essayez un autre terme de recherche';
	@override String get searchYourMedia => 'Rechercher dans vos médias';
	@override String get enterTitleActorOrKeyword => 'Entrez un titre, un acteur ou un mot-clé';
}

// Path: hotkeys
class _Translations$hotkeys$fr extends Translations$hotkeys$en {
	_Translations$hotkeys$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String setShortcutFor({required Object actionName}) => 'Définir un raccourci pour ${actionName}';
	@override String get clearShortcut => 'Effacer le raccourci';
	@override String get noShortcutSet => 'Aucun raccourci défini';
	@override String get currentShortcut => 'Raccourci actuel :';
	@override String get pressToRecord => 'Sélectionner pour enregistrer un raccourci';
	@override String get recordingShortcut => 'Appuyez maintenant sur le raccourci';
	@override late final _Translations$hotkeys$actions$fr actions = _Translations$hotkeys$actions$fr._(_root);
}

// Path: fileInfo
class _Translations$fileInfo$fr extends Translations$fileInfo$en {
	_Translations$fileInfo$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Informations sur le fichier';
	@override String get video => 'Vidéo';
	@override String get audio => 'Audio';
	@override String get file => 'Fichier';
	@override String get advanced => 'Avancé';
	@override String get codec => 'Codec';
	@override String get resolution => 'Résolution';
	@override String get bitrate => 'Débit';
	@override String get frameRate => 'Fréquence d\'images';
	@override String get aspectRatio => 'Format d\'image';
	@override String get profile => 'Profil';
	@override String get bitDepth => 'Profondeur de bits';
	@override String get colorSpace => 'Espace colorimétrique';
	@override String get colorRange => 'Gamme de couleurs';
	@override String get colorPrimaries => 'Couleurs primaires';
	@override String get chromaSubsampling => 'Sous-échantillonnage chromatique';
	@override String get channels => 'Canaux';
	@override String get subtitles => 'Sous-titres';
	@override String get overallBitrate => 'Débit global';
	@override String get path => 'Chemin';
	@override String get size => 'Taille';
	@override String get container => 'Conteneur';
	@override String get duration => 'Durée';
	@override String get optimizedForStreaming => 'Optimisé pour le streaming';
	@override String get has64bitOffsets => 'Décalages 64 bits';
}

// Path: mediaMenu
class _Translations$mediaMenu$fr extends Translations$mediaMenu$en {
	_Translations$mediaMenu$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get markAsWatched => 'Marquer comme vu';
	@override String get markAsUnwatched => 'Marquer comme non visionné';
	@override String get removeFromContinueWatching => 'Supprimer de la liste "Continuer à regarder"';
	@override String get viewDetails => 'Voir les détails';
	@override String get goToSeries => 'Aller à la série';
	@override String get shufflePlay => 'Lecture aléatoire';
	@override String get shuffleNotAvailableOffline => 'La lecture aléatoire n’est pas disponible hors ligne';
	@override String get fileInfo => 'Informations sur le fichier';
	@override String get deleteFromServer => 'Supprimer du serveur';
	@override String get confirmDelete => 'Supprimer ce média et ses fichiers de votre serveur ?';
	@override String get deleteMultipleWarning => 'Cela inclut tous les épisodes et leurs fichiers.';
	@override String get mediaDeletedSuccessfully => 'Élément média supprimé avec succès';
	@override String get mediaFailedToDelete => 'Échec de la suppression de l\'élément média';
	@override String get rate => 'Noter';
	@override String get playFromBeginning => 'Lire depuis le début';
	@override String get playVersion => 'Lire la version...';
}

// Path: rateSheet
class _Translations$rateSheet$fr extends Translations$rateSheet$en {
	_Translations$rateSheet$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Noter';
	@override String get server => 'Serveur';
	@override String get favorite => 'Favori';
	@override String get favorited => 'Ajouté aux favoris';
	@override String get saved => 'Enregistré';
	@override String get notAvailable => 'Aucune correspondance trouvée';
	@override String get noConnectedServices => 'Connectez un service dans les paramètres pour pouvoir y attribuer une note.';
}

// Path: accessibility
class _Translations$accessibility$fr extends Translations$accessibility$en {
	_Translations$accessibility$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String mediaCardMovie({required Object title}) => '${title}, film';
	@override String mediaCardShow({required Object title}) => '${title}, série TV';
	@override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}';
	@override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}';
	@override String get mediaCardWatched => 'visionné';
	@override String mediaCardPartiallyWatched({required Object percent}) => '${percent} pour cent visionné';
	@override String get mediaCardUnwatched => 'non visionné';
	@override String get tapToPlay => 'Appuyez pour lire';
	@override String get decrease => 'Diminuer';
	@override String get increase => 'Augmenter';
	@override String decreaseValue({required Object label}) => 'Diminuer ${label}';
	@override String increaseValue({required Object label}) => 'Augmenter ${label}';
	@override String get hue => 'Teinte';
	@override String get saturation => 'Saturation';
	@override String get brightness => 'Luminosité';
	@override String get hexColor => 'Couleur hexadécimale';
	@override String get expandText => 'Développer le texte';
	@override String get collapseText => 'Replier le texte';
	@override String get alphabetNavigation => 'Navigation alphabétique';
	@override String get alphabetScrollHint => 'Balayez vers le haut ou le bas pour changer de lettre';
	@override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Ligne ${row} sur ${rowCount}, colonne ${column} sur ${columnCount}';
	@override String rowPosition({required Object row, required Object rowCount}) => 'Ligne ${row} sur ${rowCount}';
}

// Path: tooltips
class _Translations$tooltips$fr extends Translations$tooltips$en {
	_Translations$tooltips$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get shufflePlay => 'Lecture aléatoire';
	@override String get playTrailer => 'Lire la bande-annonce';
	@override String get markAsWatched => 'Marquer comme vu';
	@override String get markAsUnwatched => 'Marquer comme non vu';
}

// Path: audioTracks
class _Translations$audioTracks$fr extends Translations$audioTracks$en {
	_Translations$audioTracks$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String track({required Object n}) => 'Piste audio ${n}';
}

// Path: videoControls
class _Translations$videoControls$fr extends Translations$videoControls$en {
	_Translations$videoControls$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get audioLabel => 'Audio';
	@override String get subtitlesLabel => 'Sous-titres';
	@override String get resetToZero => 'Réinitialiser à 0 ms';
	@override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}';
	@override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}';
	@override String playsLater({required Object label}) => '${label} : lecture retardée';
	@override String playsEarlier({required Object label}) => '${label} : lecture avancée';
	@override String get noOffset => 'Pas de décalage';
	@override String get letterbox => 'Format letterbox';
	@override String get fillScreen => 'Remplir l’écran';
	@override String get stretch => 'Étirer';
	@override String get lockRotation => 'Verrouiller la rotation';
	@override String get unlockRotation => 'Déverrouiller la rotation';
	@override String get timerActive => 'Minuterie active';
	@override String playbackWillPauseIn({required Object duration}) => 'La lecture sera mise en pause dans ${duration}';
	@override String get sleepTimerEndOfVideo => 'Fin de la vidéo actuelle';
	@override String get sleepTimerStopAtHeader => 'Arrêter à';
	@override String get sleepTimerDurationHeader => 'Minuterie';
	@override String get playbackWillPauseAtEnd => 'La lecture sera mise en pause à la fin de cette vidéo';
	@override String get stillWatching => 'Toujours en train de regarder ?';
	@override String pausingIn({required Object seconds}) => 'Pause dans ${seconds}s';
	@override String get continueWatching => 'Continuer';
	@override String get autoPlayNext => 'Lecture automatique de l’élément suivant';
	@override String get playNext => 'Lire l\'épisode suivant';
	@override String get playButton => 'Lire';
	@override String get pauseButton => 'Pause';
	@override String get showPlaybackControls => 'Afficher les commandes de lecture';
	@override String get hidePlaybackControls => 'Masquer les commandes de lecture';
	@override String seekBackwardButton({required Object seconds}) => 'Reculer de ${seconds} secondes';
	@override String seekForwardButton({required Object seconds}) => 'Avancer de ${seconds} secondes';
	@override String get previousButton => 'Épisode précédent';
	@override String get nextButton => 'Épisode suivant';
	@override String get previousChapterButton => 'Chapitre précédent';
	@override String get nextChapterButton => 'Chapitre suivant';
	@override String get muteButton => 'Couper le son';
	@override String get unmuteButton => 'Rétablir le son';
	@override String get settingsButton => 'Paramètres de lecture';
	@override String get tracksButton => 'Audio et sous-titres';
	@override String get chaptersButton => 'Chapitres';
	@override String get versionQualityButton => 'Version et qualité';
	@override String get versionColumnHeader => 'Version';
	@override String get qualityColumnHeader => 'Qualité';
	@override String get qualityOriginal => 'Originale';
	@override String qualityPresetLabel({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps';
	@override String get transcodeUnavailableFallback => 'Transcodage indisponible — lecture en qualité originale';
	@override String get subtitleUnavailableFallback => 'Impossible de charger les sous-titres sélectionnés — poursuite de la lecture sans sous-titres';
	@override String get pipButton => 'Mode image dans l’image';
	@override String get aspectRatioButton => 'Format d\'image';
	@override String get ambientLighting => 'Éclairage ambiant';
	@override String get fullscreenButton => 'Passer en mode plein écran';
	@override String get exitFullscreenButton => 'Quitter le mode plein écran';
	@override String get alwaysOnTopButton => 'Toujours au premier plan';
	@override String get rotationLockButton => 'Verrouillage de rotation';
	@override String get lockScreen => 'Verrouiller l\'écran';
	@override String get screenLockButton => 'Verrouillage de l\'écran';
	@override String get longPressToUnlock => 'Appui long pour déverrouiller';
	@override String get timelineSlider => 'Barre de progression vidéo';
	@override String get volumeSlider => 'Niveau du volume';
	@override String endsAt({required Object time}) => 'Se termine à ${time}';
	@override String get pipActive => 'Lecture en mode image dans l\'image';
	@override String get pipFailed => 'Échec du démarrage du mode image dans l\'image';
	@override String get screenshotSaved => 'Capture d\'écran enregistrée';
	@override String zoomPercent({required Object percent}) => 'Zoom ${percent} %';
	@override late final _Translations$videoControls$pipErrors$fr pipErrors = _Translations$videoControls$pipErrors$fr._(_root);
	@override String get chapters => 'Chapitres';
	@override String get noChaptersAvailable => 'Aucun chapitre disponible';
	@override String get queue => 'File d\'attente';
	@override String get noQueueItems => 'Aucun élément dans la file d\'attente';
	@override String get searchSubtitles => 'Rechercher des sous-titres';
	@override String get language => 'Langue';
	@override String get noSubtitlesFound => 'Aucun sous-titre trouvé';
	@override String get subtitleDownloaded => 'Sous-titre téléchargé';
	@override String get subtitleDownloadedNotApplied => 'Le sous-titre a été téléchargé, mais n’a pas pu être sélectionné';
	@override String get subtitleDownloadFailed => 'Échec du téléchargement du sous-titre';
	@override String get searchLanguages => 'Rechercher des langues...';
}

// Path: messages
class _Translations$messages$fr extends Translations$messages$en {
	_Translations$messages$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get markedAsWatched => 'Marqué comme vu';
	@override String get markedAsUnwatched => 'Marqué comme non vu';
	@override String get markedAsWatchedOffline => 'Marqué comme vu (se synchronisera lorsque vous serez en ligne)';
	@override String get markedAsUnwatchedOffline => 'Marqué comme non vu (sera synchronisé lorsque vous serez en ligne)';
	@override String autoRemovedWatchedDownload({required Object title}) => 'Supprimé automatiquement : ${title}';
	@override String autoRemovedWatchedDownloads({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n,
		one: '${n} téléchargement vu supprimé automatiquement',
		other: '${n} téléchargements vus supprimés automatiquement',
	);
	@override String get removedFromContinueWatching => 'Supprimé de « Continuer à regarder »';
	@override String errorLoading({required Object error}) => 'Erreur : ${error}';
	@override String get streamInterrupted => 'La lecture a été interrompue. Appuyez sur Lecture ou avancez pour réessayer.';
	@override String get liveStreamInterrupted => 'Le direct a été interrompu. Appuyez sur Lecture pour réessayer.';
	@override String get fileInfoNotAvailable => 'Informations sur le fichier non disponibles';
	@override String get playbackAuthenticationRequired => 'Reconnectez-vous au serveur multimédia pour lire cet élément.';
	@override String get playbackServerUnavailable => 'Le serveur multimédia est indisponible. Réessayez plus tard.';
	@override String get playbackDataInvalid => 'Le serveur a renvoyé des informations de lecture non valides.';
	@override String get playbackCancelled => 'La lecture a été annulée.';
	@override String get playbackFailed => 'Impossible de démarrer la lecture.';
	@override String errorLoadingFileInfo({required Object error}) => 'Erreur lors du chargement des informations sur le fichier : ${error}';
	@override String get errorLoadingSeries => 'Erreur lors du chargement de la série';
	@override String get musicNotSupported => 'La lecture de musique n\'est pas encore prise en charge';
	@override String get noDescriptionAvailable => 'Aucune description disponible';
	@override String get noProfilesAvailable => 'Aucun profil disponible';
	@override String get contactAdminForProfiles => 'Contactez votre administrateur serveur pour ajouter des profils';
	@override String get unableToDetermineLibrarySection => 'Impossible de déterminer la section de la bibliothèque pour cet élément';
	@override String get logsCleared => 'Journaux effacés';
	@override String get logsCopied => 'Journaux copiés dans le presse-papiers';
	@override String get noLogsAvailable => 'Aucun journal disponible';
	@override String libraryScanning({required Object title}) => 'Analyse de « ${title} »…';
	@override String libraryScanStarted({required Object title}) => 'Analyse de la bibliothèque lancée pour « ${title} »';
	@override String libraryScanFailed({required Object error}) => 'Échec de l’analyse de la bibliothèque : ${error}';
	@override String metadataRefreshing({required Object title}) => 'Actualisation des métadonnées de « ${title} »…';
	@override String metadataRefreshStarted({required Object title}) => 'Actualisation des métadonnées lancée pour « ${title} »';
	@override String metadataRefreshFailed({required Object error}) => 'Échec de l’actualisation des métadonnées : ${error}';
	@override String get logoutConfirm => 'Êtes-vous sûr de vouloir vous déconnecter ?';
	@override String get noSeasonsFound => 'Aucune saison trouvée';
	@override String get seasonsLoadFailed => 'Impossible de charger les saisons';
	@override String get noEpisodesFound => 'Aucun épisode trouvé dans la première saison';
	@override String get noEpisodesFoundGeneral => 'Aucun épisode trouvé';
	@override String get episodesLoadFailed => 'Impossible de charger les épisodes';
	@override String get noResultsFound => 'Aucun résultat trouvé';
	@override String sleepTimerSet({required Object label}) => 'Minuterie de mise en veille réglée sur ${label}';
	@override String get noItemsAvailable => 'Aucun élément disponible';
	@override String get failedToCreatePlayQueueNoItems => 'Impossible de créer la file d’attente de lecture : aucun élément';
	@override String failedPlayback({required Object action, required Object error}) => 'Échec de ${action} : ${error}';
	@override String get switchingToCompatiblePlayer => 'Passage au lecteur compatible...';
	@override String get serverLimitTitle => 'Échec de la lecture';
	@override String get serverLimitBody => 'Erreur serveur (HTTP 500). Une limite de bande passante/transcodage a probablement rejeté cette session. Demandez au propriétaire de l\'ajuster.';
	@override String get logsUploaded => 'Journaux envoyés';
	@override String get logsUploadFailed => 'Échec de l’envoi des journaux';
	@override String get logId => 'Identifiant du journal';
}

// Path: subtitlingStyling
class _Translations$subtitlingStyling$fr extends Translations$subtitlingStyling$en {
	_Translations$subtitlingStyling$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get text => 'Texte';
	@override String get border => 'Bordure';
	@override String get background => 'Arrière-plan';
	@override String get fontSize => 'Taille de la police';
	@override String get textColor => 'Couleur du texte';
	@override String get borderSize => 'Taille de la bordure';
	@override String get borderColor => 'Couleur de la bordure';
	@override String get backgroundOpacity => 'Opacité d\'arrière-plan';
	@override String get backgroundColor => 'Couleur d\'arrière-plan';
	@override String get position => 'Position';
	@override String get assOverride => 'Remplacement ASS';
	@override String get overrideScale => 'Mettre à l’échelle';
	@override String get overrideForce => 'Forcer';
	@override String get overrideStrip => 'Supprimer le style';
	@override String get positionTop => 'Haut';
	@override String get positionBottom => 'Bas';
	@override String get bold => 'Gras';
	@override String get italic => 'Italique';
	@override String get renderResolution => 'Résolution de rendu';
	@override String get renderResolutionScreen => 'Résolution de l\'écran';
	@override String get renderResolutionVideo => 'Résolution de la vidéo';
}

// Path: mpvConfig
class _Translations$mpvConfig$fr extends Translations$mpvConfig$en {
	_Translations$mpvConfig$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Configuration mpv';
	@override String get description => 'Paramètres avancés du lecteur vidéo';
	@override String get presets => 'Préréglages';
	@override String get noPresets => 'Aucun préréglage enregistré';
	@override String get saveAsPreset => 'Enregistrer comme préréglage...';
	@override String get presetName => 'Nom du préréglage';
	@override String get presetNameHint => 'Entrez un nom pour ce préréglage';
	@override String get loadPreset => 'Charger';
	@override String get deletePreset => 'Supprimer';
	@override String get presetSaved => 'Préréglage enregistré';
	@override String get presetLoaded => 'Préréglage chargé';
	@override String get presetDeleted => 'Préréglage supprimé';
	@override String get confirmDeletePreset => 'Êtes-vous sûr de vouloir supprimer ce préréglage ?';
	@override String get configPlaceholder => 'gpu-api=vulkan\nhwdec=auto\n# comment';
}

// Path: dialog
class _Translations$dialog$fr extends Translations$dialog$en {
	_Translations$dialog$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get confirmAction => 'Confirmer l\'action';
}

// Path: profiles
class _Translations$profiles$fr extends Translations$profiles$en {
	_Translations$profiles$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get addPlezyProfile => 'Ajouter un profil Plezy';
	@override String get switchingProfile => 'Changement de profil…';
	@override String get deleteThisProfileTitle => 'Supprimer ce profil ?';
	@override String deleteThisProfileMessage({required Object displayName}) => 'Supprimer ${displayName}. Les connexions ne sont pas affectées.';
	@override String get active => 'Actif';
	@override String get manage => 'Gérer';
	@override String get delete => 'Supprimer';
	@override String get signOut => 'Se déconnecter';
	@override String get signOutPlexTitle => 'Se déconnecter de Plex ?';
	@override String signOutPlexMessage({required Object displayName}) => 'Supprimer ${displayName} et tous les utilisateurs Plex Home ? Reconnexion possible à tout moment.';
	@override String get signedOutPlex => 'Déconnecté de Plex.';
	@override String get signOutFailed => 'Échec de la déconnexion.';
	@override String get sectionTitle => 'Profils';
	@override String get summarySingle => 'Ajoutez des profils pour mélanger utilisateurs gérés et identités locales';
	@override String summaryMultipleWithActive({required Object count, required Object activeName}) => '${count} profils · actif : ${activeName}';
	@override String summaryMultiple({required Object count}) => '${count} profils';
	@override String get removeConnectionTitle => 'Retirer la connexion ?';
	@override String removeConnectionMessage({required Object displayName, required Object connectionLabel}) => 'Supprimer l\'accès de ${displayName} à ${connectionLabel}. Les autres profils le conservent.';
	@override String get deleteProfileTitle => 'Supprimer le profil ?';
	@override String deleteProfileMessage({required Object displayName}) => 'Supprimer ${displayName} et ses connexions. Les serveurs restent disponibles.';
	@override String get profileNameLabel => 'Nom du profil';
	@override String get pinProtectionLabel => 'Protection par code PIN';
	@override String get pinManagedByPlex => 'PIN géré par Plex. Modifier sur plex.tv.';
	@override String get noPinSetEditOnPlex => 'Aucun PIN défini. Pour en exiger un, modifiez l\'utilisateur Home sur plex.tv.';
	@override String get setPin => 'Définir un PIN';
	@override String get setPinTitle => 'Définir un PIN';
	@override String get confirmPinTitle => 'Confirmer le PIN';
	@override String get pinSet => 'PIN défini';
	@override String get changePin => 'Modifier';
	@override String get removePin => 'Retirer';
	@override String get connectionsLabel => 'Connexions';
	@override String get add => 'Ajouter';
	@override String get deleteProfileButton => 'Supprimer le profil';
	@override String get noConnectionsHint => 'Aucune connexion — ajoutez-en une pour utiliser ce profil.';
	@override String get noConnections => 'Aucune connexion';
	@override String get plexHomeAccount => 'Compte Plex Home';
	@override String get connectionDefault => 'Par défaut';
	@override String connectionAs({required Object displayName}) => 'en tant que ${displayName}';
	@override String get makeDefault => 'Définir par défaut';
	@override String get removeConnection => 'Retirer';
	@override String get profileRenamed => 'Profil renommé.';
	@override String borrowAddTo({required Object displayName}) => 'Ajouter à ${displayName}';
	@override String get borrowExplain => 'Emprunter la connexion d\'un autre profil. Les profils protégés par PIN exigent un PIN.';
	@override String get borrowEmpty => 'Rien à emprunter pour le moment.';
	@override String get borrowEmptySubtitle => 'Connectez d\'abord Plex ou Jellyfin à un autre profil.';
	@override String get borrowLoadFailed => 'Impossible de charger les connexions disponibles. Réessayez.';
	@override String borrowFromProfile({required Object displayName}) => 'De ${displayName}';
	@override String get borrowConnectionBorrowed => 'Connexion empruntée.';
	@override String get borrowFailed => 'Impossible d\'emprunter la connexion.';
	@override String get incorrectPin => 'PIN incorrect.';
	@override String get incorrectPinTryAgain => 'PIN incorrect. Veuillez réessayer.';
	@override String get sourceProfileMissingParentAccount => 'Le profil source ne possède pas de compte parent.';
	@override String get failedToLoadHomeUsers => 'Impossible de charger vos utilisateurs Plex Home. Vérifiez votre connexion et réessayez.';
	@override String get failedToVerifyPin => 'Impossible de vérifier le PIN.';
	@override String get newProfile => 'Nouveau profil';
	@override String get profileNameHint => 'ex. Invités, Enfants, Salon familial';
	@override String get pinProtectionOptional => 'Protection par PIN (optionnelle)';
	@override String get pinExplain => 'PIN à 4 chiffres requis pour changer de profil.';
	@override String get continueButton => 'Continuer';
	@override String get pinsDontMatch => 'Les PIN ne correspondent pas';
}

// Path: connections
class _Translations$connections$fr extends Translations$connections$en {
	_Translations$connections$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get sectionTitle => 'Connexions';
	@override String get addConnection => 'Ajouter une connexion';
	@override String get addConnectionSubtitleNoProfile => 'Connectez-vous avec Plex ou connectez un serveur Jellyfin';
	@override String addConnectionSubtitleScoped({required Object displayName}) => 'Ajouter à ${displayName} : Plex, Jellyfin ou une autre connexion de profil';
	@override String sessionExpiredOne({required Object name}) => 'Session expirée pour ${name}';
	@override String sessionExpiredMany({required Object count}) => 'Session expirée pour ${count} serveurs';
	@override String get signInAgain => 'Se reconnecter';
	@override String get editJellyfinTitle => 'Modifier la connexion Jellyfin';
	@override String editJellyfinIntro({required Object serverName}) => 'Ajoutez ou supprimez des URL pour ${serverName}. Plezy utilisera l\'URL joignable avec la latence la plus faible.';
}

// Path: discover
class _Translations$discover$fr extends Translations$discover$en {
	_Translations$discover$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Découvrir';
	@override String get noContentAvailable => 'Aucun contenu disponible';
	@override String get addMediaToLibraries => 'Ajoutez des médias à vos bibliothèques';
	@override String get continueWatching => 'Continuer à regarder';
	@override String continueWatchingIn({required Object library}) => 'Continuer à regarder dans ${library}';
	@override String get nextUp => 'À suivre';
	@override String nextUpIn({required Object library}) => 'À suivre dans ${library}';
	@override String get recentlyAdded => 'Récemment ajouté';
	@override String recentlyAddedIn({required Object library}) => 'Récemment ajouté dans ${library}';
	@override String latestAlbumsIn({required Object library}) => 'Derniers albums dans ${library}';
	@override String recentlyPlayedIn({required Object library}) => 'Récemment lus dans ${library}';
	@override String mostPlayedIn({required Object library}) => 'Les plus lus dans ${library}';
	@override String playEpisode({required Object season, required Object episode}) => 'S${season}E${episode}';
	@override String get overview => 'Aperçu';
	@override String get cast => 'Distribution';
	@override String get extras => 'Bandes-annonces et bonus';
	@override String get studio => 'Studio';
	@override String get rating => 'Évaluation';
	@override String get director => 'Réalisateur';
	@override String get directors => 'Réalisateurs';
	@override String get movie => 'Film';
	@override String get tvShow => 'Série TV';
	@override String minutesLeft({required Object minutes}) => '${minutes} min restantes';
	@override String get moreLikeThis => 'Plus de contenus similaires';
}

// Path: errors
class _Translations$errors$fr extends Translations$errors$en {
	_Translations$errors$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String searchFailed({required Object error}) => 'Échec de la recherche : ${error}';
	@override String connectionTimeout({required Object context}) => 'Délai d\'attente de connexion dépassé pendant le chargement ${context}';
	@override String get connectionFailed => 'Impossible de se connecter au serveur multimédia';
	@override String unableToLoad({required Object context}) => 'Impossible de charger ${context}. Réessayez.';
	@override String get noClientAvailable => 'Aucun client disponible';
	@override String get pleaseEnterToken => 'Veuillez saisir un jeton';
	@override String get invalidToken => 'Jeton non valide';
	@override String failedToVerifyToken({required Object error}) => 'Échec de la vérification du jeton : ${error}';
	@override String failedToSwitchProfile({required Object displayName}) => 'Impossible de changer de profil vers ${displayName}';
	@override String failedToDeleteProfile({required Object displayName}) => 'Impossible de supprimer ${displayName}';
	@override String get failedToRate => 'Impossible de mettre à jour la note';
}

// Path: libraries
class _Translations$libraries$fr extends Translations$libraries$en {
	_Translations$libraries$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Bibliothèques';
	@override String get fallbackTitle => 'Bibliothèque';
	@override String get scanLibraryFiles => 'Scanner les fichiers de la bibliothèque';
	@override String get scanLibrary => 'Scanner la bibliothèque';
	@override String get analyze => 'Analyser';
	@override String get analyzeLibrary => 'Analyser la bibliothèque';
	@override String get refreshMetadata => 'Actualiser les métadonnées';
	@override String get emptyTrash => 'Vider la corbeille';
	@override String emptyingTrash({required Object title}) => 'Vidage de la corbeille de « ${title} »…';
	@override String trashEmptied({required Object title}) => 'Corbeille vidée pour « ${title} »';
	@override String failedToEmptyTrash({required Object error}) => 'Échec du vidage de la corbeille : ${error}';
	@override String analyzing({required Object title}) => 'Analyse de « ${title} »…';
	@override String analysisStarted({required Object title}) => 'Analyse lancée pour « ${title} »';
	@override String failedToAnalyze({required Object error}) => 'Échec de l’analyse de la bibliothèque : ${error}';
	@override String get noLibrariesFound => 'Aucune bibliothèque trouvée';
	@override String get allLibrariesHidden => 'Toutes les bibliothèques sont masquées';
	@override String hiddenLibrariesCount({required Object count}) => 'Bibliothèques masquées (${count})';
	@override String get thisLibraryIsEmpty => 'Cette bibliothèque est vide';
	@override String get noItemsMatchFilters => 'Aucun élément ne correspond aux filtres actifs';
	@override String get resetFilters => 'Réinitialiser les filtres';
	@override String get all => 'Tout';
	@override String get clearAll => 'Tout effacer';
	@override String scanLibraryConfirm({required Object title}) => 'Voulez-vous vraiment scanner « ${title} » ?';
	@override String analyzeLibraryConfirm({required Object title}) => 'Voulez-vous vraiment analyser « ${title} » ?';
	@override String refreshMetadataConfirm({required Object title}) => 'Voulez-vous vraiment actualiser les métadonnées de « ${title} » ?';
	@override String emptyTrashConfirm({required Object title}) => 'Voulez-vous vraiment vider la corbeille de « ${title} » ?';
	@override String get manageLibraries => 'Gérer les bibliothèques';
	@override String get sort => 'Trier';
	@override String get sortBy => 'Trier par';
	@override String get filters => 'Filtres';
	@override String get confirmActionMessage => 'Êtes-vous sûr de vouloir effectuer cette action ?';
	@override String get showLibrary => 'Afficher la bibliothèque';
	@override String get hideLibrary => 'Masquer la bibliothèque';
	@override String get libraryOptions => 'Options de bibliothèque';
	@override String get content => 'contenu de la bibliothèque';
	@override String get selectLibrary => 'Sélectionner la bibliothèque';
	@override String filtersWithCount({required Object count}) => 'Filtres (${count})';
	@override String get noRecommendations => 'Aucune recommandation disponible';
	@override String get noCollections => 'Aucune collection dans cette bibliothèque';
	@override String get noFoldersFound => 'Aucun dossier trouvé';
	@override String get folders => 'dossiers';
	@override late final _Translations$libraries$tabs$fr tabs = _Translations$libraries$tabs$fr._(_root);
	@override late final _Translations$libraries$groupings$fr groupings = _Translations$libraries$groupings$fr._(_root);
	@override late final _Translations$libraries$filterCategories$fr filterCategories = _Translations$libraries$filterCategories$fr._(_root);
	@override late final _Translations$libraries$sortLabels$fr sortLabels = _Translations$libraries$sortLabels$fr._(_root);
}

// 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 openSourceLicenses => 'Licences libres';
	@override String versionLabel({required Object version}) => 'Version ${version}';
	@override String get appDescription => 'Un magnifique client Plex et Jellyfin pour Flutter';
	@override String get viewLicensesDescription => 'Afficher les licences des bibliothèques tierces';
}

// Path: serverSelection
class _Translations$serverSelection$fr extends Translations$serverSelection$en {
	_Translations$serverSelection$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String noServersFoundForAccount({required Object username, required Object email}) => 'Aucun serveur trouvé pour ${username} (${email})';
	@override String failedToLoadServers({required Object error}) => 'Échec du chargement des serveurs : ${error}';
}

// Path: hubDetail
class _Translations$hubDetail$fr extends Translations$hubDetail$en {
	_Translations$hubDetail$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Titre';
	@override String get releaseYear => 'Année de sortie';
	@override String get dateAdded => 'Date d\'ajout';
	@override String get rating => 'Évaluation';
	@override String get noItemsFound => 'Aucun élément trouvé';
}

// Path: logs
class _Translations$logs$fr extends Translations$logs$en {
	_Translations$logs$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get clearLogs => 'Effacer les journaux';
	@override String get copyLogs => 'Copier les journaux';
	@override String get uploadLogs => 'Envoyer les journaux';
}

// Path: licenses
class _Translations$licenses$fr extends Translations$licenses$en {
	_Translations$licenses$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get relatedPackages => 'Paquets associés';
	@override String get license => 'Licence';
	@override String licenseNumber({required Object number}) => 'Licence ${number}';
	@override String licensesCount({required Object count}) => '${count} licences';
}

// Path: navigation
class _Translations$navigation$fr extends Translations$navigation$en {
	_Translations$navigation$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get libraries => 'Bibliothèques';
	@override String get downloads => 'Téléchargements';
	@override String get liveTv => 'TV en direct';
	@override String get explore => 'Explorer';
}

// Path: explore
class _Translations$explore$fr extends Translations$explore$en {
	_Translations$explore$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Explorer';
	@override String get selectSource => 'Sélectionner la source';
	@override late final _Translations$explore$rows$fr rows = _Translations$explore$rows$fr._(_root);
	@override late final _Translations$explore$status$fr status = _Translations$explore$status$fr._(_root);
	@override String episodeCount({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n,
		one: '${n} épisode',
		other: '${n} épisodes',
	);
	@override String get cast => 'Distribution';
	@override String get characters => 'Personnages';
	@override String get addToWatchlist => 'Ajouter à la liste de suivi';
	@override String get removeFromWatchlist => 'Retirer de la liste de suivi';
	@override String get watchlistUpdateFailed => 'Impossible de mettre à jour la liste de suivi';
	@override String get notInLibrary => 'Absent de votre bibliothèque';
	@override String get inTheseLibraries => 'Dans ces bibliothèques';
	@override String get checkingLibrary => 'Vérification de votre bibliothèque...';
	@override String get emptyTitle => 'Rien ici pour l\'instant';
	@override String emptyMessage({required Object source}) => 'Les lignes de ${source} apparaîtront ici dès qu’elles contiendront des éléments.';
	@override String searchHint({required Object source}) => 'Rechercher dans ${source}';
	@override String searchEmpty({required Object query}) => 'Aucun résultat pour "${query}"';
	@override String searchPrompt({required Object source}) => 'Recherchez des films et des séries sur ${source}.';
	@override String get searchFailed => 'Échec de la recherche. Vérifiez votre connexion et réessayez.';
}

// Path: liveTv
class _Translations$liveTv$fr extends Translations$liveTv$en {
	_Translations$liveTv$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'TV en direct';
	@override String get guide => 'Guide';
	@override String get noChannels => 'Aucune chaîne disponible';
	@override String get noDvr => 'Aucun DVR configuré sur les serveurs';
	@override String get serverUnavailable => 'Le serveur de TV en direct n’est pas disponible.';
	@override String get serverNotConnected => 'Le serveur de TV en direct n’est pas connecté.';
	@override String get noPrograms => 'Aucune donnée de programme disponible';
	@override String get liveStreamFailed => 'Échec du direct';
	@override String get unknownProgram => 'Programme inconnu';
	@override String get unknownHub => 'Inconnu';
	@override String get unknownError => 'Erreur inconnue';
	@override String channelNumber({required Object number}) => 'Chaîne ${number}';
	@override String get unknownChannel => 'Chaîne inconnue';
	@override String get live => 'EN DIRECT';
	@override String get reloadGuide => 'Recharger le guide';
	@override String get now => 'Maintenant';
	@override String get today => 'Aujourd\'hui';
	@override String get tomorrow => 'Demain';
	@override String get midnight => 'Minuit';
	@override String get overnight => 'Nuit';
	@override String get morning => 'Matin';
	@override String get daytime => 'Journée';
	@override String get evening => 'Soirée';
	@override String get lateNight => 'Fin de soirée';
	@override String get whatsOn => 'En ce moment';
	@override String get watchChannel => 'Regarder la chaîne';
	@override String get favorites => 'Favoris';
	@override String get reorderFavorites => 'Réorganiser les favoris';
	@override String get favoritesLoadFailed => 'Impossible de charger les favoris. Vérifiez votre connexion et réessayez.';
	@override String get favoritesUpdateFailed => 'Impossible de mettre à jour les favoris. Vérifiez votre connexion et réessayez.';
	@override String get joinSession => 'Rejoindre la session en cours';
	@override String watchFromStart({required Object minutes}) => 'Regarder depuis le début (il y a ${minutes} min)';
	@override String get watchLive => 'Regarder en direct';
	@override String get goToLive => 'Aller au direct';
	@override String get record => 'Enregistrer';
	@override String get recordEpisode => 'Enregistrer l\'épisode';
	@override String get recordSeries => 'Enregistrer la série';
	@override String get recordOptions => 'Options d\'enregistrement';
	@override String get saveTo => 'Enregistrer dans';
	@override String get recordings => 'Enregistrements';
	@override String get scheduledRecordings => 'Programmés';
	@override String get recordingRules => 'Règles d\'enregistrement';
	@override String get noScheduledRecordings => 'Aucun enregistrement programmé';
	@override String get manageRecording => 'Gérer l\'enregistrement';
	@override String get cancelRecording => 'Annuler l\'enregistrement';
	@override String get cancelRecordingTitle => 'Annuler cet enregistrement ?';
	@override String cancelRecordingMessage({required Object title}) => '${title} ne sera plus enregistré.';
	@override String get deleteRule => 'Supprimer la règle';
	@override String get deleteRuleTitle => 'Supprimer la règle d\'enregistrement ?';
	@override String deleteRuleMessage({required Object title}) => 'Les prochains épisodes de ${title} ne seront pas enregistrés.';
	@override String get recordingScheduled => 'Enregistrement programmé';
	@override String get alreadyScheduled => 'Ce programme est déjà programmé';
	@override String get dvrAdminRequired => 'Les paramètres DVR nécessitent un compte administrateur';
	@override String get recordingFailed => 'Impossible de programmer l\'enregistrement';
	@override String get recordingTargetMissing => 'Impossible de déterminer la bibliothèque d\'enregistrement';
	@override String get recordNotAvailable => 'Enregistrement non disponible pour ce programme';
	@override String get recordingCancelled => 'Enregistrement annulé';
	@override String get recordingRuleDeleted => 'Règle d\'enregistrement supprimée';
	@override String get processRecordingRules => 'Réévaluer les règles';
	@override String get recordingInProgress => 'Enregistrement en cours';
	@override String recordingsCount({required Object count}) => '${count} programmés';
	@override String get editRule => 'Modifier la règle';
	@override String get editRuleAction => 'Modifier';
	@override String get recordingRuleUpdated => 'Règle d\'enregistrement mise à jour';
	@override String get guideReloadRequested => 'Mise à jour du guide demandée';
	@override String get rulesProcessRequested => 'Réévaluation des règles demandée';
	@override String get recordShow => 'Enregistrer l\'émission';
}

// Path: collections
class _Translations$collections$fr extends Translations$collections$en {
	_Translations$collections$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Collections';
	@override String get collection => 'Collection';
	@override String get empty => 'La collection est vide';
	@override String get deleteCollection => 'Supprimer la collection';
	@override String deleteConfirm({required Object title}) => 'Supprimer "${title}" ? Action irréversible.';
	@override String get deleted => 'Collection supprimée';
	@override String get deleteFailed => 'Échec de la suppression de la collection';
	@override String deleteFailedWithError({required Object error}) => 'Échec de la suppression de la collection : ${error}';
	@override String get selectCollection => 'Sélectionner une collection';
	@override String get collectionName => 'Nom de la collection';
	@override String get enterCollectionName => 'Entrez le nom de la collection';
	@override String get addedToCollection => 'Ajouté à la collection';
	@override String get errorAddingToCollection => 'Échec de l\'ajout à la collection';
	@override String get created => 'Collection créée';
	@override String get removeFromCollection => 'Supprimer de la collection';
	@override String removeFromCollectionConfirm({required Object title}) => 'Retirer "${title}" de cette collection ?';
	@override String get removedFromCollection => 'Retiré de la collection';
	@override String get removeFromCollectionFailed => 'Impossible de supprimer de la collection';
	@override String removeFromCollectionError({required Object error}) => 'Erreur lors du retrait de la collection : ${error}';
	@override String get searchCollections => 'Rechercher des collections...';
}

// Path: playlists
class _Translations$playlists$fr extends Translations$playlists$en {
	_Translations$playlists$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Playlists';
	@override String get playlist => 'Playlist';
	@override String get noPlaylists => 'Aucune playlist trouvée';
	@override String get create => 'Créer une playlist';
	@override String get playlistName => 'Nom de playlist';
	@override String get enterPlaylistName => 'Saisissez le nom de la playlist';
	@override String get delete => 'Supprimer la playlist';
	@override String get removeItem => 'Retirer de la playlist';
	@override String get smartPlaylist => 'Playlist intelligente';
	@override String itemCount({required Object count}) => '${count} éléments';
	@override String get oneItem => '1 élément';
	@override String get emptyPlaylist => 'Cette playlist est vide';
	@override String get deleteConfirm => 'Supprimer la playlist ?';
	@override String deleteMessage({required Object name}) => 'Voulez-vous vraiment supprimer « ${name} » ?';
	@override String get created => 'Playlist créée';
	@override String get deleted => 'Playlist supprimée';
	@override String get itemAdded => 'Ajouté à la playlist';
	@override String get itemRemoved => 'Retiré de la playlist';
	@override String get selectPlaylist => 'Sélectionner une playlist';
	@override String get searchPlaylists => 'Rechercher des playlists...';
	@override String get errorCreating => 'Échec de la création de la playlist';
	@override String get errorDeleting => 'Échec de la suppression de la playlist';
	@override String get errorLoading => 'Échec du chargement des playlists';
	@override String get errorAdding => 'Échec de l’ajout à la playlist';
	@override String get errorReordering => 'Échec de la réorganisation de l’élément de la playlist';
	@override String get errorRemoving => 'Échec du retrait de l’élément de la playlist';
}

// Path: music
class _Translations$music$fr extends Translations$music$en {
	_Translations$music$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get goToAlbum => 'Aller à l\'album';
	@override String get goToArtist => 'Aller à l\'artiste';
	@override String get instantMix => 'Mix instantané';
	@override String get playNext => 'Lire ensuite';
	@override String get addToQueue => 'Ajouter à la file d\'attente';
	@override String discNumber({required Object n}) => 'Disque ${n}';
	@override String trackCount({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n,
		one: '${n} titre',
		other: '${n} titres',
	);
	@override String get nowPlaying => 'Lecture en cours';
	@override String playingFrom({required Object title}) => 'Lecture depuis ${title}';
	@override String get queue => 'File d\'attente';
	@override String get clearQueue => 'Vider la file d\'attente';
	@override String get lyrics => 'Paroles';
	@override String get noLyrics => 'Aucune parole disponible';
	@override String get sleepTimer => 'Minuterie de veille';
	@override String get sleepTimerEndOfTrack => 'Fin du titre';
	@override String sleepTimerMinutes({required Object n}) => '${n} minutes';
	@override String get stopPlayback => 'Arrêter la lecture';
	@override String get previousTrack => 'Titre précédent';
	@override String get nextTrack => 'Titre suivant';
	@override String get repeat => 'Répéter';
	@override String get repeatAll => 'Tout répéter';
	@override String get repeatOne => 'Répéter le titre';
}

// Path: watchTogether
class _Translations$watchTogether$fr extends Translations$watchTogether$en {
	_Translations$watchTogether$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Regarder ensemble';
	@override String get description => 'Regarder du contenu en synchronisation avec vos proches';
	@override String get createSession => 'Créer une session';
	@override String get creating => 'Création...';
	@override String get joinSession => 'Rejoindre la session';
	@override String get joining => 'Connexion…';
	@override String get controlMode => 'Mode de contrôle';
	@override String get controlModeQuestion => 'Qui peut contrôler la lecture ?';
	@override String get hostOnly => 'Hôte uniquement';
	@override String get anyone => 'N\'importe qui';
	@override String get hostingSession => 'Session hébergée';
	@override String get inSession => 'Session en cours';
	@override String get sessionCode => 'Code de session';
	@override String get openSessionControls => 'Ouvrir les commandes de la session Regarder ensemble';
	@override String get copySessionCode => 'Copier le code de session';
	@override String get hostControlsPlayback => 'L\'hôte contrôle la lecture';
	@override String get anyoneCanControl => 'Tout le monde peut contrôler la lecture';
	@override String get hostControls => 'Commandes de l\'hôte';
	@override String get anyoneControls => 'Tout le monde contrôle';
	@override String get participants => 'Participants';
	@override String get host => 'Hôte';
	@override String get hostBadge => 'HÔTE';
	@override String get youAreHost => 'Vous êtes l\'hôte';
	@override String get watchingWithOthers => 'Regarder avec d\'autres personnes';
	@override String get endSession => 'Terminer la session';
	@override String get leaveSession => 'Quitter la session';
	@override String get endSessionQuestion => 'Terminer la session ?';
	@override String get leaveSessionQuestion => 'Quitter la session ?';
	@override String get endSessionConfirm => 'Cela mettra fin à la session pour tous les participants.';
	@override String get leaveSessionConfirm => 'Vous allez être déconnecté de la session.';
	@override String get endSessionConfirmOverlay => 'Cela mettra fin à la session de visionnage pour tous les participants.';
	@override String get leaveSessionConfirmOverlay => 'Vous serez déconnecté de la session de visionnage.';
	@override String get end => 'Terminer';
	@override String get leave => 'Quitter';
	@override String get syncing => 'Synchronisation…';
	@override String get joinWatchSession => 'Rejoindre la session de visionnage';
	@override String get enterCodeHint => 'Entrez le code à 5 caractères';
	@override String get pasteFromClipboard => 'Coller depuis le presse-papiers';
	@override String get pleaseEnterCode => 'Veuillez saisir un code de session';
	@override String get codeMustBe5Chars => 'Le code de session doit comporter 5 caractères';
	@override String get joinInstructions => 'Saisissez le code de session de l\'hôte pour rejoindre.';
	@override String get failedToCreate => 'Échec de la création de la session';
	@override String get failedToJoin => 'Échec de la connexion à la session';
	@override String get sessionCodeCopied => 'Code de session copié dans le presse-papiers';
	@override String get relayUnreachable => 'Serveur relais inaccessible. Un blocage par le fournisseur d’accès peut empêcher le fonctionnement de Regarder ensemble.';
	@override String get reconnectingToHost => 'Reconnexion à l\'hôte...';
	@override String get currentPlayback => 'Lecture en cours';
	@override String get joinCurrentPlayback => 'Rejoindre la lecture en cours';
	@override String get joinCurrentPlaybackDescription => 'Reprendre le contenu que l’hôte regarde actuellement';
	@override String get failedToOpenCurrentPlayback => 'Impossible d\'ouvrir la lecture en cours';
	@override String participantJoined({required Object name}) => '${name} a rejoint';
	@override String participantLeft({required Object name}) => '${name} est parti';
	@override String participantPaused({required Object name}) => '${name} a mis en pause';
	@override String participantResumed({required Object name}) => '${name} a repris';
	@override String participantSeeked({required Object name}) => '${name} a changé la position de lecture';
	@override String participantBuffering({required Object name}) => 'La lecture de ${name} est en cours de mise en mémoire tampon';
	@override String participantNeedsUpdate({required Object name}) => '${name} utilise une ancienne version de l’app — synchronisation indisponible';
	@override String resumingWithout({required Object name}) => 'Reprise sans ${name}';
	@override String get waitingForParticipants => 'En attente du chargement des autres...';
	@override String waitingForName({required Object name}) => 'En attente de ${name}...';
	@override String get recentRooms => 'Salons récents';
	@override String get renameRoom => 'Renommer le salon';
	@override String get removeRoom => 'Supprimer';
	@override String get guestSwitchUnavailable => 'Impossible de changer — serveur indisponible pour la synchronisation';
	@override String get guestSwitchFailed => 'Impossible de changer — contenu introuvable sur ce serveur';
}

// Path: downloads
class _Translations$downloads$fr extends Translations$downloads$en {
	_Translations$downloads$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Téléchargements';
	@override String get manage => 'Gérer';
	@override String get tvShows => 'Séries TV';
	@override String get movies => 'Films';
	@override String get music => 'Musique';
	@override String tracksQueued({required Object count}) => '${count} titres en file d\'attente de téléchargement';
	@override String get noDownloads => 'Aucun téléchargement pour le moment';
	@override String get noDownloadsDescription => 'Le contenu téléchargé apparaîtra ici pour être consulté hors ligne.';
	@override String get downloadNow => 'Télécharger';
	@override String get deleteDownload => 'Supprimer le téléchargement';
	@override String get retryDownload => 'Réessayer le téléchargement';
	@override String get downloadQueued => 'Téléchargement en attente';
	@override String get downloadResumed => 'Téléchargement repris';
	@override String get serverErrorBitrate => 'Erreur du serveur : le fichier peut dépasser la limite de débit distant';
	@override String get storageFull => 'Les téléchargements ont été arrêtés car le stockage de l’appareil est plein. Libérez de l’espace, puis réessayez.';
	@override String episodesQueued({required Object count}) => '${count} épisodes en attente de téléchargement';
	@override String get downloadDeleted => 'Téléchargement supprimé';
	@override String deleteConfirm({required Object title}) => 'Supprimer « ${title} » de cet appareil ?';
	@override String get cancelledDownloadTitle => 'Téléchargement annulé';
	@override String get cancelledDownloadMessage => 'Ce téléchargement a été annulé. Que voulez-vous faire ?';
	@override String get allEpisodesAlreadyDownloaded => 'Tous les épisodes sont déjà téléchargés';
	@override String get resumeDownload => 'Reprendre le téléchargement';
	@override String get cancelledDownload => 'Téléchargement annulé';
	@override String syncingFile({required Object file, required Object status}) => '${file} (synchronisation ${status})';
	@override String downloadedFileClickToComplete({required Object file}) => '${file} téléchargé — cliquez pour terminer';
	@override String get partialDownloadClickToComplete => 'Téléchargement partiel — cliquez pour terminer';
	@override String get deleting => 'Suppression...';
	@override String deletingWithProgress({required Object title, required Object current, required Object total}) => 'Suppression de ${title}... (${current} sur ${total})';
	@override String get queuedTooltip => 'En attente';
	@override String queuedFilesTooltip({required Object files}) => 'En attente : ${files}';
	@override String get downloadingTooltip => 'Téléchargement...';
	@override String downloadingFilesTooltip({required Object files}) => 'Téléchargement de ${files}';
	@override String get noDownloadsTree => 'Aucun téléchargement';
	@override String get pauseAll => 'Tout mettre en pause';
	@override String get resumeAll => 'Tout reprendre';
	@override String get deleteAll => 'Tout supprimer';
	@override String get selectVersion => 'Sélectionner la version';
	@override String get allEpisodes => 'Tous les épisodes';
	@override String get unwatchedOnly => 'Non vus uniquement';
	@override String nextNUnwatched({required Object count}) => '${count} prochains non vus';
	@override String get customAmount => 'Quantité personnalisée...';
	@override String get includeSpecials => 'Inclure les spéciaux';
	@override String get howManyEpisodes => 'Combien d\'épisodes ?';
	@override String get invalidEpisodeCount => 'Saisissez un nombre d\'épisodes valide.';
	@override String get keepSynced => 'Garder synchronisé';
	@override String get downloadOnce => 'Télécharger une fois';
	@override String keepNUnwatched({required Object count}) => 'Garder ${count} non vus';
	@override String get editSyncRule => 'Modifier la règle de synchronisation';
	@override String get removeSyncRule => 'Supprimer la règle de synchronisation';
	@override String removeSyncRuleConfirm({required Object title}) => 'Arrêter la synchronisation de « ${title} » ? Les épisodes téléchargés seront conservés.';
	@override String syncRuleCreated({required Object count}) => 'Règle de synchronisation créée — ${count} épisodes non vus conservés';
	@override String get syncRuleUpdated => 'Règle de synchronisation mise à jour';
	@override String get syncRuleRemoved => 'Règle de synchronisation supprimée';
	@override String syncedNewEpisodes({required Object count, required Object title}) => '${count} nouveaux épisodes synchronisés pour ${title}';
	@override String get activeSyncRules => 'Règles de synchronisation';
	@override String get noSyncRules => 'Aucune règle de synchronisation';
	@override String get manageSyncRule => 'Gérer la synchronisation';
	@override String get editEpisodeCount => 'Nombre d’épisodes';
	@override String get editSyncFilter => 'Filtre de synchronisation';
	@override String get syncAllItems => 'Synchronisation de tous les éléments';
	@override String get syncUnwatchedItems => 'Synchronisation des éléments non vus';
	@override String syncRuleServerContext({required Object server, required Object status}) => 'Serveur : ${server} • ${status}';
	@override String get syncRuleAvailable => 'Disponible';
	@override String get syncRuleOffline => 'Hors ligne';
	@override String get syncRuleSignInRequired => 'Connexion requise';
	@override String get syncRuleNotAvailableForProfile => 'Non disponible pour le profil actuel';
	@override String get syncRuleUnknownServer => 'Serveur inconnu';
	@override String get syncRuleListCreated => 'Règle de synchronisation créée';
	@override late final _Translations$downloads$backgroundWarning$fr backgroundWarning = _Translations$downloads$backgroundWarning$fr._(_root);
}

// Path: shaders
class _Translations$shaders$fr extends Translations$shaders$en {
	_Translations$shaders$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Shaders';
	@override String get noShaderDescription => 'Aucune amélioration vidéo';
	@override String get nvscalerDescription => 'Mise à l\'échelle NVIDIA pour une vidéo plus nette';
	@override String get artcnnVariantNeutral => 'Neutre';
	@override String get artcnnVariantDenoise => 'Réduction du bruit';
	@override String get artcnnVariantDenoiseSharpen => 'Réduction du bruit + netteté';
	@override String get qualityFast => 'Rapide';
	@override String get qualityHQ => 'Haute qualité';
	@override String get mode => 'Mode';
	@override String get importShader => 'Importer un shader';
	@override String get customShaderDescription => 'Shader GLSL personnalisé';
	@override String get shaderImported => 'Shader importé';
	@override String get shaderImportFailed => 'Échec de l\'importation du shader';
	@override String get deleteShader => 'Supprimer le shader';
	@override String deleteShaderConfirm({required Object name}) => 'Supprimer "${name}" ?';
}

// Path: companionRemote
class _Translations$companionRemote$fr extends Translations$companionRemote$en {
	_Translations$companionRemote$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Télécommande compagnon';
	@override String connectedTo({required Object name}) => 'Connecté à ${name}';
	@override String get unknownDevice => 'Appareil inconnu';
	@override late final _Translations$companionRemote$session$fr session = _Translations$companionRemote$session$fr._(_root);
	@override late final _Translations$companionRemote$pairing$fr pairing = _Translations$companionRemote$pairing$fr._(_root);
	@override late final _Translations$companionRemote$remote$fr remote = _Translations$companionRemote$remote$fr._(_root);
	@override late final _Translations$companionRemote$errors$fr errors = _Translations$companionRemote$errors$fr._(_root);
}

// Path: videoSettings
class _Translations$videoSettings$fr extends Translations$videoSettings$en {
	_Translations$videoSettings$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get playbackSpeed => 'Vitesse de lecture';
	@override String get normalSpeed => 'Normale';
	@override String sleepTimerActive({required Object duration}) => 'Actif (${duration})';
	@override String get zoom => 'Zoom';
	@override String get sleepTimer => 'Minuterie de mise en veille';
	@override String get audioSync => 'Synchronisation audio';
	@override String get subtitleSync => 'Synchronisation des sous-titres';
	@override String get hdr => 'HDR';
	@override String get audioOutput => 'Sortie audio';
	@override String get performanceOverlay => 'Données de performance';
	@override String get audioPassthrough => 'Transmission audio directe';
	@override String get audioOutputDolbyAtmos => 'Dolby Atmos';
	@override String get audioOutputDolbyAudio => 'Dolby Audio';
	@override String get audioOutputSurround => 'Surround';
	@override String get audioOutputSpatial => 'Audio spatial';
	@override String get audioOutputStereo => 'Stéréo';
	@override String get audioNormalization => 'Normaliser le volume';
	@override String get audioDownmix => 'Conversion en stéréo';
}

// Path: performanceOverlay
class _Translations$performanceOverlay$fr extends Translations$performanceOverlay$en {
	_Translations$performanceOverlay$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get color => 'Couleur';
	@override String get performance => 'Performances';
	@override String get buffer => 'Tampon';
	@override String get app => 'Application';
	@override String get decoder => 'Décodeur';
	@override String get rawDecoder => 'Décodeur brut';
	@override String get tunneling => 'Tunnel';
	@override String get aspect => 'Format';
	@override String get rotation => 'Rotation';
	@override String get dvSource => 'Source DV';
	@override String get dvPath => 'Chemin DV';
	@override String get p7Conversion => 'Conv. P7';
	@override String get sampleRate => 'Fréquence d’échantillonnage';
	@override String get pixelFormat => 'Fmt pixel';
	@override String get hwFormat => 'Fmt HW';
	@override String get matrix => 'Matrice';
	@override String get primaries => 'Primaires';
	@override String get transfer => 'Transfert';
	@override String get renderFps => 'FPS rendu';
	@override String get displayFps => 'FPS écran';
	@override String get avSync => 'Synchro A/V';
	@override String get dropped => 'Perdues';
	@override String get dvRpus => 'DV RPU';
	@override String get dvRpuAverage => 'Moy. DV RPU';
	@override String get dvSampleAverage => 'Moy. échant. DV';
	@override String get maxLuma => 'Luma max.';
	@override String get minLuma => 'Luma min.';
	@override String get maxCll => 'MaxCLL';
	@override String get maxFall => 'MaxFALL';
	@override String get cacheUsed => 'Cache utilisé';
	@override String get cacheLimit => 'Limite du cache';
	@override String get speed => 'Vitesse';
	@override String get player => 'Lecteur';
	@override String get memory => 'Mémoire';
	@override String get uiFps => 'FPS UI';
}

// Path: externalPlayer
class _Translations$externalPlayer$fr extends Translations$externalPlayer$en {
	_Translations$externalPlayer$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Lecteur externe';
	@override String get useExternalPlayer => 'Utiliser un lecteur externe';
	@override String get useExternalPlayerDescription => 'Ouvrir les vidéos dans une autre application';
	@override String get selectPlayer => 'Sélectionner le lecteur';
	@override String get customPlayers => 'Lecteurs personnalisés';
	@override String get systemDefault => 'Par défaut du système';
	@override String get addCustomPlayer => 'Ajouter un lecteur personnalisé';
	@override String get playerName => 'Nom du lecteur';
	@override String get playerNameHint => 'Mon lecteur';
	@override String get playerCommand => 'Commande';
	@override String get playerPackage => 'Nom du paquet';
	@override String get playerUrlScheme => 'Schéma URL';
	@override String get off => 'Désactivé';
	@override String get launchFailed => 'Impossible d\'ouvrir le lecteur externe';
	@override String appNotInstalled({required Object name}) => '${name} n\'est pas installé';
	@override String get playInExternalPlayer => 'Lire dans un lecteur externe';
}

// Path: metadataEdit
class _Translations$metadataEdit$fr extends Translations$metadataEdit$en {
	_Translations$metadataEdit$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get editMetadata => 'Modifier...';
	@override String get screenTitle => 'Modifier les métadonnées';
	@override String get basicInfo => 'Informations de base';
	@override String get artwork => 'Illustrations';
	@override String get advancedSettings => 'Paramètres avancés';
	@override String get title => 'Titre';
	@override String get sortTitle => 'Titre de tri';
	@override String get originalTitle => 'Titre original';
	@override String get releaseDate => 'Date de sortie';
	@override String get contentRating => 'Classification';
	@override String get studio => 'Studio';
	@override String get tagline => 'Slogan';
	@override String get summary => 'Résumé';
	@override String get poster => 'Affiche';
	@override String get background => 'Arrière-plan';
	@override String get logo => 'Logo';
	@override String get squareArt => 'Image carrée';
	@override String get selectPoster => 'Sélectionner l\'affiche';
	@override String get selectBackground => 'Sélectionner l\'arrière-plan';
	@override String get selectLogo => 'Sélectionner le logo';
	@override String get selectSquareArt => 'Sélectionner l\'image carrée';
	@override String get fromUrl => 'Depuis une URL';
	@override String get uploadFile => 'Importer un fichier';
	@override String get enterImageUrl => 'Entrer l\'URL de l\'image';
	@override String get imageUrl => 'URL de l\'image';
	@override String get metadataUpdated => 'Métadonnées mises à jour';
	@override String get metadataUpdateFailed => 'Échec de la mise à jour des métadonnées';
	@override String get artworkUpdated => 'Illustrations mises à jour';
	@override String get artworkUpdateFailed => 'Échec de la mise à jour des illustrations';
	@override String get noArtworkAvailable => 'Aucune illustration disponible';
	@override String artworkOption({required Object index}) => 'Option d\'illustration ${index}';
	@override String selectedArtworkOption({required Object index}) => 'Option d\'illustration ${index}, sélectionnée';
	@override String get notSet => 'Non défini';
	@override String get libraryDefault => 'Par défaut de la bibliothèque';
	@override String get accountDefault => 'Par défaut du compte';
	@override String get seriesDefault => 'Par défaut de la série';
	@override String get episodeSorting => 'Tri des épisodes';
	@override String get oldestFirst => 'Plus anciens en premier';
	@override String get newestFirst => 'Plus récents en premier';
	@override String get keep => 'Conserver';
	@override String get allEpisodes => 'Tous les épisodes';
	@override String latestEpisodes({required Object count}) => '${count} derniers épisodes';
	@override String get latestEpisode => 'Dernier épisode';
	@override String episodesAddedPastDays({required Object count}) => 'Épisodes ajoutés ces ${count} derniers jours';
	@override String get deleteAfterPlaying => 'Supprimer les épisodes après lecture';
	@override String get never => 'Jamais';
	@override String get afterADay => 'Après un jour';
	@override String get afterAWeek => 'Après une semaine';
	@override String get afterAMonth => 'Après un mois';
	@override String get onNextRefresh => 'Au prochain rafraîchissement';
	@override String get seasons => 'Saisons';
	@override String get show => 'Afficher';
	@override String get hide => 'Masquer';
	@override String get episodeOrdering => 'Ordre des épisodes';
	@override String get tmdbAiring => 'The Movie Database (Diffusion)';
	@override String get tvdbAiring => 'TheTVDB (Diffusion)';
	@override String get tvdbAbsolute => 'TheTVDB (Absolu)';
	@override String get metadataLanguage => 'Langue des métadonnées';
	@override String get useOriginalTitle => 'Utiliser le titre original';
	@override String get preferredAudioLanguage => 'Langue audio préférée';
	@override String get preferredSubtitleLanguage => 'Langue de sous-titres préférée';
	@override String get subtitleMode => 'Sélection automatique des sous-titres';
	@override String get manuallySelected => 'Sélectionné manuellement';
	@override String get shownWithForeignAudio => 'Avec l’audio en langue étrangère';
	@override String get alwaysEnabled => 'Toujours activé';
	@override String get tags => 'Étiquettes';
	@override String get addTag => 'Ajouter une étiquette';
	@override String get genre => 'Genre';
	@override String get director => 'Réalisateur';
	@override String get writer => 'Scénariste';
	@override String get producer => 'Producteur';
	@override String get country => 'Pays';
	@override String get collection => 'Collection';
	@override String get label => 'Label';
	@override String get style => 'Style';
	@override String get mood => 'Ambiance';
}

// Path: matchScreen
class _Translations$matchScreen$fr extends Translations$matchScreen$en {
	_Translations$matchScreen$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get match => 'Associer...';
	@override String get fixMatch => 'Corriger l\'association...';
	@override String get unmatch => 'Dissocier';
	@override String get unmatchConfirm => 'Effacer cette correspondance ? Plex la traitera comme non associée jusqu\'à réassociation.';
	@override String get unmatchSuccess => 'Association supprimée';
	@override String get unmatchFailed => 'Échec de la dissociation';
	@override String get matchApplied => 'Association appliquée';
	@override String get matchFailed => 'Échec de l\'application';
	@override String get titleHint => 'Titre';
	@override String get yearHint => 'Année';
	@override String get search => 'Rechercher';
	@override String get noMatchesFound => 'Aucune correspondance';
}

// Path: serverTasks
class _Translations$serverTasks$fr extends Translations$serverTasks$en {
	_Translations$serverTasks$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Tâches du serveur';
	@override String get failedToLoad => 'Échec du chargement des tâches';
	@override String get noTasks => 'Aucune tâche en cours';
}

// Path: trakt
class _Translations$trakt$fr extends Translations$trakt$en {
	_Translations$trakt$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Trakt';
	@override String get connected => 'Connecté';
	@override String connectedAs({required Object username}) => 'Connecté en tant que @${username}';
	@override String get disconnectConfirm => 'Déconnecter le compte Trakt ?';
	@override String get disconnectConfirmBody => 'Plezy cessera d’envoyer des événements à Trakt. Vous pourrez vous reconnecter à tout moment.';
	@override String get scrobble => 'Scrobbling en temps réel';
	@override String get scrobbleDescription => 'Envoyer les événements de lecture, pause et arrêt à Trakt pendant la lecture.';
	@override String get watchedSync => 'Synchroniser le statut « vu »';
	@override String get watchedSyncDescription => 'Lorsque vous marquez des éléments comme vus dans Plezy, ils sont également marqués comme vus sur Trakt.';
}

// Path: seerr
class _Translations$seerr$fr extends Translations$seerr$en {
	_Translations$seerr$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Seerr';
	@override String get connectTitle => 'Se connecter à Seerr';
	@override String get serverUrl => 'URL du serveur';
	@override String get serverUrlHelper => 'L\'adresse de votre instance Seerr';
	@override String get checkServer => 'Continuer';
	@override String get signInWithJellyfin => 'Se connecter avec Jellyfin';
	@override String get signInWithEmby => 'Se connecter avec Emby';
	@override String get signInWithLocal => 'Utiliser un compte local';
	@override String get email => 'E-mail';
	@override String get noSignInMethods => 'Cette instance Seerr ne propose aucune méthode de connexion prise en charge par Plezy.';
	@override String get instance => 'Instance';
	@override String get disconnectConfirm => 'Déconnecter Seerr ?';
	@override String get disconnectConfirmBody => 'Plezy oubliera cette instance Seerr. Vous pourrez vous reconnecter à tout moment.';
	@override String get request => 'Demander';
	@override String get request4k => 'Demander en 4K';
	@override String get seasons => 'Saisons';
	@override String get allSeasons => 'Toutes les saisons';
	@override String get advancedOptions => 'Avancé';
	@override String get destinationServer => 'Serveur de destination';
	@override String get qualityProfile => 'Profil de qualité';
	@override String get rootFolder => 'Dossier racine';
	@override String get languageProfile => 'Profil de langue';
	@override String get requestSubmitted => 'Demande envoyée';
	@override String requestFailed({required Object error}) => 'Échec de la demande : ${error}';
	@override String get requestsLoadFailed => 'Impossible de charger les options de demande';
	@override String get nothingToRequest => 'Tout est déjà disponible ou demandé.';
	@override String get statusAvailable => 'Disponible';
	@override String get statusPartiallyAvailable => 'Partiellement disponible';
	@override String get statusRequested => 'Demandé';
	@override String get statusProcessing => 'En cours de traitement';
}

// Path: services
class _Translations$services$fr extends Translations$services$en {
	_Translations$services$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Services';
	@override String get hubSubtitle => 'Synchronisez votre progression et demandez de nouveaux titres.';
	@override String get notConnected => 'Non connecté';
	@override String connectedAs({required Object username}) => 'Connecté en tant que @${username}';
	@override String get scrobble => 'Suivre la progression automatiquement';
	@override String get scrobbleDescription => 'Mettre à jour votre liste lorsque vous terminez un épisode ou un film.';
	@override String disconnectConfirm({required Object service}) => 'Déconnecter ${service} ?';
	@override String disconnectConfirmBody({required Object service}) => 'Plezy cessera de mettre à jour ${service}. Vous pourrez vous reconnecter à tout moment.';
	@override String connectFailed({required Object service}) => 'Échec de la connexion à ${service}. Réessayez.';
	@override late final _Translations$services$names$fr names = _Translations$services$names$fr._(_root);
	@override late final _Translations$services$deviceCode$fr deviceCode = _Translations$services$deviceCode$fr._(_root);
	@override late final _Translations$services$oauthProxy$fr oauthProxy = _Translations$services$oauthProxy$fr._(_root);
	@override late final _Translations$services$libraryFilter$fr libraryFilter = _Translations$services$libraryFilter$fr._(_root);
}

// Path: addServer
class _Translations$addServer$fr extends Translations$addServer$en {
	_Translations$addServer$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get addJellyfinTitle => 'Ajouter un serveur Jellyfin';
	@override String get serverUrls => 'URL du serveur';
	@override String get serverUrlsHelper => 'Plusieurs URL possibles, séparées par des virgules.';
	@override String get findServer => 'Rechercher un serveur';
	@override String get searchingLocalServers => 'Recherche de serveurs Jellyfin locaux...';
	@override String get localServers => 'Serveurs Jellyfin locaux';
	@override String get username => 'Nom d\'utilisateur';
	@override String get password => 'Mot de passe';
	@override String get signIn => 'Se connecter';
	@override String get change => 'Modifier';
	@override String get required => 'Requis';
	@override String couldNotReachServer({required Object error}) => 'Impossible de joindre le serveur : ${error}';
	@override String signInFailed({required Object error}) => 'Échec de la connexion : ${error}';
	@override String quickConnectFailed({required Object error}) => 'Échec de Quick Connect : ${error}';
	@override String get addPlexTitle => 'Se connecter avec Plex';
	@override String get pinExpired => 'Le PIN a expiré avant la connexion. Veuillez réessayer.';
	@override String failedToRegisterAccount({required Object error}) => 'Échec de l\'enregistrement du compte : ${error}';
	@override String get enterJellyfinUrlError => 'Saisissez l\'URL de votre serveur Jellyfin';
	@override String get addConnectionTitle => 'Ajouter une connexion';
	@override String addConnectionTitleScoped({required Object name}) => 'Ajouter à ${name}';
	@override String get signInWithPlexCard => 'Se connecter avec Plex';
	@override String get signInWithPlexCardSubtitle => 'Autorisez cet appareil. Les serveurs partagés sont ajoutés.';
	@override String get signInWithPlexCardSubtitleScoped => 'Autorisez un compte Plex. Les utilisateurs Home deviennent des profils.';
	@override String get connectToJellyfinCard => 'Se connecter à Jellyfin';
	@override String get connectToJellyfinCardSubtitle => 'Saisissez l\'URL du serveur, le nom d\'utilisateur et le mot de passe.';
	@override String connectToJellyfinCardSubtitleScoped({required Object name}) => 'Connectez-vous à un serveur Jellyfin. Cette connexion sera liée à ${name}.';
	@override String get borrowFromAnotherProfile => 'Emprunter à un autre profil';
	@override String get borrowFromAnotherProfileSubtitle => 'Réutiliser la connexion d\'un autre profil. Les profils protégés par PIN exigent un PIN.';
}

// Path: hotkeys.actions
class _Translations$hotkeys$actions$fr extends Translations$hotkeys$actions$en {
	_Translations$hotkeys$actions$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get playPause => 'Lecture/Pause';
	@override String get volumeUp => 'Augmenter le volume';
	@override String get volumeDown => 'Baisser le volume';
	@override String seekForward({required Object seconds}) => 'Avancer (${seconds}s)';
	@override String seekBackward({required Object seconds}) => 'Reculer (${seconds}s)';
	@override String get fullscreenToggle => 'Basculer en mode plein écran';
	@override String get muteToggle => 'Activer/désactiver le mode silencieux';
	@override String get subtitleToggle => 'Activer/désactiver les sous-titres';
	@override String get audioTrackNext => 'Piste audio suivante';
	@override String get subtitleTrackNext => 'Piste de sous-titres suivante';
	@override String get chapterNext => 'Chapitre suivant';
	@override String get chapterPrevious => 'Chapitre précédent';
	@override String get episodeNext => 'Épisode suivant';
	@override String get episodePrevious => 'Épisode précédent';
	@override String get speedIncrease => 'Augmenter la vitesse';
	@override String get speedDecrease => 'Réduire la vitesse';
	@override String get speedReset => 'Réinitialiser la vitesse';
	@override String get zoomIn => 'Zoom avant';
	@override String get zoomOut => 'Zoom arrière';
	@override String get zoomReset => 'Réinitialiser le zoom';
	@override String get subSeekNext => 'Rechercher le sous-titre suivant';
	@override String get subSeekPrev => 'Rechercher le sous-titre précédent';
	@override String get shaderToggle => 'Activer/désactiver les shaders';
	@override String get skipMarker => 'Passer l\'intro/le générique';
	@override String get screenshot => 'Prendre une capture d\'écran';
}

// Path: videoControls.pipErrors
class _Translations$videoControls$pipErrors$fr extends Translations$videoControls$pipErrors$en {
	_Translations$videoControls$pipErrors$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get androidVersion => 'Nécessite Android 8.0 ou plus récent';
	@override String get iosVersion => 'Nécessite iOS 15.0 ou plus récent';
	@override String get permissionDisabled => 'Le mode image dans l’image est désactivé. Activez-le dans les paramètres système.';
	@override String get notSupported => 'Cet appareil ne prend pas en charge le mode image dans l\'image';
	@override String get voSwitchFailed => 'Échec du changement de sortie vidéo pour l\'image dans l\'image';
	@override String get failed => 'Échec du démarrage du mode image dans l\'image';
	@override String unknown({required Object error}) => 'Une erreur s\'est produite : ${error}';
}

// Path: libraries.tabs
class _Translations$libraries$tabs$fr extends Translations$libraries$tabs$en {
	_Translations$libraries$tabs$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get recommended => 'Recommandé';
	@override String get browse => 'Parcourir';
	@override String get collections => 'Collections';
	@override String get playlists => 'Playlists';
}

// Path: libraries.groupings
class _Translations$libraries$groupings$fr extends Translations$libraries$groupings$en {
	_Translations$libraries$groupings$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Regroupement';
	@override String get all => 'Tous';
	@override String get movies => 'Films';
	@override String get shows => 'Séries TV';
	@override String get seasons => 'Saisons';
	@override String get episodes => 'Épisodes';
	@override String get artists => 'Artistes';
	@override String get albums => 'Albums';
	@override String get tracks => 'Titres';
	@override String get folders => 'Dossiers';
}

// Path: libraries.filterCategories
class _Translations$libraries$filterCategories$fr extends Translations$libraries$filterCategories$en {
	_Translations$libraries$filterCategories$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get genre => 'Genre';
	@override String get year => 'Année';
	@override String get contentRating => 'Classification';
	@override String get tag => 'Étiquette';
	@override String get unwatched => 'Non vus';
	@override String get unplayed => 'Non lus';
	@override String get favorites => 'Favoris';
}

// Path: libraries.sortLabels
class _Translations$libraries$sortLabels$fr extends Translations$libraries$sortLabels$en {
	_Translations$libraries$sortLabels$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Titre';
	@override String get dateAdded => 'Date d\'ajout';
	@override String get releaseDate => 'Date de sortie';
	@override String get rating => 'Note';
	@override String get communityRating => 'Note communautaire';
	@override String get criticRating => 'Note critique';
	@override String get userRating => 'Note utilisateur';
	@override String get datePlayed => 'Date de lecture';
	@override String get playCount => 'Lectures';
	@override String get productionYear => 'Année de production';
	@override String get runtime => 'Durée';
	@override String get officialRating => 'Classification officielle';
	@override String get premiereDate => 'Date de première';
	@override String get startDate => 'Date de début';
	@override String get airTime => 'Heure de diffusion';
	@override String get studio => 'Studio';
	@override String get random => 'Aléatoire';
	@override String get dateShared => 'Date de partage';
	@override String get latestEpisodeAirDate => 'Dernière date de diffusion';
	@override String get lastEpisodeDateAdded => 'Date d\'ajout du dernier épisode';
}

// Path: explore.rows
class _Translations$explore$rows$fr extends Translations$explore$rows$en {
	_Translations$explore$rows$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get watchlist => 'Liste de suivi';
	@override String get recommendedMovies => 'Films recommandés';
	@override String get recommendedShows => 'Séries recommandées';
	@override String get trendingMovies => 'Films tendance';
	@override String get trendingShows => 'Séries tendance';
	@override String get popularMovies => 'Films populaires';
	@override String get popularShows => 'Séries populaires';
	@override String get trendingAnime => 'Animes tendance';
	@override String get suggestedAnime => 'Animes suggérés';
	@override String get airingAnime => 'Meilleurs animes en diffusion';
	@override String get popularAnime => 'Animes les plus populaires';
	@override String get trending => 'Tendances';
	@override String get upcomingMovies => 'Films à venir';
	@override String get upcomingShows => 'Séries à venir';
}

// Path: explore.status
class _Translations$explore$status$fr extends Translations$explore$status$en {
	_Translations$explore$status$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get airing => 'En cours';
	@override String get ended => 'Terminé';
	@override String get canceled => 'Annulé';
	@override String get upcoming => 'À venir';
}

// Path: downloads.backgroundWarning
class _Translations$downloads$backgroundWarning$fr extends Translations$downloads$backgroundWarning$en {
	_Translations$downloads$backgroundWarning$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get bannerBlocked => 'Les téléchargements s’arrêteront lorsque vous quitterez l’application';
	@override String get bannerDegraded => 'Les téléchargements en arrière-plan peuvent être limités';
	@override String get bannerAction => 'Détails';
	@override String get sheetTitle => 'Les téléchargements en arrière-plan sont bloqués';
	@override String get sheetTitleDegraded => 'Les téléchargements en arrière-plan peuvent être limités';
	@override String get sheetIntro => 'Android empêche Plezy de télécharger de façon fiable en arrière-plan.';
	@override String get sheetIntroDegraded => 'Votre appareil limite les moments où Plezy peut télécharger en arrière-plan.';
	@override String get reasonBackgroundRestricted => 'L’utilisation de Plezy en arrière-plan est restreinte. Dans les paramètres de batterie ou d’utilisation en arrière-plan, sélectionnez « Sans restriction ».';
	@override String get reasonStandbyRestricted => 'Android a placé Plezy en veille restreinte. Réglez l’utilisation de la batterie sur « Sans restriction ».';
	@override String get reasonDownloadChannelBlocked => 'Les notifications de téléchargement sont désactivées. La progression et les commandes peuvent donc être indisponibles.';
	@override String get reasonNotificationsDisabled => 'Les notifications sont désactivées. Sur Android 13 ou version ultérieure, elles sont nécessaires pour les longs téléchargements en arrière-plan.';
	@override String get reasonDataSaver => 'L’Économiseur de données est activé et bloque les téléchargements en arrière-plan via les données mobiles. Ils devraient toujours fonctionner en Wi-Fi.';
	@override String get reasonOemUnknown => 'Les téléchargements se sont arrêtés plusieurs fois lorsque Plezy était en arrière-plan. Vérifiez les paramètres de batterie ou d’utilisation en arrière-plan de Plezy.';
	@override String get openSettings => 'Ouvrir les paramètres';
	@override String get stillNotWorking => 'Aide spécifique à l’appareil';
	@override String get stillNotWorkingDescription => 'Consultez les étapes adaptées à votre appareil ou, si le problème persiste, envoyez un journal depuis Paramètres › Voir les journaux.';
	@override String get dialogTitle => 'Les téléchargements risquent de ne pas aboutir';
	@override String get dialogDownloadAnyway => 'Télécharger quand même';
	@override String get dialogFixFirst => 'Corriger d’abord';
	@override String get statusTile => 'Téléchargements en arrière-plan';
	@override String get statusOk => 'Exécution en arrière-plan autorisée';
	@override String get statusBlocked => 'Bloqués par les paramètres système';
	@override String get statusDegraded => 'Limités par les paramètres système';
	@override String get statusUnknown => 'Pas encore vérifié';
	@override String get settingsUnavailable => 'Impossible d’ouvrir les paramètres système sur cet appareil';
	@override String get linkUnavailable => 'Impossible d’ouvrir dontkillmyapp.com sur cet appareil';
}

// Path: companionRemote.session
class _Translations$companionRemote$session$fr extends Translations$companionRemote$session$en {
	_Translations$companionRemote$session$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get startingServer => 'Démarrage du serveur de télécommande…';
	@override String get hostAddress => 'Adresse de l’hôte';
	@override String get connected => 'Connecté';
	@override String get serverRunning => 'Serveur de télécommande actif';
	@override String get serverStopped => 'Serveur de télécommande arrêté';
	@override String get serverRunningDescription => 'Les appareils mobiles de votre réseau peuvent se connecter à cette application';
	@override String get serverStoppedDescription => 'Démarrez le serveur pour permettre aux appareils mobiles de se connecter';
	@override String get usePhoneToControl => 'Utilisez votre appareil mobile pour contrôler cette application';
	@override String get startServer => 'Démarrer le serveur';
	@override String get stopServer => 'Arrêter le serveur';
	@override String get minimize => 'Réduire';
}

// Path: companionRemote.pairing
class _Translations$companionRemote$pairing$fr extends Translations$companionRemote$pairing$en {
	_Translations$companionRemote$pairing$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get discoveryDescription => 'Les appareils Plezy avec le même compte Plex apparaissent ici';
	@override String get hostAddressHint => '192.168.1.100:48632';
	@override String get connecting => 'Connexion...';
	@override String get searchingForDevices => 'Recherche d\'appareils...';
	@override String get noDevicesFound => 'Aucun appareil trouvé sur votre réseau';
	@override String get noDevicesHint => 'Ouvrez Plezy sur votre ordinateur et utilisez le même réseau Wi-Fi';
	@override String get availableDevices => 'Appareils disponibles';
	@override String get manualConnection => 'Connexion manuelle';
	@override String get cryptoInitFailed => 'Impossible de démarrer la connexion sécurisée. Connectez-vous d\'abord à Plex.';
	@override String get validationHostRequired => 'Veuillez saisir l’adresse de l’hôte';
	@override String get validationHostFormat => 'Le format doit être IP:port (p. ex. 192.168.1.100:48632)';
	@override String get connectionTimedOut => 'Délai de connexion dépassé. Utilisez le même réseau sur les deux appareils.';
	@override String get sessionNotFound => 'Appareil introuvable. Assurez-vous que Plezy fonctionne sur l\'hôte.';
	@override String get authFailed => 'Échec de l\'authentification. Les deux appareils doivent utiliser le même compte Plex.';
	@override String failedToConnect({required Object error}) => 'Échec de la connexion : ${error}';
}

// Path: companionRemote.remote
class _Translations$companionRemote$remote$fr extends Translations$companionRemote$remote$en {
	_Translations$companionRemote$remote$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get disconnectConfirm => 'Voulez-vous vous déconnecter de la session distante ?';
	@override String get reconnecting => 'Reconnexion...';
	@override String attemptOf({required Object current}) => 'Tentative ${current} sur 5';
	@override String get retryNow => 'Réessayer maintenant';
	@override String get tabRemote => 'Télécommande';
	@override String get tabPlay => 'Lecture';
	@override String get tabMore => 'Plus';
	@override String get menu => 'Menu';
	@override String get tabNavigation => 'Navigation par onglets';
	@override String get tabDiscover => 'Découvrir';
	@override String get tabLibraries => 'Bibliothèques';
	@override String get tabSearch => 'Rechercher';
	@override String get tabDownloads => 'Téléchargements';
	@override String get tabSettings => 'Paramètres';
	@override String get previous => 'Précédent';
	@override String get playPause => 'Lecture/Pause';
	@override String get next => 'Suivant';
	@override String get seekBack => 'Reculer';
	@override String get stop => 'Arrêter';
	@override String get seekForward => 'Avancer';
	@override String get volume => 'Volume';
	@override String get volumeDown => 'Baisser';
	@override String get volumeUp => 'Augmenter';
	@override String get fullscreen => 'Plein écran';
	@override String get subtitles => 'Sous-titres';
	@override String get audio => 'Audio';
	@override String get searchHint => 'Rechercher sur l’ordinateur…';
}

// Path: companionRemote.errors
class _Translations$companionRemote$errors$fr extends Translations$companionRemote$errors$en {
	_Translations$companionRemote$errors$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get noNetworkInterface => 'Aucune interface réseau trouvée';
	@override String get authenticationFailed => 'Échec de l’authentification';
	@override String serverStartFailed({required Object error}) => 'Impossible de démarrer le serveur de télécommande : ${error}';
	@override String commandFailed({required Object error}) => 'Impossible d’envoyer la commande à distance : ${error}';
	@override String get joinTimedOut => 'Délai dépassé lors de la connexion à la session';
	@override String get failedToConnectAnyAddress => 'Impossible de se connecter à une adresse';
	@override String connectionLostAfterAttempts({required Object attempts}) => 'Connexion perdue après ${attempts} tentatives';
	@override String get connectionLost => 'Connexion perdue';
}

// Path: services.names
class _Translations$services$names$fr extends Translations$services$names$en {
	_Translations$services$names$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get mal => 'MyAnimeList';
	@override String get anilist => 'AniList';
	@override String get simkl => 'Simkl';
	@override String get seerr => 'Seerr';
}

// Path: services.deviceCode
class _Translations$services$deviceCode$fr extends Translations$services$deviceCode$en {
	_Translations$services$deviceCode$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String title({required Object service}) => 'Activer Plezy sur ${service}';
	@override String body({required Object url}) => 'Rendez-vous sur ${url} et entrez ce code :';
	@override String openToActivate({required Object service}) => 'Ouvrir ${service} pour activer';
	@override String get copyCode => 'Copier le code d\'activation';
	@override String get waitingForAuthorization => 'En attente d\'autorisation…';
	@override String get codeCopied => 'Code copié';
}

// Path: services.oauthProxy
class _Translations$services$oauthProxy$fr extends Translations$services$oauthProxy$en {
	_Translations$services$oauthProxy$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String title({required Object service}) => 'Se connecter à ${service}';
	@override String get body => 'Scannez ce code QR ou ouvrez l\'URL sur n\'importe quel appareil.';
	@override String openToSignIn({required Object service}) => 'Ouvrir ${service} pour se connecter';
	@override String get copyUrl => 'Copier l\'URL de connexion';
	@override String get urlCopied => 'URL copiée';
}

// Path: services.libraryFilter
class _Translations$services$libraryFilter$fr extends Translations$services$libraryFilter$en {
	_Translations$services$libraryFilter$fr._(TranslationsFr root) : this._root = root, super.internal(root);

	final TranslationsFr _root; // ignore: unused_field

	// Translations
	@override String get title => 'Filtre de bibliothèques';
	@override String get subtitleAllSyncing => 'Synchronisation de toutes les bibliothèques';
	@override String get subtitleNoneSyncing => 'Aucune synchronisation';
	@override String subtitleBlocked({required Object count}) => '${count} bloquées';
	@override String subtitleAllowed({required Object count}) => '${count} autorisées';
	@override String get mode => 'Mode de filtrage';
	@override String get modeBlacklist => 'Liste d’exclusion';
	@override String get modeWhitelist => 'Liste d’inclusion';
	@override String get modeHintBlacklist => 'Synchroniser toutes les bibliothèques sauf celles cochées ci-dessous.';
	@override String get modeHintWhitelist => 'Synchroniser uniquement les bibliothèques cochées ci-dessous.';
	@override String get libraries => 'Bibliothèques';
	@override String get noLibraries => 'Aucune bibliothèque disponible';
}

/// The flat map containing all translations for locale <fr>.
/// 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) {
			'app.title' => 'Plezy',
			'auth.signInWithPlex' => 'Se connecter avec Plex',
			'auth.showQRCode' => 'Afficher le code QR',
			'auth.authenticate' => 'S\'authentifier',
			'auth.authenticationTimeout' => 'Délai d\'authentification expiré. Veuillez réessayer.',
			'auth.scanQRToSignIn' => 'Scannez ce QR code pour vous connecter',
			'auth.waitingForAuth' => 'En attente d\'authentification...\nConnectez-vous depuis votre navigateur.',
			'auth.useBrowser' => 'Utiliser le navigateur',
			'auth.or' => 'ou',
			'auth.connectToJellyfin' => 'Se connecter à Jellyfin',
			'auth.useQuickConnect' => 'Utiliser Quick Connect',
			'auth.quickConnectInstructions' => 'Ouvrez Quick Connect dans Jellyfin et saisissez ce code.',
			'auth.quickConnectWaiting' => 'En attente d\'approbation…',
			'auth.quickConnectCancel' => 'Annuler',
			'auth.quickConnectExpired' => 'Quick Connect a expiré. Réessayez.',
			'auth.localDataRecoveryRequired' => 'Plezy n’a pas pu récupérer en toute sécurité les données locales de connexion et de lecture en attente. Veuillez vous reconnecter.',
			'common.cancel' => 'Annuler',
			'common.save' => 'Enregistrer',
			'common.close' => 'Fermer',
			'common.clear' => 'Effacer',
			'common.reset' => 'Réinitialiser',
			'common.later' => 'Plus tard',
			'common.submit' => 'Soumettre',
			'common.confirm' => 'Confirmer',
			'common.retry' => 'Réessayer',
			'common.logout' => 'Se déconnecter',
			'common.unknown' => 'Inconnu',
			'common.refresh' => 'Rafraîchir',
			'common.yes' => 'Oui',
			'common.no' => 'Non',
			'common.delete' => 'Supprimer',
			'common.edit' => 'Modifier',
			'common.shuffle' => 'Mélanger',
			'common.addTo' => 'Ajouter à…',
			'common.createNew' => 'Créer',
			'common.connect' => 'Se connecter',
			'common.disconnect' => 'Se déconnecter',
			'common.play' => 'Lire',
			'common.pause' => 'Pause',
			'common.resume' => 'Reprendre',
			'common.error' => 'Erreur',
			'common.search' => 'Rechercher',
			'common.home' => 'Accueil',
			'common.back' => 'Retour',
			'common.settings' => 'Paramètres',
			'common.mute' => 'Couper le son',
			'common.ok' => 'OK',
			'common.off' => 'Désactivé',
			'common.seasonNumber' => ({required Object number}) => 'Saison ${number}',
			'common.episodeNumberTitle' => ({required Object number, required Object title}) => 'Épisode ${number} – ${title}',
			'common.chapterNumber' => ({required Object number}) => 'Chapitre ${number}',
			'common.reconnect' => 'Se reconnecter',
			'common.viewAll' => 'Tout afficher',
			'common.checkingNetwork' => 'Vérification du réseau...',
			'common.loadingServers' => 'Chargement des serveurs...',
			'common.connectingToServers' => 'Connexion aux serveurs...',
			'common.startingOfflineMode' => 'Démarrage en mode hors ligne…',
			'common.loading' => 'Chargement...',
			'common.fullscreen' => 'Plein écran',
			'common.exitFullscreen' => 'Quitter le plein écran',
			'common.pressBackAgainToExit' => 'Appuyez à nouveau sur retour pour quitter',
			'screens.licenses' => 'Licences',
			'screens.switchProfile' => 'Changer de profil',
			'screens.subtitleStyling' => 'Configuration des sous-titres',
			'screens.mpvConfig' => 'mpv.conf',
			'screens.logs' => 'Journaux',
			'update.available' => 'Mise à jour disponible',
			'update.versionAvailable' => ({required Object version}) => 'Version ${version} disponible',
			'update.currentVersion' => ({required Object version}) => 'Actuelle : ${version}',
			'update.skipVersion' => 'Ignorer cette version',
			'update.viewRelease' => 'Voir les notes de version',
			'update.latestVersion' => 'Vous utilisez la dernière version',
			'update.checkFailed' => 'Échec de la vérification des mises à jour',
			'settings.title' => 'Paramètres',
			'settings.supportDeveloper' => 'Soutenir Plezy',
			'settings.supportDeveloperDescription' => 'Faites un don via Liberapay pour financer le développement',
			'settings.language' => 'Langue',
			'settings.theme' => 'Thème',
			'settings.appearance' => 'Apparence',
			'settings.videoPlayback' => 'Lecture vidéo',
			'settings.videoPlaybackDescription' => 'Configurer le comportement de lecture',
			'settings.advanced' => 'Avancé',
			'settings.episodePosterMode' => 'Style de l’affiche de l’épisode',
			'settings.seriesPoster' => 'Affiche de la série',
			'settings.seasonPoster' => 'Affiche de la saison',
			'settings.episodeThumbnail' => 'Miniature',
			'settings.showHeroSectionDescription' => 'Afficher le carrousel de contenu en vedette sur l\'écran d\'accueil',
			'settings.secondsLabel' => 'Secondes',
			'settings.minutesLabel' => 'Minutes',
			'settings.secondsShort' => 's',
			'settings.minutesShort' => 'm',
			'settings.durationHint' => ({required Object min, required Object max}) => 'Saisissez la durée (${min}–${max})',
			'settings.systemTheme' => 'Système',
			'settings.lightTheme' => 'Clair',
			'settings.darkTheme' => 'Sombre',
			'settings.oledTheme' => 'OLED',
			'settings.libraryDensity' => 'Densité des bibliothèques',
			'settings.compact' => 'Compact',
			'settings.comfortable' => 'Confortable',
			'settings.tvCornerSpotlightBackdrop' => 'Illustration en vedette dans le coin',
			'settings.tvCornerSpotlightBackdropDescription' => 'Afficher l’illustration en vedette dans le coin supérieur droit plutôt qu’en plein écran',
			'settings.viewMode' => 'Mode d\'affichage',
			'settings.gridView' => 'Grille',
			'settings.listView' => 'Liste',
			'settings.showHeroSection' => 'Afficher la section à la une',
			'settings.continueWatchingAction' => 'Action de « Continuer à regarder »',
			'settings.continueWatchingPlay' => 'Lire',
			'settings.continueWatchingDetails' => 'Ouvrir les détails',
			'settings.episodeAction' => 'Action des épisodes',
			'settings.episodePlay' => 'Lire',
			'settings.episodeDetails' => 'Ouvrir les détails',
			'settings.useGlobalHubs' => 'Utiliser la mise en page d\'accueil',
			'settings.useGlobalHubsDescription' => 'Afficher des hubs d\'accueil unifiés. Sinon, utiliser les recommandations de bibliothèque.',
			'settings.showServerNameOnHubs' => 'Afficher le nom du serveur sur les hubs',
			'settings.showServerNameOnHubsDescription' => 'Toujours afficher les noms des serveurs dans les titres des hubs.',
			'settings.groupLibrariesByServer' => 'Grouper les bibliothèques par serveur',
			'settings.groupLibrariesByServerDescription' => 'Regrouper les bibliothèques de la barre latérale par serveur multimédia.',
			'settings.alwaysKeepSidebarOpen' => 'Toujours garder la barre latérale ouverte',
			'settings.alwaysKeepSidebarOpenDescription' => 'La barre latérale reste étendue et la zone de contenu s\'adapte',
			'settings.showUnwatchedCount' => 'Afficher le nombre d’éléments non vus',
			'settings.showUnwatchedCountDescription' => 'Afficher le nombre d’épisodes non vus pour les séries et les saisons',
			'settings.showEpisodeNumberOnCards' => 'Afficher le numéro de l’épisode sur les cartes',
			'settings.showEpisodeNumberOnCardsDescription' => 'Afficher les numéros de saison et d’épisode sur les cartes d’épisode',
			'settings.showSeasonPostersOnTabs' => 'Afficher les affiches de saison sur les onglets',
			'settings.showSeasonPostersOnTabsDescription' => 'Afficher l’affiche de chaque saison au-dessus de son onglet',
			'settings.tvFullCardLayout' => 'Cartes TV plein format',
			'settings.tvFullCardLayoutDescription' => 'Utiliser des cartes TV composées uniquement d’une image, avec le nom des acteurs en surimpression',
			'settings.focusGlow' => 'Halo de sélection',
			'settings.focusGlowDescription' => 'Afficher un léger halo autour de la carte sélectionnée',
			'settings.visualEffects' => 'Effets visuels',
			'settings.visualEffectsAuto' => 'Automatique',
			'settings.visualEffectsAutoDescription' => 'Réduire automatiquement les effets sur les appareils peu puissants',
			'settings.visualEffectsFull' => 'Complets',
			'settings.visualEffectsReduced' => 'Réduits',
			'settings.visualEffectsReducedDescription' => 'Moins d’animations et d’illustrations de plus faible résolution',
			'settings.hideSpoilers' => 'Masquer les spoilers des épisodes non vus',
			'settings.hideSpoilersDescription' => 'Flouter les miniatures et descriptions des épisodes non vus',
			'settings.playerBackend' => 'Moteur de lecture',
			'settings.exoPlayer' => 'ExoPlayer',
			'settings.mpv' => 'mpv',
			'settings.hardwareDecoding' => 'Décodage matériel',
			'settings.hardwareDecodingDescription' => 'Utiliser l’accélération matérielle lorsqu’elle est disponible',
			'settings.bufferSize' => 'Taille du tampon',
			'settings.bufferSizeMB' => ({required Object size}) => '${size} Mo',
			'settings.bufferSizeAuto' => 'Automatique (recommandé)',
			'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap} Mo de mémoire disponible. Un tampon de ${size} Mo peut affecter la lecture.',
			'settings.defaultQualityTitle' => 'Qualité par défaut',
			'settings.musicQualityTitle' => 'Qualité de la musique',
			'settings.subtitleStyling' => 'Style des sous-titres',
			'settings.subtitleStylingDescription' => 'Personnaliser l’apparence des sous-titres',
			'settings.smallSkipDuration' => 'Durée du saut court',
			'settings.largeSkipDuration' => 'Durée du saut long',
			'settings.rewindOnResume' => 'Rembobiner à la reprise',
			'settings.secondsUnit' => ({required Object seconds}) => '${seconds} secondes',
			'settings.defaultSleepTimer' => 'Minuterie de mise en veille par défaut',
			'settings.minutesUnit' => ({required Object minutes}) => '${minutes} minutes',
			'settings.rememberTrackSelections' => 'Mémoriser les pistes choisies pour chaque série ou film',
			'settings.rememberTrackSelectionsDescription' => 'Mémoriser les choix audio et sous-titres par titre',
			'settings.showChapterMarkersOnTimeline' => 'Afficher les marqueurs de chapitres sur la barre de lecture',
			'settings.showChapterMarkersOnTimelineDescription' => 'Segmenter la barre de lecture aux limites des chapitres',
			'settings.clickVideoTogglesPlayback' => 'Cliquer sur la vidéo pour alterner entre lecture et pause',
			'settings.clickVideoTogglesPlaybackDescription' => 'Cliquer sur la vidéo pour lire ou mettre en pause plutôt que d’afficher les commandes',
			'settings.videoPlayerControls' => 'Commandes du lecteur vidéo',
			'settings.keyboardShortcuts' => 'Raccourcis clavier',
			'settings.keyboardShortcutsDescription' => 'Personnaliser les raccourcis clavier',
			'settings.videoPlayerNavigation' => 'Navigation dans le lecteur vidéo',
			'settings.videoPlayerNavigationDescription' => 'Utiliser les touches fléchées pour parcourir les commandes du lecteur vidéo',
			'settings.watchTogetherRelay' => 'Relais pour Regarder ensemble',
			'settings.watchTogetherRelayDescription' => 'Définir un relais personnalisé. Tous les participants doivent utiliser le même serveur.',
			'settings.watchTogetherRelayHint' => 'https://mon-relais.exemple.fr',
			'settings.watchTogetherRelayInvalid' => 'Saisissez une URL de base HTTP ou HTTPS valide pour le relais.',
			'settings.crashReporting' => 'Rapports de plantage',
			'settings.crashReportingDescription' => 'Envoyer des rapports de plantage pour améliorer l\'application',
			'settings.debugLogging' => 'Journalisation de débogage',
			'settings.debugLoggingDescription' => 'Activer la journalisation détaillée pour le dépannage',
			'settings.viewLogs' => 'Voir les journaux',
			'settings.viewLogsDescription' => 'Voir les journaux de l’application',
			'settings.resetSettings' => 'Réinitialiser les paramètres',
			'settings.resetSettingsDescription' => 'Restaurer les paramètres par défaut. Action irréversible.',
			'settings.resetSettingsSuccess' => 'Réinitialisation des paramètres réussie',
			'settings.backup' => 'Sauvegarde',
			'settings.exportSettings' => 'Exporter les paramètres',
			'settings.exportSettingsDescription' => 'Enregistrer vos préférences dans un fichier',
			'settings.exportSettingsSuccess' => 'Paramètres exportés',
			'settings.importSettings' => 'Importer les paramètres',
			'settings.importSettingsDescription' => 'Restaurer les préférences depuis un fichier',
			'settings.importSettingsConfirm' => 'Cela remplacera vos paramètres actuels. Continuer ?',
			'settings.importSettingsSuccess' => 'Paramètres importés',
			'settings.importSettingsInvalidFile' => 'Ce fichier n’est pas une exportation valide des paramètres de Plezy',
			'settings.importSettingsNoUser' => 'Connectez-vous avant d’importer les paramètres',
			'settings.shortcutsReset' => 'Raccourcis réinitialisés aux valeurs par défaut',
			'settings.about' => 'À propos',
			'settings.aboutDescription' => 'Informations sur l\'application et licences',
			'settings.updates' => 'Mises à jour',
			'settings.updateAvailable' => 'Mise à jour disponible',
			'settings.checkForUpdates' => 'Vérifier les mises à jour',
			'settings.autoCheckUpdatesOnStartup' => 'Vérifier automatiquement les mises à jour au démarrage',
			'settings.autoCheckUpdatesOnStartupDescription' => 'Notifier au lancement quand une mise à jour est disponible',
			'settings.validationErrorEnterNumber' => 'Veuillez saisir un nombre valide',
			'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'La durée doit être comprise entre ${min} et ${max} ${unit}',
			'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Raccourci déjà attribué à ${action}',
			'settings.shortcutUpdated' => ({required Object action}) => 'Raccourci mis à jour pour ${action}',
			'settings.saveFailed' => 'Impossible d’enregistrer les modifications. Réessayez.',
			'settings.autoSkip' => 'Saut automatique',
			'settings.autoSkipIntro' => 'Passer automatiquement l’introduction',
			'settings.autoSkipIntroDescription' => 'Passer automatiquement les marqueurs d’introduction après quelques secondes',
			'settings.autoSkipCredits' => 'Passer automatiquement le générique',
			'settings.autoSkipCreditsDescription' => 'Passer automatiquement le générique et lire l’épisode suivant',
			'settings.forceSkipMarkerFallback' => 'Forcer les marqueurs de secours',
			'settings.forceSkipMarkerFallbackDescription' => 'Utiliser les motifs des titres de chapitre même lorsque Plex fournit des marqueurs',
			'settings.autoSkipDelay' => 'Délai avant le saut automatique',
			'settings.autoSkipDelayDescription' => ({required Object seconds}) => 'Attendre ${seconds} secondes avant le saut automatique',
			'settings.introPattern' => 'Motif du marqueur d’introduction',
			'settings.introPatternDescription' => 'Expression régulière permettant de reconnaître les marqueurs d’introduction dans les titres de chapitre',
			'settings.creditsPattern' => 'Motif du marqueur de générique',
			'settings.creditsPatternDescription' => 'Expression régulière permettant de reconnaître les marqueurs de générique dans les titres de chapitre',
			'settings.invalidRegex' => 'Expression régulière invalide',
			'settings.regex' => 'Expression régulière',
			'settings.downloads' => 'Téléchargements',
			'settings.downloadLocationDescription' => 'Choisir où stocker le contenu téléchargé',
			'settings.downloadLocationDefault' => 'Par défaut (stockage de l\'application)',
			'settings.downloadLocationCustom' => 'Emplacement personnalisé',
			'settings.selectFolder' => 'Sélectionner un dossier',
			'settings.resetToDefault' => 'Réinitialiser les paramètres par défaut',
			'settings.currentPath' => ({required Object path}) => 'Actuel : ${path}',
			'settings.downloadLocationChanged' => 'Emplacement de téléchargement modifié',
			'settings.downloadLocationReset' => 'Emplacement de téléchargement réinitialisé à la valeur par défaut',
			'settings.downloadLocationInvalid' => 'Le dossier sélectionné n\'est pas accessible en écriture',
			'settings.downloadLocationPickerUnavailable' => 'La sélection de dossier n’est pas disponible sur cet appareil',
			'settings.downloadOnWifiOnly' => 'Télécharger uniquement en Wi-Fi',
			'settings.downloadOnWifiOnlyDescription' => 'Empêcher les téléchargements via les données mobiles',
			'settings.autoRemoveWatchedDownloads' => 'Supprimer automatiquement les téléchargements vus',
			'settings.autoRemoveWatchedDownloadsDescription' => 'Supprimer automatiquement les téléchargements vus',
			'settings.cellularDownloadBlocked' => 'Les téléchargements sont bloqués sur le réseau mobile. Utilisez le Wi-Fi ou modifiez ce paramètre.',
			'settings.maxVolume' => 'Volume maximal',
			'settings.maxVolumeDescription' => 'Autoriser l\'augmentation du volume au-delà de 100 % pour les médias silencieux',
			'settings.maxVolumePercent' => ({required Object percent}) => '${percent}%',
			'settings.discordRichPresence' => 'Discord Rich Presence',
			'settings.discordRichPresenceDescription' => 'Afficher sur Discord ce que vous regardez',
			'settings.services' => 'Services',
			'settings.servicesDescription' => 'Connecter Trakt, MyAnimeList, Seerr et d’autres services',
			'settings.manageLibrariesDescription' => 'Réorganiser et masquer les bibliothèques',
			'settings.companionRemoteServer' => 'Serveur de télécommande',
			'settings.companionRemoteServerDescription' => 'Autoriser les appareils mobiles de votre réseau à contrôler cette application',
			'settings.autoPip' => 'Mode image dans l’image automatique',
			'settings.autoPipDescription' => 'Passer en mode image dans l’image si vous quittez l’application pendant la lecture',
			'settings.matchContentFrameRate' => 'Adapter la fréquence d’images au contenu',
			'settings.matchContentFrameRateDescription' => 'Adapter la fréquence de rafraîchissement de l’écran au contenu vidéo',
			'settings.matchRefreshRate' => 'Adapter la fréquence de rafraîchissement',
			'settings.matchRefreshRateDescription' => 'Adapter la fréquence d\'affichage en plein écran',
			'settings.matchDynamicRange' => 'Adapter la plage dynamique',
			'settings.matchDynamicRangeDescription' => 'Activer HDR pour le contenu HDR, puis revenir en SDR',
			'settings.displaySwitchDelay' => 'Délai de changement d\'affichage',
			'settings.tunneledPlayback' => 'Lecture tunnelée',
			'settings.tunneledPlaybackDescription' => 'Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.',
			'settings.audioPassthrough' => 'Transmission audio directe',
			'settings.audioPassthroughDescription' => 'Envoyer l’audio Dolby/DTS à votre ampli ou téléviseur sans le réencoder afin de préserver le son surround. Désactivez cette option en l’absence de son.',
			'settings.audioPassthroughDescriptionAppleTv' => 'Utiliser le décodeur Dolby natif d’Apple pour le Dolby Digital Plus, y compris Atmos. Le DTS et le TrueHD sont toujours lus en PCM multicanal. Désactivez cette option en l’absence de son.',
			'settings.audioDownmix' => 'Conversion en stéréo',
			'settings.audioDownmixDescription' => 'Convertir le son surround en deux canaux pour les enceintes stéréo ou le casque',
			'settings.downmixCenterBoost' => 'Renforcement du canal central',
			'settings.downmixCenterBoostValue' => ({required Object db}) => '${db} dB',
			'settings.downmixCenterBoostLabel' => 'Renforcement (dB)',
			'settings.downmixCenterBoostShort' => 'dB',
			'settings.audioDownmixNormalize' => 'Normaliser le volume lors de la conversion en stéréo',
			'settings.audioDownmixNormalizeDescription' => 'Atténuer le mixage pour éviter la saturation. Désactivez cette option pour conserver le volume d’origine, au risque de déformer les scènes bruyantes.',
			'settings.atmosDiagnostics' => 'Test de sortie Atmos',
			'settings.atmosDiagnosticsDescription' => 'Diagnostiquer la sortie Dolby Atmos en lisant des signaux de test via le lecteur système',
			'settings.atmosTestHlsAtmos' => 'Flux Atmos d\'Apple',
			'settings.atmosTestHlsAtmosDescription' => 'Flux Dolby Atmos réputé fiable. L\'ampli devrait afficher Dolby Atmos.',
			'settings.atmosTestHlsControl' => 'Flux surround d\'Apple',
			'settings.atmosTestHlsControlDescription' => 'Flux témoin sans Atmos. L\'ampli devrait afficher du surround sans Atmos.',
			'settings.atmosTestRawStream' => 'Flux EAC3 brut',
			'settings.atmosTestRawStreamDescription' => 'Diffuse le fichier de test exactement comme la lecture Atmos du lecteur. Nécessite l\'URL du fichier de test.',
			'settings.atmosTestRawFile' => 'Fichier EAC3 brut',
			'settings.atmosTestRawFileDescription' => 'Lit le fichier de test avec une longueur connue. Nécessite l\'URL du fichier de test.',
			'settings.atmosTestAsbarNative' => 'Moteur de rendu à tampon d\'échantillons (natif)',
			'settings.atmosTestAsbarNativeDescription' => 'Transmet l\'audio compressé intact du fichier directement au moteur de rendu du système. Nécessite l\'URL du fichier de test.',
			'settings.atmosTestAsbarGenerated' => 'Moteur de rendu à tampon d\'échantillons (reconstruit)',
			'settings.atmosTestAsbarGeneratedDescription' => 'Identique, mais avec la description audio reconstruite comme à la lecture. Nécessite l\'URL du fichier de test.',
			'settings.atmosTestSessionMode' => 'Utiliser le mode lecture de films',
			'settings.atmosTestSessionModeDescription' => 'Désactivé utilise le mode documenté par Dolby. Activé utilise le mode précédent.',
			'settings.atmosTestShowRoutePicker' => 'Choisir la sortie AirPlay',
			'settings.atmosTestHideRoutePicker' => 'Masquer le sélecteur AirPlay',
			'settings.atmosTestRoutePickerDescription' => 'Envoie le test vers un récepteur AirPlay. Seul AirPlay indique le mode audio retenu.',
			'settings.atmosTestStop' => 'Arrêter le test',
			'settings.atmosTestUrl' => 'URL du fichier de test',
			'settings.atmosTestUrlDescription' => 'URL HTTP d\'un fichier .ec3 Dolby Atmos brut (extrait par ex. avec ffmpeg)',
			'settings.atmosTestUrlMissing' => 'Définissez d\'abord l\'URL du fichier de test',
			'settings.atmosTestStatus' => 'État',
			'settings.dvConversionMode' => 'Conversion Dolby Vision',
			'settings.dvConversionModeDescription' => 'Choisir comment ExoPlayer gère les fichiers Dolby Vision de profil 7.',
			'settings.dvConversionAuto' => 'Auto',
			'settings.dvConversionNative' => 'Natif / désactivé',
			'settings.dvConversionDv81' => 'P7 → P8.1',
			'settings.dvConversionHevcStrip' => 'P7 → HEVC',
			'settings.dvConversionAutoDescription' => 'Utiliser la détection des capacités de l’appareil et le comportement de repli normal',
			'settings.dvConversionNativeDescription' => 'Forcer le DV7 natif et bloquer la nouvelle tentative de conversion DV',
			'settings.dvConversionDv81Description' => 'Forcer la conversion RPU intégrée vers le profil 8.1 de Dolby Vision',
			'settings.dvConversionHevcStripDescription' => 'Supprimer les couches RPU/EL Dolby Vision et présenter du HEVC simple',
			'settings.requireProfileSelectionOnOpen' => 'Demander le profil à l\'ouverture',
			'settings.requireProfileSelectionOnOpenDescription' => 'Afficher la sélection de profil à chaque ouverture de l\'application',
			'settings.forceTvMode' => 'Forcer le mode TV',
			'settings.forceTvModeDescription' => 'Forcer l’interface TV sur les appareils qui ne sont pas détectés automatiquement. Redémarrage requis.',
			'settings.startInFullscreen' => 'Démarrer en plein écran',
			'settings.startInFullscreenDescription' => 'Ouvrir Plezy en mode plein écran au lancement',
			'settings.exitFullscreenOnPlayerClose' => 'Quitter le plein écran à la fermeture du lecteur',
			'settings.exitFullscreenOnPlayerCloseDescription' => 'Quitter automatiquement le plein écran lors de la fermeture du lecteur vidéo',
			'settings.autoHidePerformanceOverlay' => 'Masquer automatiquement les données de performance',
			'settings.autoHidePerformanceOverlayDescription' => 'Masquer progressivement les données de performance avec les commandes de lecture',
			'settings.showNavBarLabels' => 'Afficher les libellés de la barre de navigation',
			'settings.showNavBarLabelsDescription' => 'Afficher les libellés sous les icônes de la barre de navigation',
			'settings.startupSection' => 'Section de démarrage',
			'settings.liveTvDefaultFavorites' => 'Chaînes favorites par défaut',
			'settings.liveTvDefaultFavoritesDescription' => 'Afficher uniquement les chaînes favorites à l\'ouverture de la TV en direct',
			'settings.display' => 'Affichage',
			'settings.homeScreen' => 'Écran d\'accueil',
			'settings.navigation' => 'Navigation',
			'settings.window' => 'Fenêtre',
			'settings.content' => 'Contenu',
			'settings.player' => 'Lecteur',
			'settings.subtitlesAndConfig' => 'Sous-titres et configuration',
			'settings.seekAndTiming' => 'Déplacement et minutage',
			'settings.behavior' => 'Comportement',
			'search.hint' => 'Rechercher des films, des séries, de la musique...',
			'search.tryDifferentTerm' => 'Essayez un autre terme de recherche',
			'search.searchYourMedia' => 'Rechercher dans vos médias',
			'search.enterTitleActorOrKeyword' => 'Entrez un titre, un acteur ou un mot-clé',
			'hotkeys.setShortcutFor' => ({required Object actionName}) => 'Définir un raccourci pour ${actionName}',
			'hotkeys.clearShortcut' => 'Effacer le raccourci',
			'hotkeys.noShortcutSet' => 'Aucun raccourci défini',
			'hotkeys.currentShortcut' => 'Raccourci actuel :',
			'hotkeys.pressToRecord' => 'Sélectionner pour enregistrer un raccourci',
			'hotkeys.recordingShortcut' => 'Appuyez maintenant sur le raccourci',
			'hotkeys.actions.playPause' => 'Lecture/Pause',
			'hotkeys.actions.volumeUp' => 'Augmenter le volume',
			'hotkeys.actions.volumeDown' => 'Baisser le volume',
			'hotkeys.actions.seekForward' => ({required Object seconds}) => 'Avancer (${seconds}s)',
			'hotkeys.actions.seekBackward' => ({required Object seconds}) => 'Reculer (${seconds}s)',
			'hotkeys.actions.fullscreenToggle' => 'Basculer en mode plein écran',
			'hotkeys.actions.muteToggle' => 'Activer/désactiver le mode silencieux',
			'hotkeys.actions.subtitleToggle' => 'Activer/désactiver les sous-titres',
			'hotkeys.actions.audioTrackNext' => 'Piste audio suivante',
			'hotkeys.actions.subtitleTrackNext' => 'Piste de sous-titres suivante',
			'hotkeys.actions.chapterNext' => 'Chapitre suivant',
			'hotkeys.actions.chapterPrevious' => 'Chapitre précédent',
			'hotkeys.actions.episodeNext' => 'Épisode suivant',
			'hotkeys.actions.episodePrevious' => 'Épisode précédent',
			'hotkeys.actions.speedIncrease' => 'Augmenter la vitesse',
			'hotkeys.actions.speedDecrease' => 'Réduire la vitesse',
			'hotkeys.actions.speedReset' => 'Réinitialiser la vitesse',
			'hotkeys.actions.zoomIn' => 'Zoom avant',
			'hotkeys.actions.zoomOut' => 'Zoom arrière',
			'hotkeys.actions.zoomReset' => 'Réinitialiser le zoom',
			'hotkeys.actions.subSeekNext' => 'Rechercher le sous-titre suivant',
			'hotkeys.actions.subSeekPrev' => 'Rechercher le sous-titre précédent',
			'hotkeys.actions.shaderToggle' => 'Activer/désactiver les shaders',
			'hotkeys.actions.skipMarker' => 'Passer l\'intro/le générique',
			'hotkeys.actions.screenshot' => 'Prendre une capture d\'écran',
			'fileInfo.title' => 'Informations sur le fichier',
			'fileInfo.video' => 'Vidéo',
			'fileInfo.audio' => 'Audio',
			'fileInfo.file' => 'Fichier',
			'fileInfo.advanced' => 'Avancé',
			'fileInfo.codec' => 'Codec',
			'fileInfo.resolution' => 'Résolution',
			'fileInfo.bitrate' => 'Débit',
			'fileInfo.frameRate' => 'Fréquence d\'images',
			'fileInfo.aspectRatio' => 'Format d\'image',
			'fileInfo.profile' => 'Profil',
			'fileInfo.bitDepth' => 'Profondeur de bits',
			'fileInfo.colorSpace' => 'Espace colorimétrique',
			'fileInfo.colorRange' => 'Gamme de couleurs',
			'fileInfo.colorPrimaries' => 'Couleurs primaires',
			'fileInfo.chromaSubsampling' => 'Sous-échantillonnage chromatique',
			'fileInfo.channels' => 'Canaux',
			'fileInfo.subtitles' => 'Sous-titres',
			'fileInfo.overallBitrate' => 'Débit global',
			'fileInfo.path' => 'Chemin',
			'fileInfo.size' => 'Taille',
			'fileInfo.container' => 'Conteneur',
			'fileInfo.duration' => 'Durée',
			'fileInfo.optimizedForStreaming' => 'Optimisé pour le streaming',
			'fileInfo.has64bitOffsets' => 'Décalages 64 bits',
			'mediaMenu.markAsWatched' => 'Marquer comme vu',
			'mediaMenu.markAsUnwatched' => 'Marquer comme non visionné',
			'mediaMenu.removeFromContinueWatching' => 'Supprimer de la liste "Continuer à regarder"',
			'mediaMenu.viewDetails' => 'Voir les détails',
			'mediaMenu.goToSeries' => 'Aller à la série',
			'mediaMenu.shufflePlay' => 'Lecture aléatoire',
			'mediaMenu.shuffleNotAvailableOffline' => 'La lecture aléatoire n’est pas disponible hors ligne',
			'mediaMenu.fileInfo' => 'Informations sur le fichier',
			'mediaMenu.deleteFromServer' => 'Supprimer du serveur',
			'mediaMenu.confirmDelete' => 'Supprimer ce média et ses fichiers de votre serveur ?',
			'mediaMenu.deleteMultipleWarning' => 'Cela inclut tous les épisodes et leurs fichiers.',
			'mediaMenu.mediaDeletedSuccessfully' => 'Élément média supprimé avec succès',
			'mediaMenu.mediaFailedToDelete' => 'Échec de la suppression de l\'élément média',
			'mediaMenu.rate' => 'Noter',
			'mediaMenu.playFromBeginning' => 'Lire depuis le début',
			'mediaMenu.playVersion' => 'Lire la version...',
			'rateSheet.title' => 'Noter',
			'rateSheet.server' => 'Serveur',
			'rateSheet.favorite' => 'Favori',
			'rateSheet.favorited' => 'Ajouté aux favoris',
			'rateSheet.saved' => 'Enregistré',
			'rateSheet.notAvailable' => 'Aucune correspondance trouvée',
			'rateSheet.noConnectedServices' => 'Connectez un service dans les paramètres pour pouvoir y attribuer une note.',
			'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film',
			'accessibility.mediaCardShow' => ({required Object title}) => '${title}, série TV',
			'accessibility.mediaCardEpisode' => ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}',
			'accessibility.mediaCardSeason' => ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}',
			'accessibility.mediaCardWatched' => 'visionné',
			'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} pour cent visionné',
			'accessibility.mediaCardUnwatched' => 'non visionné',
			'accessibility.tapToPlay' => 'Appuyez pour lire',
			'accessibility.decrease' => 'Diminuer',
			'accessibility.increase' => 'Augmenter',
			'accessibility.decreaseValue' => ({required Object label}) => 'Diminuer ${label}',
			'accessibility.increaseValue' => ({required Object label}) => 'Augmenter ${label}',
			'accessibility.hue' => 'Teinte',
			'accessibility.saturation' => 'Saturation',
			'accessibility.brightness' => 'Luminosité',
			'accessibility.hexColor' => 'Couleur hexadécimale',
			'accessibility.expandText' => 'Développer le texte',
			'accessibility.collapseText' => 'Replier le texte',
			'accessibility.alphabetNavigation' => 'Navigation alphabétique',
			'accessibility.alphabetScrollHint' => 'Balayez vers le haut ou le bas pour changer de lettre',
			'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Ligne ${row} sur ${rowCount}, colonne ${column} sur ${columnCount}',
			'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'Ligne ${row} sur ${rowCount}',
			'tooltips.shufflePlay' => 'Lecture aléatoire',
			'tooltips.playTrailer' => 'Lire la bande-annonce',
			'tooltips.markAsWatched' => 'Marquer comme vu',
			'tooltips.markAsUnwatched' => 'Marquer comme non vu',
			'audioTracks.track' => ({required Object n}) => 'Piste audio ${n}',
			'videoControls.audioLabel' => 'Audio',
			'videoControls.subtitlesLabel' => 'Sous-titres',
			'videoControls.resetToZero' => 'Réinitialiser à 0 ms',
			'videoControls.addTime' => ({required Object amount, required Object unit}) => '+${amount}${unit}',
			'videoControls.minusTime' => ({required Object amount, required Object unit}) => '-${amount}${unit}',
			'videoControls.playsLater' => ({required Object label}) => '${label} : lecture retardée',
			'videoControls.playsEarlier' => ({required Object label}) => '${label} : lecture avancée',
			'videoControls.noOffset' => 'Pas de décalage',
			'videoControls.letterbox' => 'Format letterbox',
			'videoControls.fillScreen' => 'Remplir l’écran',
			'videoControls.stretch' => 'Étirer',
			'videoControls.lockRotation' => 'Verrouiller la rotation',
			'videoControls.unlockRotation' => 'Déverrouiller la rotation',
			'videoControls.timerActive' => 'Minuterie active',
			'videoControls.playbackWillPauseIn' => ({required Object duration}) => 'La lecture sera mise en pause dans ${duration}',
			'videoControls.sleepTimerEndOfVideo' => 'Fin de la vidéo actuelle',
			'videoControls.sleepTimerStopAtHeader' => 'Arrêter à',
			'videoControls.sleepTimerDurationHeader' => 'Minuterie',
			'videoControls.playbackWillPauseAtEnd' => 'La lecture sera mise en pause à la fin de cette vidéo',
			'videoControls.stillWatching' => 'Toujours en train de regarder ?',
			'videoControls.pausingIn' => ({required Object seconds}) => 'Pause dans ${seconds}s',
			'videoControls.continueWatching' => 'Continuer',
			'videoControls.autoPlayNext' => 'Lecture automatique de l’élément suivant',
			'videoControls.playNext' => 'Lire l\'épisode suivant',
			'videoControls.playButton' => 'Lire',
			'videoControls.pauseButton' => 'Pause',
			'videoControls.showPlaybackControls' => 'Afficher les commandes de lecture',
			'videoControls.hidePlaybackControls' => 'Masquer les commandes de lecture',
			'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Reculer de ${seconds} secondes',
			'videoControls.seekForwardButton' => ({required Object seconds}) => 'Avancer de ${seconds} secondes',
			'videoControls.previousButton' => 'Épisode précédent',
			'videoControls.nextButton' => 'Épisode suivant',
			'videoControls.previousChapterButton' => 'Chapitre précédent',
			'videoControls.nextChapterButton' => 'Chapitre suivant',
			'videoControls.muteButton' => 'Couper le son',
			'videoControls.unmuteButton' => 'Rétablir le son',
			'videoControls.settingsButton' => 'Paramètres de lecture',
			'videoControls.tracksButton' => 'Audio et sous-titres',
			'videoControls.chaptersButton' => 'Chapitres',
			'videoControls.versionQualityButton' => 'Version et qualité',
			'videoControls.versionColumnHeader' => 'Version',
			'videoControls.qualityColumnHeader' => 'Qualité',
			'videoControls.qualityOriginal' => 'Originale',
			'videoControls.qualityPresetLabel' => ({required Object resolution, required Object bitrate}) => '${resolution}p ${bitrate} Mbps',
			'videoControls.transcodeUnavailableFallback' => 'Transcodage indisponible — lecture en qualité originale',
			'videoControls.subtitleUnavailableFallback' => 'Impossible de charger les sous-titres sélectionnés — poursuite de la lecture sans sous-titres',
			'videoControls.pipButton' => 'Mode image dans l’image',
			'videoControls.aspectRatioButton' => 'Format d\'image',
			'videoControls.ambientLighting' => 'Éclairage ambiant',
			'videoControls.fullscreenButton' => 'Passer en mode plein écran',
			'videoControls.exitFullscreenButton' => 'Quitter le mode plein écran',
			'videoControls.alwaysOnTopButton' => 'Toujours au premier plan',
			'videoControls.rotationLockButton' => 'Verrouillage de rotation',
			'videoControls.lockScreen' => 'Verrouiller l\'écran',
			'videoControls.screenLockButton' => 'Verrouillage de l\'écran',
			'videoControls.longPressToUnlock' => 'Appui long pour déverrouiller',
			'videoControls.timelineSlider' => 'Barre de progression vidéo',
			'videoControls.volumeSlider' => 'Niveau du volume',
			'videoControls.endsAt' => ({required Object time}) => 'Se termine à ${time}',
			'videoControls.pipActive' => 'Lecture en mode image dans l\'image',
			'videoControls.pipFailed' => 'Échec du démarrage du mode image dans l\'image',
			'videoControls.screenshotSaved' => 'Capture d\'écran enregistrée',
			'videoControls.zoomPercent' => ({required Object percent}) => 'Zoom ${percent} %',
			'videoControls.pipErrors.androidVersion' => 'Nécessite Android 8.0 ou plus récent',
			'videoControls.pipErrors.iosVersion' => 'Nécessite iOS 15.0 ou plus récent',
			'videoControls.pipErrors.permissionDisabled' => 'Le mode image dans l’image est désactivé. Activez-le dans les paramètres système.',
			'videoControls.pipErrors.notSupported' => 'Cet appareil ne prend pas en charge le mode image dans l\'image',
			'videoControls.pipErrors.voSwitchFailed' => 'Échec du changement de sortie vidéo pour l\'image dans l\'image',
			'videoControls.pipErrors.failed' => 'Échec du démarrage du mode image dans l\'image',
			'videoControls.pipErrors.unknown' => ({required Object error}) => 'Une erreur s\'est produite : ${error}',
			'videoControls.chapters' => 'Chapitres',
			'videoControls.noChaptersAvailable' => 'Aucun chapitre disponible',
			'videoControls.queue' => 'File d\'attente',
			'videoControls.noQueueItems' => 'Aucun élément dans la file d\'attente',
			'videoControls.searchSubtitles' => 'Rechercher des sous-titres',
			'videoControls.language' => 'Langue',
			'videoControls.noSubtitlesFound' => 'Aucun sous-titre trouvé',
			'videoControls.subtitleDownloaded' => 'Sous-titre téléchargé',
			_ => null,
		} ?? switch (path) {
			'videoControls.subtitleDownloadedNotApplied' => 'Le sous-titre a été téléchargé, mais n’a pas pu être sélectionné',
			'videoControls.subtitleDownloadFailed' => 'Échec du téléchargement du sous-titre',
			'videoControls.searchLanguages' => 'Rechercher des langues...',
			'messages.markedAsWatched' => 'Marqué comme vu',
			'messages.markedAsUnwatched' => 'Marqué comme non vu',
			'messages.markedAsWatchedOffline' => 'Marqué comme vu (se synchronisera lorsque vous serez en ligne)',
			'messages.markedAsUnwatchedOffline' => 'Marqué comme non vu (sera synchronisé lorsque vous serez en ligne)',
			'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Supprimé automatiquement : ${title}',
			'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, one: '${n} téléchargement vu supprimé automatiquement', other: '${n} téléchargements vus supprimés automatiquement', ), 
			'messages.removedFromContinueWatching' => 'Supprimé de « Continuer à regarder »',
			'messages.errorLoading' => ({required Object error}) => 'Erreur : ${error}',
			'messages.streamInterrupted' => 'La lecture a été interrompue. Appuyez sur Lecture ou avancez pour réessayer.',
			'messages.liveStreamInterrupted' => 'Le direct a été interrompu. Appuyez sur Lecture pour réessayer.',
			'messages.fileInfoNotAvailable' => 'Informations sur le fichier non disponibles',
			'messages.playbackAuthenticationRequired' => 'Reconnectez-vous au serveur multimédia pour lire cet élément.',
			'messages.playbackServerUnavailable' => 'Le serveur multimédia est indisponible. Réessayez plus tard.',
			'messages.playbackDataInvalid' => 'Le serveur a renvoyé des informations de lecture non valides.',
			'messages.playbackCancelled' => 'La lecture a été annulée.',
			'messages.playbackFailed' => 'Impossible de démarrer la lecture.',
			'messages.errorLoadingFileInfo' => ({required Object error}) => 'Erreur lors du chargement des informations sur le fichier : ${error}',
			'messages.errorLoadingSeries' => 'Erreur lors du chargement de la série',
			'messages.musicNotSupported' => 'La lecture de musique n\'est pas encore prise en charge',
			'messages.noDescriptionAvailable' => 'Aucune description disponible',
			'messages.noProfilesAvailable' => 'Aucun profil disponible',
			'messages.contactAdminForProfiles' => 'Contactez votre administrateur serveur pour ajouter des profils',
			'messages.unableToDetermineLibrarySection' => 'Impossible de déterminer la section de la bibliothèque pour cet élément',
			'messages.logsCleared' => 'Journaux effacés',
			'messages.logsCopied' => 'Journaux copiés dans le presse-papiers',
			'messages.noLogsAvailable' => 'Aucun journal disponible',
			'messages.libraryScanning' => ({required Object title}) => 'Analyse de « ${title} »…',
			'messages.libraryScanStarted' => ({required Object title}) => 'Analyse de la bibliothèque lancée pour « ${title} »',
			'messages.libraryScanFailed' => ({required Object error}) => 'Échec de l’analyse de la bibliothèque : ${error}',
			'messages.metadataRefreshing' => ({required Object title}) => 'Actualisation des métadonnées de « ${title} »…',
			'messages.metadataRefreshStarted' => ({required Object title}) => 'Actualisation des métadonnées lancée pour « ${title} »',
			'messages.metadataRefreshFailed' => ({required Object error}) => 'Échec de l’actualisation des métadonnées : ${error}',
			'messages.logoutConfirm' => 'Êtes-vous sûr de vouloir vous déconnecter ?',
			'messages.noSeasonsFound' => 'Aucune saison trouvée',
			'messages.seasonsLoadFailed' => 'Impossible de charger les saisons',
			'messages.noEpisodesFound' => 'Aucun épisode trouvé dans la première saison',
			'messages.noEpisodesFoundGeneral' => 'Aucun épisode trouvé',
			'messages.episodesLoadFailed' => 'Impossible de charger les épisodes',
			'messages.noResultsFound' => 'Aucun résultat trouvé',
			'messages.sleepTimerSet' => ({required Object label}) => 'Minuterie de mise en veille réglée sur ${label}',
			'messages.noItemsAvailable' => 'Aucun élément disponible',
			'messages.failedToCreatePlayQueueNoItems' => 'Impossible de créer la file d’attente de lecture : aucun élément',
			'messages.failedPlayback' => ({required Object action, required Object error}) => 'Échec de ${action} : ${error}',
			'messages.switchingToCompatiblePlayer' => 'Passage au lecteur compatible...',
			'messages.serverLimitTitle' => 'Échec de la lecture',
			'messages.serverLimitBody' => 'Erreur serveur (HTTP 500). Une limite de bande passante/transcodage a probablement rejeté cette session. Demandez au propriétaire de l\'ajuster.',
			'messages.logsUploaded' => 'Journaux envoyés',
			'messages.logsUploadFailed' => 'Échec de l’envoi des journaux',
			'messages.logId' => 'Identifiant du journal',
			'subtitlingStyling.text' => 'Texte',
			'subtitlingStyling.border' => 'Bordure',
			'subtitlingStyling.background' => 'Arrière-plan',
			'subtitlingStyling.fontSize' => 'Taille de la police',
			'subtitlingStyling.textColor' => 'Couleur du texte',
			'subtitlingStyling.borderSize' => 'Taille de la bordure',
			'subtitlingStyling.borderColor' => 'Couleur de la bordure',
			'subtitlingStyling.backgroundOpacity' => 'Opacité d\'arrière-plan',
			'subtitlingStyling.backgroundColor' => 'Couleur d\'arrière-plan',
			'subtitlingStyling.position' => 'Position',
			'subtitlingStyling.assOverride' => 'Remplacement ASS',
			'subtitlingStyling.overrideScale' => 'Mettre à l’échelle',
			'subtitlingStyling.overrideForce' => 'Forcer',
			'subtitlingStyling.overrideStrip' => 'Supprimer le style',
			'subtitlingStyling.positionTop' => 'Haut',
			'subtitlingStyling.positionBottom' => 'Bas',
			'subtitlingStyling.bold' => 'Gras',
			'subtitlingStyling.italic' => 'Italique',
			'subtitlingStyling.renderResolution' => 'Résolution de rendu',
			'subtitlingStyling.renderResolutionScreen' => 'Résolution de l\'écran',
			'subtitlingStyling.renderResolutionVideo' => 'Résolution de la vidéo',
			'mpvConfig.title' => 'Configuration mpv',
			'mpvConfig.description' => 'Paramètres avancés du lecteur vidéo',
			'mpvConfig.presets' => 'Préréglages',
			'mpvConfig.noPresets' => 'Aucun préréglage enregistré',
			'mpvConfig.saveAsPreset' => 'Enregistrer comme préréglage...',
			'mpvConfig.presetName' => 'Nom du préréglage',
			'mpvConfig.presetNameHint' => 'Entrez un nom pour ce préréglage',
			'mpvConfig.loadPreset' => 'Charger',
			'mpvConfig.deletePreset' => 'Supprimer',
			'mpvConfig.presetSaved' => 'Préréglage enregistré',
			'mpvConfig.presetLoaded' => 'Préréglage chargé',
			'mpvConfig.presetDeleted' => 'Préréglage supprimé',
			'mpvConfig.confirmDeletePreset' => 'Êtes-vous sûr de vouloir supprimer ce préréglage ?',
			'mpvConfig.configPlaceholder' => 'gpu-api=vulkan\nhwdec=auto\n# comment',
			'dialog.confirmAction' => 'Confirmer l\'action',
			'profiles.addPlezyProfile' => 'Ajouter un profil Plezy',
			'profiles.switchingProfile' => 'Changement de profil…',
			'profiles.deleteThisProfileTitle' => 'Supprimer ce profil ?',
			'profiles.deleteThisProfileMessage' => ({required Object displayName}) => 'Supprimer ${displayName}. Les connexions ne sont pas affectées.',
			'profiles.active' => 'Actif',
			'profiles.manage' => 'Gérer',
			'profiles.delete' => 'Supprimer',
			'profiles.signOut' => 'Se déconnecter',
			'profiles.signOutPlexTitle' => 'Se déconnecter de Plex ?',
			'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Supprimer ${displayName} et tous les utilisateurs Plex Home ? Reconnexion possible à tout moment.',
			'profiles.signedOutPlex' => 'Déconnecté de Plex.',
			'profiles.signOutFailed' => 'Échec de la déconnexion.',
			'profiles.sectionTitle' => 'Profils',
			'profiles.summarySingle' => 'Ajoutez des profils pour mélanger utilisateurs gérés et identités locales',
			'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profils · actif : ${activeName}',
			'profiles.summaryMultiple' => ({required Object count}) => '${count} profils',
			'profiles.removeConnectionTitle' => 'Retirer la connexion ?',
			'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Supprimer l\'accès de ${displayName} à ${connectionLabel}. Les autres profils le conservent.',
			'profiles.deleteProfileTitle' => 'Supprimer le profil ?',
			'profiles.deleteProfileMessage' => ({required Object displayName}) => 'Supprimer ${displayName} et ses connexions. Les serveurs restent disponibles.',
			'profiles.profileNameLabel' => 'Nom du profil',
			'profiles.pinProtectionLabel' => 'Protection par code PIN',
			'profiles.pinManagedByPlex' => 'PIN géré par Plex. Modifier sur plex.tv.',
			'profiles.noPinSetEditOnPlex' => 'Aucun PIN défini. Pour en exiger un, modifiez l\'utilisateur Home sur plex.tv.',
			'profiles.setPin' => 'Définir un PIN',
			'profiles.setPinTitle' => 'Définir un PIN',
			'profiles.confirmPinTitle' => 'Confirmer le PIN',
			'profiles.pinSet' => 'PIN défini',
			'profiles.changePin' => 'Modifier',
			'profiles.removePin' => 'Retirer',
			'profiles.connectionsLabel' => 'Connexions',
			'profiles.add' => 'Ajouter',
			'profiles.deleteProfileButton' => 'Supprimer le profil',
			'profiles.noConnectionsHint' => 'Aucune connexion — ajoutez-en une pour utiliser ce profil.',
			'profiles.noConnections' => 'Aucune connexion',
			'profiles.plexHomeAccount' => 'Compte Plex Home',
			'profiles.connectionDefault' => 'Par défaut',
			'profiles.connectionAs' => ({required Object displayName}) => 'en tant que ${displayName}',
			'profiles.makeDefault' => 'Définir par défaut',
			'profiles.removeConnection' => 'Retirer',
			'profiles.profileRenamed' => 'Profil renommé.',
			'profiles.borrowAddTo' => ({required Object displayName}) => 'Ajouter à ${displayName}',
			'profiles.borrowExplain' => 'Emprunter la connexion d\'un autre profil. Les profils protégés par PIN exigent un PIN.',
			'profiles.borrowEmpty' => 'Rien à emprunter pour le moment.',
			'profiles.borrowEmptySubtitle' => 'Connectez d\'abord Plex ou Jellyfin à un autre profil.',
			'profiles.borrowLoadFailed' => 'Impossible de charger les connexions disponibles. Réessayez.',
			'profiles.borrowFromProfile' => ({required Object displayName}) => 'De ${displayName}',
			'profiles.borrowConnectionBorrowed' => 'Connexion empruntée.',
			'profiles.borrowFailed' => 'Impossible d\'emprunter la connexion.',
			'profiles.incorrectPin' => 'PIN incorrect.',
			'profiles.incorrectPinTryAgain' => 'PIN incorrect. Veuillez réessayer.',
			'profiles.sourceProfileMissingParentAccount' => 'Le profil source ne possède pas de compte parent.',
			'profiles.failedToLoadHomeUsers' => 'Impossible de charger vos utilisateurs Plex Home. Vérifiez votre connexion et réessayez.',
			'profiles.failedToVerifyPin' => 'Impossible de vérifier le PIN.',
			'profiles.newProfile' => 'Nouveau profil',
			'profiles.profileNameHint' => 'ex. Invités, Enfants, Salon familial',
			'profiles.pinProtectionOptional' => 'Protection par PIN (optionnelle)',
			'profiles.pinExplain' => 'PIN à 4 chiffres requis pour changer de profil.',
			'profiles.continueButton' => 'Continuer',
			'profiles.pinsDontMatch' => 'Les PIN ne correspondent pas',
			'connections.sectionTitle' => 'Connexions',
			'connections.addConnection' => 'Ajouter une connexion',
			'connections.addConnectionSubtitleNoProfile' => 'Connectez-vous avec Plex ou connectez un serveur Jellyfin',
			'connections.addConnectionSubtitleScoped' => ({required Object displayName}) => 'Ajouter à ${displayName} : Plex, Jellyfin ou une autre connexion de profil',
			'connections.sessionExpiredOne' => ({required Object name}) => 'Session expirée pour ${name}',
			'connections.sessionExpiredMany' => ({required Object count}) => 'Session expirée pour ${count} serveurs',
			'connections.signInAgain' => 'Se reconnecter',
			'connections.editJellyfinTitle' => 'Modifier la connexion Jellyfin',
			'connections.editJellyfinIntro' => ({required Object serverName}) => 'Ajoutez ou supprimez des URL pour ${serverName}. Plezy utilisera l\'URL joignable avec la latence la plus faible.',
			'discover.title' => 'Découvrir',
			'discover.noContentAvailable' => 'Aucun contenu disponible',
			'discover.addMediaToLibraries' => 'Ajoutez des médias à vos bibliothèques',
			'discover.continueWatching' => 'Continuer à regarder',
			'discover.continueWatchingIn' => ({required Object library}) => 'Continuer à regarder dans ${library}',
			'discover.nextUp' => 'À suivre',
			'discover.nextUpIn' => ({required Object library}) => 'À suivre dans ${library}',
			'discover.recentlyAdded' => 'Récemment ajouté',
			'discover.recentlyAddedIn' => ({required Object library}) => 'Récemment ajouté dans ${library}',
			'discover.latestAlbumsIn' => ({required Object library}) => 'Derniers albums dans ${library}',
			'discover.recentlyPlayedIn' => ({required Object library}) => 'Récemment lus dans ${library}',
			'discover.mostPlayedIn' => ({required Object library}) => 'Les plus lus dans ${library}',
			'discover.playEpisode' => ({required Object season, required Object episode}) => 'S${season}E${episode}',
			'discover.overview' => 'Aperçu',
			'discover.cast' => 'Distribution',
			'discover.extras' => 'Bandes-annonces et bonus',
			'discover.studio' => 'Studio',
			'discover.rating' => 'Évaluation',
			'discover.director' => 'Réalisateur',
			'discover.directors' => 'Réalisateurs',
			'discover.movie' => 'Film',
			'discover.tvShow' => 'Série TV',
			'discover.minutesLeft' => ({required Object minutes}) => '${minutes} min restantes',
			'discover.moreLikeThis' => 'Plus de contenus similaires',
			'errors.searchFailed' => ({required Object error}) => 'Échec de la recherche : ${error}',
			'errors.connectionTimeout' => ({required Object context}) => 'Délai d\'attente de connexion dépassé pendant le chargement ${context}',
			'errors.connectionFailed' => 'Impossible de se connecter au serveur multimédia',
			'errors.unableToLoad' => ({required Object context}) => 'Impossible de charger ${context}. Réessayez.',
			'errors.noClientAvailable' => 'Aucun client disponible',
			'errors.pleaseEnterToken' => 'Veuillez saisir un jeton',
			'errors.invalidToken' => 'Jeton non valide',
			'errors.failedToVerifyToken' => ({required Object error}) => 'Échec de la vérification du jeton : ${error}',
			'errors.failedToSwitchProfile' => ({required Object displayName}) => 'Impossible de changer de profil vers ${displayName}',
			'errors.failedToDeleteProfile' => ({required Object displayName}) => 'Impossible de supprimer ${displayName}',
			'errors.failedToRate' => 'Impossible de mettre à jour la note',
			'libraries.title' => 'Bibliothèques',
			'libraries.fallbackTitle' => 'Bibliothèque',
			'libraries.scanLibraryFiles' => 'Scanner les fichiers de la bibliothèque',
			'libraries.scanLibrary' => 'Scanner la bibliothèque',
			'libraries.analyze' => 'Analyser',
			'libraries.analyzeLibrary' => 'Analyser la bibliothèque',
			'libraries.refreshMetadata' => 'Actualiser les métadonnées',
			'libraries.emptyTrash' => 'Vider la corbeille',
			'libraries.emptyingTrash' => ({required Object title}) => 'Vidage de la corbeille de « ${title} »…',
			'libraries.trashEmptied' => ({required Object title}) => 'Corbeille vidée pour « ${title} »',
			'libraries.failedToEmptyTrash' => ({required Object error}) => 'Échec du vidage de la corbeille : ${error}',
			'libraries.analyzing' => ({required Object title}) => 'Analyse de « ${title} »…',
			'libraries.analysisStarted' => ({required Object title}) => 'Analyse lancée pour « ${title} »',
			'libraries.failedToAnalyze' => ({required Object error}) => 'Échec de l’analyse de la bibliothèque : ${error}',
			'libraries.noLibrariesFound' => 'Aucune bibliothèque trouvée',
			'libraries.allLibrariesHidden' => 'Toutes les bibliothèques sont masquées',
			'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Bibliothèques masquées (${count})',
			'libraries.thisLibraryIsEmpty' => 'Cette bibliothèque est vide',
			'libraries.noItemsMatchFilters' => 'Aucun élément ne correspond aux filtres actifs',
			'libraries.resetFilters' => 'Réinitialiser les filtres',
			'libraries.all' => 'Tout',
			'libraries.clearAll' => 'Tout effacer',
			'libraries.scanLibraryConfirm' => ({required Object title}) => 'Voulez-vous vraiment scanner « ${title} » ?',
			'libraries.analyzeLibraryConfirm' => ({required Object title}) => 'Voulez-vous vraiment analyser « ${title} » ?',
			'libraries.refreshMetadataConfirm' => ({required Object title}) => 'Voulez-vous vraiment actualiser les métadonnées de « ${title} » ?',
			'libraries.emptyTrashConfirm' => ({required Object title}) => 'Voulez-vous vraiment vider la corbeille de « ${title} » ?',
			'libraries.manageLibraries' => 'Gérer les bibliothèques',
			'libraries.sort' => 'Trier',
			'libraries.sortBy' => 'Trier par',
			'libraries.filters' => 'Filtres',
			'libraries.confirmActionMessage' => 'Êtes-vous sûr de vouloir effectuer cette action ?',
			'libraries.showLibrary' => 'Afficher la bibliothèque',
			'libraries.hideLibrary' => 'Masquer la bibliothèque',
			'libraries.libraryOptions' => 'Options de bibliothèque',
			'libraries.content' => 'contenu de la bibliothèque',
			'libraries.selectLibrary' => 'Sélectionner la bibliothèque',
			'libraries.filtersWithCount' => ({required Object count}) => 'Filtres (${count})',
			'libraries.noRecommendations' => 'Aucune recommandation disponible',
			'libraries.noCollections' => 'Aucune collection dans cette bibliothèque',
			'libraries.noFoldersFound' => 'Aucun dossier trouvé',
			'libraries.folders' => 'dossiers',
			'libraries.tabs.recommended' => 'Recommandé',
			'libraries.tabs.browse' => 'Parcourir',
			'libraries.tabs.collections' => 'Collections',
			'libraries.tabs.playlists' => 'Playlists',
			'libraries.groupings.title' => 'Regroupement',
			'libraries.groupings.all' => 'Tous',
			'libraries.groupings.movies' => 'Films',
			'libraries.groupings.shows' => 'Séries TV',
			'libraries.groupings.seasons' => 'Saisons',
			'libraries.groupings.episodes' => 'Épisodes',
			'libraries.groupings.artists' => 'Artistes',
			'libraries.groupings.albums' => 'Albums',
			'libraries.groupings.tracks' => 'Titres',
			'libraries.groupings.folders' => 'Dossiers',
			'libraries.filterCategories.genre' => 'Genre',
			'libraries.filterCategories.year' => 'Année',
			'libraries.filterCategories.contentRating' => 'Classification',
			'libraries.filterCategories.tag' => 'Étiquette',
			'libraries.filterCategories.unwatched' => 'Non vus',
			'libraries.filterCategories.unplayed' => 'Non lus',
			'libraries.filterCategories.favorites' => 'Favoris',
			'libraries.sortLabels.title' => 'Titre',
			'libraries.sortLabels.dateAdded' => 'Date d\'ajout',
			'libraries.sortLabels.releaseDate' => 'Date de sortie',
			'libraries.sortLabels.rating' => 'Note',
			'libraries.sortLabels.communityRating' => 'Note communautaire',
			'libraries.sortLabels.criticRating' => 'Note critique',
			'libraries.sortLabels.userRating' => 'Note utilisateur',
			'libraries.sortLabels.datePlayed' => 'Date de lecture',
			'libraries.sortLabels.playCount' => 'Lectures',
			'libraries.sortLabels.productionYear' => 'Année de production',
			'libraries.sortLabels.runtime' => 'Durée',
			'libraries.sortLabels.officialRating' => 'Classification officielle',
			'libraries.sortLabels.premiereDate' => 'Date de première',
			'libraries.sortLabels.startDate' => 'Date de début',
			'libraries.sortLabels.airTime' => 'Heure de diffusion',
			'libraries.sortLabels.studio' => 'Studio',
			'libraries.sortLabels.random' => 'Aléatoire',
			'libraries.sortLabels.dateShared' => 'Date de partage',
			'libraries.sortLabels.latestEpisodeAirDate' => 'Dernière date de diffusion',
			'libraries.sortLabels.lastEpisodeDateAdded' => 'Date d\'ajout du dernier épisode',
			'about.title' => 'À propos',
			'about.openSourceLicenses' => 'Licences libres',
			'about.versionLabel' => ({required Object version}) => 'Version ${version}',
			'about.appDescription' => 'Un magnifique client Plex et Jellyfin pour Flutter',
			'about.viewLicensesDescription' => 'Afficher les licences des bibliothèques tierces',
			'serverSelection.noServersFoundForAccount' => ({required Object username, required Object email}) => 'Aucun serveur trouvé pour ${username} (${email})',
			'serverSelection.failedToLoadServers' => ({required Object error}) => 'Échec du chargement des serveurs : ${error}',
			'hubDetail.title' => 'Titre',
			'hubDetail.releaseYear' => 'Année de sortie',
			'hubDetail.dateAdded' => 'Date d\'ajout',
			'hubDetail.rating' => 'Évaluation',
			'hubDetail.noItemsFound' => 'Aucun élément trouvé',
			'logs.clearLogs' => 'Effacer les journaux',
			'logs.copyLogs' => 'Copier les journaux',
			'logs.uploadLogs' => 'Envoyer les journaux',
			'licenses.relatedPackages' => 'Paquets associés',
			'licenses.license' => 'Licence',
			'licenses.licenseNumber' => ({required Object number}) => 'Licence ${number}',
			'licenses.licensesCount' => ({required Object count}) => '${count} licences',
			'navigation.libraries' => 'Bibliothèques',
			'navigation.downloads' => 'Téléchargements',
			'navigation.liveTv' => 'TV en direct',
			'navigation.explore' => 'Explorer',
			'explore.title' => 'Explorer',
			'explore.selectSource' => 'Sélectionner la source',
			'explore.rows.watchlist' => 'Liste de suivi',
			'explore.rows.recommendedMovies' => 'Films recommandés',
			'explore.rows.recommendedShows' => 'Séries recommandées',
			'explore.rows.trendingMovies' => 'Films tendance',
			'explore.rows.trendingShows' => 'Séries tendance',
			'explore.rows.popularMovies' => 'Films populaires',
			'explore.rows.popularShows' => 'Séries populaires',
			'explore.rows.trendingAnime' => 'Animes tendance',
			'explore.rows.suggestedAnime' => 'Animes suggérés',
			'explore.rows.airingAnime' => 'Meilleurs animes en diffusion',
			'explore.rows.popularAnime' => 'Animes les plus populaires',
			'explore.rows.trending' => 'Tendances',
			'explore.rows.upcomingMovies' => 'Films à venir',
			'explore.rows.upcomingShows' => 'Séries à venir',
			'explore.status.airing' => 'En cours',
			'explore.status.ended' => 'Terminé',
			'explore.status.canceled' => 'Annulé',
			'explore.status.upcoming' => 'À venir',
			'explore.episodeCount' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, one: '${n} épisode', other: '${n} épisodes', ), 
			'explore.cast' => 'Distribution',
			'explore.characters' => 'Personnages',
			'explore.addToWatchlist' => 'Ajouter à la liste de suivi',
			'explore.removeFromWatchlist' => 'Retirer de la liste de suivi',
			'explore.watchlistUpdateFailed' => 'Impossible de mettre à jour la liste de suivi',
			'explore.notInLibrary' => 'Absent de votre bibliothèque',
			'explore.inTheseLibraries' => 'Dans ces bibliothèques',
			'explore.checkingLibrary' => 'Vérification de votre bibliothèque...',
			'explore.emptyTitle' => 'Rien ici pour l\'instant',
			'explore.emptyMessage' => ({required Object source}) => 'Les lignes de ${source} apparaîtront ici dès qu’elles contiendront des éléments.',
			'explore.searchHint' => ({required Object source}) => 'Rechercher dans ${source}',
			'explore.searchEmpty' => ({required Object query}) => 'Aucun résultat pour "${query}"',
			'explore.searchPrompt' => ({required Object source}) => 'Recherchez des films et des séries sur ${source}.',
			'explore.searchFailed' => 'Échec de la recherche. Vérifiez votre connexion et réessayez.',
			'liveTv.title' => 'TV en direct',
			'liveTv.guide' => 'Guide',
			'liveTv.noChannels' => 'Aucune chaîne disponible',
			'liveTv.noDvr' => 'Aucun DVR configuré sur les serveurs',
			'liveTv.serverUnavailable' => 'Le serveur de TV en direct n’est pas disponible.',
			'liveTv.serverNotConnected' => 'Le serveur de TV en direct n’est pas connecté.',
			'liveTv.noPrograms' => 'Aucune donnée de programme disponible',
			'liveTv.liveStreamFailed' => 'Échec du direct',
			'liveTv.unknownProgram' => 'Programme inconnu',
			'liveTv.unknownHub' => 'Inconnu',
			'liveTv.unknownError' => 'Erreur inconnue',
			'liveTv.channelNumber' => ({required Object number}) => 'Chaîne ${number}',
			'liveTv.unknownChannel' => 'Chaîne inconnue',
			'liveTv.live' => 'EN DIRECT',
			'liveTv.reloadGuide' => 'Recharger le guide',
			'liveTv.now' => 'Maintenant',
			'liveTv.today' => 'Aujourd\'hui',
			'liveTv.tomorrow' => 'Demain',
			'liveTv.midnight' => 'Minuit',
			'liveTv.overnight' => 'Nuit',
			'liveTv.morning' => 'Matin',
			'liveTv.daytime' => 'Journée',
			'liveTv.evening' => 'Soirée',
			'liveTv.lateNight' => 'Fin de soirée',
			'liveTv.whatsOn' => 'En ce moment',
			'liveTv.watchChannel' => 'Regarder la chaîne',
			'liveTv.favorites' => 'Favoris',
			'liveTv.reorderFavorites' => 'Réorganiser les favoris',
			'liveTv.favoritesLoadFailed' => 'Impossible de charger les favoris. Vérifiez votre connexion et réessayez.',
			'liveTv.favoritesUpdateFailed' => 'Impossible de mettre à jour les favoris. Vérifiez votre connexion et réessayez.',
			'liveTv.joinSession' => 'Rejoindre la session en cours',
			'liveTv.watchFromStart' => ({required Object minutes}) => 'Regarder depuis le début (il y a ${minutes} min)',
			'liveTv.watchLive' => 'Regarder en direct',
			'liveTv.goToLive' => 'Aller au direct',
			'liveTv.record' => 'Enregistrer',
			'liveTv.recordEpisode' => 'Enregistrer l\'épisode',
			'liveTv.recordSeries' => 'Enregistrer la série',
			'liveTv.recordOptions' => 'Options d\'enregistrement',
			'liveTv.saveTo' => 'Enregistrer dans',
			'liveTv.recordings' => 'Enregistrements',
			'liveTv.scheduledRecordings' => 'Programmés',
			'liveTv.recordingRules' => 'Règles d\'enregistrement',
			'liveTv.noScheduledRecordings' => 'Aucun enregistrement programmé',
			'liveTv.manageRecording' => 'Gérer l\'enregistrement',
			'liveTv.cancelRecording' => 'Annuler l\'enregistrement',
			'liveTv.cancelRecordingTitle' => 'Annuler cet enregistrement ?',
			'liveTv.cancelRecordingMessage' => ({required Object title}) => '${title} ne sera plus enregistré.',
			'liveTv.deleteRule' => 'Supprimer la règle',
			'liveTv.deleteRuleTitle' => 'Supprimer la règle d\'enregistrement ?',
			'liveTv.deleteRuleMessage' => ({required Object title}) => 'Les prochains épisodes de ${title} ne seront pas enregistrés.',
			'liveTv.recordingScheduled' => 'Enregistrement programmé',
			'liveTv.alreadyScheduled' => 'Ce programme est déjà programmé',
			'liveTv.dvrAdminRequired' => 'Les paramètres DVR nécessitent un compte administrateur',
			'liveTv.recordingFailed' => 'Impossible de programmer l\'enregistrement',
			'liveTv.recordingTargetMissing' => 'Impossible de déterminer la bibliothèque d\'enregistrement',
			'liveTv.recordNotAvailable' => 'Enregistrement non disponible pour ce programme',
			'liveTv.recordingCancelled' => 'Enregistrement annulé',
			'liveTv.recordingRuleDeleted' => 'Règle d\'enregistrement supprimée',
			'liveTv.processRecordingRules' => 'Réévaluer les règles',
			'liveTv.recordingInProgress' => 'Enregistrement en cours',
			'liveTv.recordingsCount' => ({required Object count}) => '${count} programmés',
			'liveTv.editRule' => 'Modifier la règle',
			'liveTv.editRuleAction' => 'Modifier',
			'liveTv.recordingRuleUpdated' => 'Règle d\'enregistrement mise à jour',
			'liveTv.guideReloadRequested' => 'Mise à jour du guide demandée',
			'liveTv.rulesProcessRequested' => 'Réévaluation des règles demandée',
			'liveTv.recordShow' => 'Enregistrer l\'émission',
			'collections.title' => 'Collections',
			'collections.collection' => 'Collection',
			'collections.empty' => 'La collection est vide',
			'collections.deleteCollection' => 'Supprimer la collection',
			'collections.deleteConfirm' => ({required Object title}) => 'Supprimer "${title}" ? Action irréversible.',
			'collections.deleted' => 'Collection supprimée',
			'collections.deleteFailed' => 'Échec de la suppression de la collection',
			'collections.deleteFailedWithError' => ({required Object error}) => 'Échec de la suppression de la collection : ${error}',
			'collections.selectCollection' => 'Sélectionner une collection',
			'collections.collectionName' => 'Nom de la collection',
			'collections.enterCollectionName' => 'Entrez le nom de la collection',
			'collections.addedToCollection' => 'Ajouté à la collection',
			'collections.errorAddingToCollection' => 'Échec de l\'ajout à la collection',
			'collections.created' => 'Collection créée',
			'collections.removeFromCollection' => 'Supprimer de la collection',
			'collections.removeFromCollectionConfirm' => ({required Object title}) => 'Retirer "${title}" de cette collection ?',
			'collections.removedFromCollection' => 'Retiré de la collection',
			'collections.removeFromCollectionFailed' => 'Impossible de supprimer de la collection',
			'collections.removeFromCollectionError' => ({required Object error}) => 'Erreur lors du retrait de la collection : ${error}',
			'collections.searchCollections' => 'Rechercher des collections...',
			'playlists.title' => 'Playlists',
			'playlists.playlist' => 'Playlist',
			'playlists.noPlaylists' => 'Aucune playlist trouvée',
			'playlists.create' => 'Créer une playlist',
			'playlists.playlistName' => 'Nom de playlist',
			'playlists.enterPlaylistName' => 'Saisissez le nom de la playlist',
			'playlists.delete' => 'Supprimer la playlist',
			'playlists.removeItem' => 'Retirer de la playlist',
			'playlists.smartPlaylist' => 'Playlist intelligente',
			'playlists.itemCount' => ({required Object count}) => '${count} éléments',
			'playlists.oneItem' => '1 élément',
			'playlists.emptyPlaylist' => 'Cette playlist est vide',
			'playlists.deleteConfirm' => 'Supprimer la playlist ?',
			'playlists.deleteMessage' => ({required Object name}) => 'Voulez-vous vraiment supprimer « ${name} » ?',
			'playlists.created' => 'Playlist créée',
			'playlists.deleted' => 'Playlist supprimée',
			'playlists.itemAdded' => 'Ajouté à la playlist',
			'playlists.itemRemoved' => 'Retiré de la playlist',
			'playlists.selectPlaylist' => 'Sélectionner une playlist',
			'playlists.searchPlaylists' => 'Rechercher des playlists...',
			'playlists.errorCreating' => 'Échec de la création de la playlist',
			'playlists.errorDeleting' => 'Échec de la suppression de la playlist',
			'playlists.errorLoading' => 'Échec du chargement des playlists',
			'playlists.errorAdding' => 'Échec de l’ajout à la playlist',
			'playlists.errorReordering' => 'Échec de la réorganisation de l’élément de la playlist',
			'playlists.errorRemoving' => 'Échec du retrait de l’élément de la playlist',
			'music.goToAlbum' => 'Aller à l\'album',
			'music.goToArtist' => 'Aller à l\'artiste',
			'music.instantMix' => 'Mix instantané',
			'music.playNext' => 'Lire ensuite',
			'music.addToQueue' => 'Ajouter à la file d\'attente',
			'music.discNumber' => ({required Object n}) => 'Disque ${n}',
			'music.trackCount' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, one: '${n} titre', other: '${n} titres', ), 
			'music.nowPlaying' => 'Lecture en cours',
			'music.playingFrom' => ({required Object title}) => 'Lecture depuis ${title}',
			'music.queue' => 'File d\'attente',
			'music.clearQueue' => 'Vider la file d\'attente',
			'music.lyrics' => 'Paroles',
			'music.noLyrics' => 'Aucune parole disponible',
			'music.sleepTimer' => 'Minuterie de veille',
			'music.sleepTimerEndOfTrack' => 'Fin du titre',
			'music.sleepTimerMinutes' => ({required Object n}) => '${n} minutes',
			'music.stopPlayback' => 'Arrêter la lecture',
			'music.previousTrack' => 'Titre précédent',
			'music.nextTrack' => 'Titre suivant',
			'music.repeat' => 'Répéter',
			'music.repeatAll' => 'Tout répéter',
			'music.repeatOne' => 'Répéter le titre',
			'watchTogether.title' => 'Regarder ensemble',
			'watchTogether.description' => 'Regarder du contenu en synchronisation avec vos proches',
			'watchTogether.createSession' => 'Créer une session',
			'watchTogether.creating' => 'Création...',
			'watchTogether.joinSession' => 'Rejoindre la session',
			'watchTogether.joining' => 'Connexion…',
			'watchTogether.controlMode' => 'Mode de contrôle',
			'watchTogether.controlModeQuestion' => 'Qui peut contrôler la lecture ?',
			'watchTogether.hostOnly' => 'Hôte uniquement',
			'watchTogether.anyone' => 'N\'importe qui',
			'watchTogether.hostingSession' => 'Session hébergée',
			'watchTogether.inSession' => 'Session en cours',
			'watchTogether.sessionCode' => 'Code de session',
			'watchTogether.openSessionControls' => 'Ouvrir les commandes de la session Regarder ensemble',
			'watchTogether.copySessionCode' => 'Copier le code de session',
			'watchTogether.hostControlsPlayback' => 'L\'hôte contrôle la lecture',
			'watchTogether.anyoneCanControl' => 'Tout le monde peut contrôler la lecture',
			'watchTogether.hostControls' => 'Commandes de l\'hôte',
			'watchTogether.anyoneControls' => 'Tout le monde contrôle',
			'watchTogether.participants' => 'Participants',
			'watchTogether.host' => 'Hôte',
			'watchTogether.hostBadge' => 'HÔTE',
			'watchTogether.youAreHost' => 'Vous êtes l\'hôte',
			'watchTogether.watchingWithOthers' => 'Regarder avec d\'autres personnes',
			'watchTogether.endSession' => 'Terminer la session',
			'watchTogether.leaveSession' => 'Quitter la session',
			'watchTogether.endSessionQuestion' => 'Terminer la session ?',
			'watchTogether.leaveSessionQuestion' => 'Quitter la session ?',
			'watchTogether.endSessionConfirm' => 'Cela mettra fin à la session pour tous les participants.',
			'watchTogether.leaveSessionConfirm' => 'Vous allez être déconnecté de la session.',
			'watchTogether.endSessionConfirmOverlay' => 'Cela mettra fin à la session de visionnage pour tous les participants.',
			'watchTogether.leaveSessionConfirmOverlay' => 'Vous serez déconnecté de la session de visionnage.',
			'watchTogether.end' => 'Terminer',
			'watchTogether.leave' => 'Quitter',
			'watchTogether.syncing' => 'Synchronisation…',
			'watchTogether.joinWatchSession' => 'Rejoindre la session de visionnage',
			'watchTogether.enterCodeHint' => 'Entrez le code à 5 caractères',
			'watchTogether.pasteFromClipboard' => 'Coller depuis le presse-papiers',
			'watchTogether.pleaseEnterCode' => 'Veuillez saisir un code de session',
			'watchTogether.codeMustBe5Chars' => 'Le code de session doit comporter 5 caractères',
			'watchTogether.joinInstructions' => 'Saisissez le code de session de l\'hôte pour rejoindre.',
			'watchTogether.failedToCreate' => 'Échec de la création de la session',
			'watchTogether.failedToJoin' => 'Échec de la connexion à la session',
			'watchTogether.sessionCodeCopied' => 'Code de session copié dans le presse-papiers',
			'watchTogether.relayUnreachable' => 'Serveur relais inaccessible. Un blocage par le fournisseur d’accès peut empêcher le fonctionnement de Regarder ensemble.',
			_ => null,
		} ?? switch (path) {
			'watchTogether.reconnectingToHost' => 'Reconnexion à l\'hôte...',
			'watchTogether.currentPlayback' => 'Lecture en cours',
			'watchTogether.joinCurrentPlayback' => 'Rejoindre la lecture en cours',
			'watchTogether.joinCurrentPlaybackDescription' => 'Reprendre le contenu que l’hôte regarde actuellement',
			'watchTogether.failedToOpenCurrentPlayback' => 'Impossible d\'ouvrir la lecture en cours',
			'watchTogether.participantJoined' => ({required Object name}) => '${name} a rejoint',
			'watchTogether.participantLeft' => ({required Object name}) => '${name} est parti',
			'watchTogether.participantPaused' => ({required Object name}) => '${name} a mis en pause',
			'watchTogether.participantResumed' => ({required Object name}) => '${name} a repris',
			'watchTogether.participantSeeked' => ({required Object name}) => '${name} a changé la position de lecture',
			'watchTogether.participantBuffering' => ({required Object name}) => 'La lecture de ${name} est en cours de mise en mémoire tampon',
			'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} utilise une ancienne version de l’app — synchronisation indisponible',
			'watchTogether.resumingWithout' => ({required Object name}) => 'Reprise sans ${name}',
			'watchTogether.waitingForParticipants' => 'En attente du chargement des autres...',
			'watchTogether.waitingForName' => ({required Object name}) => 'En attente de ${name}...',
			'watchTogether.recentRooms' => 'Salons récents',
			'watchTogether.renameRoom' => 'Renommer le salon',
			'watchTogether.removeRoom' => 'Supprimer',
			'watchTogether.guestSwitchUnavailable' => 'Impossible de changer — serveur indisponible pour la synchronisation',
			'watchTogether.guestSwitchFailed' => 'Impossible de changer — contenu introuvable sur ce serveur',
			'downloads.title' => 'Téléchargements',
			'downloads.manage' => 'Gérer',
			'downloads.tvShows' => 'Séries TV',
			'downloads.movies' => 'Films',
			'downloads.music' => 'Musique',
			'downloads.tracksQueued' => ({required Object count}) => '${count} titres en file d\'attente de téléchargement',
			'downloads.noDownloads' => 'Aucun téléchargement pour le moment',
			'downloads.noDownloadsDescription' => 'Le contenu téléchargé apparaîtra ici pour être consulté hors ligne.',
			'downloads.downloadNow' => 'Télécharger',
			'downloads.deleteDownload' => 'Supprimer le téléchargement',
			'downloads.retryDownload' => 'Réessayer le téléchargement',
			'downloads.downloadQueued' => 'Téléchargement en attente',
			'downloads.downloadResumed' => 'Téléchargement repris',
			'downloads.serverErrorBitrate' => 'Erreur du serveur : le fichier peut dépasser la limite de débit distant',
			'downloads.storageFull' => 'Les téléchargements ont été arrêtés car le stockage de l’appareil est plein. Libérez de l’espace, puis réessayez.',
			'downloads.episodesQueued' => ({required Object count}) => '${count} épisodes en attente de téléchargement',
			'downloads.downloadDeleted' => 'Téléchargement supprimé',
			'downloads.deleteConfirm' => ({required Object title}) => 'Supprimer « ${title} » de cet appareil ?',
			'downloads.cancelledDownloadTitle' => 'Téléchargement annulé',
			'downloads.cancelledDownloadMessage' => 'Ce téléchargement a été annulé. Que voulez-vous faire ?',
			'downloads.allEpisodesAlreadyDownloaded' => 'Tous les épisodes sont déjà téléchargés',
			'downloads.resumeDownload' => 'Reprendre le téléchargement',
			'downloads.cancelledDownload' => 'Téléchargement annulé',
			'downloads.syncingFile' => ({required Object file, required Object status}) => '${file} (synchronisation ${status})',
			'downloads.downloadedFileClickToComplete' => ({required Object file}) => '${file} téléchargé — cliquez pour terminer',
			'downloads.partialDownloadClickToComplete' => 'Téléchargement partiel — cliquez pour terminer',
			'downloads.deleting' => 'Suppression...',
			'downloads.deletingWithProgress' => ({required Object title, required Object current, required Object total}) => 'Suppression de ${title}... (${current} sur ${total})',
			'downloads.queuedTooltip' => 'En attente',
			'downloads.queuedFilesTooltip' => ({required Object files}) => 'En attente : ${files}',
			'downloads.downloadingTooltip' => 'Téléchargement...',
			'downloads.downloadingFilesTooltip' => ({required Object files}) => 'Téléchargement de ${files}',
			'downloads.noDownloadsTree' => 'Aucun téléchargement',
			'downloads.pauseAll' => 'Tout mettre en pause',
			'downloads.resumeAll' => 'Tout reprendre',
			'downloads.deleteAll' => 'Tout supprimer',
			'downloads.selectVersion' => 'Sélectionner la version',
			'downloads.allEpisodes' => 'Tous les épisodes',
			'downloads.unwatchedOnly' => 'Non vus uniquement',
			'downloads.nextNUnwatched' => ({required Object count}) => '${count} prochains non vus',
			'downloads.customAmount' => 'Quantité personnalisée...',
			'downloads.includeSpecials' => 'Inclure les spéciaux',
			'downloads.howManyEpisodes' => 'Combien d\'épisodes ?',
			'downloads.invalidEpisodeCount' => 'Saisissez un nombre d\'épisodes valide.',
			'downloads.keepSynced' => 'Garder synchronisé',
			'downloads.downloadOnce' => 'Télécharger une fois',
			'downloads.keepNUnwatched' => ({required Object count}) => 'Garder ${count} non vus',
			'downloads.editSyncRule' => 'Modifier la règle de synchronisation',
			'downloads.removeSyncRule' => 'Supprimer la règle de synchronisation',
			'downloads.removeSyncRuleConfirm' => ({required Object title}) => 'Arrêter la synchronisation de « ${title} » ? Les épisodes téléchargés seront conservés.',
			'downloads.syncRuleCreated' => ({required Object count}) => 'Règle de synchronisation créée — ${count} épisodes non vus conservés',
			'downloads.syncRuleUpdated' => 'Règle de synchronisation mise à jour',
			'downloads.syncRuleRemoved' => 'Règle de synchronisation supprimée',
			'downloads.syncedNewEpisodes' => ({required Object count, required Object title}) => '${count} nouveaux épisodes synchronisés pour ${title}',
			'downloads.activeSyncRules' => 'Règles de synchronisation',
			'downloads.noSyncRules' => 'Aucune règle de synchronisation',
			'downloads.manageSyncRule' => 'Gérer la synchronisation',
			'downloads.editEpisodeCount' => 'Nombre d’épisodes',
			'downloads.editSyncFilter' => 'Filtre de synchronisation',
			'downloads.syncAllItems' => 'Synchronisation de tous les éléments',
			'downloads.syncUnwatchedItems' => 'Synchronisation des éléments non vus',
			'downloads.syncRuleServerContext' => ({required Object server, required Object status}) => 'Serveur : ${server} • ${status}',
			'downloads.syncRuleAvailable' => 'Disponible',
			'downloads.syncRuleOffline' => 'Hors ligne',
			'downloads.syncRuleSignInRequired' => 'Connexion requise',
			'downloads.syncRuleNotAvailableForProfile' => 'Non disponible pour le profil actuel',
			'downloads.syncRuleUnknownServer' => 'Serveur inconnu',
			'downloads.syncRuleListCreated' => 'Règle de synchronisation créée',
			'downloads.backgroundWarning.bannerBlocked' => 'Les téléchargements s’arrêteront lorsque vous quitterez l’application',
			'downloads.backgroundWarning.bannerDegraded' => 'Les téléchargements en arrière-plan peuvent être limités',
			'downloads.backgroundWarning.bannerAction' => 'Détails',
			'downloads.backgroundWarning.sheetTitle' => 'Les téléchargements en arrière-plan sont bloqués',
			'downloads.backgroundWarning.sheetTitleDegraded' => 'Les téléchargements en arrière-plan peuvent être limités',
			'downloads.backgroundWarning.sheetIntro' => 'Android empêche Plezy de télécharger de façon fiable en arrière-plan.',
			'downloads.backgroundWarning.sheetIntroDegraded' => 'Votre appareil limite les moments où Plezy peut télécharger en arrière-plan.',
			'downloads.backgroundWarning.reasonBackgroundRestricted' => 'L’utilisation de Plezy en arrière-plan est restreinte. Dans les paramètres de batterie ou d’utilisation en arrière-plan, sélectionnez « Sans restriction ».',
			'downloads.backgroundWarning.reasonStandbyRestricted' => 'Android a placé Plezy en veille restreinte. Réglez l’utilisation de la batterie sur « Sans restriction ».',
			'downloads.backgroundWarning.reasonDownloadChannelBlocked' => 'Les notifications de téléchargement sont désactivées. La progression et les commandes peuvent donc être indisponibles.',
			'downloads.backgroundWarning.reasonNotificationsDisabled' => 'Les notifications sont désactivées. Sur Android 13 ou version ultérieure, elles sont nécessaires pour les longs téléchargements en arrière-plan.',
			'downloads.backgroundWarning.reasonDataSaver' => 'L’Économiseur de données est activé et bloque les téléchargements en arrière-plan via les données mobiles. Ils devraient toujours fonctionner en Wi-Fi.',
			'downloads.backgroundWarning.reasonOemUnknown' => 'Les téléchargements se sont arrêtés plusieurs fois lorsque Plezy était en arrière-plan. Vérifiez les paramètres de batterie ou d’utilisation en arrière-plan de Plezy.',
			'downloads.backgroundWarning.openSettings' => 'Ouvrir les paramètres',
			'downloads.backgroundWarning.stillNotWorking' => 'Aide spécifique à l’appareil',
			'downloads.backgroundWarning.stillNotWorkingDescription' => 'Consultez les étapes adaptées à votre appareil ou, si le problème persiste, envoyez un journal depuis Paramètres › Voir les journaux.',
			'downloads.backgroundWarning.dialogTitle' => 'Les téléchargements risquent de ne pas aboutir',
			'downloads.backgroundWarning.dialogDownloadAnyway' => 'Télécharger quand même',
			'downloads.backgroundWarning.dialogFixFirst' => 'Corriger d’abord',
			'downloads.backgroundWarning.statusTile' => 'Téléchargements en arrière-plan',
			'downloads.backgroundWarning.statusOk' => 'Exécution en arrière-plan autorisée',
			'downloads.backgroundWarning.statusBlocked' => 'Bloqués par les paramètres système',
			'downloads.backgroundWarning.statusDegraded' => 'Limités par les paramètres système',
			'downloads.backgroundWarning.statusUnknown' => 'Pas encore vérifié',
			'downloads.backgroundWarning.settingsUnavailable' => 'Impossible d’ouvrir les paramètres système sur cet appareil',
			'downloads.backgroundWarning.linkUnavailable' => 'Impossible d’ouvrir dontkillmyapp.com sur cet appareil',
			'shaders.title' => 'Shaders',
			'shaders.noShaderDescription' => 'Aucune amélioration vidéo',
			'shaders.nvscalerDescription' => 'Mise à l\'échelle NVIDIA pour une vidéo plus nette',
			'shaders.artcnnVariantNeutral' => 'Neutre',
			'shaders.artcnnVariantDenoise' => 'Réduction du bruit',
			'shaders.artcnnVariantDenoiseSharpen' => 'Réduction du bruit + netteté',
			'shaders.qualityFast' => 'Rapide',
			'shaders.qualityHQ' => 'Haute qualité',
			'shaders.mode' => 'Mode',
			'shaders.importShader' => 'Importer un shader',
			'shaders.customShaderDescription' => 'Shader GLSL personnalisé',
			'shaders.shaderImported' => 'Shader importé',
			'shaders.shaderImportFailed' => 'Échec de l\'importation du shader',
			'shaders.deleteShader' => 'Supprimer le shader',
			'shaders.deleteShaderConfirm' => ({required Object name}) => 'Supprimer "${name}" ?',
			'companionRemote.title' => 'Télécommande compagnon',
			'companionRemote.connectedTo' => ({required Object name}) => 'Connecté à ${name}',
			'companionRemote.unknownDevice' => 'Appareil inconnu',
			'companionRemote.session.startingServer' => 'Démarrage du serveur de télécommande…',
			'companionRemote.session.hostAddress' => 'Adresse de l’hôte',
			'companionRemote.session.connected' => 'Connecté',
			'companionRemote.session.serverRunning' => 'Serveur de télécommande actif',
			'companionRemote.session.serverStopped' => 'Serveur de télécommande arrêté',
			'companionRemote.session.serverRunningDescription' => 'Les appareils mobiles de votre réseau peuvent se connecter à cette application',
			'companionRemote.session.serverStoppedDescription' => 'Démarrez le serveur pour permettre aux appareils mobiles de se connecter',
			'companionRemote.session.usePhoneToControl' => 'Utilisez votre appareil mobile pour contrôler cette application',
			'companionRemote.session.startServer' => 'Démarrer le serveur',
			'companionRemote.session.stopServer' => 'Arrêter le serveur',
			'companionRemote.session.minimize' => 'Réduire',
			'companionRemote.pairing.discoveryDescription' => 'Les appareils Plezy avec le même compte Plex apparaissent ici',
			'companionRemote.pairing.hostAddressHint' => '192.168.1.100:48632',
			'companionRemote.pairing.connecting' => 'Connexion...',
			'companionRemote.pairing.searchingForDevices' => 'Recherche d\'appareils...',
			'companionRemote.pairing.noDevicesFound' => 'Aucun appareil trouvé sur votre réseau',
			'companionRemote.pairing.noDevicesHint' => 'Ouvrez Plezy sur votre ordinateur et utilisez le même réseau Wi-Fi',
			'companionRemote.pairing.availableDevices' => 'Appareils disponibles',
			'companionRemote.pairing.manualConnection' => 'Connexion manuelle',
			'companionRemote.pairing.cryptoInitFailed' => 'Impossible de démarrer la connexion sécurisée. Connectez-vous d\'abord à Plex.',
			'companionRemote.pairing.validationHostRequired' => 'Veuillez saisir l’adresse de l’hôte',
			'companionRemote.pairing.validationHostFormat' => 'Le format doit être IP:port (p. ex. 192.168.1.100:48632)',
			'companionRemote.pairing.connectionTimedOut' => 'Délai de connexion dépassé. Utilisez le même réseau sur les deux appareils.',
			'companionRemote.pairing.sessionNotFound' => 'Appareil introuvable. Assurez-vous que Plezy fonctionne sur l\'hôte.',
			'companionRemote.pairing.authFailed' => 'Échec de l\'authentification. Les deux appareils doivent utiliser le même compte Plex.',
			'companionRemote.pairing.failedToConnect' => ({required Object error}) => 'Échec de la connexion : ${error}',
			'companionRemote.remote.disconnectConfirm' => 'Voulez-vous vous déconnecter de la session distante ?',
			'companionRemote.remote.reconnecting' => 'Reconnexion...',
			'companionRemote.remote.attemptOf' => ({required Object current}) => 'Tentative ${current} sur 5',
			'companionRemote.remote.retryNow' => 'Réessayer maintenant',
			'companionRemote.remote.tabRemote' => 'Télécommande',
			'companionRemote.remote.tabPlay' => 'Lecture',
			'companionRemote.remote.tabMore' => 'Plus',
			'companionRemote.remote.menu' => 'Menu',
			'companionRemote.remote.tabNavigation' => 'Navigation par onglets',
			'companionRemote.remote.tabDiscover' => 'Découvrir',
			'companionRemote.remote.tabLibraries' => 'Bibliothèques',
			'companionRemote.remote.tabSearch' => 'Rechercher',
			'companionRemote.remote.tabDownloads' => 'Téléchargements',
			'companionRemote.remote.tabSettings' => 'Paramètres',
			'companionRemote.remote.previous' => 'Précédent',
			'companionRemote.remote.playPause' => 'Lecture/Pause',
			'companionRemote.remote.next' => 'Suivant',
			'companionRemote.remote.seekBack' => 'Reculer',
			'companionRemote.remote.stop' => 'Arrêter',
			'companionRemote.remote.seekForward' => 'Avancer',
			'companionRemote.remote.volume' => 'Volume',
			'companionRemote.remote.volumeDown' => 'Baisser',
			'companionRemote.remote.volumeUp' => 'Augmenter',
			'companionRemote.remote.fullscreen' => 'Plein écran',
			'companionRemote.remote.subtitles' => 'Sous-titres',
			'companionRemote.remote.audio' => 'Audio',
			'companionRemote.remote.searchHint' => 'Rechercher sur l’ordinateur…',
			'companionRemote.errors.noNetworkInterface' => 'Aucune interface réseau trouvée',
			'companionRemote.errors.authenticationFailed' => 'Échec de l’authentification',
			'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Impossible de démarrer le serveur de télécommande : ${error}',
			'companionRemote.errors.commandFailed' => ({required Object error}) => 'Impossible d’envoyer la commande à distance : ${error}',
			'companionRemote.errors.joinTimedOut' => 'Délai dépassé lors de la connexion à la session',
			'companionRemote.errors.failedToConnectAnyAddress' => 'Impossible de se connecter à une adresse',
			'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Connexion perdue après ${attempts} tentatives',
			'companionRemote.errors.connectionLost' => 'Connexion perdue',
			'videoSettings.playbackSpeed' => 'Vitesse de lecture',
			'videoSettings.normalSpeed' => 'Normale',
			'videoSettings.sleepTimerActive' => ({required Object duration}) => 'Actif (${duration})',
			'videoSettings.zoom' => 'Zoom',
			'videoSettings.sleepTimer' => 'Minuterie de mise en veille',
			'videoSettings.audioSync' => 'Synchronisation audio',
			'videoSettings.subtitleSync' => 'Synchronisation des sous-titres',
			'videoSettings.hdr' => 'HDR',
			'videoSettings.audioOutput' => 'Sortie audio',
			'videoSettings.performanceOverlay' => 'Données de performance',
			'videoSettings.audioPassthrough' => 'Transmission audio directe',
			'videoSettings.audioOutputDolbyAtmos' => 'Dolby Atmos',
			'videoSettings.audioOutputDolbyAudio' => 'Dolby Audio',
			'videoSettings.audioOutputSurround' => 'Surround',
			'videoSettings.audioOutputSpatial' => 'Audio spatial',
			'videoSettings.audioOutputStereo' => 'Stéréo',
			'videoSettings.audioNormalization' => 'Normaliser le volume',
			'videoSettings.audioDownmix' => 'Conversion en stéréo',
			'performanceOverlay.color' => 'Couleur',
			'performanceOverlay.performance' => 'Performances',
			'performanceOverlay.buffer' => 'Tampon',
			'performanceOverlay.app' => 'Application',
			'performanceOverlay.decoder' => 'Décodeur',
			'performanceOverlay.rawDecoder' => 'Décodeur brut',
			'performanceOverlay.tunneling' => 'Tunnel',
			'performanceOverlay.aspect' => 'Format',
			'performanceOverlay.rotation' => 'Rotation',
			'performanceOverlay.dvSource' => 'Source DV',
			'performanceOverlay.dvPath' => 'Chemin DV',
			'performanceOverlay.p7Conversion' => 'Conv. P7',
			'performanceOverlay.sampleRate' => 'Fréquence d’échantillonnage',
			'performanceOverlay.pixelFormat' => 'Fmt pixel',
			'performanceOverlay.hwFormat' => 'Fmt HW',
			'performanceOverlay.matrix' => 'Matrice',
			'performanceOverlay.primaries' => 'Primaires',
			'performanceOverlay.transfer' => 'Transfert',
			'performanceOverlay.renderFps' => 'FPS rendu',
			'performanceOverlay.displayFps' => 'FPS écran',
			'performanceOverlay.avSync' => 'Synchro A/V',
			'performanceOverlay.dropped' => 'Perdues',
			'performanceOverlay.dvRpus' => 'DV RPU',
			'performanceOverlay.dvRpuAverage' => 'Moy. DV RPU',
			'performanceOverlay.dvSampleAverage' => 'Moy. échant. DV',
			'performanceOverlay.maxLuma' => 'Luma max.',
			'performanceOverlay.minLuma' => 'Luma min.',
			'performanceOverlay.maxCll' => 'MaxCLL',
			'performanceOverlay.maxFall' => 'MaxFALL',
			'performanceOverlay.cacheUsed' => 'Cache utilisé',
			'performanceOverlay.cacheLimit' => 'Limite du cache',
			'performanceOverlay.speed' => 'Vitesse',
			'performanceOverlay.player' => 'Lecteur',
			'performanceOverlay.memory' => 'Mémoire',
			'performanceOverlay.uiFps' => 'FPS UI',
			'externalPlayer.title' => 'Lecteur externe',
			'externalPlayer.useExternalPlayer' => 'Utiliser un lecteur externe',
			'externalPlayer.useExternalPlayerDescription' => 'Ouvrir les vidéos dans une autre application',
			'externalPlayer.selectPlayer' => 'Sélectionner le lecteur',
			'externalPlayer.customPlayers' => 'Lecteurs personnalisés',
			'externalPlayer.systemDefault' => 'Par défaut du système',
			'externalPlayer.addCustomPlayer' => 'Ajouter un lecteur personnalisé',
			'externalPlayer.playerName' => 'Nom du lecteur',
			'externalPlayer.playerNameHint' => 'Mon lecteur',
			'externalPlayer.playerCommand' => 'Commande',
			'externalPlayer.playerPackage' => 'Nom du paquet',
			'externalPlayer.playerUrlScheme' => 'Schéma URL',
			'externalPlayer.off' => 'Désactivé',
			'externalPlayer.launchFailed' => 'Impossible d\'ouvrir le lecteur externe',
			'externalPlayer.appNotInstalled' => ({required Object name}) => '${name} n\'est pas installé',
			'externalPlayer.playInExternalPlayer' => 'Lire dans un lecteur externe',
			'metadataEdit.editMetadata' => 'Modifier...',
			'metadataEdit.screenTitle' => 'Modifier les métadonnées',
			'metadataEdit.basicInfo' => 'Informations de base',
			'metadataEdit.artwork' => 'Illustrations',
			'metadataEdit.advancedSettings' => 'Paramètres avancés',
			'metadataEdit.title' => 'Titre',
			'metadataEdit.sortTitle' => 'Titre de tri',
			'metadataEdit.originalTitle' => 'Titre original',
			'metadataEdit.releaseDate' => 'Date de sortie',
			'metadataEdit.contentRating' => 'Classification',
			'metadataEdit.studio' => 'Studio',
			'metadataEdit.tagline' => 'Slogan',
			'metadataEdit.summary' => 'Résumé',
			'metadataEdit.poster' => 'Affiche',
			'metadataEdit.background' => 'Arrière-plan',
			'metadataEdit.logo' => 'Logo',
			'metadataEdit.squareArt' => 'Image carrée',
			'metadataEdit.selectPoster' => 'Sélectionner l\'affiche',
			'metadataEdit.selectBackground' => 'Sélectionner l\'arrière-plan',
			'metadataEdit.selectLogo' => 'Sélectionner le logo',
			'metadataEdit.selectSquareArt' => 'Sélectionner l\'image carrée',
			'metadataEdit.fromUrl' => 'Depuis une URL',
			'metadataEdit.uploadFile' => 'Importer un fichier',
			'metadataEdit.enterImageUrl' => 'Entrer l\'URL de l\'image',
			'metadataEdit.imageUrl' => 'URL de l\'image',
			'metadataEdit.metadataUpdated' => 'Métadonnées mises à jour',
			'metadataEdit.metadataUpdateFailed' => 'Échec de la mise à jour des métadonnées',
			'metadataEdit.artworkUpdated' => 'Illustrations mises à jour',
			'metadataEdit.artworkUpdateFailed' => 'Échec de la mise à jour des illustrations',
			'metadataEdit.noArtworkAvailable' => 'Aucune illustration disponible',
			'metadataEdit.artworkOption' => ({required Object index}) => 'Option d\'illustration ${index}',
			'metadataEdit.selectedArtworkOption' => ({required Object index}) => 'Option d\'illustration ${index}, sélectionnée',
			'metadataEdit.notSet' => 'Non défini',
			'metadataEdit.libraryDefault' => 'Par défaut de la bibliothèque',
			'metadataEdit.accountDefault' => 'Par défaut du compte',
			'metadataEdit.seriesDefault' => 'Par défaut de la série',
			'metadataEdit.episodeSorting' => 'Tri des épisodes',
			'metadataEdit.oldestFirst' => 'Plus anciens en premier',
			'metadataEdit.newestFirst' => 'Plus récents en premier',
			'metadataEdit.keep' => 'Conserver',
			'metadataEdit.allEpisodes' => 'Tous les épisodes',
			'metadataEdit.latestEpisodes' => ({required Object count}) => '${count} derniers épisodes',
			'metadataEdit.latestEpisode' => 'Dernier épisode',
			'metadataEdit.episodesAddedPastDays' => ({required Object count}) => 'Épisodes ajoutés ces ${count} derniers jours',
			'metadataEdit.deleteAfterPlaying' => 'Supprimer les épisodes après lecture',
			'metadataEdit.never' => 'Jamais',
			'metadataEdit.afterADay' => 'Après un jour',
			'metadataEdit.afterAWeek' => 'Après une semaine',
			'metadataEdit.afterAMonth' => 'Après un mois',
			'metadataEdit.onNextRefresh' => 'Au prochain rafraîchissement',
			'metadataEdit.seasons' => 'Saisons',
			'metadataEdit.show' => 'Afficher',
			'metadataEdit.hide' => 'Masquer',
			'metadataEdit.episodeOrdering' => 'Ordre des épisodes',
			'metadataEdit.tmdbAiring' => 'The Movie Database (Diffusion)',
			'metadataEdit.tvdbAiring' => 'TheTVDB (Diffusion)',
			'metadataEdit.tvdbAbsolute' => 'TheTVDB (Absolu)',
			'metadataEdit.metadataLanguage' => 'Langue des métadonnées',
			'metadataEdit.useOriginalTitle' => 'Utiliser le titre original',
			'metadataEdit.preferredAudioLanguage' => 'Langue audio préférée',
			'metadataEdit.preferredSubtitleLanguage' => 'Langue de sous-titres préférée',
			'metadataEdit.subtitleMode' => 'Sélection automatique des sous-titres',
			'metadataEdit.manuallySelected' => 'Sélectionné manuellement',
			'metadataEdit.shownWithForeignAudio' => 'Avec l’audio en langue étrangère',
			'metadataEdit.alwaysEnabled' => 'Toujours activé',
			'metadataEdit.tags' => 'Étiquettes',
			'metadataEdit.addTag' => 'Ajouter une étiquette',
			'metadataEdit.genre' => 'Genre',
			'metadataEdit.director' => 'Réalisateur',
			'metadataEdit.writer' => 'Scénariste',
			'metadataEdit.producer' => 'Producteur',
			'metadataEdit.country' => 'Pays',
			'metadataEdit.collection' => 'Collection',
			'metadataEdit.label' => 'Label',
			'metadataEdit.style' => 'Style',
			'metadataEdit.mood' => 'Ambiance',
			'matchScreen.match' => 'Associer...',
			'matchScreen.fixMatch' => 'Corriger l\'association...',
			'matchScreen.unmatch' => 'Dissocier',
			'matchScreen.unmatchConfirm' => 'Effacer cette correspondance ? Plex la traitera comme non associée jusqu\'à réassociation.',
			'matchScreen.unmatchSuccess' => 'Association supprimée',
			'matchScreen.unmatchFailed' => 'Échec de la dissociation',
			'matchScreen.matchApplied' => 'Association appliquée',
			'matchScreen.matchFailed' => 'Échec de l\'application',
			'matchScreen.titleHint' => 'Titre',
			'matchScreen.yearHint' => 'Année',
			'matchScreen.search' => 'Rechercher',
			'matchScreen.noMatchesFound' => 'Aucune correspondance',
			'serverTasks.title' => 'Tâches du serveur',
			'serverTasks.failedToLoad' => 'Échec du chargement des tâches',
			'serverTasks.noTasks' => 'Aucune tâche en cours',
			'trakt.title' => 'Trakt',
			'trakt.connected' => 'Connecté',
			'trakt.connectedAs' => ({required Object username}) => 'Connecté en tant que @${username}',
			'trakt.disconnectConfirm' => 'Déconnecter le compte Trakt ?',
			'trakt.disconnectConfirmBody' => 'Plezy cessera d’envoyer des événements à Trakt. Vous pourrez vous reconnecter à tout moment.',
			'trakt.scrobble' => 'Scrobbling en temps réel',
			'trakt.scrobbleDescription' => 'Envoyer les événements de lecture, pause et arrêt à Trakt pendant la lecture.',
			'trakt.watchedSync' => 'Synchroniser le statut « vu »',
			'trakt.watchedSyncDescription' => 'Lorsque vous marquez des éléments comme vus dans Plezy, ils sont également marqués comme vus sur Trakt.',
			'seerr.title' => 'Seerr',
			'seerr.connectTitle' => 'Se connecter à Seerr',
			'seerr.serverUrl' => 'URL du serveur',
			'seerr.serverUrlHelper' => 'L\'adresse de votre instance Seerr',
			'seerr.checkServer' => 'Continuer',
			'seerr.signInWithJellyfin' => 'Se connecter avec Jellyfin',
			'seerr.signInWithEmby' => 'Se connecter avec Emby',
			'seerr.signInWithLocal' => 'Utiliser un compte local',
			'seerr.email' => 'E-mail',
			'seerr.noSignInMethods' => 'Cette instance Seerr ne propose aucune méthode de connexion prise en charge par Plezy.',
			'seerr.instance' => 'Instance',
			'seerr.disconnectConfirm' => 'Déconnecter Seerr ?',
			'seerr.disconnectConfirmBody' => 'Plezy oubliera cette instance Seerr. Vous pourrez vous reconnecter à tout moment.',
			'seerr.request' => 'Demander',
			'seerr.request4k' => 'Demander en 4K',
			'seerr.seasons' => 'Saisons',
			'seerr.allSeasons' => 'Toutes les saisons',
			'seerr.advancedOptions' => 'Avancé',
			'seerr.destinationServer' => 'Serveur de destination',
			'seerr.qualityProfile' => 'Profil de qualité',
			'seerr.rootFolder' => 'Dossier racine',
			'seerr.languageProfile' => 'Profil de langue',
			'seerr.requestSubmitted' => 'Demande envoyée',
			'seerr.requestFailed' => ({required Object error}) => 'Échec de la demande : ${error}',
			'seerr.requestsLoadFailed' => 'Impossible de charger les options de demande',
			'seerr.nothingToRequest' => 'Tout est déjà disponible ou demandé.',
			'seerr.statusAvailable' => 'Disponible',
			'seerr.statusPartiallyAvailable' => 'Partiellement disponible',
			'seerr.statusRequested' => 'Demandé',
			'seerr.statusProcessing' => 'En cours de traitement',
			'services.title' => 'Services',
			'services.hubSubtitle' => 'Synchronisez votre progression et demandez de nouveaux titres.',
			'services.notConnected' => 'Non connecté',
			'services.connectedAs' => ({required Object username}) => 'Connecté en tant que @${username}',
			'services.scrobble' => 'Suivre la progression automatiquement',
			'services.scrobbleDescription' => 'Mettre à jour votre liste lorsque vous terminez un épisode ou un film.',
			'services.disconnectConfirm' => ({required Object service}) => 'Déconnecter ${service} ?',
			'services.disconnectConfirmBody' => ({required Object service}) => 'Plezy cessera de mettre à jour ${service}. Vous pourrez vous reconnecter à tout moment.',
			'services.connectFailed' => ({required Object service}) => 'Échec de la connexion à ${service}. Réessayez.',
			'services.names.mal' => 'MyAnimeList',
			'services.names.anilist' => 'AniList',
			'services.names.simkl' => 'Simkl',
			'services.names.seerr' => 'Seerr',
			'services.deviceCode.title' => ({required Object service}) => 'Activer Plezy sur ${service}',
			'services.deviceCode.body' => ({required Object url}) => 'Rendez-vous sur ${url} et entrez ce code :',
			'services.deviceCode.openToActivate' => ({required Object service}) => 'Ouvrir ${service} pour activer',
			'services.deviceCode.copyCode' => 'Copier le code d\'activation',
			'services.deviceCode.waitingForAuthorization' => 'En attente d\'autorisation…',
			'services.deviceCode.codeCopied' => 'Code copié',
			'services.oauthProxy.title' => ({required Object service}) => 'Se connecter à ${service}',
			'services.oauthProxy.body' => 'Scannez ce code QR ou ouvrez l\'URL sur n\'importe quel appareil.',
			'services.oauthProxy.openToSignIn' => ({required Object service}) => 'Ouvrir ${service} pour se connecter',
			'services.oauthProxy.copyUrl' => 'Copier l\'URL de connexion',
			'services.oauthProxy.urlCopied' => 'URL copiée',
			'services.libraryFilter.title' => 'Filtre de bibliothèques',
			'services.libraryFilter.subtitleAllSyncing' => 'Synchronisation de toutes les bibliothèques',
			'services.libraryFilter.subtitleNoneSyncing' => 'Aucune synchronisation',
			'services.libraryFilter.subtitleBlocked' => ({required Object count}) => '${count} bloquées',
			'services.libraryFilter.subtitleAllowed' => ({required Object count}) => '${count} autorisées',
			'services.libraryFilter.mode' => 'Mode de filtrage',
			'services.libraryFilter.modeBlacklist' => 'Liste d’exclusion',
			'services.libraryFilter.modeWhitelist' => 'Liste d’inclusion',
			'services.libraryFilter.modeHintBlacklist' => 'Synchroniser toutes les bibliothèques sauf celles cochées ci-dessous.',
			'services.libraryFilter.modeHintWhitelist' => 'Synchroniser uniquement les bibliothèques cochées ci-dessous.',
			'services.libraryFilter.libraries' => 'Bibliothèques',
			'services.libraryFilter.noLibraries' => 'Aucune bibliothèque disponible',
			'addServer.addJellyfinTitle' => 'Ajouter un serveur Jellyfin',
			'addServer.serverUrls' => 'URL du serveur',
			'addServer.serverUrlsHelper' => 'Plusieurs URL possibles, séparées par des virgules.',
			'addServer.findServer' => 'Rechercher un serveur',
			'addServer.searchingLocalServers' => 'Recherche de serveurs Jellyfin locaux...',
			'addServer.localServers' => 'Serveurs Jellyfin locaux',
			'addServer.username' => 'Nom d\'utilisateur',
			'addServer.password' => 'Mot de passe',
			'addServer.signIn' => 'Se connecter',
			'addServer.change' => 'Modifier',
			'addServer.required' => 'Requis',
			'addServer.couldNotReachServer' => ({required Object error}) => 'Impossible de joindre le serveur : ${error}',
			'addServer.signInFailed' => ({required Object error}) => 'Échec de la connexion : ${error}',
			'addServer.quickConnectFailed' => ({required Object error}) => 'Échec de Quick Connect : ${error}',
			'addServer.addPlexTitle' => 'Se connecter avec Plex',
			'addServer.pinExpired' => 'Le PIN a expiré avant la connexion. Veuillez réessayer.',
			'addServer.failedToRegisterAccount' => ({required Object error}) => 'Échec de l\'enregistrement du compte : ${error}',
			'addServer.enterJellyfinUrlError' => 'Saisissez l\'URL de votre serveur Jellyfin',
			'addServer.addConnectionTitle' => 'Ajouter une connexion',
			'addServer.addConnectionTitleScoped' => ({required Object name}) => 'Ajouter à ${name}',
			'addServer.signInWithPlexCard' => 'Se connecter avec Plex',
			'addServer.signInWithPlexCardSubtitle' => 'Autorisez cet appareil. Les serveurs partagés sont ajoutés.',
			'addServer.signInWithPlexCardSubtitleScoped' => 'Autorisez un compte Plex. Les utilisateurs Home deviennent des profils.',
			'addServer.connectToJellyfinCard' => 'Se connecter à Jellyfin',
			'addServer.connectToJellyfinCardSubtitle' => 'Saisissez l\'URL du serveur, le nom d\'utilisateur et le mot de passe.',
			'addServer.connectToJellyfinCardSubtitleScoped' => ({required Object name}) => 'Connectez-vous à un serveur Jellyfin. Cette connexion sera liée à ${name}.',
			'addServer.borrowFromAnotherProfile' => 'Emprunter à un autre profil',
			'addServer.borrowFromAnotherProfileSubtitle' => 'Réutiliser la connexion d\'un autre profil. Les profils protégés par PIN exigent un PIN.',
			_ => null,
		};
	}
}
