Files
plezy/lib/i18n/strings_fr.g.dart
T

3204 lines
200 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
///
/// 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 _TranslationsAppFr app = _TranslationsAppFr._(_root);
@override late final _TranslationsAuthFr auth = _TranslationsAuthFr._(_root);
@override late final _TranslationsCommonFr common = _TranslationsCommonFr._(_root);
@override late final _TranslationsScreensFr screens = _TranslationsScreensFr._(_root);
@override late final _TranslationsUpdateFr update = _TranslationsUpdateFr._(_root);
@override late final _TranslationsSettingsFr settings = _TranslationsSettingsFr._(_root);
@override late final _TranslationsSearchFr search = _TranslationsSearchFr._(_root);
@override late final _TranslationsHotkeysFr hotkeys = _TranslationsHotkeysFr._(_root);
@override late final _TranslationsFileInfoFr fileInfo = _TranslationsFileInfoFr._(_root);
@override late final _TranslationsMediaMenuFr mediaMenu = _TranslationsMediaMenuFr._(_root);
@override late final _TranslationsRateSheetFr rateSheet = _TranslationsRateSheetFr._(_root);
@override late final _TranslationsAccessibilityFr accessibility = _TranslationsAccessibilityFr._(_root);
@override late final _TranslationsTooltipsFr tooltips = _TranslationsTooltipsFr._(_root);
@override late final _TranslationsVideoControlsFr videoControls = _TranslationsVideoControlsFr._(_root);
@override late final _TranslationsUserStatusFr userStatus = _TranslationsUserStatusFr._(_root);
@override late final _TranslationsMessagesFr messages = _TranslationsMessagesFr._(_root);
@override late final _TranslationsSubtitlingStylingFr subtitlingStyling = _TranslationsSubtitlingStylingFr._(_root);
@override late final _TranslationsMpvConfigFr mpvConfig = _TranslationsMpvConfigFr._(_root);
@override late final _TranslationsDialogFr dialog = _TranslationsDialogFr._(_root);
@override late final _TranslationsProfilesFr profiles = _TranslationsProfilesFr._(_root);
@override late final _TranslationsConnectionsFr connections = _TranslationsConnectionsFr._(_root);
@override late final _TranslationsDiscoverFr discover = _TranslationsDiscoverFr._(_root);
@override late final _TranslationsErrorsFr errors = _TranslationsErrorsFr._(_root);
@override late final _TranslationsLibrariesFr libraries = _TranslationsLibrariesFr._(_root);
@override late final _TranslationsAboutFr about = _TranslationsAboutFr._(_root);
@override late final _TranslationsServerSelectionFr serverSelection = _TranslationsServerSelectionFr._(_root);
@override late final _TranslationsHubDetailFr hubDetail = _TranslationsHubDetailFr._(_root);
@override late final _TranslationsLogsFr logs = _TranslationsLogsFr._(_root);
@override late final _TranslationsLicensesFr licenses = _TranslationsLicensesFr._(_root);
@override late final _TranslationsNavigationFr navigation = _TranslationsNavigationFr._(_root);
@override late final _TranslationsLiveTvFr liveTv = _TranslationsLiveTvFr._(_root);
@override late final _TranslationsCollectionsFr collections = _TranslationsCollectionsFr._(_root);
@override late final _TranslationsPlaylistsFr playlists = _TranslationsPlaylistsFr._(_root);
@override late final _TranslationsWatchTogetherFr watchTogether = _TranslationsWatchTogetherFr._(_root);
@override late final _TranslationsDownloadsFr downloads = _TranslationsDownloadsFr._(_root);
@override late final _TranslationsShadersFr shaders = _TranslationsShadersFr._(_root);
@override late final _TranslationsCompanionRemoteFr companionRemote = _TranslationsCompanionRemoteFr._(_root);
@override late final _TranslationsVideoSettingsFr videoSettings = _TranslationsVideoSettingsFr._(_root);
@override late final _TranslationsPerformanceOverlayFr performanceOverlay = _TranslationsPerformanceOverlayFr._(_root);
@override late final _TranslationsExternalPlayerFr externalPlayer = _TranslationsExternalPlayerFr._(_root);
@override late final _TranslationsMetadataEditFr metadataEdit = _TranslationsMetadataEditFr._(_root);
@override late final _TranslationsMatchScreenFr matchScreen = _TranslationsMatchScreenFr._(_root);
@override late final _TranslationsServerTasksFr serverTasks = _TranslationsServerTasksFr._(_root);
@override late final _TranslationsTraktFr trakt = _TranslationsTraktFr._(_root);
@override late final _TranslationsTrackersFr trackers = _TranslationsTrackersFr._(_root);
@override late final _TranslationsAddServerFr addServer = _TranslationsAddServerFr._(_root);
}
// Path: app
class _TranslationsAppFr extends TranslationsAppEn {
_TranslationsAppFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get title => 'Plezy';
}
// Path: auth
class _TranslationsAuthFr extends TranslationsAuthEn {
_TranslationsAuthFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get signIn => 'Se connecter';
@override String get signInWithPlex => 'S\'inscrire avec Plex';
@override String get showQRCode => 'Afficher le QR Code';
@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.';
}
// Path: common
class _TranslationsCommonFr extends TranslationsCommonEn {
_TranslationsCommonFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get cancel => 'Annuler';
@override String get save => 'Sauvegarder';
@override String get close => 'Fermer';
@override String get clear => 'Nettoyer';
@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 => 'Rafraichir';
@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 => 'Connecter';
@override String get disconnect => '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 => 'Recherche';
@override String get home => 'Accueil';
@override String get back => 'Retour';
@override String get settings => 'Réglages';
@override String get mute => 'Muet';
@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 => 'Reconnecter';
@override String get exit => 'Quitter';
@override String get viewAll => 'Tout afficher';
@override String get checkingNetwork => 'Vérification du réseau...';
@override String get refreshingServers => 'Actualisation des serveurs...';
@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 _TranslationsScreensFr extends TranslationsScreensEn {
_TranslationsScreensFr._(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 => 'Logs';
}
// Path: update
class _TranslationsUpdateFr extends TranslationsUpdateEn {
_TranslationsUpdateFr._(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}) => 'Installé: ${version}';
@override String get skipVersion => 'Ignorer cette version';
@override String get viewRelease => 'Voir la Release';
@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 _TranslationsSettingsFr extends TranslationsSettingsEn {
_TranslationsSettingsFr._(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 du Poster d\'épisode';
@override String get seriesPoster => 'Poster de série';
@override String get seasonPoster => 'Poster de 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}) => 'Entrez 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 viewMode => 'Mode d\'affichage';
@override String get gridView => 'Grille';
@override String get listView => 'Liste';
@override String get showHeroSection => 'Afficher la section Hero';
@override String get continueWatchingAction => 'Action Continuer à regarder';
@override String get continueWatchingPlay => 'Lire';
@override String get continueWatchingDetails => '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 non visionné';
@override String get showUnwatchedCountDescription => 'Afficher le nombre d\'épisodes non visionnés pour les séries et saisons';
@override String get showEpisodeNumberOnCards => 'Afficher le numéro d\'épisode sur les cartes';
@override String get showEpisodeNumberOnCardsDescription => 'Afficher la saison et l\'épisode sur les cartes d\'épisode';
@override String get showSeasonPostersOnTabs => 'Afficher les posters 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 pleines';
@override String get tvFullCardLayoutDescription => 'Utiliser des cartes TV avec image seule et noms des acteurs superposés';
@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 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 (Recommandé)';
@override String get mpv => 'mpv';
@override String get hardwareDecoding => 'Décodage matériel';
@override String get hardwareDecodingDescription => 'Utilisez l\'accélération matérielle lorsqu\'elle est disponible.';
@override String get bufferSize => 'Taille du Buffer';
@override String bufferSizeMB({required Object size}) => '${size}MB';
@override String get bufferSizeAuto => 'Auto (Recommandé)';
@override String bufferSizeWarning({required Object heap, required Object size}) => '${heap}MB de mémoire disponible. Un tampon de ${size}MB peut affecter la lecture.';
@override String get defaultQualityTitle => 'Qualité par défaut';
@override String get defaultQualityDescription => 'Utilisé au démarrage de la lecture. Les valeurs plus basses réduisent la bande passante.';
@override String get subtitleStyling => 'Stylisation des sous-titres';
@override String get subtitleStylingDescription => 'Personnaliser l\'apparence des sous-titres';
@override String get smallSkipDuration => 'Durée du petit saut';
@override String get largeSkipDuration => 'Durée du grand saut';
@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 sélections de pistes par émission/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 => 'Cliquez sur la vidéo pour basculer entre lecture et pause.';
@override String get clickVideoTogglesPlaybackDescription => 'Cliquer sur la vidéo pour lire/mettre en pause au lieu d\'afficher les contrôles.';
@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 => 'Utilisez les touches fléchées pour naviguer dans les commandes du lecteur vidéo.';
@override String get watchTogetherRelay => 'Relais Regarder Ensemble';
@override String get watchTogetherRelayDescription => 'Définir un relay personnalisé. Tout le monde doit utiliser le même serveur.';
@override String get watchTogetherRelayHint => 'https://mon-relais.exemple.fr';
@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 logs';
@override String get viewLogsDescription => 'Voir les logs d\'application';
@override String get clearCache => 'Vider le cache';
@override String get clearCacheDescription => 'Effacer les images et données en cache. Le contenu peut charger plus lentement.';
@override String get clearCacheSuccess => 'Cache effacé avec succès';
@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 exportSettingsFailed => 'Impossible d\'exporter les paramètres';
@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 importSettingsFailed => 'Impossible d\'importer les paramètres';
@override String get importSettingsInvalidFile => 'Ce fichier n\'est pas un export Plezy valide';
@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 numéro 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 autoSkip => 'Skip automatique';
@override String get autoSkipIntro => 'Skip automatique de l\'introduction';
@override String get autoSkipIntroDescription => 'Skipper automatiquement l\'introduction après quelques secondes';
@override String get autoSkipCredits => 'Skip automatique des crédits';
@override String get autoSkipCreditsDescription => 'Passer les crédits et passer à l\'épisode suivant automatiquement';
@override String get forceSkipMarkerFallback => 'Forcer les marqueurs de repli';
@override String get forceSkipMarkerFallbackDescription => 'Utiliser les motifs de titres de chapitres même si Plex a des marqueurs';
@override String get autoSkipDelay => 'Délai avant skip automatique';
@override String autoSkipDelayDescription({required Object seconds}) => 'Attendre ${seconds} secondes avant l\'auto-skip';
@override String get introPattern => 'Modèle de marqueur d\'intro';
@override String get introPatternDescription => 'Expression régulière pour reconnaître les marqueurs d\'intro dans les titres de chapitres';
@override String get creditsPattern => 'Modèle de marqueur de générique';
@override String get creditsPatternDescription => 'Expression régulière pour reconnaître les marqueurs de générique dans les titres de chapitres';
@override String get invalidRegex => 'Expression régulière invalide';
@override String get downloads => 'Téléchargement';
@override String get downloadLocationDescription => 'Choisissez 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 downloadLocationSelectError => 'Échec de la sélection du dossier';
@override String get downloadOnWifiOnly => 'Télécharger uniquement via WiFi';
@override String get downloadOnWifiOnlyDescription => 'Empêcher les téléchargements lorsque vous utilisez les données cellulaires';
@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 réseau mobile. Utilisez le WiFi ou modifiez le réglage.';
@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 => 'Montrez ce que vous regardez sur Discord';
@override String get trakt => 'Trakt';
@override String get traktDescription => 'Synchroniser l\'historique de visionnage avec Trakt';
@override String get trackers => 'Trackers';
@override String get trackersDescription => 'Synchroniser la progression avec Trakt, MyAnimeList, AniList et Simkl';
@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 => 'Image dans l\'image automatique';
@override String get autoPipDescription => 'Passer en picture-in-picture en quittant pendant la lecture';
@override String get matchContentFrameRate => 'Fréquence d\'images du contenu correspondant';
@override String get matchContentFrameRateDescription => 'Adapter la fréquence d\'affichage 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 dvConversionMode => 'Conversion Dolby Vision';
@override String get dvConversionModeDescription => 'Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 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 lappareil 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 Dolby Vision profil 8.1';
@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. Pour appareils non 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 auto. superposition performances';
@override String get autoHidePerformanceOverlayDescription => 'Faire apparaître/disparaître la superposition avec les contrôles 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 startupSectionDescription => 'Choisissez la section que Plezy ouvre au 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 => 'Recherche et minutage';
@override String get behavior => 'Comportement';
}
// Path: search
class _TranslationsSearchFr extends TranslationsSearchEn {
_TranslationsSearchFr._(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 _TranslationsHotkeysFr extends TranslationsHotkeysEn {
_TranslationsHotkeysFr._(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 late final _TranslationsHotkeysActionsFr actions = _TranslationsHotkeysActionsFr._(_root);
}
// Path: fileInfo
class _TranslationsFileInfoFr extends TranslationsFileInfoEn {
_TranslationsFileInfoFr._(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 => 'Bitrate';
@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 _TranslationsMediaMenuFr extends TranslationsMediaMenuEn {
_TranslationsMediaMenuFr._(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 nest 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 _TranslationsRateSheetFr extends TranslationsRateSheetEn {
_TranslationsRateSheetFr._(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 starValue({required Object rating}) => '${rating} / 5';
@override String scoreValue({required Object score}) => '${score} / 10';
@override String get setScore => 'Définir une note';
@override String get notRated => 'Non noté';
@override String get liked => 'Aimé';
@override String get notLiked => 'Non aimé';
@override String get saved => 'Enregistré';
@override String get notAvailable => 'Aucune correspondance trouvée';
@override String get noConnectedTrackers => 'Connectez un tracker dans Paramètres pour y noter.';
}
// Path: accessibility
class _TranslationsAccessibilityFr extends TranslationsAccessibilityEn {
_TranslationsAccessibilityFr._(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}, show 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} pourcentage visionné';
@override String get mediaCardUnwatched => 'non visionné';
@override String get tapToPlay => 'Appuyez pour lire';
}
// Path: tooltips
class _TranslationsTooltipsFr extends TranslationsTooltipsEn {
_TranslationsTooltipsFr._(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 => 'Marqué comme vu';
@override String get markAsUnwatched => 'Marqué comme non vu';
}
// Path: videoControls
class _TranslationsVideoControlsFr extends TranslationsVideoControlsEn {
_TranslationsVideoControlsFr._(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 à 0ms';
@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} lire plus tard';
@override String playsEarlier({required Object label}) => '${label} lire plus tôt';
@override String get noOffset => 'Pas de décalage';
@override String get letterbox => 'Boîte aux lettres';
@override String get fillScreen => 'Remplir l\'écran';
@override String get stretch => 'Etirer';
@override String get lockRotation => 'Verrouillage de 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 suivante';
@override String get playNext => 'Lire l\'épisode suivant';
@override String get playButton => 'Lire';
@override String get pauseButton => 'Pause';
@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 => 'Mute';
@override String get unmuteButton => 'Dé-mute';
@override String get settingsButton => 'Paramètres de lecture';
@override String get tracksButton => 'Audio et sous-titres';
@override String get chaptersButton => 'Chapitres';
@override String get versionsButton => 'Versions vidéo';
@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 qualityBandwidthEstimate({required Object bitrate}) => '~${bitrate} Mbps';
@override String get transcodeUnavailableFallback => 'Transcodage indisponible — lecture en qualité originale';
@override String get pipButton => 'Mode PiP (Picture-in-Picture)';
@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 => 'Timeline vidéo';
@override String get volumeSlider => 'Niveau sonore';
@override String endsAt({required Object time}) => 'Fin à ${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 _TranslationsVideoControlsPipErrorsFr pipErrors = _TranslationsVideoControlsPipErrorsFr._(_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 downloadedSubtitle => 'Téléchargé';
@override String get noSubtitlesAvailable => 'Aucun sous-titre disponible';
@override String get noAudioTracksAvailable => 'Aucune piste audio disponible';
@override String get noTracksAvailable => 'Aucune piste disponible';
@override String get subtitleDownloaded => 'Sous-titre téléchargé';
@override String get subtitleDownloadFailed => 'Échec du téléchargement du sous-titre';
@override String get searchLanguages => 'Rechercher des langues...';
}
// Path: userStatus
class _TranslationsUserStatusFr extends TranslationsUserStatusEn {
_TranslationsUserStatusFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get admin => 'Admin';
@override String get restricted => 'Restreint';
@override String get protected => 'Protégé';
@override String get current => 'ACTUEL';
}
// Path: messages
class _TranslationsMessagesFr extends TranslationsMessagesEn {
_TranslationsMessagesFr._(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 get removedFromContinueWatching => 'Supprimer de "Continuer à regarder"';
@override String errorLoading({required Object error}) => 'Erreur: ${error}';
@override String get fileInfoNotAvailable => 'Informations sur le fichier non disponibles';
@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 => 'Logs effacés';
@override String get logsCopied => 'Logs copiés dans le presse-papier';
@override String get noLogsAvailable => 'Aucun log disponible';
@override String libraryScanning({required Object title}) => 'Scan de "${title}"...';
@override String libraryScanStarted({required Object title}) => 'Scan de la bibliothèque démarrée pour "${title}"';
@override String libraryScanFailed({required Object error}) => 'Échec du scan de la bibliothèque: ${error}';
@override String metadataRefreshing({required Object title}) => 'Actualisation des métadonnées pour "${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 => 'Échec de la création de la file d\'attente de lecture - aucun élément';
@override String failedPlayback({required Object action, required Object error}) => 'Echec 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 => 'Logs envoyés';
@override String get logsUploadFailed => 'Échec de l\'envoi des logs';
@override String get logId => 'ID du log';
}
// Path: subtitlingStyling
class _TranslationsSubtitlingStylingFr extends TranslationsSubtitlingStylingEn {
_TranslationsSubtitlingStylingFr._(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 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 _TranslationsMpvConfigFr extends TranslationsMpvConfigEn {
_TranslationsMpvConfigFr._(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 _TranslationsDialogFr extends TranslationsDialogEn {
_TranslationsDialogFr._(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 _TranslationsProfilesFr extends TranslationsProfilesEn {
_TranslationsProfilesFr._(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 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 sourceProfileMissingParentAccount => 'Le profil source n\'a pas son compte parent.';
@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';
@override String get initializeServicesFailed => 'Impossible dinitialiser les services de profil';
}
// Path: connections
class _TranslationsConnectionsFr extends TranslationsConnectionsEn {
_TranslationsConnectionsFr._(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 _TranslationsDiscoverFr extends TranslationsDiscoverEn {
_TranslationsDiscoverFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get title => 'Découvrez';
@override String get switchProfile => 'Changer de profil';
@override String get noContentAvailable => 'Aucun contenu disponible';
@override String get addMediaToLibraries => 'Ajoutez des médias à votre bibliothèque';
@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 playEpisode({required Object season, required Object episode}) => 'S${season}E${episode}';
@override String get overview => 'Aperçu';
@override String get cast => 'Cast';
@override String get extras => 'Bandes-annonces et Extras';
@override String get studio => 'Studio';
@override String get rating => 'Évaluation';
@override String get movie => 'Film';
@override String get tvShow => 'Show TV';
@override String minutesLeft({required Object minutes}) => '${minutes} min restantes';
@override String get moreLikeThis => 'Plus de contenus similaires';
}
// Path: errors
class _TranslationsErrorsFr extends TranslationsErrorsEn {
_TranslationsErrorsFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String searchFailed({required Object error}) => 'Recherche échouée: ${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 failedToLoad({required Object context, required Object error}) => 'Échec du chargement ${context}: ${error}';
@override String get noClientAvailable => 'Aucun client disponible';
@override String authenticationFailed({required Object error}) => 'Échec de l\'authentification: ${error}';
@override String get couldNotLaunchUrl => 'Impossible de lancer l\'URL d\'authentification';
@override String get pleaseEnterToken => 'Veuillez saisir un token';
@override String get invalidToken => 'Token invalide';
@override String failedToVerifyToken({required Object error}) => 'Échec de la vérification du token: ${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 _TranslationsLibrariesFr extends TranslationsLibrariesEn {
_TranslationsLibrariesFr._(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}) => 'Vider les poubelles pour "${title}"...';
@override String trashEmptied({required Object title}) => 'Poubelles vidées pour "${title}"';
@override String failedToEmptyTrash({required Object error}) => 'Échec de la suppression des éléments supprimés: ${error}';
@override String analyzing({required Object title}) => 'Analyse de "${title}"...';
@override String analysisStarted({required Object title}) => 'L\'analyse a commencé 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 all => 'Tout';
@override String get clearAll => 'Tout effacer';
@override String scanLibraryConfirm({required Object title}) => 'Êtes-vous sûr de vouloir lancer le scan de "${title}"?';
@override String analyzeLibraryConfirm({required Object title}) => 'Êtes-vous sûr de vouloir analyser "${title}"?';
@override String refreshMetadataConfirm({required Object title}) => 'Êtes-vous sûr de vouloir actualiser les métadonnées pour "${title}"?';
@override String emptyTrashConfirm({required Object title}) => 'Êtes-vous sûr de vouloir vider la corbeille pour "${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 _TranslationsLibrariesTabsFr tabs = _TranslationsLibrariesTabsFr._(_root);
@override late final _TranslationsLibrariesGroupingsFr groupings = _TranslationsLibrariesGroupingsFr._(_root);
@override late final _TranslationsLibrariesFilterCategoriesFr filterCategories = _TranslationsLibrariesFilterCategoriesFr._(_root);
@override late final _TranslationsLibrariesSortLabelsFr sortLabels = _TranslationsLibrariesSortLabelsFr._(_root);
}
// Path: about
class _TranslationsAboutFr extends TranslationsAboutEn {
_TranslationsAboutFr._(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 Open Source';
@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 _TranslationsServerSelectionFr extends TranslationsServerSelectionEn {
_TranslationsServerSelectionFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get allServerConnectionsFailed => 'Connexion impossible à tous les serveurs. Vérifiez votre réseau.';
@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 _TranslationsHubDetailFr extends TranslationsHubDetailEn {
_TranslationsHubDetailFr._(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 _TranslationsLogsFr extends TranslationsLogsEn {
_TranslationsLogsFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get clearLogs => 'Effacer les logs';
@override String get copyLogs => 'Copier les logs';
@override String get uploadLogs => 'Envoyer les logs';
}
// Path: licenses
class _TranslationsLicensesFr extends TranslationsLicensesEn {
_TranslationsLicensesFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get relatedPackages => 'Package 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 _TranslationsNavigationFr extends TranslationsNavigationEn {
_TranslationsNavigationFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get libraries => 'Medias';
@override String get downloads => 'Téléch.';
@override String get liveTv => 'TV direct';
}
// Path: liveTv
class _TranslationsLiveTvFr extends TranslationsLiveTvEn {
_TranslationsLiveTvFr._(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 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 => 'Nuit tardive';
@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 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 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 noRecordingRules => 'Aucune règle d\'enregistrement';
@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 loadingRecordings => 'Chargement des enregistrements...';
@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 _TranslationsCollectionsFr extends TranslationsCollectionsEn {
_TranslationsCollectionsFr._(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 unknownLibrarySection => 'Impossible de supprimer : section de bibliothèque inconnue';
@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 failedToLoadItems({required Object error}) => 'Échec du chargement des éléments 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 de la suppression de la collection: ${error}';
@override String get searchCollections => 'Rechercher des collections...';
}
// Path: playlists
class _TranslationsPlaylistsFr extends TranslationsPlaylistsEn {
_TranslationsPlaylistsFr._(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 => 'Entrer le nom de playlist';
@override String get delete => 'Supprimer la playlist';
@override String get removeItem => 'Retirer de la playlist';
@override String get smartPlaylist => 'Smart playlist';
@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}) => 'Êtes-vous sûr de vouloir 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 errorCreating => 'Échec de la création de playlist';
@override String get errorDeleting => 'Échec de suppression de playlist';
@override String get errorLoading => 'Échec de chargement de playlists';
@override String get errorAdding => 'Échec d\'ajout dans la playlist';
@override String get errorReordering => 'Échec de réordonnacement d\'élément de playlist';
@override String get errorRemoving => 'Échec de suppression depuis la playlist';
}
// Path: watchTogether
class _TranslationsWatchTogetherFr extends TranslationsWatchTogetherEn {
_TranslationsWatchTogetherFr._(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 => 'Regardez du contenu en synchronisation avec vos amis et votre famille';
@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 => 'Rejoindre...';
@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 d\'hébergement';
@override String get inSession => 'En session';
@override String get sessionCode => '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 => 'HOST';
@override String get youAreHost => 'Vous êtes l\'hôte';
@override String get watchingWithOthers => 'Regarder avec d\'autres personnes';
@override String get endSession => 'Fin de 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 => 'Fin';
@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 relay inaccessible. Un blocage ISP peut empêcher Watch Together.';
@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 => 'Revenez à ce 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 avancé';
@override String participantBuffering({required Object name}) => '${name} met en mémoire tampon';
@override String get waitingForParticipants => 'En attente du chargement des autres...';
@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 _TranslationsDownloadsFr extends TranslationsDownloadsEn {
_TranslationsDownloadsFr._(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 => 'Show TV';
@override String get movies => 'Films';
@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 serveur : le fichier peut dépasser la limite de bitrate distant';
@override String episodesQueued({required Object count}) => '${count} épisodes en attente de téléchargement';
@override String get downloadDeleted => 'Télécharger 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 howManyEpisodes => 'Combien d\'épisodes ?';
@override String itemsQueued({required Object count}) => '${count} éléments mis en file d\'attente';
@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';
}
// Path: shaders
class _TranslationsShadersFr extends TranslationsShadersEn {
_TranslationsShadersFr._(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 _TranslationsCompanionRemoteFr extends TranslationsCompanionRemoteEn {
_TranslationsCompanionRemoteFr._(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 _TranslationsCompanionRemoteSessionFr session = _TranslationsCompanionRemoteSessionFr._(_root);
@override late final _TranslationsCompanionRemotePairingFr pairing = _TranslationsCompanionRemotePairingFr._(_root);
@override late final _TranslationsCompanionRemoteRemoteFr remote = _TranslationsCompanionRemoteRemoteFr._(_root);
@override late final _TranslationsCompanionRemoteErrorsFr errors = _TranslationsCompanionRemoteErrorsFr._(_root);
}
// Path: videoSettings
class _TranslationsVideoSettingsFr extends TranslationsVideoSettingsEn {
_TranslationsVideoSettingsFr._(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 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 => 'Superposition de performance';
@override String get audioPassthrough => 'Audio Pass-Through';
@override String get audioNormalization => 'Normaliser le volume';
}
// Path: performanceOverlay
class _TranslationsPerformanceOverlayFr extends TranslationsPerformanceOverlayEn {
_TranslationsPerformanceOverlayFr._(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 => 'App';
@override String get decoder => 'Décodeur';
@override String get rawDecoder => 'Décodeur brut';
@override String get tunneling => 'Tunneling';
@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';
@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 _TranslationsExternalPlayerFr extends TranslationsExternalPlayerEn {
_TranslationsExternalPlayerFr._(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 app';
@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 _TranslationsMetadataEditFr extends TranslationsMetadataEditEn {
_TranslationsMetadataEditFr._(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 => 'Artwork';
@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 => 'Artwork mis à jour';
@override String get artworkUpdateFailed => 'Échec de la mise à jour de l\'artwork';
@override String get noArtworkAvailable => 'Aucun artwork disponible';
@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 => 'Affichés avec audio étranger';
@override String get alwaysEnabled => 'Toujours activé';
@override String get tags => 'Tags';
@override String get addTag => 'Ajouter un tag';
@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 _TranslationsMatchScreenFr extends TranslationsMatchScreenEn {
_TranslationsMatchScreenFr._(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 _TranslationsServerTasksFr extends TranslationsServerTasksEn {
_TranslationsServerTasksFr._(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 _TranslationsTraktFr extends TranslationsTraktEn {
_TranslationsTraktFr._(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 pouvez 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 un élément comme vu dans Plezy, il l\'est aussi sur Trakt.';
}
// Path: trackers
class _TranslationsTrackersFr extends TranslationsTrackersEn {
_TranslationsTrackersFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get title => 'Trackers';
@override String get hubSubtitle => 'Synchronisez la progression de visionnage avec Trakt et d\'autres services.';
@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}. Reconnectez à tout moment.';
@override String connectFailed({required Object service}) => 'Échec de la connexion à ${service}. Réessayez.';
@override late final _TranslationsTrackersServicesFr services = _TranslationsTrackersServicesFr._(_root);
@override late final _TranslationsTrackersDeviceCodeFr deviceCode = _TranslationsTrackersDeviceCodeFr._(_root);
@override late final _TranslationsTrackersOauthProxyFr oauthProxy = _TranslationsTrackersOauthProxyFr._(_root);
@override late final _TranslationsTrackersLibraryFilterFr libraryFilter = _TranslationsTrackersLibraryFilterFr._(_root);
}
// Path: addServer
class _TranslationsAddServerFr extends TranslationsAddServerEn {
_TranslationsAddServerFr._(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 get duplicatePlexAccount => 'Déjà connecté à Plex. Déconnectez-vous pour changer de compte.';
@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. Lié à ${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 _TranslationsHotkeysActionsFr extends TranslationsHotkeysActionsEn {
_TranslationsHotkeysActionsFr._(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 _TranslationsVideoControlsPipErrorsFr extends TranslationsVideoControlsPipErrorsEn {
_TranslationsVideoControlsPipErrorsFr._(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 => 'Picture-in-picture 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 _TranslationsLibrariesTabsFr extends TranslationsLibrariesTabsEn {
_TranslationsLibrariesTabsFr._(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 _TranslationsLibrariesGroupingsFr extends TranslationsLibrariesGroupingsEn {
_TranslationsLibrariesGroupingsFr._(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 => 'Show TV';
@override String get seasons => 'Saisons';
@override String get episodes => 'Épisodes';
@override String get folders => 'Dossiers';
}
// Path: libraries.filterCategories
class _TranslationsLibrariesFilterCategoriesFr extends TranslationsLibrariesFilterCategoriesEn {
_TranslationsLibrariesFilterCategoriesFr._(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 => 'Tag';
@override String get unwatched => 'Non vus';
}
// Path: libraries.sortLabels
class _TranslationsLibrariesSortLabelsFr extends TranslationsLibrariesSortLabelsEn {
_TranslationsLibrariesSortLabelsFr._(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 lastPlayed => 'Dernière lecture';
@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';
}
// Path: companionRemote.session
class _TranslationsCompanionRemoteSessionFr extends TranslationsCompanionRemoteSessionEn {
_TranslationsCompanionRemoteSessionFr._(TranslationsFr root) : this._root = root, super.internal(root);
final TranslationsFr _root; // ignore: unused_field
// Translations
@override String get startingServer => 'Démarrage du serveur distant...';
@override String get failedToCreate => 'Échec du démarrage du serveur distant :';
@override String get hostAddress => 'Adresse de l\'hôte';
@override String get connected => 'Connecté';
@override String get serverRunning => 'Serveur distant actif';
@override String get serverStopped => 'Serveur distant arrêté';
@override String get serverRunningDescription => 'Les appareils mobiles de votre réseau peuvent se connecter à cette app';
@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 _TranslationsCompanionRemotePairingFr extends TranslationsCompanionRemotePairingEn {
_TranslationsCompanionRemotePairingFr._(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 ordinateur et utilisez le même WiFi';
@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 entrer l\'adresse de l\'hôte';
@override String get validationHostFormat => 'Le format doit être IP:port (ex. 192.168.1.100:48632)';
@override String get connectionTimedOut => 'Connexion expirée. 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 _TranslationsCompanionRemoteRemoteFr extends TranslationsCompanionRemoteRemoteEn {
_TranslationsCompanionRemoteRemoteFr._(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 le bureau...';
}
// Path: companionRemote.errors
class _TranslationsCompanionRemoteErrorsFr extends TranslationsCompanionRemoteErrorsEn {
_TranslationsCompanionRemoteErrorsFr._(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 lauthentification';
@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: trackers.services
class _TranslationsTrackersServicesFr extends TranslationsTrackersServicesEn {
_TranslationsTrackersServicesFr._(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';
}
// Path: trackers.deviceCode
class _TranslationsTrackersDeviceCodeFr extends TranslationsTrackersDeviceCodeEn {
_TranslationsTrackersDeviceCodeFr._(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 waitingForAuthorization => 'En attente d\'autorisation…';
@override String get codeCopied => 'Code copié';
}
// Path: trackers.oauthProxy
class _TranslationsTrackersOauthProxyFr extends TranslationsTrackersOauthProxyEn {
_TranslationsTrackersOauthProxyFr._(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 urlCopied => 'URL copiée';
}
// Path: trackers.libraryFilter
class _TranslationsTrackersLibraryFilterFr extends TranslationsTrackersLibraryFilterEn {
_TranslationsTrackersLibraryFilterFr._(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 noire';
@override String get modeWhitelist => 'Liste blanche';
@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.signIn' => 'Se connecter',
'auth.signInWithPlex' => 'S\'inscrire avec Plex',
'auth.showQRCode' => 'Afficher le QR Code',
'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.',
'common.cancel' => 'Annuler',
'common.save' => 'Sauvegarder',
'common.close' => 'Fermer',
'common.clear' => 'Nettoyer',
'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' => 'Rafraichir',
'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' => 'Connecter',
'common.disconnect' => 'Déconnecter',
'common.play' => 'Lire',
'common.pause' => 'Pause',
'common.resume' => 'Reprendre',
'common.error' => 'Erreur',
'common.search' => 'Recherche',
'common.home' => 'Accueil',
'common.back' => 'Retour',
'common.settings' => 'Réglages',
'common.mute' => 'Muet',
'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' => 'Reconnecter',
'common.exit' => 'Quitter',
'common.viewAll' => 'Tout afficher',
'common.checkingNetwork' => 'Vérification du réseau...',
'common.refreshingServers' => 'Actualisation des serveurs...',
'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' => 'Logs',
'update.available' => 'Mise à jour disponible',
'update.versionAvailable' => ({required Object version}) => 'Version ${version} disponible',
'update.currentVersion' => ({required Object version}) => 'Installé: ${version}',
'update.skipVersion' => 'Ignorer cette version',
'update.viewRelease' => 'Voir la Release',
'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 du Poster d\'épisode',
'settings.seriesPoster' => 'Poster de série',
'settings.seasonPoster' => 'Poster de 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}) => 'Entrez 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.viewMode' => 'Mode d\'affichage',
'settings.gridView' => 'Grille',
'settings.listView' => 'Liste',
'settings.showHeroSection' => 'Afficher la section Hero',
'settings.continueWatchingAction' => 'Action Continuer à regarder',
'settings.continueWatchingPlay' => 'Lire',
'settings.continueWatchingDetails' => '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 non visionné',
'settings.showUnwatchedCountDescription' => 'Afficher le nombre d\'épisodes non visionnés pour les séries et saisons',
'settings.showEpisodeNumberOnCards' => 'Afficher le numéro d\'épisode sur les cartes',
'settings.showEpisodeNumberOnCardsDescription' => 'Afficher la saison et l\'épisode sur les cartes d\'épisode',
'settings.showSeasonPostersOnTabs' => 'Afficher les posters de saison sur les onglets',
'settings.showSeasonPostersOnTabsDescription' => 'Afficher l\'affiche de chaque saison au-dessus de son onglet',
'settings.tvFullCardLayout' => 'Cartes TV pleines',
'settings.tvFullCardLayoutDescription' => 'Utiliser des cartes TV avec image seule et noms des acteurs superposés',
'settings.focusGlow' => 'Halo de sélection',
'settings.focusGlowDescription' => 'Afficher un léger halo autour de la carte sélectionnée',
'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 (Recommandé)',
'settings.mpv' => 'mpv',
'settings.hardwareDecoding' => 'Décodage matériel',
'settings.hardwareDecodingDescription' => 'Utilisez l\'accélération matérielle lorsqu\'elle est disponible.',
'settings.bufferSize' => 'Taille du Buffer',
'settings.bufferSizeMB' => ({required Object size}) => '${size}MB',
'settings.bufferSizeAuto' => 'Auto (Recommandé)',
'settings.bufferSizeWarning' => ({required Object heap, required Object size}) => '${heap}MB de mémoire disponible. Un tampon de ${size}MB peut affecter la lecture.',
'settings.defaultQualityTitle' => 'Qualité par défaut',
'settings.defaultQualityDescription' => 'Utilisé au démarrage de la lecture. Les valeurs plus basses réduisent la bande passante.',
'settings.subtitleStyling' => 'Stylisation des sous-titres',
'settings.subtitleStylingDescription' => 'Personnaliser l\'apparence des sous-titres',
'settings.smallSkipDuration' => 'Durée du petit saut',
'settings.largeSkipDuration' => 'Durée du grand saut',
'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 sélections de pistes par émission/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' => 'Cliquez sur la vidéo pour basculer entre lecture et pause.',
'settings.clickVideoTogglesPlaybackDescription' => 'Cliquer sur la vidéo pour lire/mettre en pause au lieu d\'afficher les contrôles.',
'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' => 'Utilisez les touches fléchées pour naviguer dans les commandes du lecteur vidéo.',
'settings.watchTogetherRelay' => 'Relais Regarder Ensemble',
'settings.watchTogetherRelayDescription' => 'Définir un relay personnalisé. Tout le monde doit utiliser le même serveur.',
'settings.watchTogetherRelayHint' => 'https://mon-relais.exemple.fr',
'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 logs',
'settings.viewLogsDescription' => 'Voir les logs d\'application',
'settings.clearCache' => 'Vider le cache',
'settings.clearCacheDescription' => 'Effacer les images et données en cache. Le contenu peut charger plus lentement.',
'settings.clearCacheSuccess' => 'Cache effacé avec succès',
'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.exportSettingsFailed' => 'Impossible d\'exporter les paramètres',
'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.importSettingsFailed' => 'Impossible d\'importer les paramètres',
'settings.importSettingsInvalidFile' => 'Ce fichier n\'est pas un export Plezy valide',
'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 numéro 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.autoSkip' => 'Skip automatique',
'settings.autoSkipIntro' => 'Skip automatique de l\'introduction',
'settings.autoSkipIntroDescription' => 'Skipper automatiquement l\'introduction après quelques secondes',
'settings.autoSkipCredits' => 'Skip automatique des crédits',
'settings.autoSkipCreditsDescription' => 'Passer les crédits et passer à l\'épisode suivant automatiquement',
'settings.forceSkipMarkerFallback' => 'Forcer les marqueurs de repli',
'settings.forceSkipMarkerFallbackDescription' => 'Utiliser les motifs de titres de chapitres même si Plex a des marqueurs',
'settings.autoSkipDelay' => 'Délai avant skip automatique',
'settings.autoSkipDelayDescription' => ({required Object seconds}) => 'Attendre ${seconds} secondes avant l\'auto-skip',
'settings.introPattern' => 'Modèle de marqueur d\'intro',
'settings.introPatternDescription' => 'Expression régulière pour reconnaître les marqueurs d\'intro dans les titres de chapitres',
'settings.creditsPattern' => 'Modèle de marqueur de générique',
'settings.creditsPatternDescription' => 'Expression régulière pour reconnaître les marqueurs de générique dans les titres de chapitres',
'settings.invalidRegex' => 'Expression régulière invalide',
'settings.downloads' => 'Téléchargement',
'settings.downloadLocationDescription' => 'Choisissez 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.downloadLocationSelectError' => 'Échec de la sélection du dossier',
'settings.downloadOnWifiOnly' => 'Télécharger uniquement via WiFi',
'settings.downloadOnWifiOnlyDescription' => 'Empêcher les téléchargements lorsque vous utilisez les données cellulaires',
'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 réseau mobile. Utilisez le WiFi ou modifiez le réglage.',
'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' => 'Montrez ce que vous regardez sur Discord',
'settings.trakt' => 'Trakt',
'settings.traktDescription' => 'Synchroniser l\'historique de visionnage avec Trakt',
'settings.trackers' => 'Trackers',
'settings.trackersDescription' => 'Synchroniser la progression avec Trakt, MyAnimeList, AniList et Simkl',
'settings.companionRemoteServer' => 'Serveur de télécommande',
'settings.companionRemoteServerDescription' => 'Autoriser les appareils mobiles de votre réseau à contrôler cette application',
'settings.autoPip' => 'Image dans l\'image automatique',
'settings.autoPipDescription' => 'Passer en picture-in-picture en quittant pendant la lecture',
'settings.matchContentFrameRate' => 'Fréquence d\'images du contenu correspondant',
'settings.matchContentFrameRateDescription' => 'Adapter la fréquence d\'affichage 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.dvConversionMode' => 'Conversion Dolby Vision',
'settings.dvConversionModeDescription' => 'Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 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 lappareil 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 Dolby Vision profil 8.1',
'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. Pour appareils non 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 auto. superposition performances',
'settings.autoHidePerformanceOverlayDescription' => 'Faire apparaître/disparaître la superposition avec les contrôles 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.startupSectionDescription' => 'Choisissez la section que Plezy ouvre au 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' => 'Recherche 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.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' => 'Bitrate',
'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 nest 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.starValue' => ({required Object rating}) => '${rating} / 5',
'rateSheet.scoreValue' => ({required Object score}) => '${score} / 10',
'rateSheet.setScore' => 'Définir une note',
'rateSheet.notRated' => 'Non noté',
'rateSheet.liked' => 'Aimé',
'rateSheet.notLiked' => 'Non aimé',
'rateSheet.saved' => 'Enregistré',
'rateSheet.notAvailable' => 'Aucune correspondance trouvée',
'rateSheet.noConnectedTrackers' => 'Connectez un tracker dans Paramètres pour y noter.',
'accessibility.mediaCardMovie' => ({required Object title}) => '${title}, film',
'accessibility.mediaCardShow' => ({required Object title}) => '${title}, show 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} pourcentage visionné',
'accessibility.mediaCardUnwatched' => 'non visionné',
'accessibility.tapToPlay' => 'Appuyez pour lire',
'tooltips.shufflePlay' => 'Lecture aléatoire',
'tooltips.playTrailer' => 'Lire la bande-annonce',
'tooltips.markAsWatched' => 'Marqué comme vu',
'tooltips.markAsUnwatched' => 'Marqué comme non vu',
'videoControls.audioLabel' => 'Audio',
'videoControls.subtitlesLabel' => 'Sous-titres',
'videoControls.resetToZero' => 'Réinitialiser à 0ms',
'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} lire plus tard',
'videoControls.playsEarlier' => ({required Object label}) => '${label} lire plus tôt',
'videoControls.noOffset' => 'Pas de décalage',
'videoControls.letterbox' => 'Boîte aux lettres',
'videoControls.fillScreen' => 'Remplir l\'écran',
'videoControls.stretch' => 'Etirer',
'videoControls.lockRotation' => 'Verrouillage de 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 suivante',
'videoControls.playNext' => 'Lire l\'épisode suivant',
'videoControls.playButton' => 'Lire',
'videoControls.pauseButton' => 'Pause',
'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' => 'Mute',
'videoControls.unmuteButton' => 'Dé-mute',
'videoControls.settingsButton' => 'Paramètres de lecture',
'videoControls.tracksButton' => 'Audio et sous-titres',
'videoControls.chaptersButton' => 'Chapitres',
'videoControls.versionsButton' => 'Versions vidéo',
'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.qualityBandwidthEstimate' => ({required Object bitrate}) => '~${bitrate} Mbps',
'videoControls.transcodeUnavailableFallback' => 'Transcodage indisponible — lecture en qualité originale',
'videoControls.pipButton' => 'Mode PiP (Picture-in-Picture)',
'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' => 'Timeline vidéo',
'videoControls.volumeSlider' => 'Niveau sonore',
'videoControls.endsAt' => ({required Object time}) => 'Fin à ${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' => 'Picture-in-picture 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.downloadedSubtitle' => 'Téléchargé',
'videoControls.noSubtitlesAvailable' => 'Aucun sous-titre disponible',
'videoControls.noAudioTracksAvailable' => 'Aucune piste audio disponible',
'videoControls.noTracksAvailable' => 'Aucune piste disponible',
'videoControls.subtitleDownloaded' => 'Sous-titre téléchargé',
'videoControls.subtitleDownloadFailed' => 'Échec du téléchargement du sous-titre',
'videoControls.searchLanguages' => 'Rechercher des langues...',
'userStatus.admin' => 'Admin',
'userStatus.restricted' => 'Restreint',
'userStatus.protected' => 'Protégé',
'userStatus.current' => 'ACTUEL',
'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.removedFromContinueWatching' => 'Supprimer de "Continuer à regarder"',
'messages.errorLoading' => ({required Object error}) => 'Erreur: ${error}',
'messages.fileInfoNotAvailable' => 'Informations sur le fichier non disponibles',
'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' => 'Logs effacés',
'messages.logsCopied' => 'Logs copiés dans le presse-papier',
'messages.noLogsAvailable' => 'Aucun log disponible',
'messages.libraryScanning' => ({required Object title}) => 'Scan de "${title}"...',
'messages.libraryScanStarted' => ({required Object title}) => 'Scan de la bibliothèque démarrée pour "${title}"',
'messages.libraryScanFailed' => ({required Object error}) => 'Échec du scan de la bibliothèque: ${error}',
'messages.metadataRefreshing' => ({required Object title}) => 'Actualisation des métadonnées pour "${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' => 'Échec de la création de la file d\'attente de lecture - aucun élément',
'messages.failedPlayback' => ({required Object action, required Object error}) => 'Echec 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' => 'Logs envoyés',
'messages.logsUploadFailed' => 'Échec de l\'envoi des logs',
'messages.logId' => 'ID du log',
'subtitlingStyling.text' => 'Texte',
'subtitlingStyling.border' => 'Bordure',
'subtitlingStyling.background' => 'Arrière-plan',
_ => null,
} ?? switch (path) {
'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.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.borrowFromProfile' => ({required Object displayName}) => 'De ${displayName}',
'profiles.borrowConnectionBorrowed' => 'Connexion empruntée.',
'profiles.borrowFailed' => 'Impossible d\'emprunter la connexion.',
'profiles.incorrectPin' => 'PIN incorrect.',
'profiles.sourceProfileMissingParentAccount' => 'Le profil source n\'a pas son compte parent.',
'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',
'profiles.initializeServicesFailed' => 'Impossible dinitialiser les services de profil',
'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écouvrez',
'discover.switchProfile' => 'Changer de profil',
'discover.noContentAvailable' => 'Aucun contenu disponible',
'discover.addMediaToLibraries' => 'Ajoutez des médias à votre bibliothèque',
'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.playEpisode' => ({required Object season, required Object episode}) => 'S${season}E${episode}',
'discover.overview' => 'Aperçu',
'discover.cast' => 'Cast',
'discover.extras' => 'Bandes-annonces et Extras',
'discover.studio' => 'Studio',
'discover.rating' => 'Évaluation',
'discover.movie' => 'Film',
'discover.tvShow' => 'Show TV',
'discover.minutesLeft' => ({required Object minutes}) => '${minutes} min restantes',
'discover.moreLikeThis' => 'Plus de contenus similaires',
'errors.searchFailed' => ({required Object error}) => 'Recherche échouée: ${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.failedToLoad' => ({required Object context, required Object error}) => 'Échec du chargement ${context}: ${error}',
'errors.noClientAvailable' => 'Aucun client disponible',
'errors.authenticationFailed' => ({required Object error}) => 'Échec de l\'authentification: ${error}',
'errors.couldNotLaunchUrl' => 'Impossible de lancer l\'URL d\'authentification',
'errors.pleaseEnterToken' => 'Veuillez saisir un token',
'errors.invalidToken' => 'Token invalide',
'errors.failedToVerifyToken' => ({required Object error}) => 'Échec de la vérification du token: ${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}) => 'Vider les poubelles pour "${title}"...',
'libraries.trashEmptied' => ({required Object title}) => 'Poubelles vidées pour "${title}"',
'libraries.failedToEmptyTrash' => ({required Object error}) => 'Échec de la suppression des éléments supprimés: ${error}',
'libraries.analyzing' => ({required Object title}) => 'Analyse de "${title}"...',
'libraries.analysisStarted' => ({required Object title}) => 'L\'analyse a commencé 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.all' => 'Tout',
'libraries.clearAll' => 'Tout effacer',
'libraries.scanLibraryConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir lancer le scan de "${title}"?',
'libraries.analyzeLibraryConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir analyser "${title}"?',
'libraries.refreshMetadataConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir actualiser les métadonnées pour "${title}"?',
'libraries.emptyTrashConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir vider la corbeille pour "${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' => 'Show TV',
'libraries.groupings.seasons' => 'Saisons',
'libraries.groupings.episodes' => 'Épisodes',
'libraries.groupings.folders' => 'Dossiers',
'libraries.filterCategories.genre' => 'Genre',
'libraries.filterCategories.year' => 'Année',
'libraries.filterCategories.contentRating' => 'Classification',
'libraries.filterCategories.tag' => 'Tag',
'libraries.filterCategories.unwatched' => 'Non vus',
'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.lastPlayed' => 'Dernière lecture',
'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',
'about.title' => 'À propos',
'about.openSourceLicenses' => 'Licences Open Source',
'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.allServerConnectionsFailed' => 'Connexion impossible à tous les serveurs. Vérifiez votre réseau.',
'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 logs',
'logs.copyLogs' => 'Copier les logs',
'logs.uploadLogs' => 'Envoyer les logs',
'licenses.relatedPackages' => 'Package associés',
'licenses.license' => 'Licence',
'licenses.licenseNumber' => ({required Object number}) => 'Licence ${number}',
'licenses.licensesCount' => ({required Object count}) => '${count} licences',
'navigation.libraries' => 'Medias',
'navigation.downloads' => 'Téléch.',
'navigation.liveTv' => 'TV direct',
'liveTv.title' => 'TV en direct',
'liveTv.guide' => 'Guide',
'liveTv.noChannels' => 'Aucune chaîne disponible',
'liveTv.noDvr' => 'Aucun DVR configuré sur les serveurs',
'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' => 'Nuit tardive',
'liveTv.whatsOn' => 'En ce moment',
'liveTv.watchChannel' => 'Regarder la chaîne',
'liveTv.favorites' => 'Favoris',
'liveTv.reorderFavorites' => 'Réorganiser les favoris',
'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.recordings' => 'Enregistrements',
'liveTv.scheduledRecordings' => 'Programmés',
'liveTv.recordingRules' => 'Règles d\'enregistrement',
'liveTv.noScheduledRecordings' => 'Aucun enregistrement programmé',
'liveTv.noRecordingRules' => 'Aucune règle d\'enregistrement',
'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.loadingRecordings' => 'Chargement des enregistrements...',
'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.unknownLibrarySection' => 'Impossible de supprimer : section de bibliothèque inconnue',
'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.failedToLoadItems' => ({required Object error}) => 'Échec du chargement des éléments 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 de la suppression 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' => 'Entrer le nom de playlist',
'playlists.delete' => 'Supprimer la playlist',
'playlists.removeItem' => 'Retirer de la playlist',
'playlists.smartPlaylist' => 'Smart playlist',
'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}) => 'Êtes-vous sûr de vouloir 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.errorCreating' => 'Échec de la création de playlist',
'playlists.errorDeleting' => 'Échec de suppression de playlist',
'playlists.errorLoading' => 'Échec de chargement de playlists',
'playlists.errorAdding' => 'Échec d\'ajout dans la playlist',
'playlists.errorReordering' => 'Échec de réordonnacement d\'élément de playlist',
'playlists.errorRemoving' => 'Échec de suppression depuis la playlist',
'watchTogether.title' => 'Regarder ensemble',
'watchTogether.description' => 'Regardez du contenu en synchronisation avec vos amis et votre famille',
'watchTogether.createSession' => 'Créer une session',
'watchTogether.creating' => 'Création...',
'watchTogether.joinSession' => 'Rejoindre la session',
'watchTogether.joining' => 'Rejoindre...',
'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 d\'hébergement',
'watchTogether.inSession' => 'En session',
'watchTogether.sessionCode' => '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' => 'HOST',
'watchTogether.youAreHost' => 'Vous êtes l\'hôte',
'watchTogether.watchingWithOthers' => 'Regarder avec d\'autres personnes',
'watchTogether.endSession' => 'Fin de 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' => 'Fin',
'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 relay inaccessible. Un blocage ISP peut empêcher Watch Together.',
'watchTogether.reconnectingToHost' => 'Reconnexion à l\'hôte...',
'watchTogether.currentPlayback' => 'Lecture en cours',
'watchTogether.joinCurrentPlayback' => 'Rejoindre la lecture en cours',
'watchTogether.joinCurrentPlaybackDescription' => 'Revenez à ce 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 avancé',
'watchTogether.participantBuffering' => ({required Object name}) => '${name} met en mémoire tampon',
'watchTogether.waitingForParticipants' => 'En attente du chargement des autres...',
'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' => 'Show TV',
'downloads.movies' => 'Films',
'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 serveur : le fichier peut dépasser la limite de bitrate distant',
'downloads.episodesQueued' => ({required Object count}) => '${count} épisodes en attente de téléchargement',
'downloads.downloadDeleted' => 'Télécharger 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.howManyEpisodes' => 'Combien d\'épisodes ?',
'downloads.itemsQueued' => ({required Object count}) => '${count} éléments mis en file d\'attente',
'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',
'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 distant...',
'companionRemote.session.failedToCreate' => 'Échec du démarrage du serveur distant :',
'companionRemote.session.hostAddress' => 'Adresse de l\'hôte',
'companionRemote.session.connected' => 'Connecté',
'companionRemote.session.serverRunning' => 'Serveur distant actif',
'companionRemote.session.serverStopped' => 'Serveur distant arrêté',
'companionRemote.session.serverRunningDescription' => 'Les appareils mobiles de votre réseau peuvent se connecter à cette app',
'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 ordinateur et utilisez le même WiFi',
'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 entrer l\'adresse de l\'hôte',
'companionRemote.pairing.validationHostFormat' => 'Le format doit être IP:port (ex. 192.168.1.100:48632)',
'companionRemote.pairing.connectionTimedOut' => 'Connexion expirée. 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',
_ => null,
} ?? switch (path) {
'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 le bureau...',
'companionRemote.errors.noNetworkInterface' => 'Aucune interface réseau trouvée',
'companionRemote.errors.authenticationFailed' => 'Échec de lauthentification',
'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.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' => 'Superposition de performance',
'videoSettings.audioPassthrough' => 'Audio Pass-Through',
'videoSettings.audioNormalization' => 'Normaliser le volume',
'performanceOverlay.color' => 'Couleur',
'performanceOverlay.performance' => 'Performances',
'performanceOverlay.buffer' => 'Tampon',
'performanceOverlay.app' => 'App',
'performanceOverlay.decoder' => 'Décodeur',
'performanceOverlay.rawDecoder' => 'Décodeur brut',
'performanceOverlay.tunneling' => 'Tunneling',
'performanceOverlay.aspect' => 'Format',
'performanceOverlay.rotation' => 'Rotation',
'performanceOverlay.dvSource' => 'Source DV',
'performanceOverlay.dvPath' => 'Chemin DV',
'performanceOverlay.p7Conversion' => 'Conv. P7',
'performanceOverlay.sampleRate' => 'Fréquence',
'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 app',
'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' => 'Artwork',
'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' => 'Artwork mis à jour',
'metadataEdit.artworkUpdateFailed' => 'Échec de la mise à jour de l\'artwork',
'metadataEdit.noArtworkAvailable' => 'Aucun artwork disponible',
'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' => 'Affichés avec audio étranger',
'metadataEdit.alwaysEnabled' => 'Toujours activé',
'metadataEdit.tags' => 'Tags',
'metadataEdit.addTag' => 'Ajouter un tag',
'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 pouvez 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 un élément comme vu dans Plezy, il l\'est aussi sur Trakt.',
'trackers.title' => 'Trackers',
'trackers.hubSubtitle' => 'Synchronisez la progression de visionnage avec Trakt et d\'autres services.',
'trackers.notConnected' => 'Non connecté',
'trackers.connectedAs' => ({required Object username}) => 'Connecté en tant que @${username}',
'trackers.scrobble' => 'Suivre la progression automatiquement',
'trackers.scrobbleDescription' => 'Mettre à jour votre liste lorsque vous terminez un épisode ou un film.',
'trackers.disconnectConfirm' => ({required Object service}) => 'Déconnecter ${service} ?',
'trackers.disconnectConfirmBody' => ({required Object service}) => 'Plezy cessera de mettre à jour ${service}. Reconnectez à tout moment.',
'trackers.connectFailed' => ({required Object service}) => 'Échec de la connexion à ${service}. Réessayez.',
'trackers.services.mal' => 'MyAnimeList',
'trackers.services.anilist' => 'AniList',
'trackers.services.simkl' => 'Simkl',
'trackers.deviceCode.title' => ({required Object service}) => 'Activer Plezy sur ${service}',
'trackers.deviceCode.body' => ({required Object url}) => 'Rendez-vous sur ${url} et entrez ce code :',
'trackers.deviceCode.openToActivate' => ({required Object service}) => 'Ouvrir ${service} pour activer',
'trackers.deviceCode.waitingForAuthorization' => 'En attente d\'autorisation…',
'trackers.deviceCode.codeCopied' => 'Code copié',
'trackers.oauthProxy.title' => ({required Object service}) => 'Se connecter à ${service}',
'trackers.oauthProxy.body' => 'Scannez ce code QR ou ouvrez l\'URL sur n\'importe quel appareil.',
'trackers.oauthProxy.openToSignIn' => ({required Object service}) => 'Ouvrir ${service} pour se connecter',
'trackers.oauthProxy.urlCopied' => 'URL copiée',
'trackers.libraryFilter.title' => 'Filtre de bibliothèques',
'trackers.libraryFilter.subtitleAllSyncing' => 'Synchronisation de toutes les bibliothèques',
'trackers.libraryFilter.subtitleNoneSyncing' => 'Aucune synchronisation',
'trackers.libraryFilter.subtitleBlocked' => ({required Object count}) => '${count} bloquées',
'trackers.libraryFilter.subtitleAllowed' => ({required Object count}) => '${count} autorisées',
'trackers.libraryFilter.mode' => 'Mode de filtrage',
'trackers.libraryFilter.modeBlacklist' => 'Liste noire',
'trackers.libraryFilter.modeWhitelist' => 'Liste blanche',
'trackers.libraryFilter.modeHintBlacklist' => 'Synchroniser toutes les bibliothèques sauf celles cochées ci-dessous.',
'trackers.libraryFilter.modeHintWhitelist' => 'Synchroniser uniquement les bibliothèques cochées ci-dessous.',
'trackers.libraryFilter.libraries' => 'Bibliothèques',
'trackers.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.duplicatePlexAccount' => 'Déjà connecté à Plex. Déconnectez-vous pour changer de compte.',
'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. Lié à ${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,
};
}
}