fix(i18n): enforce complete localized coverage

This commit is contained in:
edde746
2026-07-12 17:31:14 +02:00
parent 754c54761a
commit fe8d405a56
47 changed files with 1944 additions and 2527 deletions
+60 -100
View File
@@ -53,7 +53,6 @@ class TranslationsFr extends Translations with BaseTranslations<AppLocale, Trans
@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);
@@ -107,7 +106,6 @@ class _TranslationsAuthFr extends TranslationsAuthEn {
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';
@@ -167,10 +165,8 @@ class _TranslationsCommonFr extends TranslationsCommonEn {
@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...';
@@ -271,6 +267,12 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn {
@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 visualEffects => 'Effets visuels';
@override String get visualEffectsAuto => 'Automatique';
@override String get visualEffectsAutoDescription => 'Réduire automatiquement les effets sur les appareils peu puissants';
@override String get visualEffectsFull => 'Complets';
@override String get visualEffectsReduced => 'Réduits';
@override String get visualEffectsReducedDescription => 'Moins danimations et dillustrations de plus faible résolution';
@override String get hideSpoilers => 'Masquer les spoilers des épisodes non vus';
@override String get hideSpoilersDescription => 'Flouter les miniatures et descriptions des épisodes non vus';
@override String get playerBackend => 'Moteur de lecture';
@@ -283,7 +285,7 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn {
@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 musicQualityTitle => 'Qualité de la musique';
@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';
@@ -377,10 +379,9 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn {
@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 services => 'Services';
@override String get servicesDescription => 'Connectez Trakt, MyAnimeList, Seerr et plus';
@override String get manageLibrariesDescription => 'Réorganiser et masquer les bibliothèques';
@override String get companionRemoteServer => 'Serveur de télécommande';
@override String get companionRemoteServerDescription => 'Autoriser les appareils mobiles de votre réseau à contrôler cette application';
@override String get autoPip => 'Image dans l\'image automatique';
@@ -443,7 +444,6 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn {
@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';
@@ -455,13 +455,6 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn {
@override String get subtitlesAndConfig => 'Sous-titres et configuration';
@override String get seekAndTiming => 'Recherche et minutage';
@override String get behavior => 'Comportement';
@override String get manageLibrariesDescription => 'Réorganiser et masquer les bibliothèques';
@override String get visualEffects => 'Effets visuels';
@override String get visualEffectsAuto => 'Automatique';
@override String get visualEffectsAutoDescription => 'Réduire automatiquement les effets sur les appareils peu puissants';
@override String get visualEffectsFull => 'Complets';
@override String get visualEffectsReduced => 'Réduits';
@override String get visualEffectsReducedDescription => 'Moins danimations et dillustrations de plus faible résolution';
}
// Path: search
@@ -559,14 +552,11 @@ class _TranslationsRateSheetFr extends TranslationsRateSheetEn {
// 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 favorite => 'Favori';
@override String get favorited => 'Ajouté aux favoris';
@override String get saved => 'Enregistré';
@override String get notAvailable => 'Aucune correspondance trouvée';
@override String get noConnectedServices => 'Connectez un service dans les Réglages pour noter ici.';
@override String get favorite => 'Favori';
@override String get favorited => 'Ajouté aux favoris';
}
// Path: accessibility
@@ -584,6 +574,14 @@ class _TranslationsAccessibilityFr extends TranslationsAccessibilityEn {
@override String mediaCardPartiallyWatched({required Object percent}) => '${percent} pourcentage visionné';
@override String get mediaCardUnwatched => 'non visionné';
@override String get tapToPlay => 'Appuyez pour lire';
@override String get decrease => 'Diminuer';
@override String get increase => 'Augmenter';
@override String decreaseValue({required Object label}) => 'Diminuer ${label}';
@override String increaseValue({required Object label}) => 'Augmenter ${label}';
@override String get hue => 'Teinte';
@override String get saturation => 'Saturation';
@override String get brightness => 'Luminosité';
@override String get hexColor => 'Couleur hexadécimale';
}
// Path: tooltips
@@ -643,13 +641,11 @@ class _TranslationsVideoControlsFr extends TranslationsVideoControlsEn {
@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';
@@ -685,19 +681,6 @@ class _TranslationsVideoControlsFr extends TranslationsVideoControlsEn {
@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);
@@ -873,7 +856,6 @@ class _TranslationsProfilesFr extends TranslationsProfilesEn {
@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
@@ -902,7 +884,6 @@ class _TranslationsDiscoverFr extends TranslationsDiscoverEn {
// 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';
@@ -938,8 +919,6 @@ class _TranslationsErrorsFr extends TranslationsErrorsEn {
@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}';
@@ -973,6 +952,8 @@ class _TranslationsLibrariesFr extends TranslationsLibrariesEn {
@override String get allLibrariesHidden => 'Toutes les bibliothèques sont masquées';
@override String hiddenLibrariesCount({required Object count}) => 'Bibliothèques masquées (${count})';
@override String get thisLibraryIsEmpty => 'Cette bibliothèque est vide';
@override String get noItemsMatchFilters => 'Aucun élément ne correspond aux filtres actifs';
@override String get resetFilters => 'Réinitialiser les filtres';
@override String get all => 'Tout';
@override String get clearAll => 'Tout effacer';
@override String scanLibraryConfirm({required Object title}) => 'Êtes-vous sûr de vouloir lancer le scan de "${title}"?';
@@ -998,8 +979,6 @@ class _TranslationsLibrariesFr extends TranslationsLibrariesEn {
@override late final _TranslationsLibrariesGroupingsFr groupings = _TranslationsLibrariesGroupingsFr._(_root);
@override late final _TranslationsLibrariesFilterCategoriesFr filterCategories = _TranslationsLibrariesFilterCategoriesFr._(_root);
@override late final _TranslationsLibrariesSortLabelsFr sortLabels = _TranslationsLibrariesSortLabelsFr._(_root);
@override String get noItemsMatchFilters => 'Aucun élément ne correspond aux filtres actifs';
@override String get resetFilters => 'Réinitialiser les filtres';
}
// Path: about
@@ -1023,7 +1002,6 @@ class _TranslationsServerSelectionFr extends TranslationsServerSelectionEn {
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}';
}
@@ -1102,7 +1080,6 @@ class _TranslationsExploreFr extends TranslationsExploreEn {
@override String get watchlistUpdateFailed => 'Impossible de mettre à jour la liste de suivi';
@override String get notInLibrary => 'Absent de votre bibliothèque';
@override String get inTheseLibraries => 'Dans ces bibliothèques';
@override String availableOn({required Object server}) => 'Disponible sur ${server}';
@override String get checkingLibrary => 'Vérification de votre bibliothèque...';
@override String get emptyTitle => 'Rien ici pour l\'instant';
@override String emptyMessage({required Object source}) => 'Les rangées de ${source} apparaîtront ici une fois qu\'elles auront du contenu.';
@@ -1123,6 +1100,8 @@ class _TranslationsLiveTvFr extends TranslationsLiveTvEn {
@override String get guide => 'Guide';
@override String get noChannels => 'Aucune chaîne disponible';
@override String get noDvr => 'Aucun DVR configuré sur les serveurs';
@override String get serverUnavailable => 'Le serveur de TV en direct nest pas disponible.';
@override String get serverNotConnected => 'Le serveur de TV en direct nest pas connecté.';
@override String get noPrograms => 'Aucune donnée de programme disponible';
@override String get liveStreamFailed => 'Échec du direct';
@override String get unknownProgram => 'Programme inconnu';
@@ -1158,7 +1137,6 @@ class _TranslationsLiveTvFr extends TranslationsLiveTvEn {
@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 ?';
@@ -1175,7 +1153,6 @@ class _TranslationsLiveTvFr extends TranslationsLiveTvEn {
@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';
@@ -1196,7 +1173,6 @@ class _TranslationsCollectionsFr extends TranslationsCollectionsEn {
@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';
@@ -1243,6 +1219,7 @@ class _TranslationsPlaylistsFr extends TranslationsPlaylistsEn {
@override String get itemAdded => 'Ajouté à la playlist';
@override String get itemRemoved => 'Retiré de la playlist';
@override String get selectPlaylist => 'Sélectionner une playlist';
@override String get searchPlaylists => 'Rechercher des playlists...';
@override String get errorCreating => 'Échec de la création de playlist';
@override String get errorDeleting => 'Échec de suppression de playlist';
@override String get errorLoading => 'Échec de chargement de playlists';
@@ -1346,15 +1323,15 @@ class _TranslationsWatchTogetherFr extends TranslationsWatchTogetherEn {
@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 participantNeedsUpdate({required Object name}) => '${name} utilise une ancienne version de lapp — synchronisation indisponible';
@override String resumingWithout({required Object name}) => 'Reprise sans ${name}';
@override String get waitingForParticipants => 'En attente du chargement des autres...';
@override String waitingForName({required Object name}) => 'En attente de ${name}...';
@override String get recentRooms => 'Salons récents';
@override String get renameRoom => 'Renommer le salon';
@override String get removeRoom => 'Supprimer';
@override String get guestSwitchUnavailable => 'Impossible de changer — serveur indisponible pour la synchronisation';
@override String get guestSwitchFailed => 'Impossible de changer — contenu introuvable sur ce serveur';
@override String participantNeedsUpdate({required Object name}) => '${name} utilise une ancienne version de lapp — synchronisation indisponible';
@override String resumingWithout({required Object name}) => 'Reprise sans ${name}';
@override String waitingForName({required Object name}) => 'En attente de ${name}...';
}
// Path: downloads
@@ -1406,7 +1383,6 @@ class _TranslationsDownloadsFr extends TranslationsDownloadsEn {
@override String get customAmount => 'Quantité personnalisée...';
@override String get includeSpecials => 'Inclure les spéciaux';
@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';
@@ -1780,7 +1756,6 @@ class _TranslationsAddServerFr extends TranslationsAddServerEn {
@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';
@@ -1906,7 +1881,6 @@ class _TranslationsLibrariesSortLabelsFr extends TranslationsLibrariesSortLabels
@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';
@@ -1965,7 +1939,6 @@ class _TranslationsCompanionRemoteSessionFr extends TranslationsCompanionRemoteS
// 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';
@@ -2047,6 +2020,8 @@ class _TranslationsCompanionRemoteErrorsFr extends TranslationsCompanionRemoteEr
// Translations
@override String get noNetworkInterface => 'Aucune interface réseau trouvée';
@override String get authenticationFailed => 'Échec de lauthentification';
@override String serverStartFailed({required Object error}) => 'Impossible de démarrer le serveur distant : ${error}';
@override String commandFailed({required Object error}) => 'Impossible denvoyer la commande à distance : ${error}';
@override String get joinTimedOut => 'Délai dépassé lors de la connexion à la session';
@override String get failedToConnectAnyAddress => 'Impossible de se connecter à une adresse';
@override String connectionLostAfterAttempts({required Object attempts}) => 'Connexion perdue après ${attempts} tentatives';
@@ -2123,7 +2098,6 @@ 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',
@@ -2174,10 +2148,8 @@ extension on TranslationsFr {
'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...',
@@ -2251,6 +2223,12 @@ extension on TranslationsFr {
'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.visualEffects' => 'Effets visuels',
'settings.visualEffectsAuto' => 'Automatique',
'settings.visualEffectsAutoDescription' => 'Réduire automatiquement les effets sur les appareils peu puissants',
'settings.visualEffectsFull' => 'Complets',
'settings.visualEffectsReduced' => 'Réduits',
'settings.visualEffectsReducedDescription' => 'Moins danimations et dillustrations de plus faible résolution',
'settings.hideSpoilers' => 'Masquer les spoilers des épisodes non vus',
'settings.hideSpoilersDescription' => 'Flouter les miniatures et descriptions des épisodes non vus',
'settings.playerBackend' => 'Moteur de lecture',
@@ -2263,7 +2241,7 @@ extension on TranslationsFr {
'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.musicQualityTitle' => 'Qualité de la musique',
'settings.subtitleStyling' => 'Stylisation des sous-titres',
'settings.subtitleStylingDescription' => 'Personnaliser l\'apparence des sous-titres',
'settings.smallSkipDuration' => 'Durée du petit saut',
@@ -2357,10 +2335,9 @@ extension on TranslationsFr {
'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.services' => 'Services',
'settings.servicesDescription' => 'Connectez Trakt, MyAnimeList, Seerr et plus',
'settings.manageLibrariesDescription' => 'Réorganiser et masquer les bibliothèques',
'settings.companionRemoteServer' => 'Serveur de télécommande',
'settings.companionRemoteServerDescription' => 'Autoriser les appareils mobiles de votre réseau à contrôler cette application',
'settings.autoPip' => 'Image dans l\'image automatique',
@@ -2423,7 +2400,6 @@ extension on TranslationsFr {
'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',
@@ -2435,13 +2411,6 @@ extension on TranslationsFr {
'settings.subtitlesAndConfig' => 'Sous-titres et configuration',
'settings.seekAndTiming' => 'Recherche et minutage',
'settings.behavior' => 'Comportement',
'settings.manageLibrariesDescription' => 'Réorganiser et masquer les bibliothèques',
'settings.visualEffects' => 'Effets visuels',
'settings.visualEffectsAuto' => 'Automatique',
'settings.visualEffectsAutoDescription' => 'Réduire automatiquement les effets sur les appareils peu puissants',
'settings.visualEffectsFull' => 'Complets',
'settings.visualEffectsReduced' => 'Réduits',
'settings.visualEffectsReducedDescription' => 'Moins danimations et dillustrations de plus faible résolution',
'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',
@@ -2518,14 +2487,11 @@ extension on TranslationsFr {
'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.favorite' => 'Favori',
'rateSheet.favorited' => 'Ajouté aux favoris',
'rateSheet.saved' => 'Enregistré',
'rateSheet.notAvailable' => 'Aucune correspondance trouvée',
'rateSheet.noConnectedServices' => 'Connectez un service dans les Réglages pour noter ici.',
'rateSheet.favorite' => 'Favori',
'rateSheet.favorited' => 'Ajouté aux favoris',
'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}',
@@ -2534,6 +2500,14 @@ extension on TranslationsFr {
'accessibility.mediaCardPartiallyWatched' => ({required Object percent}) => '${percent} pourcentage visionné',
'accessibility.mediaCardUnwatched' => 'non visionné',
'accessibility.tapToPlay' => 'Appuyez pour lire',
'accessibility.decrease' => 'Diminuer',
'accessibility.increase' => 'Augmenter',
'accessibility.decreaseValue' => ({required Object label}) => 'Diminuer ${label}',
'accessibility.increaseValue' => ({required Object label}) => 'Augmenter ${label}',
'accessibility.hue' => 'Teinte',
'accessibility.saturation' => 'Saturation',
'accessibility.brightness' => 'Luminosité',
'accessibility.hexColor' => 'Couleur hexadécimale',
'tooltips.shufflePlay' => 'Lecture aléatoire',
'tooltips.playTrailer' => 'Lire la bande-annonce',
'tooltips.markAsWatched' => 'Marqué comme vu',
@@ -2575,13 +2549,11 @@ extension on TranslationsFr {
'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',
@@ -2621,10 +2593,6 @@ extension on TranslationsFr {
'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)',
@@ -2634,8 +2602,6 @@ extension on TranslationsFr {
'messages.errorLoading' => ({required Object error}) => 'Erreur: ${error}',
'messages.streamInterrupted' => 'La lecture a été interrompue. Appuyez sur Lecture ou avancez pour réessayer.',
'messages.fileInfoNotAvailable' => 'Informations sur le fichier non disponibles',
_ => null,
} ?? switch (path) {
'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',
@@ -2643,6 +2609,8 @@ extension on TranslationsFr {
'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',
_ => null,
} ?? switch (path) {
'messages.logsCleared' => 'Logs effacés',
'messages.logsCopied' => 'Logs copiés dans le presse-papier',
'messages.noLogsAvailable' => 'Aucun log disponible',
@@ -2759,7 +2727,6 @@ extension on TranslationsFr {
'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',
@@ -2770,7 +2737,6 @@ extension on TranslationsFr {
'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',
@@ -2797,8 +2763,6 @@ extension on TranslationsFr {
'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}',
@@ -2823,6 +2787,8 @@ extension on TranslationsFr {
'libraries.allLibrariesHidden' => 'Toutes les bibliothèques sont masquées',
'libraries.hiddenLibrariesCount' => ({required Object count}) => 'Bibliothèques masquées (${count})',
'libraries.thisLibraryIsEmpty' => 'Cette bibliothèque est vide',
'libraries.noItemsMatchFilters' => 'Aucun élément ne correspond aux filtres actifs',
'libraries.resetFilters' => 'Réinitialiser les filtres',
'libraries.all' => 'Tout',
'libraries.clearAll' => 'Tout effacer',
'libraries.scanLibraryConfirm' => ({required Object title}) => 'Êtes-vous sûr de vouloir lancer le scan de "${title}"?',
@@ -2871,7 +2837,6 @@ extension on TranslationsFr {
'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',
@@ -2885,14 +2850,11 @@ extension on TranslationsFr {
'libraries.sortLabels.dateShared' => 'Date de partage',
'libraries.sortLabels.latestEpisodeAirDate' => 'Dernière date de diffusion',
'libraries.sortLabels.lastEpisodeDateAdded' => 'Date d\'ajout du dernier épisode',
'libraries.noItemsMatchFilters' => 'Aucun élément ne correspond aux filtres actifs',
'libraries.resetFilters' => 'Réinitialiser les filtres',
'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',
@@ -2938,7 +2900,6 @@ extension on TranslationsFr {
'explore.watchlistUpdateFailed' => 'Impossible de mettre à jour la liste de suivi',
'explore.notInLibrary' => 'Absent de votre bibliothèque',
'explore.inTheseLibraries' => 'Dans ces bibliothèques',
'explore.availableOn' => ({required Object server}) => 'Disponible sur ${server}',
'explore.checkingLibrary' => 'Vérification de votre bibliothèque...',
'explore.emptyTitle' => 'Rien ici pour l\'instant',
'explore.emptyMessage' => ({required Object source}) => 'Les rangées de ${source} apparaîtront ici une fois qu\'elles auront du contenu.',
@@ -2950,6 +2911,8 @@ extension on TranslationsFr {
'liveTv.guide' => 'Guide',
'liveTv.noChannels' => 'Aucune chaîne disponible',
'liveTv.noDvr' => 'Aucun DVR configuré sur les serveurs',
'liveTv.serverUnavailable' => 'Le serveur de TV en direct nest pas disponible.',
'liveTv.serverNotConnected' => 'Le serveur de TV en direct nest pas connecté.',
'liveTv.noPrograms' => 'Aucune donnée de programme disponible',
'liveTv.liveStreamFailed' => 'Échec du direct',
'liveTv.unknownProgram' => 'Programme inconnu',
@@ -2985,7 +2948,6 @@ extension on TranslationsFr {
'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 ?',
@@ -3002,7 +2964,6 @@ extension on TranslationsFr {
'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',
@@ -3014,7 +2975,6 @@ extension on TranslationsFr {
'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',
@@ -3052,6 +3012,7 @@ extension on TranslationsFr {
'playlists.itemAdded' => 'Ajouté à la playlist',
'playlists.itemRemoved' => 'Retiré de la playlist',
'playlists.selectPlaylist' => 'Sélectionner une playlist',
'playlists.searchPlaylists' => 'Rechercher des playlists...',
'playlists.errorCreating' => 'Échec de la création de playlist',
'playlists.errorDeleting' => 'Échec de suppression de playlist',
'playlists.errorLoading' => 'Échec de chargement de playlists',
@@ -3134,22 +3095,20 @@ extension on TranslationsFr {
'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.participantNeedsUpdate' => ({required Object name}) => '${name} utilise une ancienne version de lapp — synchronisation indisponible',
'watchTogether.resumingWithout' => ({required Object name}) => 'Reprise sans ${name}',
'watchTogether.waitingForParticipants' => 'En attente du chargement des autres...',
'watchTogether.waitingForName' => ({required Object name}) => 'En attente de ${name}...',
'watchTogether.recentRooms' => 'Salons récents',
'watchTogether.renameRoom' => 'Renommer le salon',
'watchTogether.removeRoom' => 'Supprimer',
'watchTogether.guestSwitchUnavailable' => 'Impossible de changer — serveur indisponible pour la synchronisation',
'watchTogether.guestSwitchFailed' => 'Impossible de changer — contenu introuvable sur ce serveur',
'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} utilise une ancienne version de lapp — synchronisation indisponible',
'watchTogether.resumingWithout' => ({required Object name}) => 'Reprise sans ${name}',
'watchTogether.waitingForName' => ({required Object name}) => 'En attente de ${name}...',
'downloads.title' => 'Téléchargements',
'downloads.manage' => 'Gérer',
'downloads.tvShows' => 'Show TV',
'downloads.movies' => 'Films',
'downloads.music' => 'Musique',
_ => null,
} ?? switch (path) {
'downloads.tracksQueued' => ({required Object count}) => '${count} titres en file d\'attente de téléchargement',
'downloads.noDownloads' => 'Aucun téléchargement pour le moment',
'downloads.noDownloadsDescription' => 'Le contenu téléchargé apparaîtra ici pour être consulté hors ligne.',
@@ -3164,6 +3123,8 @@ extension on TranslationsFr {
'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 ?',
_ => null,
} ?? switch (path) {
'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é',
@@ -3187,7 +3148,6 @@ extension on TranslationsFr {
'downloads.customAmount' => 'Quantité personnalisée...',
'downloads.includeSpecials' => 'Inclure les spéciaux',
'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',
@@ -3231,7 +3191,6 @@ extension on TranslationsFr {
'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',
@@ -3286,6 +3245,8 @@ extension on TranslationsFr {
'companionRemote.remote.searchHint' => 'Rechercher sur le bureau...',
'companionRemote.errors.noNetworkInterface' => 'Aucune interface réseau trouvée',
'companionRemote.errors.authenticationFailed' => 'Échec de lauthentification',
'companionRemote.errors.serverStartFailed' => ({required Object error}) => 'Impossible de démarrer le serveur distant : ${error}',
'companionRemote.errors.commandFailed' => ({required Object error}) => 'Impossible denvoyer la commande à distance : ${error}',
'companionRemote.errors.joinTimedOut' => 'Délai dépassé lors de la connexion à la session',
'companionRemote.errors.failedToConnectAnyAddress' => 'Impossible de se connecter à une adresse',
'companionRemote.errors.connectionLostAfterAttempts' => ({required Object attempts}) => 'Connexion perdue après ${attempts} tentatives',
@@ -3530,7 +3491,6 @@ extension on TranslationsFr {
'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',