{ "nav.films": "Films", "nav.checklist": "Checklist", "nav.stats": "Stats", "nav.myPicks": "Mes picks", "nav.admin": "Admin", "nav.logout": "Déconnexion", "nav.viewAllPicks": "Voir Tous les Choix", "common.loading": "Chargement…", "common.preparingPage": "Préparation de la page…", "common.errorLoading": "Erreur lors du chargement.", "common.save": "Enregistrer", "common.cancel": "Annuler", "common.delete": "Supprimer", "common.confirm": "Confirmer", "common.refresh": "Rafraîchir", "common.close": "Fermer", "common.copy": "Copier", "common.reset": "Reset", "common.add": "Ajouter", "common.edit": "Modifier", "common.remove": "Retirer", "common.create": "Créer", "common.actions": "Actions", "common.yes": "Oui", "common.no": "Non", "common.all": "Tous", "common.none": "Aucun", "common.search": "Rechercher", "common.filter": "Filtrer", "common.year": "Année", "common.name": "Nom", "common.email": "Courriel", "common.status": "Statut", "common.date": "Date", "common.title": "Titre", "common.description": "Description", "common.networkError": "Erreur réseau", "common.errorOccurred": "Une erreur est survenue", "common.errorPrefix": "Erreur :", "common.saving": "Enregistrement...", "common.success": "Succès", "common.toggleDarkMode": "Basculer le mode sombre", "common.details": "Détails", "common.oscarPool": "Pool Oscars", "auth.login": "Connexion", "auth.register": "Enregistrer", "auth.email": "Courriel", "auth.password": "Mot de passe", "auth.name": "Nom", "auth.noAccount": "Pas de compte?", "auth.hasAccount": "Déjà un compte?", "auth.signUp": "Enregistrez-vous", "auth.signIn": "Connectez-vous", "auth.forgotPassword": "Mot de passe oublié?", "auth.emailPlaceholder": "votre@courriel.com", "auth.namePlaceholder": "Votre nom", "auth.passwordMin": "Minimum {min} caractères", "auth.passwordsDoNotMatch": "Les mots de passe ne correspondent pas", "auth.confirmPassword": "Confirmer le mot de passe", "auth.createAdminAccount": "Créer le compte admin", "auth.firstTimeSetup": "Première installation", "auth.noAdminExists": "Aucun administrateur n'existe. Créez le premier compte admin pour commencer.", "auth.registrationStatus": "Statut de l'enregistrement", "auth.returnToHome": "Retourner à la page d'accueil", "auth.setupRequired": "Configuration requise", "auth.appMustBeConfigured": "L'application doit d'abord être configurée par un administrateur.", "auth.goToSetup": "Aller à la page de configuration", "auth.dogQuestion": "Le nom du chien à Cath & Nath?", "auth.errorCreatingAccount": "Erreur lors de la création du compte", "auth.networkErrorRetry": "Erreur réseau. Veuillez réessayer.", "auth.userNotFound": "L'utilisateur n'a pas été trouvé", "auth.dogAnswerIncorrect": "Mauvais nom de chien.", "auth.registrationSuccess": "L'utilisateur s'est enregistré avec succès !", "auth.loginFailed": "Échec de connexion", "auth.invalidCredentials": "Informations d'identification non valides", "auth.tempPasswordExpired": "Le mot de passe temporaire a expiré. Demandez à un admin de réinitialiser votre mot de passe.", "auth.passwordMinLength": "Le mot de passe doit contenir au moins 8 caractères.", "changePassword.title": "Changer le mot de passe", "changePassword.tempPassword": "Votre compte utilise un mot de passe temporaire. Veuillez définir un nouveau mot de passe pour continuer.", "changePassword.newPassword": "Nouveau mot de passe", "changePassword.minChars": "Minimum 8 caractères.", "changePassword.passwordTooShort": "Le mot de passe doit contenir au moins 8 caractères.", "movies.title": "Films", "movies.lastUpdated": "Dernière mise à jour des films:", "movies.watchedRatio": "Vu: {watched} / {total} ({percent}%)", "movies.timeUntilOscars": "Temps avant les Oscars ({date} {year}) — {timeLeft}", "movies.timeUntilOscarsLabel": "Temps avant les Oscars", "movies.daysLeft": "{days} jours", "movies.hoursLeft": "{hours} heures", "movies.unwatchedOnly": "Films non regardés seulement", "movies.clickToPlay": "Clique sur l'affiche ou le titre pour ouvrir le lecteur.", "movies.watched": "VISIONNÉ", "movies.noSource": "Aucune source", "movies.nominatedCategories": "Catégories nominées", "movies.resumeAt": "Reprendre à {time}", "movies.userRating": "Note utilisateurs {rating}", "movies.errorLoading": "Erreur lors du chargement.", "movies.errorLoadingList": "Impossible de charger la liste des films. Réessaie dans quelques instants.", "movies.errorLoading": "Impossible de charger les films. Vérifie ta connexion puis réessaie.", "movies.unableToLoadMovies": "Impossible de charger la liste des films. Réessaie dans quelques instants.", "movies.unableToLoadMoviesNetwork": "Impossible de charger les films. Vérifie ta connexion puis réessaie.", "movies.loadingMovies": "Chargement des films", "movies.fetchingData": "Récupération des données…", "movies.viewOnImdb": "Voir sur IMDb", "checklist.title": "Checklist", "checklist.seen": "Vu", "checklist.filmTitle": "Titre", "checklist.date": "Date", "checklist.watchedOn": "Regardé le:", "checklist.confirmRemoval": "Confirmer le retrait", "checklist.removeConfirmText": "Es-tu sûr de vouloir retirer {title} de ta liste?", "checklist.moviesToWatchPerDay": "À voir par jour: {count} films", "checklist.congratulations": "Félicitations! very nice 🎉🎉🎉", "checklist.browserNoVideo": "Votre navigateur ne supporte pas la vidéo.", "checklist.loadingChecklist": "Chargement de la checklist", "checklist.errorLoading": "Erreur lors du chargement.", "checklist.unableToLoad": "Impossible de charger la checklist. Réessaie dans quelques instants.", "checklist.unableToLoadNetwork": "Impossible de charger la checklist. Vérifie ta connexion puis réessaie.", "checklist.march15": "15 mars", "checklist.loadingMovies": "Chargement des films…", "picks.title": "Mes picks", "picks.myPicks": "Mes picks", "picks.pageTitleWithYear": "Pool Oscars ({year}) - Mes picks", "picks.pageTitleChoicesWithYear": "Pool Oscars ({year}) - Mes picks", "picks.scores": "Scores", "picks.winners": "Gagnants", "picks.adminBadge": "Admin", "picks.year": "Année:", "picks.progress": "Progression:", "picks.reload": "Recharger", "picks.loadingCategories": "Chargement des catégories…", "picks.scoresCalculatedAfterWinners": "Les scores seront calculés après avoir marqué les gagnants.", "picks.winnersMarked": "gagnants marqués", "picks.noCategory": "Aucune catégorie", "picks.noChoice": "Aucun choix", "picks.category": "Catégorie", "picks.choice": "Choix", "picks.nominees": "Nommés", "picks.noCategoriesFound": "Aucune catégorie trouvée pour l'année {year}", "picks.adminMustImportCategories": "Un administrateur doit d'abord importer les catégories.", "picks.selectionHeader": "Sélection", "picks.winnerHeader": "Gagnant", "picks.noCategoriesAvailable": "Aucune catégorie disponible", "picks.winnerMarkedSuccess": "Gagnant marqué avec succès", "picks.winnerRemoved": "Gagnant supprimé", "picks.noWinnerMarked": "Aucun gagnant marqué. Les scores seront calculés une fois les gagnants définis.", "picks.scoresCalculated": "Scores calculés avec succès! {count} utilisateur(s) évalué(s).", "picks.scoresRefreshed": "Scores rafraîchis", "picks.calculatingScores": "Calcul des scores…", "picks.calculateScores": "Calculer les scores", "picks.dataRefreshed": "Données rafraîchies", "picks.noScoresAvailable": "Aucun score disponible. Les utilisateurs doivent d'abord soumettre leurs choix.", "picks.details": "Détails", "picks.choicesOf": "Choix de {name}", "picks.noDetailsAvailable": "Aucun détail disponible.", "picks.summary": "Résumé", "picks.correct": "{count} correct(s)", "picks.incorrect": "{count} incorrect(s)", "picks.correctPicks": "Corrects ({count})", "picks.errorLoadingCategories": "Erreur lors du chargement des catégories: {error}", "picks.preparingPage": "Préparation de la page…", "picks.errorAutoSaving": "Erreur lors de l'enregistrement automatique: {error}", "picks.incompleteSelection": "Vous avez sélectionné que {selected} sur {total} catégories. Voulez-vous enregistrer quand même?", "picks.successSaved": "Vos choix ont été enregistrés avec succès!", "picks.errorSubmitting": "Erreur lors de la soumission des choix: {error}", "picks.reloaded": "Choix rechargés", "picks.categoryHeader": "Catégorie", "picks.userHeader": "Utilisateur", "picks.winnerMarked": "Gagnant marqué avec succès", "picks.winnerDeleted": "Gagnant supprimé", "picks.errorUpdatingWinner": "Erreur: {error}", "picks.noWinnersMarked": "Aucun gagnant marqué. Les scores seront calculés une fois les gagnants définis.", "picks.scoresCalculated": "Scores calculés avec succès! {count} utilisateur(s) évalué(s).", "picks.errorCalculatingScores": "Erreur: {error}", "picks.errorLoadingScores": "Erreur lors du chargement des scores.", "picks.incorrectPicks": "Incorrects ({count})", "picks.detailsButton": "Détails", "picks.userChoicesTitle": "Choix de {user}", "picks.noDetailsAvailable": "Aucun détail disponible.", "picks.summaryTitle": "Résumé", "picks.correctCountLabel": "correct(s)", "picks.incorrectCountLabel": "incorrect(s)", "picks.totalCountLabel": "total", "picks.correctSectionTitle": "Corrects ({count})", "picks.incorrectSectionTitle": "Incorrects ({count})", "picks.choiceLabel": "Choix", "picks.winnerLabel": "Gagnant", "picks.noWinnerMarkedShort": "Aucun gagnant marqué", "picks.noChoicesToShow": "Aucun choix à afficher.", "picks.loadingTitle": "Chargement des picks", "picks.loadingSubtitle": "Récupération des données…", "picks.yourChoice": "Choix: {choice}", "picks.winner": "Gagnant: {winner}", "picks.noWinnerMarkedYet": "Aucun gagnant marqué", "picks.noPicksToShow": "Aucun choix à afficher.", "picks.partialSaveConfirm": "Vous n'avez sélectionné que {selected} sur {total} catégories. Voulez-vous enregistrer quand même?", "picks.savedSuccessfully": "Vos choix ont été enregistrés avec succès!", "picks.errorSaving": "Erreur lors de l'enregistrement: {error}", "picks.errorLoadingCategories": "Erreur lors du chargement des catégories: {error}", "picks.autoSaveError": "Erreur lors de l'enregistrement automatique: {error}", "picks.picksReloaded": "Choix rechargés", "picks.choiceDetails": "Détails des choix", "picks.loadingPicks": "Chargement des picks", "viewPicks.title": "Voir Tous les Choix", "viewPicks.overview": "Vue d'ensemble de tous les choix des utilisateurs", "viewPicks.usersSubmitted": "{count} utilisateur(s) ont soumis leurs choix", "viewPicks.loadingPicks": "Chargement des choix…", "viewPicks.noPicks": "Aucun utilisateur n'a encore soumis ses choix pour l'année {year}.", "viewPicks.picksRefreshed": "Choix rafraîchis", "viewPicks.errorLoading": "Erreur lors du chargement des choix: {error}", "viewPicks.unknownUser": "Utilisateur inconnu", "viewPicks.categoriesCount": "{count} / {total} catégories", "viewPicks.noPicks2": "Aucun choix enregistré", "viewPicks.submittedOn": "Soumis le: {date}", "viewPicks.winnerBadge": "Gagnant", "player.title": "Lecteur", "player.loading": "Chargement…", "player.quality": "Qualité", "player.high": "Haute", "player.low": "Basse", "player.rateThisFilm": "Noter ce film", "player.star": "{count} étoile", "player.stars": "{count} étoiles", "player.source": "Source", "player.progress": "Progress", "player.noVodLink": "Aucun lien VOD configuré pour ce film.", "player.missingMovieId": "ID du film manquant.", "player.noPlayableSource": "Aucune source de lecture configurée pour ce film.", "player.beginning": "Début", "player.resuming": "Reprise", "player.resumingAt": "Reprise à {time}", "player.preparingResume": "Prépare la reprise…", "player.connectionRequired": "Connexion requise pour sauvegarder.", "player.connection": "Connexion", "player.playFromBeginning": "Lecture depuis le début", "player.sessionExpired": "Session expirée. Reconnecte-toi pour continuer à sauvegarder la progression.", "player.beginning": "Début", "player.resuming": "Reprise", "player.resumingAt": "Reprise à {time}", "player.preparingResume": "Prépare la reprise…", "player.connectionRequired": "Connexion requise pour sauvegarder.", "player.connection": "Connexion", "player.playFromBeginning": "Lecture depuis le début", "player.saving": "Sauvegarde…", "player.saved": "Sauvegardé à {time}.", "player.loadingPlayer": "Chargement du lecteur", "player.unableToIdentifyUser": "Impossible d'identifier l'utilisateur pour sauvegarder la progression.", "common.continueQuestion": "Continuer ?", "player.connectionRequired": "Connexion requise pour sauvegarder.", "player.connection": "Connexion", "player.playFromBeginning": "Lecture depuis le début", "player.sessionExpired": "Session expirée. Reconnecte-toi pour continuer à sauvegarder la progression.", "stats.title": "Statistiques", "stats.pageTitle": "Statistiques des utilisateurs", "stats.ranking": "Classement", "stats.winners": "Gagnants 🏆", "stats.completers": "100%", "stats.rank": "#", "stats.name": "Nom", "stats.films": "Films", "stats.correctPicks": "Bon picks", "stats.points": "Points", "stats.year": "Année", "stats.winnersColumn": "Gagnant(s)", "stats.completersHelp": "Utilisateurs ayant terminé 100% (par année)", "stats.noWinnersDefined": "Aucun gagnant défini.", "stats.noYearsFound": "Aucune année trouvée.", "stats.unableToLoadRanking": "Impossible de charger le classement pour le moment.", "stats.totalFilms": "Total films", "stats.names": "Noms", "stats.moviesWatched": "Films regardés", "stats.noMoviesToShow": "Aucun film à afficher.", "stats.loading": "Chargement…", "stats.preparingPage": "Préparation de la page…", "stats.loadingStats": "Chargement des statistiques", "stats.fetchingData": "Récupération des données…", "stats.deletedUser": "(utilisateur supprimé)", "stats.tie": "égalité", "stats.unableToLoadCompleters": "Impossible de charger les finisseurs 100%.", "stats.unnamed": "(sans nom)", "stats.openLink": "Ouvrir le lien", "stats.openPlayer": "Ouvrir le lecteur", "stats.watchedOn": "Vu le {date}", "stats.watchedMoviesUser": "Films regardés — {user} ({count})", "stats.watchedMovies": "Films regardés ({count})", "stats.filmCount": "{count} film{plural}", "stats.noFilms": "0 films", "admin.movies.noMovies": "Aucun film.", "admin.title": "Pool Oscars - Admin", "admin.tabs.settings": "Réglages", "admin.tabs.users": "Utilisateurs", "admin.tabs.modal100": "Modal 100%", "admin.tabs.winners": "Gagnants", "admin.tabs.oscarCategories": "Catégories Oscars", "admin.tabs.backupRestore": "Backup / Restore", "admin.tabs.version": "Version", "admin.settings.info": "Paramètres globaux du site (année, dates, options du lecteur).", "admin.settings.oscarDate": "Date Oscars", "admin.settings.visibility": "Visibilité", "admin.settings.language": "Langue", "admin.settings.oscarDateDesc": "Configure la date de cérémonie pour le compte à rebours (Films & Checklist). Défaut: 15 mars.", "admin.settings.oscarDateDefaultShort": "— (défaut: 03-15)", "admin.settings.year": "Année", "admin.settings.applyActiveYear": "Appliquer l'année active", "admin.settings.yearBasedOnMovies": "Basé sur les années présentes dans les films.", "admin.settings.date": "Date", "admin.settings.dateFormat": "Format: YYYY-MM-DD.", "admin.settings.configuredDates": "Dates configurées", "admin.settings.pointsDesc": "Configure les points attribués pour les films regardés et les bonnes réponses aux Oscars.", "admin.settings.pointsPerMovie": "Points par film regardé", "admin.settings.pointsPerMovieDesc": "Points attribués pour chaque film complété.", "admin.settings.pointsPerCorrectPick": "Points par bonne réponse", "admin.settings.pointsPerCorrectPickDesc": "Points attribués pour chaque bonne réponse aux Oscars.", "admin.settings.reload": "Recharger", "admin.settings.pointsCalculation": "Calcul des points", "admin.settings.total": "Total", "admin.settings.moviesWatched": "Films regardés", "admin.settings.correctPicks": "Bons picks", "admin.settings.pointsSaved": "Configuration enregistrée: {p} pts/film, {q} pts/bonne réponse", "admin.settings.noYearAddMovie": "Aucune année (ajoute un film)", "admin.visibility.showPicksFeatures": "Afficher les fonctionnalités \"Picks\"", "admin.visibility.showPicksFeaturesDesc": "Contrôle l'affichage du bouton \"Mes picks\" dans la navigation et de la colonne \"Bon picks\" dans les statistiques.", "admin.visibility.showSourceProgress": "Afficher \"Source\" + \"Progress\" (admins)", "admin.visibility.showSourceProgressDesc": "Contrôle l'affichage du bloc debug dans player.html (admins uniquement).", "admin.visibility.showVersionTab": "Afficher l'onglet \"Version\"", "admin.visibility.showVersionTabDesc": "Contrôle l'affichage de l'onglet \"Version\" dans le panneau admin.", "admin.visibility.saved": "Configuration enregistrée", "admin.visibility.saveError": "Erreur lors de l'enregistrement : {error}", "admin.language.siteLanguage": "Langue du site", "admin.language.siteLanguageDesc": "Change la langue pour tous les utilisateurs. Rafraîchissement de page requis.", "admin.version.info": "Contrôle la version affichée dans le footer (stockée en DB). Clique sur ✓ pour activer une version, puis vérifie l'aperçu.", "admin.version.createNew": "Créer une nouvelle version", "admin.version.createNewDesc": "Ajoute une entrée dans l'historique (tu peux l'activer immédiatement).", "admin.version.version": "Version", "admin.version.versionPlaceholder": "ex: 1.0.1", "admin.version.versionExample": "Ex: 1.2.3", "admin.version.messageOptional": "Message (optionnel)", "admin.version.messagePlaceholder": "ex: Hotfix login", "admin.version.messageDesc": "Court & lisible (affiché dans le footer).", "admin.version.create": "Créer", "admin.version.createAndActivate": "Créer & activer", "admin.version.created": "Version créée.", "admin.version.createdAndActivated": "Version créée & activée.", "admin.version.confirmDelete": "Supprimer cette version ?", "admin.backup.chooseFile": "Choisis un fichier de sauvegarde (.ndjson.gz).", "admin.backup.restoreWithDrop": "RESTORE avec DROP: toutes les collections restaurées seront remplacées.", "admin.backup.restoreWithoutDrop": "RESTORE sans DROP: risque élevé de doublons/erreurs si la DB contient déjà des données.", "admin.backup.noDocumentsInserted": "Aucun document inséré (ou backup vide).", "admin.modal100.info": "Contenu affiché quand un utilisateur a vu 100% des films.", "admin.modal100.content": "Contenu", "admin.modal100.contentDesc": "Modifie le contenu puis enregistre. L'aperçu est live (non sauvegardé tant que tu n'enregistres pas).", "admin.modal100.titleLabel": "Titre", "admin.modal100.titlePlaceholder": "Félicitations! ...", "admin.modal100.textOptional": "Texte (optionnel)", "admin.modal100.textPlaceholder": "Texte affiché dans le modal (retours à la ligne conservés)", "admin.modal100.textDesc": "Affiché en texte brut (safe). Laisse vide si tu n'en veux pas.", "admin.modal100.htmlOptional": "HTML (optionnel)", "admin.modal100.htmlDesc": "Affiché comme HTML (le serveur retire les