{
    "appName": { "message": "CinePlex" },
    "appDescription": { "message": "Scanne les serveurs Plex pour trouver du contenu et l'affiche dans l'interface" },
    "appTagline": { "message": "Films, Séries & Musique" },
    "appLocaleCode": { "message": "fr-FR" },
    "toggleNavigation": { "message": "Basculer la Navigation" },
    "searchPlaceholder": { "message": "Rechercher des films ou des séries..." },
    "openMusicPlayer": { "message": "Ouvrir le Lecteur de Musique" },
    "settings": { "message": "Paramètres" },
    "navMovies": { "message": "Films" },
    "navSeries": { "message": "Séries" },
    "navProviders": { "message": "Fournisseurs" },
    "navPhotos": { "message": "Photos" },
    "navStats": { "message": "Statistiques" },
    "navFavorites": { "message": "Favoris" },
    "navHistory": { "message": "Historique" },
    "navRecommendations": { "message": "Recommandations" },
    "navMusic": { "message": "Musique" },
    "heroWelcome": { "message": "" },
    "heroSubtitle": { "message": "Explorez des milliers de films et de séries." },
    "addStream": { "message": "Ajouter le flux" },
    "moreInfo": { "message": "Plus d'infos" },
    "popularMovies": { "message": "Films Populaires" },
    "allGenres": { "message": "Tous les genres" },
    "allYears": { "message": "Toutes les années" },
    "sortPopular": { "message": "Les plus populaires" },
    "sortTopRated": { "message": "Les mieux notés" },
    "sortRecent": { "message": "Les plus récents" },
    "loadMore": { "message": "Charger plus" },
    "photosBreadcrumbHome": { "message": "Albums" },
    "selectServer": { "message": "Sélectionnez un serveur" },
    "loading": { "message": "Chargement..." },
    "loadingLibraries": { "message": "Chargement des bibliothèques..." },
    "photosEmptyState": { "message": "Aucun album ou photo trouvé." },
    "photosEmptyStateSub": { "message": "Veuillez sélectionner un serveur ou vous assurer d'avoir une bibliothèque de photos dans Plex." },
    "statsTitle": { "message": "Statistiques de la Bibliothèque" },
    "statsAllTokens": { "message": "Tous les Tokens" },
    "statsAnalyzing": { "message": "Analyse de votre bibliothèque..." },
    "statsActiveTokens": { "message": "Tokens Actifs" },
    "statsServersFound": { "message": "Serveurs Trouvés" },
    "statsUniqueMovies": { "message": "Films Uniques" },
    "statsUniqueSeries": { "message": "Séries Uniques" },
    "statsUniqueArtists": { "message": "Artistes Uniques" },
    "statsTokenServers": { "message": "Serveurs du Token" },
    "statsChartMoviesByGenre": { "message": "Contenu par Genre (Films)" },
    "statsChartSeriesByGenre": { "message": "Contenu par Genre (Séries)" },
    "statsChartByDecade": { "message": "Contenu par Décennie" },
    "recommendationsTitle": { "message": "Recommandations pour vous" },
    "historyTitle": { "message": "Historique de Visionnage" },
    "clearHistory": { "message": "Tout effacer" },
    "consoleTitle": { "message": "Console de Scan Plex" },
    "footerCredit": { "message": "Une interface pour votre univers Plex." },
    "backButton": { "message": "Retour" },
    "closeTrailer": { "message": "Fermer la bande-annonce" },
    "close": { "message": "Fermer" },
    "photoViewer": { "message": "Visionneuse de photos" },
    "previous": { "message": "Précédent" },
    "next": { "message": "Suivant" },
    "notificationTemplateText": { "message": "Notification" },
    "settingsTitleFull": { "message": "Paramètres et Configuration" },
    "settingsTabGeneral": { "message": "Général" },
    "settingsTabPlex": { "message": "Plex" },
    "settingsTabJellyfin": { "message": "Jellyfin" },
    "settingsTabPhpGen": { "message": "Générateur PHP" },
    "settingsTabData": { "message": "Données" },
    "settingsApiServer": { "message": "Configuration API et Serveur" },
    "settingsTmdbApiLabel": { "message": "Clé API de TMDB (Optionnel)" },
    "settingsTmdbApiPlaceholder": { "message": "Utilisera la clé par défaut si laissé vide" },
    "openaiApiKey": { "message": "Clé API OpenAI" },
    "settingsTmdbLangLabel": { "message": "Langue pour TMDB & UI" },
    "settingsPhpUrlLabel": { "message": "URL du Serveur pour Ajout de Flux" },
    "settingsPhpUrlPlaceholder": { "message": "https://votre-serveur.com/chemin/vers/script.php" },
    "settingsInterface": { "message": "Interface" },
    "settingsLightTheme": { "message": "Mode Clair" },
    "settingsShowHero": { "message": "Afficher la section d'accueil \"Hero\"" },
    "settingsScanContent": { "message": "Scan de Contenu" },
    "settingsScanDesc": { "message": "Sélectionnez ce que vous voulez scanner et appuyez sur le bouton." },
    "settingsScanMovies": { "message": "Films" },
    "settingsScanShows": { "message": "Séries" },
    "settingsScanArtists": { "message": "Musique" },
    "settingsScanPhotos": { "message": "Photos" },
    "settingsSelectAll": { "message": "Tout sélectionner" },
    "settingsStartScan": { "message": "Démarrer le Scan" },
    "settingsPlexTokens": { "message": "Tokens Plex" },
    "settingsPlexTokensDesc": { "message": "Modifiez la liste des tokens Plex (format JSON)." },
    "settingsSaveTokens": { "message": "Sauvegarder les Tokens" },
    "settingsJellyfinTitle": { "message": "Paramètres Jellyfin" },
    "settingsJellyfinDesc": { "message": "Ajoutez les informations de votre serveur Jellyfin pour scanner son contenu." },
    "jellyfinUrlLabel": { "message": "URL du serveur Jellyfin" },
    "jellyfinUserLabel": { "message": "Nom d'utilisateur" },
    "jellyfinPassLabel": { "message": "Mot de passe" },
    "jellyfinConnectAndScan": { "message": "Connecter et Scanner" },
    "settingsPhpGenTitle": { "message": "Générateur de Script PHP pour Serveur" },
    "settingsPhpFileOptions": { "message": "Options du Fichier" },
    "settingsPhpSavePathLabel": { "message": "Chemin de Sauvegarde sur le Serveur" },
    "settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/listes (vide pour le même dossier)" },
    "settingsPhpFilenameLabel": { "message": "Nom du Fichier" },
    "settingsPhpFileAction": { "message": "Action sur le Fichier" },
    "settingsPhpActionAppend": { "message": "Ajouter à la fin du fichier (cumulatif)" },
    "settingsPhpActionOverwrite": { "message": "Écraser le fichier (repartir à zéro)" },
    "settingsPhpSecurity": { "message": "Sécurité (Optionnel)" },
    "settingsPhpUseSecretKey": { "message": "Utiliser une clé secrète (Recommandé)" },
    "settingsPhpSecretKeyPlaceholder": { "message": "Entrez une clé secrète sécurisée" },
    "settingsPhpGeneratedCode": { "message": "Code Généré" },
    "settingsPhpGeneratedPlaceholder": { "message": "Le code PHP généré apparaîtra ici." },
    "settingsGenerateScript": { "message": "Générer le Script" },
    "settingsCopyScript": { "message": "Copier le Script" },
    "settingsDataManagement": { "message": "Gestion de la Base de Données Locale" },
    "settingsImportDb": { "message": "Importer BD depuis un Fichier" },
    "settingsExportDb": { "message": "Exporter BD vers un Fichier" },
    "settingsClearContent": { "message": "Effacer les Données de Contenu Locales" },
    "settingsClearContentDesc": { "message": "Cette action supprimera les films, séries et musiques de la base de données locale, mais n'affectera pas vos favoris ou paramètres." },
    "settingsClose": { "message": "Fermer" },
    "settingsSave": { "message": "Sauvegarder les Paramètres" },
    "musicSidenavTitle": { "message": "Plex Musique" },
    "musicAllServers": { "message": "Tous les Serveurs" },
    "musicSearchArtistPlaceholder": { "message": "Rechercher un artiste..." },
    "musicSearchDiscographyPlaceholder": { "message": "Rechercher dans la discographie..." },
    "musicNothingPlaying": { "message": "Aucune lecture en cours" },
    "musicSelectSong": { "message": "Sélectionnez une chanson" },
    "musicToStart": { "message": "pour commencer la lecture" },
    "miniplayerDownloadSong": { "message": "Télécharger la chanson" },
    "miniplayerDownloadAlbum": { "message": "Télécharger l'album M3U" },
    "miniplayerVolume": { "message": "Volume" },
    "miniplayerShuffle": { "message": "Aléatoire" },
    "miniplayerEqualizer": { "message": "Égaliseur" },
    "miniplayerOpenList": { "message": "Ouvrir la liste" },
    "eqTitle": { "message": "Égaliseur Graphique" },
    "eqPresetsLabel": { "message": "Préréglages" },
    "eqPresetFlat": { "message": "Plat" },
    "eqPresetRock": { "message": "Rock" },
    "eqPresetPop": { "message": "Pop" },
    "eqPresetJazz": { "message": "Jazz" },
    "eqPresetClassical": { "message": "Classique" },
    "eqPresetBassBoost": { "message": "Renforcement des Basses" },
    "eqPreampLabel": { "message": "Pré-Amp" },
    "infoModalTitle": { "message": "Information" },
    "infoModalFieldTitle": { "message": "Titre:" },
    "infoModalFieldArtist": { "message": "Artiste:" },
    "infoModalFieldAlbum": { "message": "Album:" },
    "infoModalFieldSong": { "message": "Chanson:" },
    "infoModalFieldYear": { "message": "Année:" },
    "infoModalFieldGenre": { "message": "Genre:" },
    "lang_en": { "message": "Anglais" },
    "lang_es": { "message": "Espagnol" },
    "lang_fr": { "message": "Français" },
    "lang_de": { "message": "Allemand" },
    "lang_it": { "message": "Italien" },
    "lang_pt": { "message": "Portugais" },
    "essentialFeaturesNotSupported": { "message": "Votre navigateur ne prend pas en charge les fonctionnalités essentielles." },
    "dbAccessError": { "message": "Erreur d'accès à la base de données locale." },
    "dbUpdateNeeded": { "message": "La base de données doit être mise à jour, veuillez recharger la page." },
    "dbBlocked": { "message": "Veuillez fermer les autres onglets de cette application pour continuer." },
    "deletingContentData": { "message": "Suppression des données de contenu locales..." },
    "noContentDataToDelete": { "message": "Aucune donnée de contenu à supprimer." },
    "contentDataDeleted": { "message": "Données de contenu supprimées de IndexedDB." },
    "errorDeletingData": { "message": "Erreur lors de la suppression des données : $message$", "placeholders": { "message": { "content": "$1" } } },
    "aceEditorNotAvailable": { "message": "Éditeur de texte non disponible." },
    "errorLoadingTokens": { "message": "Erreur lors du chargement des tokens pour l'édition." },
    "errorLoadingTokensMessage": { "message": "Erreur de chargement des tokens : $message$", "placeholders": { "message": { "content": "$1" } } },
    "aceEditorNotAvailableToSave": { "message": "Éditeur non disponible pour la sauvegarde." },
    "invalidJsonFormat": { "message": "Format JSON invalide. Doit être { \"tokens\": [...] }" },
    "tokensSaved": { "message": "Tokens sauvegardés avec succès." },
    "errorSavingTokens": { "message": "Erreur lors de la sauvegarde des tokens : $message$", "placeholders": { "message": { "content": "$1" } } },
    "dbNotAvailable": { "message": "IndexedDB n'est pas disponible." },
    "dbExported": { "message": "Base de données exportée avec succès." },
    "errorExportingDb": { "message": "Erreur lors de l'exportation de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
    "invalidJsonFile": { "message": "Le fichier ne contient pas un objet JSON valide." },
    "noDataToImport": { "message": "Le fichier ne contient pas de données pour les sections actuelles de la BD." },
    "dbImported": { "message": "Base de données importée avec succès." },
    "errorImportingDb": { "message": "Erreur lors de l'importation de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
    "updatingView": { "message": "Mise à jour de la vue avec les nouvelles données..." },
    "confirmClearContent": { "message": "Êtes-vous sûr de vouloir supprimer les données de contenu locales (Films, Séries, Musique, etc.) ? Les Favoris et les Paramètres ne seront PAS supprimés." },
    "trailerNotFound": { "message": "Aucune bande-annonce trouvée pour ce titre." },
    "confirmClearHistory": { "message": "Êtes-vous sûr de vouloir effacer tout votre historique de visionnage ? Cette action est irréversible." },
    "historyCleared": { "message": "Historique de visionnage effacé." },
    "historyItemDeleted": { "message": "Élément supprimé de l'historique." },
    "errorGeneratingScript": { "message": "Générez d'abord un script avant de pouvoir le copier." },
    "scriptCopied": { "message": "Script PHP copié dans le presse-papiers." },
    "errorCopyingScript": { "message": "Erreur lors de la copie du script." },
    "scriptGenerated": { "message": "Script PHP généré." },
    "errorLoadingAlbum": { "message": "Erreur lors du chargement de l'album : $message$", "placeholders": { "message": { "content": "$1" } } },
    "noPhotoServerSelected": { "message": "Erreur : Aucun serveur de photos n'a été sélectionné." },
    "loadingGenres": { "message": "Chargement des genres..." },
    "errorLoadingGenres": { "message": "Erreur de chargement" },
    "noContentFound": { "message": "Aucun résultat trouvé." },
    "couldNotLoadContent": { "message": "Impossible de charger le contenu." },
    "noFavorites": { "message": "Vous n'avez pas encore de favoris." },
    "errorLoadingFavorites": { "message": "Erreur lors du chargement des favoris." },
    "historyEmpty": { "message": "Votre historique est isEmpty." },
    "historyEmptySub": { "message": "Parcourez et regardez du contenu pour qu'il apparaisse ici." },
    "errorGeneratingRecommendations": { "message": "Erreur lors de la génération des recommandations." },
    "noRecommendations": { "message": "Nous avons besoin de mieux vous connaître pour vous faire des recommandations !" },
    "errorGeneratingStats": { "message": "Erreur lors de la génération des statistiques." },
    "noServersForToken": { "message": "Aucun serveur associé trouvé pour ce token." },
    "searchingActorContent": { "message": "Recherche de contenu de $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
    "errorLoadingActorContent": { "message": "Impossible de charger le contenu pour $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
    "errorAddingStream": { "message": "Erreur lors de l'ajout du ou des flux : $message$", "placeholders": { "message": { "content": "$1" } } },
    "phpUrlNotConfigured": { "message": "L'URL du serveur PHP n'est pas configurée. Veuillez la configurer dans les Paramètres." },
    "searchingStreams": { "message": "Recherche de flux pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
    "sendingStreams": { "message": "Envoi de $count$ flux au serveur...", "placeholders": { "count": { "content": "$1" } } },
    "streamAddedSuccess": { "message": "Flux ajouté(s) avec succès." },
    "generatingM3U": { "message": "Génération du M3U pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
    "m3uDownloaded": { "message": "M3U pour \"$title$\" téléchargé.", "placeholders": { "title": { "content": "$1" } } },
    "errorGeneratingM3U": { "message": "Erreur lors de la génération du M3U : $message$", "placeholders": { "message": { "content": "$1" } } },
    "settingsSavedSuccess": { "message": "Paramètres sauvegardés avec succès." },
    "errorSavingSettings": { "message": "Erreur lors de la sauvegarde des paramètres dans la base de données." },
    "languageChangeReload": { "message": "Langue modifiée. L'application va maintenant se recharger." },
    "addedToFavorites": { "message": "Ajouté aux favoris." },
    "removedFromFavorites": { "message": "Retiré des favoris." },
    "plexScanInProgress": { "message": "Le scan Plex est déjà en cours." },
    "plexScanStarting": { "message": "Démarrage du scan Plex..." },
    "noPlexTokens": { "message": "Aucun token Plex configuré." },
    "clearingSections": { "message": "Nettoyage des sections : $sections$", "placeholders": { "sections": { "content": "$1" } } },
    "sectionsCleared": { "message": "Sections nettoyées." },
    "tokenFoundServers": { "message": "Le token $token$... a trouvé $count$ serveurs.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
    "errorProcessingToken": { "message": "Erreur lors du traitement du token $token$... : $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
    "initialScanPhaseComplete": { "message": "Phase de scan initiale terminée." },
    "retryPhaseFinished": { "message": "Phase de relance terminée." },
    "plexScanFinished": { "message": "Scan terminé. Mise à jour du contenu..." },
    "plexScanFatalError": { "message": "ERREUR FATALE : $message$", "placeholders": { "message": { "content": "$1" } } },
    "errorDuringScan": { "message": "Erreur pendant le scan : $message$", "placeholders": { "message": { "content": "$1" } } },
    "scanCancelled": { "message": "Scan annulé par l'utilisateur." },
    "scanCancelledInfo": { "message": "Scan annulé." },
    "retyingSection": { "message": "Nouvelle tentative pour la section \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
    "retrySuccess": { "message": "[SUCCÈS] Relance de \"$title$\" terminée.", "placeholders": { "title": { "content": "$1" } } },
    "retryError": { "message": "[ERREUR FINALE] Échec de la nouvelle tentative pour \"$title$\" : $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
    "noRetriesPending": { "message": "Aucune relance en attente." },
    "startingRetryPhase": { "message": "Démarrage de la phase de relance pour $count$ sections...", "placeholders": { "count": { "content": "$1" } } },
    "retryPhaseCancelled": { "message": "Phase de relance annulée." },
    "errorInitializingMusicPlayer": { "message": "Erreur lors de l'initialisation du lecteur de musique." },
    "criticalErrorLoadingMusic": { "message": "Erreur critique lors du chargement des données musicales." },
    "errorLoadingArtists": { "message": "Erreur lors du chargement des artistes." },
    "dbUnavailableError": { "message": "Erreur : Base de données non disponible." },
    "updatingMusicData": { "message": "Mise à jour des données musicales..." },
    "musicDataUpdated": { "message": "Données musicales mises à jour." },
    "errorFetchingArtistSongs": { "message": "Erreur lors de la récupération des chansons de l'artiste." },
    "errorLoadingSongs": { "message": "Erreur lors du chargement des chansons." },
    "noArtistsFound": { "message": "Aucun artiste trouvé." },
    "artistsCounter": { "message": "$start$-$end$ sur $total$", "placeholders": { "start": { "content": "$1" }, "end": { "content": "$2" }, "total": { "content": "$3" } } },
    "artistsCounterSingle": { "message": "$total$ Artistes", "placeholders": { "total": { "content": "$1" } } },
    "artistsCounterLoading": { "message": "Chargement..." },
    "noSongsFound": { "message": "Aucune chanson trouvée." },
    "shuffleOn": { "message": "Mode aléatoire activé." },
    "shuffleOff": { "message": "Mode aléatoire désactivé." },
    "downloadingSong": { "message": "Début du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
    "songDownloaded": { "message": "\"\"$title$\"\" téléchargé.", "placeholders": { "title": { "content": "$1" } } },
    "errorDownloadingSong": { "message": "Erreur lors du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
    "generatingAlbumM3U": { "message": "Génération du M3U pour \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
    "albumM3UGenerated": { "message": "M3U de l'album \"$artist$\" généré.", "placeholders": { "artist": { "content": "$1" } } },
    "playbackError": { "message": "Erreur de lecture" },
    "errorLabel": { "message": "Erreur" },
    "reloadingPage": { "message": "Rechargement de la page..." },
    "viewed": { "message": "Vu" },
    "local": { "message": "Local" },
    "topRatedSort": {"message": "Mieux notés"},
    "recentSort": {"message": "Récents"},
    "popularSort": {"message": "Populaires"},
    "moviesSectionTitle": {"message": "Films"},
    "seriesSectionTitle": {"message": "Séries"},
    "searchResultsFor": {"message": "Résultats pour \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
    "contentFrom": {"message": "Contenu de $actor$", "placeholders": {"actor": {"content": "$1"}}},
    "explore": {"message": "Explorer"},
    "noGenre": {"message": "Non classé"},
    "synopsis": {"message": "Synopsis"},
    "noSynopsis": {"message": "Aucun synopsis disponible."},
    "director": {"message": "Réalisateur:"},
    "writer": {"message": "Scénariste:"},
    "viewOnImdb": {"message": "Voir sur IMDb"},
    "watchTrailer": {"message": "Voir la bande-annonce"},
    "addToFavorites": {"message": "Ajouter aux favoris"},
    "removeFromFavorites": {"message": "Retirer des favoris"},
    "notAvailable": {"message": "Non disponible"},
    "mainCast": {"message": "Distribution Principale"},
    "seasonsAndEpisodes": {"message": "Saisons & Épisodes"},
    "similarContent": {"message": "Contenu Similaire"},
    "episodesCount": {"message": "$count$ Épisodes", "placeholders": {"count": {"content": "$1"}}},
    "seasonsCount": {"message": "$count$ Saisons", "placeholders": {"count": {"content": "$1"}}},
    "runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
    "noTrailerFound": {"message": "Aucune bande-annonce n'a été trouvée pour ce titre."},
    "fatalInitError": {"message": "Erreur d'Initialisation Fatale"},
    "fatalInitErrorSub": {"message": "L'application n'a pas pu être chargée."},
    "invalidStreamInfo": {"message": "Information invalide."},
    "dbUnavailableForStreams": {"message": "Base de données locale non disponible."},
    "noPlexServersForStreams": {"message": "Pas de serveurs Plex."},
    "notFoundOnServers": {"message": "\"query$\" non trouvé sur les serveurs.", "placeholders": {"query": {"content": "$1"}}},
    "relativeTime_justNow": { "message": "À l'instant" },
    "relativeTime_minutesAgo": { "message": "Il y a $count$ minutes", "placeholders": { "count": { "content": "$1" } } },
    "relativeTime_hoursAgo": { "message": "Il y a $count$ heures", "placeholders": { "count": { "content": "$1" } } },
    "relativeTime_yesterday": { "message": "Hier" },
    "relativeTime_daysAgo": { "message": "Il y a $count$ jours", "placeholders": { "count": { "content": "$1" } } },
    "errorLoadingDetails": { "message": "Erreur de Chargement des Détails" },
    "errorLoadingLocalContent": { "message": "Erreur lors du chargement du contenu local." },
    "errorServerResponse": { "message": "Réponse non réussie du serveur." },
    "errorPlexApi": { "message": "Erreur $status$ de l'API Plex.", "placeholders": { "status": { "content": "$1" } } },
    "errorParsingPlexXml": { "message": "Erreur d'analyse du XML de Plex." },
    "untitled": { "message": "Sans titre" },
    "itemCount": { "message": "$count$ éléments", "placeholders": { "count": { "content": "$1" } } },
    "noPhotoServers": { "message": "Aucun serveur de photos" },
    "jellyfinScanInProgress": { "message": "Le scan Jellyfin est déjà en cours." },
    "jellyfinScanning": { "message": "Scan de Jellyfin en cours..." },
    "jellyfinMissingCredentials": { "message": "Veuillez compléter l'URL et le nom d'utilisateur de Jellyfin." },
    "jellyfinConnecting": { "message": "Connexion à Jellyfin à : $url$", "placeholders": { "url": { "content": "$1" } } },
    "jellyfinAuthFailed": { "message": "Échec de l'authentification Jellyfin : $message$", "placeholders": { "message": { "content": "$1" } } },
    "jellyfinAuthSuccess": { "message": "Authentification Jellyfin réussie." },
    "jellyfinFetchingLibraries": { "message": "Récupération des bibliothèques..." },
    "jellyfinFetchFailed": { "message": "Échec de la récupération des bibliothèques : $message$", "placeholders": { "message": { "content": "$1" } } },
    "jellyfinNoMediaLibraries": { "message": "Aucune bibliothèque de films ou de séries trouvée sur Jellyfin." },
    "jellyfinLibrariesFound": { "message": "$count$ bibliothèque(s) multimédia(s) trouvée(s).", "placeholders": { "count": { "content": "$1" } } },
    "jellyfinLibraryScanSuccess": { "message": "[Succès] '$libraryName scannée, $count$ titres ajoutés.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
    "jellyfinLibraryScanFailed": { "message": "Échec du scan de la bibliothèque '$libraryName.", "placeholders": { "libraryName": { "content": "$1" } } },
    "jellyfinScanSuccess": { "message": "Scan Jellyfin terminé. $movies$ films et $series$ séries ajoutés.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
    "noJellyfinCredentials": { "message": "Identifiants Jellyfin non configurés." },
    "notFoundOnJellyfin": { "message": "\"query$\" non trouvé sur Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
    "notFoundOnAnyServer": { "message": "\"query$\" non trouvé sur aucun serveur.", "placeholders": { "query": { "content": "$1" } } },
    "localOnPlex": { "message": "Sur Plex" },
    "searchOnPlex": { "message": "Rechercher sur Plex" },
    "jellyfinTitle": { "message": "Contenu Jellyfin" },
    "noJellyfinContent": { "message": "Aucun contenu Jellyfin trouvé." },
    "noJellyfinContentSub": { "message": "Assurez-vous d'avoir scanné votre serveur Jellyfin dans les paramètres." },
    "activityViewerTitle": { "message": "Visualiseur d'Activité du Serveur" },
    "activitySelectServer": { "message": "Sélectionnez un serveur" },
    "activityCheckBtn": { "message": "Actualiser" },
    "activityNoSessions": { "message": "Aucune session active sur ce serveur." },
    "activitySessionUser": { "message": "Utilisateur" },
    "activitySessionDevice": { "message": "Appareil" },
    "activitySessionContent": { "message": "Contenu" },
    "activitySessionState": { "message": "État" },
    "activitySessionIdentifier": { "message": "Identifiant du Client" },
    "activityCopyID": { "message": "Copier l'ID" },
    "activityError": { "message": "Impossible de récupérer l'activité du serveur." },
    "activityCopied": { "message": "Identifiant copié dans le presse-papiers !" },
    "activityCopyError": { "message": "Échec de la copie de l'identifiant." },
    "noProvidersFound": { "message": "Aucun fournisseur trouvé." },
    "availableOnPlex": { "message": "Disponible sur Plex" },
    "navM3uGenerator": { "message": "Générateur M3U" },
    "m3uGeneratorTitle": { "message": "Générateur de Listes de Lecture M3U" },
    "selectAServer": { "message": "Sélectionnez un serveur..." },
    "downloadM3u": { "message": "Télécharger M3U" },
    "m3uGenerator": { "message": "Générateur M3U" },
    "selectServer": { "message": "Sélectionner le Serveur" },
    "selectLibraries": { "message": "Sélectionner les Bibliothèques" },
    "howToUse": { "message": "Comment Utiliser" },
    "m3uInstruction1": { "message": "Choisissez un serveur dans la liste." },
    "m3uInstruction2": { "message": "Sélectionnez une ou plusieurs bibliothèques à inclure." },
    "m3uInstruction3": { "message": "Cliquez sur le bouton de téléchargement." },
    "m3uInstruction4": { "message": "Importez le fichier .m3u dans votre lecteur compatible." },
    "settingsRegionLabel": { "message": "Région pour la découverte de contenu" },
    "allRegions": { "message": "Toutes les régions" },
    "chatOpen": { "message": "Ouvrir le chat" },
    "chatTitle": { "message": "Assistant IA" },
    "chatClose": { "message": "X" },
    "chatPlaceholder": { "message": "Écrivez votre message..." },
    "chatSend": { "message": "➤" },
    "chatGptError": { "message": "Désolé, je n'ai pas pu obtenir de réponse. Veuillez réessayer." },
    "chatWelcome": { "message": "Bienvenue ! Je suis votre assistant CinePlex. Posez-moi des questions sur les films, les séries ou tout ce que vous voulez savoir." },
    "chatApiKeyMissing": { "message": "La clé API OpenAI n'est pas définie. Veuillez la configurer dans les paramètres de l'extension." },
    "chatApiInvalidResponse": { "message": "L'API a renvoyé une réponse non valide. Veuillez réessayer." },
    "chatApiError": { "message": "Erreur de communication avec l'assistant IA" },
    "downloadAll": { "message": "Tout télécharger" },
    "download": { "message": "Télécharger" },
    "aiToolSearchLibraryDesc": { "message": "Recherche dans la bibliothèque Plex des films ou des séries." },
    "aiToolSearchLibraryQueryDesc": { "message": "Le titre à rechercher." },
    "aiToolSearchLibraryTypeDesc": { "message": "Le type de contenu à rechercher (film ou série)." },
    "aiToolNavigateToPageDesc": { "message": "Navigue vers une page spécifique de l'application." },
    "aiToolNavigateToPagePageDesc": { "message": "La page vers laquelle naviguer." },
    "aiToolGetUserStatsDesc": { "message": "Obtient les statistiques de l'utilisateur." },
    "aiToolShowItemDetailsDesc": { "message": "Affiche les détails d'un film ou d'une série." },
    "aiToolShowItemDetailsTitleDesc": { "message": "Le titre du film ou de la série." },
    "aiToolShowItemDetailsTypeDesc": { "message": "Le type de contenu (film ou série)." },
    "aiToolAddToPlaylistDesc": { "message": "Ajoute un film ou une série à la liste de lecture." },
    "aiToolAddToPlaylistTitleDesc": { "message": "Le titre du film ou de la série." },
    "aiToolAddToPlaylistTypeDesc": { "message": "Le type de contenu (film ou série)." },
    "aiToolDownloadPlaylistDesc": { "message": "Télécharge la liste de lecture d'un film ou d'une série." },
    "aiToolDownloadPlaylistTitleDesc": { "message": "Le titre du film ou de la série." },
    "aiToolDownloadPlaylistTypeDesc": { "message": "Le type de contenu (film ou série)." },
    "aiToolToggleFavoriteDesc": { "message": "Ajoute ou supprime un film ou une série des favoris." },
    "aiToolToggleFavoriteTitleDesc": { "message": "Le titre du film ou de la série." },
    "aiToolToggleFavoriteTypeDesc": { "message": "Le type de contenu (film ou série)." },
    "aiToolGetRecommendationsDesc": { "message": "Obtient des recommandations pour l'utilisateur." },
    "aiToolApplyFiltersDesc": { "message": "Applique des filtres à la vue actuelle." },
    "aiToolApplyFiltersTypeDesc": { "message": "Le type de contenu à filtrer (film ou série)." },
    "aiToolApplyFiltersGenreDesc": { "message": "Le genre par lequel filtrer." },
    "aiToolApplyFiltersYearDesc": { "message": "L'année par laquelle filtrer." },
    "aiToolApplyFiltersSortDesc": { "message": "L'ordre dans lequel trier les résultats." },
    "aiToolPlayMusicByArtistDesc": { "message": "Joue de la musique d'un artiste spécifique." },
    "aiToolPlayMusicByArtistNameDesc": { "message": "Le nom de l'artiste." },
    "aiToolClearChatHistoryDesc": { "message": "Efface l'historique du chat." },
    "aiToolDeleteDatabaseDesc": { "message": "Supprime la base de données de l'extension." },
    "aiToolUpdateAllTokensDesc": { "message": "Met à jour tous les jetons Plex." },
    "aiToolAddPlexTokenDesc": { "message": "Ajoute un nouveau jeton Plex." },
    "aiToolAddPlexTokenTokenDesc": { "message": "Le jeton Plex à ajouter." },
    "aiToolChangeRegionDesc": { "message": "Change la région pour la découverte de contenu." },
    "aiToolChangeRegionRegionDesc": { "message": "Le code de région à deux lettres (par exemple, US, ES, FR)." },
    "aiToolClearAllFavoritesDesc": { "message": "Efface tous les favoris de l'utilisateur." },
    "aiToolClearRecommendationsViewDesc": { "message": "Efface la vue des recommandations." },
    "aiToolFavoritesCleared": { "message": "Favoris effacés." },
    "aiToolFavoritesClearError": { "message": "Erreur lors de la suppression des favoris : $message$", "placeholders": { "message": { "content": "$1" } } },
    "aiToolRecommendationsCleared": { "message": "Recommandations effacées." },
    "aiToolRecommendationsClearError": { "message": "Erreur lors de la suppression des recommandations : $message$", "placeholders": { "message": { "content": "$1" } } },
    "aiToolDatabaseDeleted": { "message": "Base de données supprimée. La page va maintenant se recharger." },
    "aiToolDatabaseDeleteError": { "message": "Erreur lors de la suppression de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
    "aiToolDatabaseDeleteBlocked": { "message": "La suppression de la base de données est bloquée. Veuillez fermer les autres onglets de l'application." },
    "aiToolUpdateAllTokensSuccess": { "message": "Tous les jetons ont été mis à jour avec succès." },
    "aiToolUpdateAllTokensError": { "message": "Erreur lors de la mise à jour des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
    "aiToolAddPlexTokenSuccess": { "message": "Jeton Plex ajouté avec succès." },
    "aiToolAddPlexTokenError": { "message": "Erreur lors de l'ajout du jeton Plex : $message$", "placeholders": { "message": { "content": "$1" } } },
    "aiToolChangeRegionSuccess": { "message": "Région changée en $region$. Le contenu est en cours de mise à jour.", "placeholders": { "region": { "content": "$1" } } },
    "aiToolChangeRegionError": { "message": "Erreur lors du changement de région : $message$", "placeholders": { "message": { "content": "$1" } } },
    "aiSystemPrompt_v2": { "message": "Vous êtes un assistant expert en films et séries nommé CinePlex. Votre fonction principale est d'aider les utilisateurs à interagir avec leur médiathèque et à découvrir du contenu. Suivez ces règles : 1. Lorsqu'un utilisateur demande une liste ou une recommandation (par exemple, 'donnez-moi 5 films d'horreur', 'les meilleures séries de science-fiction'), vous DEVEZ utiliser vos propres connaissances pour générer la liste et la présenter sous forme de liste numérotée ou à puces. N'UTILISEZ PAS d'outils pour cette tâche de découverte initiale. 2. Après avoir présenté la liste, si l'utilisateur vous demande de la télécharger, de la vérifier ou de créer un M3U, ALORS et seulement alors, utilisez l'outil 'generate_m3u_from_titles_list' en lui passant les titres que vous venez de mentionner. 3. Pour toute autre action telle que la navigation dans l'application, l'obtention de statistiques ou la recherche d'un TITRE SPÉCIFIQUE dans la bibliothèque de l'utilisateur, utilisez les outils appropriés. Soyez concis, amical et efficace." },
    "aiToolSearchLibraryDesc_v2": { "message": "La liste des titres à traiter est vide." },
    "aiToolM3UNoLocalMatches": { "message": "Il semble que vous n'ayez aucun des titres de cette liste sur vos serveurs locaux." },
    "aiToolGenerateM3UTypeDesc": { "message": "Le type de contenu à rechercher : 'movie' ou 'series'." },
    "aiToolGenerateM3UFilenameDesc": { "message": "Un nom de fichier personnalisé pour la liste de lecture M3U téléchargée." },
    "aiToolGenerateM3USuccess": { "message": "Compris ! Je génère une liste de lecture M3U avec $1 éléments. Le téléchargement devrait commencer sous peu.", "placeholders": { "1": { "content": "$1" } } },
    "aiSystemPrompt_v3": { "message": "Vous êtes un assistant expert en films et séries nommé CinePlex. Votre fonction principale est d'aider les utilisateurs à découvrir du contenu et à interagir avec leur bibliothèque. Suivez rigoureusement ces règles : 1. **NE JAMAIS** prétendre avoir effectué une action si vous n'avez pas utilisé d'outil pour cela. Par exemple, ne dites pas 'j'ai téléchargé X' si vous n'avez pas utilisé l'outil de téléchargement. 2. Pour les demandes de recommandations ou de listes (par exemple, 'donnez-moi 5 films d'horreur'), utilisez vos propres connaissances pour générer la liste. Présentez-la sous forme de liste numérotée ou à puces. Après avoir affiché la liste, demandez pro-activement à l'utilisateur s'il souhaite que vous vérifiiez la disponibilité sur ses serveurs locaux et que vous créiez un fichier M3U. 3. **SEULEMENT** si l'utilisateur confirme qu'il souhaite vérifier ou télécharger la liste, utilisez l'outil `check_and_download_titles_list`. Ne l'utilisez pas sans confirmation explicite. 4. Pour toute autre action comme la navigation, l'obtention de statistiques ou la recherche d'un titre spécifique, utilisez les outils appropriés. Soyez toujours concis, amical et efficace." },
    "aiToolCheckAndDownloadDesc": { "message": "Vérifie une liste de titres de films ou de séries par rapport aux serveurs locaux de l'utilisateur et, si des correspondances sont trouvées, génère et télécharge un fichier de liste de lecture M3U." },
    "aiToolGenerateM3UFromTitlesTitlesDesc": { "message": "Une liste de titres de films ou de séries à vérifier et à télécharger." },
    "aiToolM3UNoTitlesProvided": { "message": "Veuillez fournir une liste de titres pour créer la liste de lecture." },
    "aiToolM3UCheckingTitles": { "message": "Vérification des titres sur vos serveurs locaux..." },
    "aiToolM3UNoLocalMatchesForDownload": { "message": "Je n'ai trouvé aucun des films ou séries de la liste sur vos serveurs locaux." },
    "aiToolM3UDownloadStarted": { "message": "Terminé ! J'ai trouvé $1 des $2 titres sur vos serveurs et j'ai commencé le téléchargement de la liste de lecture M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } }
}