+
+- Not set (user decides)
+- Set default:
++ Non défini (choix de l’utilisateur)
++ Définir par défaut :
+
+
+
--
+@@ -961,155 +961,155 @@
+
+
Nav Buttons
+
+- Show Shuffle Button
++ Afficher le bouton de lecture aléatoire
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Show Genres Button
++ Afficher le bouton des genres
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Show Favorites Button
++ Afficher le bouton des favoris
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Show Libraries in Toolbar
++ Afficher les bibliothèques dans la barre d’outils
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Always Expand Navbar Labels
++ Toujours Expand Navbar Labels
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Enable Folder View
++ Activer la vue dossiers
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Show Seerr Button
++ Afficher le bouton Seerr
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+-
Home Row Display
++
Affichage des rangées d’accueil
+
+- Row Type
++ Type de rangée
+
+- Not set (user decides)
+- Classic
+- Modern
++ Non défini (choix de l’utilisateur)
++ Classique
++ Moderne
+
+
+
+
+
+- Display Series Thumbnails
++ Afficher les miniatures des séries
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Expanded Home Rows
++ Rangées d’accueil développées
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Home Row Info Overlay
++ Informations superposées des rangées d’accueil
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Home Row Card Display Size
++ Taille des cartes des rangées d’accueil
+
+- Not set (user decides)
+- Small
+- Medium
+- Large
+- Extra Large
++ Non défini (choix de l’utilisateur)
++ Petite
++ Moyenne
++ Grande
++ Très grande
+
+
+
+- Continue Watching Image Type
++ Type d’image de « Continuer à regarder »
+
+- Not set (user decides)
+- Poster
+- Backdrop
+- Thumbnail
+- Banner
++ Non défini (choix de l’utilisateur)
++ Affiche
++ Arrière-plan
++ Miniature
++ Bannière
+
+
+
+-
Default Home Layout
+-
Choose active default home sections and their order. This builder configures layout and custom dynamic rows.
++
Disposition d’accueil par défaut
++
Choisissez les sections d’accueil actives par défaut et leur ordre. Cet outil configure la disposition et les rangées dynamiques personnalisées.
+
+
+-
Current Layout
++
Disposition actuelle
+
+
+
+-
Available Rows
++
Rangées disponibles
+
+-
++
+
+
+
+@@ -1117,192 +1117,192 @@
+
+
+
+-
General
++
Général
+
+- Enable Multi-Server Libraries
++ Activer les bibliothèques multi-serveurs
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+
+-
Library View
++
Vue des bibliothèques
+
+- Group Items into Collections
++ Regrouper les éléments en collections
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Show Media Details
++ Afficher les détails des médias
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Use Detailed Subheadings
++ Utiliser des sous-titres détaillés
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Hide Backdrops in Libraries
++ Masquer les arrière-plans dans les bibliothèques
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+
+
+
+-
Video Playback
++
Lecture vidéo
+
+
+
+- Skip Back Length
++ Durée du saut vers l’arrière
+
+- Not set (user decides)
+- 5 seconds
+- 10 seconds
+- 15 seconds
+- 30 seconds
++ Non défini (choix de l’utilisateur)
++ 5 secondes
++ 10 secondes
++ 15 secondes
++ 30 secondes
+
+
+
+- Skip Forward Length
++ Durée du saut vers l’avant
+
+- Not set (user decides)
+- 5 seconds
+- 10 seconds
+- 15 seconds
+- 30 seconds
++ Non défini (choix de l’utilisateur)
++ 5 secondes
++ 10 secondes
++ 15 secondes
++ 30 secondes
+
+
+
+-
Audio Playback
++
Lecture audio
+
+- Default Audio Language
++ Langue audio par défaut
+
+
+
+- Prefer Default Audio Track
++ Préférer la piste audio par défaut
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Prefer Audio Description
++ Préférer l’audiodescription
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+-
Subtitle Preferences
++
Préférences des sous-titres
+
+- Subtitle Mode
++ Mode des sous-titres
+
+- Not set (user decides)
+- Flagged
+- Always
+- Foreign
+- Forced
+- None
++ Non défini (choix de l’utilisateur)
++ Signalés
++ Toujours
++ Étrangers
++ Forcé
++ Aucun
+
+
+
+- Default Subtitle Language
++ Langue des sous-titres par défaut
+
+
+
+- Prefer SDH Subtitles
++ Préférer les sous-titres SDH
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+
Automation & Queue
+
+- Cinema Mode
++ Mode cinéma
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Autoplay Next Episode
++ Lecture automatique de l’épisode suivant
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Next Up Timeout
++ Délai de « À suivre »
+
+- Not set (user decides)
+- 5 seconds
+- 7 seconds
+- 10 seconds
+- 15 seconds
+- 30 seconds
++ Non défini (choix de l’utilisateur)
++ 5 secondes
++ 7 secondes
++ 10 secondes
++ 15 secondes
++ 30 secondes
+
+
+
+- Still Watching Prompt
++ Invite « Vous regardez toujours »
+
+- Not set (user decides)
+- Off
+- After 2 episodes
+- After 3 episodes
+- After 5 episodes
+- After 8 episodes
++ Non défini (choix de l’utilisateur)
++ Désactivé
++ Après 2 épisodes
++ Après 3 épisodes
++ Après 5 épisodes
++ Après 8 épisodes
+
+
+
+@@ -1311,30 +1311,30 @@
+
+
Media Bar
+
+- Media Bar Style
++ Style de la barre multimédia
+
+- Not set (user decides)
++ Non défini (choix de l’utilisateur)
+ Moonfin
+ MakD
+- Bookshelf
+- Gallery
+- Banner
+- Off
++ Bibliothèque de livres
++ Galerie
++ Bannière
++ Désactivé
+
+
+
+- Content Type
++ Type de contenu
+
+- Not set (user decides)
+- Movies and TV Shows
+- Movies Only
+- TV Shows Only
++ Non défini (choix de l’utilisateur)
++ Films et séries
++ Films uniquement
++ Séries uniquement
+
+
+
+ Item Count
+
+- Not set (user decides)
++ Non défini (choix de l’utilisateur)
+ 5
+ 10
+ 15
+@@ -1344,40 +1344,40 @@
+
+
+
+- Media Bar Source
++ Source de la barre multimédia
+
+- Not set (user decides)
+- Library (Random)
+- Collections / Playlists
++ Non défini (choix de l’utilisateur)
++ Bibliothèque (aléatoire)
++ Collections / playlists
+
+
+
+ Auto Advance
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+ Auto Advance Interval
+
+- Not set (user decides)
+- 5 Seconds
+- 10 Seconds
+- 15 Seconds
+- 30 Seconds
++ Non défini (choix de l’utilisateur)
++ 5 secondes
++ 10 secondes
++ 15 secondes
++ 30 secondes
+
+
+
+
+@@ -1385,139 +1385,139 @@
+
+
Local Previews
+
+- Trailer Preview
++ Aperçu des bandes-annonces
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Trailer Audio
++ Audio des bandes-annonces
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+
+ Media Preview
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Preview Audio
++ Audio d’aperçu
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+
+
Seasonal Effects
+
+ Seasonal Effects
+
+- Not set (user decides)
+- None
++ Non défini (choix de l’utilisateur)
++ Aucun
+ Snow
+ Fireworks
+ Confetti
+- Falling Leaves
++ Feuilles tombantes
+
+
+
+-
Theme Music
++
Musique du thème
+
+- Theme Music
++ Musique du thème
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+
+- Play Theme Music on Home Rows
++ Lire la musique thématique dans les rangées d’accueil
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Loop Theme Music
++ Lire en boucle la musique du thème
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+
+-
++
+
+-
Metadata & Ratings
++
Métadonnées et notes
+
+
+
+- MDBList Ratings
++ Notes MDBList
+
+-
Enable MDBList ratings by default (requires server-wide or user API key).
++
Activer par défaut les notes MDBList (nécessite une clé API globale au serveur ou une clé API utilisateur).
+
+
+
+
+- TMDB Episode Ratings
++ Notes des épisodes TMDB
+
+-
Enable TMDB episode ratings by default (requires server-wide or user API key).
++
Activer par défaut les notes des épisodes TMDB (nécessite une clé API globale au serveur ou une clé API utilisateur).
+
+
+- Show MDBList Rating Badges
++ Afficher les badges de notes MDBList
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+- Show Rating Labels
++ Afficher les libellés des notes
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+
+@@ -1525,14 +1525,14 @@
+
+ Seerr Block NSFW
+
+- Not set (user decides)
+- Yes
+- No
++ Non défini (choix de l’utilisateur)
++ Oui
++ Non
+
+
+
+
+@@ -1540,28 +1540,28 @@
+
+
+
+-
Uploaded Themes
++
Thèmes importés
+
+- Upload theme editor JSON exports so Moonfin clients can download and apply them.
+- Uploaded themes are synced to Mobile-Desktop, tvOS, and Smart-TV through plugin sync.
++ Importez les exports JSON de l’éditeur de thèmes afin que les clients Moonfin puissent les télécharger et les appliquer.
++ Les thèmes importés sont synchronisés vers Mobile-Desktop, tvOS et Smart-TV grâce à la synchronisation du plugin.
+
+
+- Validation: The server validates theme schema and field ranges on upload.
+- Fix any listed field-path errors in the theme editor, then upload again.
++ Validation : Le serveur valide le schéma du thème et les plages de valeurs lors de l’importation.
++ Corrigez les erreurs de chemin de champ indiquées dans l’éditeur de thèmes, puis importez à nouveau.
+
+
+
+
+- Choose JSON File
++ Choisir un fichier JSON
+
+- No file selected
++ Aucun fichier sélectionné
+
+- Upload Theme
++ Importer un thème
+
+
+
+
+
+@@ -1569,31 +1569,31 @@
+
+
+
+-
Apply Defaults To Users
++
Appliquer les valeurs par défaut aux utilisateurs
+
+- New users and any setting a user hasn't customized already use the defaults above automatically once you Save.
+- Use these actions to also push the defaults onto users' existing settings. Save your changes first.
++ Les nouveaux utilisateurs et tout réglage non personnalisé utilisent automatiquement les valeurs par défaut ci-dessus après l’enregistrement.
++ Utilisez ces actions pour appliquer également les valeurs par défaut aux réglages existants des utilisateurs. Enregistrez d’abord vos modifications.
+
+
+
+
+
+- Overwrite each user's existing settings (full reset)
++ Remplacer les réglages existants de chaque utilisateur (réinitialisation complète)
+
+
+- Destructive. Erases every user's current settings (global and any desktop/mobile/TV overrides)
+- and replaces them with a single global profile equal to the defaults. Also creates profiles for
+- users who never customized and removes settings files for users that no longer exist on the server.
+- When unchecked, the defaults are merged in without removing users' personal customizations.
++ Destructif. Efface les réglages actuels de chaque utilisateur (réglages globaux et remplacements ordinateur/mobile/TV)
++ puis les remplace par un profil global correspondant aux valeurs par défaut. Crée également des profils pour
++ les utilisateurs n’ayant jamais personnalisé leurs réglages et supprime les fichiers des utilisateurs qui n’existent plus sur le serveur.
++ Si cette option est désactivée, les valeurs par défaut sont fusionnées sans supprimer les personnalisations personnelles des utilisateurs.
+
+
+
+- Apply Defaults To All Users Now
++ Appliquer maintenant à tous les utilisateurs
+
+
+
+
+- Or apply the defaults to a single user:
++ Ou appliquez les valeurs par défaut à un seul utilisateur :
+
+
+
User
+@@ -1602,27 +1602,27 @@
+
+
+
+- Overwrite this user's existing settings (full reset)
++ Remplacer les réglages existants de cet utilisateur (réinitialisation complète)
+
+
+
+- Apply To Selected User
++ Appliquer à l’utilisateur sélectionné
+
+
+
+
+
+-
Broadcast Message
++
Message diffusé
+
+- Send a live message to all currently connected Moonfin clients.
+- This message is not saved and only appears for users with an active connection.
++ Envoyer un message en direct à tous les clients Moonfin actuellement connectés.
++ Ce message n’est pas enregistré et n’apparaît qu’aux utilisateurs disposant d’une connexion active.
+
+
+ Message
+-
++
+
+
+- Send Message
++ Envoyer le message
+
+
+
+@@ -1630,26 +1630,26 @@
+
+
+
+-
Web Plugin Status
++
État du plugin Web
+
+-
Moonfin uses the
++
Moonfin utilise le
+ File Transformation
+- plugin to inject a header button in Jellyfin Web.
++ plugin pour ajouter un bouton dans l’en-tête de Jellyfin Web.
+
+
+- What it does: the injected button opens the Flutter app at /Moonfin/Web/.
++ Fonctionnement : le bouton ajouté ouvre l’application Flutter à /Moonfin/Web/.
+
+
+ Setup:
+
+
+- Install the File Transformation plugin (add https://www.iamparadox.dev/jellyfin/plugins/manifest.json to your plugin repositories)
++ Installez le plugin File Transformations)
+ Restart Jellyfin
+- Force refresh your browser (Ctrl+Shift+R)
++ Forcez l’actualisation de votre navigateur (Ctrl+Shift+R)
+
+
+- UI not loading? Go to Dashboard > Scheduled Tasks and run the
+- Moonfin Startup task once, then refresh your browser.
++ L’interface ne se charge pas ? Allez dans Dashboard > Tâches planifiées et exécutez la tâche
++ Moonfin Startup tâche une fois, puis actualisez votre navigateur.
+
+
+
+@@ -1657,15 +1657,15 @@
+
+
+
+-
Active Downloads
++
Téléchargements actifs
+
+-
Loading...
++
Chargement…
+
+
+
+
+
+- Save as Default
++ Enregistrer par défaut
+
+
+
+@@ -2189,72 +2189,72 @@
+ ];
+
+ var HOME_SECTION_DEFINITIONS = [
+- { type: 'smalllibrarytiles', label: 'My Media' },
+- { type: 'resume', label: 'Continue Watching' },
+- { type: 'nextup', label: 'Next Up' },
+- { type: 'latestmedia', label: 'Recently Added Media' },
+- { type: 'recentlyreleased', label: 'Recently Released' },
+- { type: 'livetv', label: 'Live TV' },
+- { type: 'librarybuttons', label: 'Library Buttons' },
+- { type: 'resumeaudio', label: 'Resume Audio' },
+- { type: 'resumebook', label: 'Resume Books' },
+- { type: 'activerecordings', label: 'Active Recordings' },
++ { type: 'smalllibrarytiles', label: 'Mes médias' },
++ { type: 'resume', label: 'Continuer à regarder' },
++ { type: 'nextup', label: 'À suivre' },
++ { type: 'latestmedia', label: 'Médias récemment ajoutés' },
++ { type: 'recentlyreleased', label: 'Sorties récentes' },
++ { type: 'livetv', label: 'TV en direct' },
++ { type: 'librarybuttons', label: 'Boutons des bibliothèques' },
++ { type: 'resumeaudio', label: 'Reprendre l’audio' },
++ { type: 'resumebook', label: 'Reprendre les livres' },
++ { type: 'activerecordings', label: 'Enregistrements actifs' },
+ { type: 'collections', label: 'Collections' },
+- { type: 'favoritemovies', label: 'Favorite Movies' },
+- { type: 'favoriteseries', label: 'Favorite Series' },
+- { type: 'favoriteepisodes', label: 'Favorite Episodes' },
+- { type: 'favoritepeople', label: 'Favorite People' },
+- { type: 'favoriteartists', label: 'Favorite Artists' },
+- { type: 'favoritemusicvideos', label: 'Favorite Music Videos' },
+- { type: 'favoritealbums', label: 'Favorite Albums' },
+- { type: 'favoritesongs', label: 'Favorite Songs' },
++ { type: 'favoritemovies', label: 'Films favoris' },
++ { type: 'favoriteseries', label: 'Séries favorites' },
++ { type: 'favoriteepisodes', label: 'Épisodes favoris' },
++ { type: 'favoritepeople', label: 'Personnes favorites' },
++ { type: 'favoriteartists', label: 'Artistes favoris' },
++ { type: 'favoritemusicvideos', label: 'Vidéos musicales favorites' },
++ { type: 'favoritealbums', label: 'Albums favoris' },
++ { type: 'favoritesongs', label: 'Chansons favorites' },
+ { type: 'genres', label: 'Genres' },
+- { type: 'playlists', label: 'Playlists' },
+- { type: 'sinceyouwatched1', label: "Since You Watched 1" },
+- { type: 'sinceyouwatched2', label: "Since You Watched 2" },
+- { type: 'sinceyouwatched3', label: "Since You Watched 3" },
+- { type: 'sinceyouwatched4', label: "Since You Watched 4" },
+- { type: 'sinceyouwatched5', label: "Since You Watched 5" },
+- { type: 'rewatch', label: "Rewatch" },
+- { type: 'seerr_shortcuts', label: 'Seerr Browse' },
+- { type: 'seerr_recent_requests', label: 'Seerr Recent Requests' },
+- { type: 'seerr_recently_added', label: 'Seerr Recently Added' },
+- { type: 'seerr_popular_movies', label: 'Seerr Popular Movies' },
+- { type: 'seerr_upcoming_movies', label: 'Seerr Upcoming Movies' },
+- { type: 'seerr_popular_series', label: 'Seerr Popular Series' },
+- { type: 'seerr_upcoming_series', label: 'Seerr Upcoming Series' },
+- { type: 'seerr_trending', label: 'Seerr Trending' },
+- { type: 'seerr_movie_genres', label: 'Seerr Movie Genres' },
+- { type: 'seerr_studios', label: 'Seerr Studios' },
+- { type: 'seerr_series_genres', label: 'Seerr Series Genres' },
+- { type: 'seerr_networks', label: 'Seerr Networks' },
+- { type: 'imdb_top_250_movies', label: 'IMDB Top 250 Movies' },
+- { type: 'imdb_top_250_tv_shows', label: 'IMDB Top 250 Shows' },
+- { type: 'imdb_most_popular_movies', label: 'IMDB Most Popular Movies' },
+- { type: 'imdb_most_popular_tv_shows', label: 'IMDB Most Popular Shows' },
+- { type: 'imdb_lowest_rated_movies', label: 'IMDB Lowest Rated Movies' },
+- { type: 'imdb_top_english_movies', label: 'IMDB Top English Movies' },
+- { type: 'tmdb_popular_movies', label: 'TMDB Popular Movies' },
+- { type: 'tmdb_top_rated_movies', label: 'TMDB Top Rated Movies' },
+- { type: 'tmdb_now_playing_movies', label: 'TMDB Now Playing Movies' },
+- { type: 'tmdb_upcoming_movies', label: 'TMDB Upcoming Movies' },
+- { type: 'tmdb_popular_tv', label: 'TMDB Popular TV' },
+- { type: 'tmdb_top_rated_tv', label: 'TMDB Top Rated TV' },
+- { type: 'tmdb_airing_today_tv', label: 'TMDB Airing Today TV' },
+- { type: 'tmdb_on_the_air_tv', label: 'TMDB On The Air TV' },
+- { type: 'tmdb_trending_movie_daily', label: 'TMDB Trending Movies (Daily)' },
+- { type: 'tmdb_trending_movie_weekly', label: 'TMDB Trending Movies (Weekly)' },
+- { type: 'tmdb_trending_tv_daily', label: 'TMDB Trending TV (Daily)' },
+- { type: 'tmdb_trending_tv_weekly', label: 'TMDB Trending TV (Weekly)' },
+- { type: 'tmdb_trending_all_weekly', label: 'TMDB Trending All (Weekly)' },
+- { type: 'radarr_calendar', label: 'Radarr Upcoming' },
+- { type: 'sonarr_calendar', label: 'Sonarr Upcoming' }
++ { type: 'playlists', label: 'Liste de lectures' },
++ { type: 'sinceyouwatched1', label: "Depuis votre dernier visionnage 1" },
++ { type: 'sinceyouwatched2', label: "Depuis votre dernier visionnage 2" },
++ { type: 'sinceyouwatched3', label: "Depuis votre dernier visionnage 3" },
++ { type: 'sinceyouwatched4', label: "Depuis votre dernier visionnage 4" },
++ { type: 'sinceyouwatched5', label: "Depuis votre dernier visionnage 5" },
++ { type: 'rewatch', label: "À revoir" },
++ { type: 'seerr_shortcuts', label: 'Parcourir Seerr' },
++ { type: 'seerr_recent_requests', label: 'Demandes récentes Seerr' },
++ { type: 'seerr_recently_added', label: 'Seerr : ajouts récents' },
++ { type: 'seerr_popular_movies', label: 'Seerr : films populaires' },
++ { type: 'seerr_upcoming_movies', label: 'Seerr : films à venir' },
++ { type: 'seerr_popular_series', label: 'Seerr : séries populaires' },
++ { type: 'seerr_upcoming_series', label: 'Seerr : séries à venir' },
++ { type: 'seerr_trending', label: 'Seerr : tendances' },
++ { type: 'seerr_movie_genres', label: 'Seerr : genres de films' },
++ { type: 'seerr_studios', label: 'Seerr : studios' },
++ { type: 'seerr_series_genres', label: 'Seerr : genres de séries' },
++ { type: 'seerr_networks', label: 'Seerr : réseaux' },
++ { type: 'imdb_top_250_movies', label: 'Films IMDb Top 250' },
++ { type: 'imdb_top_250_tv_shows', label: 'Séries IMDb Top 250' },
++ { type: 'imdb_most_popular_movies', label: 'IMDB Films les plus populaires' },
++ { type: 'imdb_most_popular_tv_shows', label: 'Séries IMDb les plus populaires' },
++ { type: 'imdb_lowest_rated_movies', label: 'IMDB Films les moins bien notés' },
++ { type: 'imdb_top_english_movies', label: 'Meilleurs films anglophones IMDb' },
++ { type: 'tmdb_popular_movies', label: 'Films TMDB populaires' },
++ { type: 'tmdb_top_rated_movies', label: 'Films TMDB les mieux notés' },
++ { type: 'tmdb_now_playing_movies', label: 'Films TMDB actuellement à l’affiche' },
++ { type: 'tmdb_upcoming_movies', label: 'Films TMDB à venir' },
++ { type: 'tmdb_popular_tv', label: 'Séries TV TMDB populaires' },
++ { type: 'tmdb_top_rated_tv', label: 'Séries TV TMDB les mieux notées' },
++ { type: 'tmdb_airing_today_tv', label: 'Séries TMDB diffusées aujourd’hui' },
++ { type: 'tmdb_on_the_air_tv', label: 'Séries TMDB en cours de diffusion' },
++ { type: 'tmdb_trending_movie_daily', label: 'Films TMDB tendance (Daily)' },
++ { type: 'tmdb_trending_movie_weekly', label: 'Films TMDB tendance (Weekly)' },
++ { type: 'tmdb_trending_tv_daily', label: 'Séries TV TMDB tendance (Daily)' },
++ { type: 'tmdb_trending_tv_weekly', label: 'Séries TV TMDB tendance (Weekly)' },
++ { type: 'tmdb_trending_all_weekly', label: 'TMDB : tendances générales (Weekly)' },
++ { type: 'radarr_calendar', label: 'Radarr : à venir' },
++ { type: 'sonarr_calendar', label: 'Sonarr : à venir' }
+ ];
+
+ function loadAdminGenrePicker(selectedIds) {
+ var picker = document.querySelector('#DefaultGenrePicker');
+ if (!picker) return;
+- picker.innerHTML = 'Loading...
';
++ picker.innerHTML = 'Chargement…
';
+
+ var serverUrl = ApiClient.serverAddress ? ApiClient.serverAddress() : '';
+ var token = ApiClient.accessToken ? ApiClient.accessToken() : '';
+@@ -2265,7 +2265,7 @@
+ .then(function(data) {
+ var genres = data.Items || data.items || [];
+ if (genres.length === 0) {
+- picker.innerHTML = 'No genres found.
';
++ picker.innerHTML = 'Aucun genre trouvé.
';
+ return;
+ }
+ var html = '';
+@@ -2281,7 +2281,7 @@
+ picker.innerHTML = html;
+ })
+ .catch(function() {
+- picker.innerHTML = 'Failed to load genres.
';
++ picker.innerHTML = 'Impossible de charger les genres.
';
+ });
+ }
+
+@@ -2342,7 +2342,7 @@
+ // ISO 639-2 codes, matching the table Core resolves track languages against.
+ // The audio and subtitle pickers share the list so the two stay in sync.
+ var LANGUAGE_OPTIONS = [
+- ['auto', 'Server Default'], ['eng', 'English'], ['spa', 'Spanish'],
++ ['auto', 'Serveur par défaut'], ['eng', 'Anglais'], ['spa', 'Espagnol'],
+ ['fra', 'French'], ['deu', 'German'], ['ita', 'Italian'],
+ ['jpn', 'Japanese'], ['kor', 'Korean'], ['zho', 'Chinese'],
+ ['rus', 'Russian'], ['por', 'Portuguese'], ['ara', 'Arabic'],
+@@ -2358,7 +2358,7 @@
+ var select = document.querySelector(selector);
+ if (!select || select.dataset.filled) return;
+ select.dataset.filled = 'true';
+- var html = 'Not set (user decides) ';
++ var html = 'Non défini (choix de l’utilisateur) ';
+ for (var i = 0; i < LANGUAGE_OPTIONS.length; i++) {
+ var code = LANGUAGE_OPTIONS[i][0];
+ var label = LANGUAGE_OPTIONS[i][1];
+@@ -2371,8 +2371,8 @@
+ // Same ids and declaration order as DetailButton in Core, so an untouched
+ // arrangement here matches what a fresh client shows.
+ var DETAIL_BUTTONS = [
+- { id: 'seerrRequest', label: 'Request' },
+- { id: 'seerrRequest4k', label: 'Request 4K' },
++ { id: 'seerrDemande', label: 'Demande' },
++ { id: 'seerrDemande4k', label: 'Demande 4K' },
+ { id: 'shuffle', label: 'Shuffle' },
+ { id: 'restart', label: 'Restart', canHide: false },
+ { id: 'playOffline', label: 'Play Offline', canHide: false },
+@@ -2381,16 +2381,16 @@
+ { id: 'version', label: 'Version' },
+ { id: 'cast', label: 'Cast' },
+ { id: 'trailer', label: 'Trailer' },
+- { id: 'watchWithGroup', label: 'Watch with group' },
++ { id: 'watchWithGroup', label: 'Regarder en groupe' },
+ { id: 'watched', label: 'Watched' },
+ { id: 'favorite', label: 'Favorite' },
+ { id: 'playlist', label: 'Playlist' },
+- { id: 'download', label: 'Download' },
+- { id: 'deleteFiles', label: 'Delete files' },
+- { id: 'goToSeries', label: 'Go to series' },
++ { id: 'download', label: 'Téléchargement' },
++ { id: 'deleteFiles', label: 'Supprimer les fichiers' },
++ { id: 'goToSeries', label: 'Allez dans series' },
+ { id: 'seerrWatchlist', label: 'Watchlist' },
+- { id: 'seerrReportIssue', label: 'Report Issue' },
+- { id: 'seerrManage', label: 'Manage Requests' },
++ { id: 'seerrReportIssue', label: 'Signaler un problème' },
++ { id: 'seerrManage', label: 'Gérer les demandes' },
+ { id: 'admin', label: 'Admin' }
+ ];
+
+@@ -2440,7 +2440,7 @@
+ row.innerHTML =
+ (item.hideable
+ ? ' '
+- : '✓ ')
++ : '✓ ')
+ + '' + esc(item.label) + ' '
+ + '↑ '
+ + '↓ ';
+@@ -2482,18 +2482,18 @@
+ }
+
+ var SEERR_DISCOVERY_ROWS = [
+- { id: 'shortcuts', label: 'Seerr Browse' },
+- { id: 'recent_requests', label: 'Recent Requests' },
++ { id: 'shortcuts', label: 'Parcourir Seerr' },
++ { id: 'recent_requests', label: 'Demandes récentes' },
+ { id: 'watchlist', label: 'Your Watchlist' },
+- { id: 'recently_added', label: 'Recently Added' },
++ { id: 'recently_added', label: 'Ajouts récents' },
+ { id: 'trending', label: 'Trending' },
+ { id: 'popular_movies', label: 'Popular Movies' },
+- { id: 'movie_genres', label: 'Movie Genres' },
++ { id: 'movie_genres', label: 'Genres de films' },
+ { id: 'upcoming_movies', label: 'Upcoming Movies' },
+ { id: 'studios', label: 'Studios' },
+- { id: 'popular_series', label: 'Popular Series' },
+- { id: 'series_genres', label: 'Series Genres' },
+- { id: 'upcoming_series', label: 'Upcoming Series' },
++ { id: 'popular_series', label: 'Séries populaires' },
++ { id: 'series_genres', label: 'Genres de séries' },
++ { id: 'upcoming_series', label: 'Séries à venir' },
+ { id: 'networks', label: 'Networks' }
+ ];
+
+@@ -2581,12 +2581,12 @@
+ }
+
+ var HOME_LAYOUT_TABS = [
+- { id: 'builtin', label: 'Basics' },
++ { id: 'builtin', label: 'Éléments de base' },
+ { id: 'collections', label: 'Collections' },
+- { id: 'playlists', label: 'Playlists' },
++ { id: 'playlists', label: 'Liste de lectures' },
+ { id: 'genres', label: 'Genres' },
+ { id: 'seerr', label: 'Seerr' },
+- { id: 'external', label: 'External Lists' }
++ { id: 'external', label: 'Listes externes' }
+ ];
+
+ var HOME_LAYOUT_SEERR_TYPES = {
+@@ -2656,21 +2656,21 @@
+ }
+
+ function homeSectionLabel(section) {
+- if (!section) return 'Unknown row';
++ if (!section) return 'Rangée inconnue';
+ if (section.kind === 'pluginDynamic') {
+- return section.pluginDisplayText || section.pluginSection || 'Dynamic row';
++ return section.pluginDisplayText || section.pluginSection || 'Rangée dynamique';
+ }
+ var definition = homeSectionDefinition(section.type);
+- return definition ? definition.label : (section.type || 'Unknown row');
++ return definition ? definition.label : (section.type || 'Rangée inconnue');
+ }
+
+ function homeSectionMeta(section) {
+- if (!section) return 'Basics';
++ if (!section) return 'Éléments de base';
+ if (section.kind !== 'pluginDynamic') {
+- return isSeerrHomeSectionType(section.type) ? 'Seerr' : (isExternalHomeSectionType(section.type) ? 'External Lists' : 'Basics');
++ return isSeerrHomeSectionType(section.type) ? 'Seerr' : (isExternalHomeSectionType(section.type) ? 'Listes externes' : 'Éléments de base');
+ }
+ if (section.pluginSource === 'collections') return 'Collection';
+- if (section.pluginSource === 'playlists') return 'Playlist';
++ if (section.pluginSource === 'playlists') return 'Liste de lecture';
+ if (section.pluginSource === 'genres') return 'Genre';
+ return 'Dynamic';
+ }
+@@ -2760,7 +2760,7 @@
+ pluginSource: section.pluginSource,
+ pluginSection: section.pluginSection || '',
+ pluginAdditionalData: section.pluginAdditionalData || '',
+- pluginDisplayText: section.pluginDisplayText || section.pluginSection || 'Dynamic row'
++ pluginDisplayText: section.pluginDisplayText || section.pluginSection || 'Rangée dynamique'
+ };
+ } else {
+ if (section.enabled === false) return;
+@@ -2788,7 +2788,7 @@
+ key: 'builtin:' + definition.type,
+ tab: 'builtin',
+ label: definition.label,
+- meta: isSeerrHomeSectionType(definition.type) ? 'Seerr' : (isExternalHomeSectionType(definition.type) ? 'External Lists' : 'Basics'),
++ meta: isSeerrHomeSectionType(definition.type) ? 'Seerr' : (isExternalHomeSectionType(definition.type) ? 'Listes externes' : 'Éléments de base'),
+ badgeClass: isSeerrHomeSectionType(definition.type) ? 'homeLayoutBadge-seerr' : (isExternalHomeSectionType(definition.type) ? 'homeLayoutBadge-external' : 'homeLayoutBadge-builtin'),
+ section: {
+ kind: 'builtin',
+@@ -2803,7 +2803,7 @@
+ return {
+ key: ['pluginDynamic', source, sectionName, id || ''].join(':'),
+ tab: tab,
+- label: label || 'Untitled',
++ label: label || 'Sans titre',
+ meta: meta,
+ badgeClass: 'homeLayoutBadge-' + (source || 'dynamic'),
+ section: {
+@@ -2815,7 +2815,7 @@
+ pluginSource: source,
+ pluginSection: sectionName,
+ pluginAdditionalData: id || '',
+- pluginDisplayText: label || 'Untitled'
++ pluginDisplayText: label || 'Sans titre'
+ }
+ };
+ }
+@@ -2897,7 +2897,7 @@
+ container.innerHTML = '';
+
+ if (HOME_LAYOUT_STATE.sections.length === 0) {
+- container.innerHTML = 'No default rows configured. Add rows from the catalog.
';
++ container.innerHTML = 'Aucune rangée par défaut configurée. Ajoutez des rangées depuis le catalogue.
';
+ return;
+ }
+
+@@ -2931,7 +2931,7 @@
+
+ container.innerHTML = '';
+ if (candidates.length === 0) {
+- container.innerHTML = 'No rows found.
';
++ container.innerHTML = 'Aucune rangée trouvée.
';
+ return;
+ }
+
+@@ -2944,7 +2944,7 @@
+ ''
+ + '
' + esc(candidate.label) + '
'
+ + '
'
+- + 'Add ';
++ + 'Ajouter ';
+ container.appendChild(row);
+ });
+ }
+@@ -3068,7 +3068,7 @@
+ }).then(function(result) {
+ var items = result.Items || [];
+ setHomeLayoutAvailable('collections', items.map(function(item) {
+- return createDynamicCandidate('collections', 'collections', 'collection', item.Id, item.Name || 'Untitled', 'Collection row', serverId);
++ return createDynamicCandidate('collections', 'collections', 'collection', item.Id, item.Name || 'Sans titre', 'Rangée de collections', serverId);
+ }));
+ }).catch(function() {
+ setHomeLayoutAvailable('collections', []);
+@@ -3090,7 +3090,7 @@
+ }).then(function(result) {
+ var items = result.Items || [];
+ setHomeLayoutAvailable('playlists', items.map(function(item) {
+- return createDynamicCandidate('playlists', 'playlists', 'playlist', item.Id, item.Name || 'Untitled', 'Playlist row', serverId);
++ return createDynamicCandidate('playlists', 'playlists', 'playlist', item.Id, item.Name || 'Sans titre', 'Rangée de playlists', serverId);
+ }));
+ }).catch(function() {
+ setHomeLayoutAvailable('playlists', []);
+@@ -3100,8 +3100,8 @@
+ function mapGenreCandidates(items, serverId) {
+ return (items || []).map(function(item) {
+ var id = item.id || item.Id;
+- var name = item.name || item.Name || 'Untitled';
+- return createDynamicCandidate('genres', 'genres', 'genre', id, name, 'Genre row', serverId);
++ var name = item.name || item.Name || 'Sans titre';
++ return createDynamicCandidate('genres', 'genres', 'genre', id, name, 'Rangée de genres', serverId);
+ }).filter(function(candidate) { return !!candidate.section.pluginAdditionalData; });
+ }
+
+@@ -3146,7 +3146,7 @@
+ var isDynamic = section.kind === 'pluginDynamic';
+ var result = {
+ type: isDynamic ? 'none' : section.type,
+- // Dynamic rows stay in the editor when disabled, unlike builtins, so
++ // Rangée dynamiques stay in the editor when disabled, unlike builtins, so
+ // writing them all back as enabled would switch every custom row on.
+ enabled: isDynamic ? section.enabled !== false : true,
+ order: section.order
+@@ -3250,14 +3250,14 @@
+ result.textContent = message;
+ }
+
+- function setSelectedThemeFileLabel(file) {
++ function setSelectedThèmeFileLabel(file) {
+ var label = document.querySelector('#AdminThemeChosenFile');
+ if (!label) {
+ return;
+ }
+
+ if (!file) {
+- label.textContent = 'No file selected';
++ label.textContent = 'Aucun fichier sélectionné';
+ return;
+ }
+
+@@ -3287,7 +3287,7 @@
+ }
+
+ if (!items || items.length === 0) {
+- container.innerHTML = 'No uploaded themes yet.
';
++ container.innerHTML = 'Aucun thème importé pour le moment.
';
+ return;
+ }
+
+@@ -3306,12 +3306,12 @@
+ + ' '
+- + 'Uploaded: ' + esc(formatThemeUploadedAt(uploadedAt))
+- + ' • Size: ' + esc(formatThemeSize(sizeBytes))
++ + 'Importé : ' + esc(formatThemeUploadedAt(uploadedAt))
++ + ' • Taille : ' + esc(formatThemeSize(sizeBytes))
+ + (checksum ? ' • SHA256: ' + esc(checksum.slice(0, 12)) + '…' : '')
+ + '