Files
oscars-pool/public/locales/fr.json
T
Mathieu Moran 4308d6babf Implement en/fr localization across admin and user UIs
Introduce client-side localization helper and en/fr locale bundles.

Route admin control, picks, movies, stats, winners and settings UIs through i18n keys instead of hardcoded text.

Remove French text from the English UI and standardize shared messages (saving, network errors, confirmations).

Update .gitignore to ignore editor metadata and localization helper artifacts.
2026-02-01 20:20:02 -05:00

587 lines
32 KiB
JSON

{
"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": "[email protected]",
"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 <script> et les handlers on*).",
"admin.modal100.videoSrc": "Video src (optionnel)",
"admin.modal100.videoSrcDesc": "Chemin relatif (ex: video/reward.mp4) ou URL complète. Vide = pas de vidéo.",
"admin.modal100.browserNoVideo": "Votre navigateur ne supporte pas la vidéo.",
"admin.modal100.textLabel": "Texte",
"admin.modal100.textInfoShort": "affiché tel quel (safe), retours à la ligne conservés.",
"admin.modal100.htmlInfoShort": "le serveur retire les <script> et les attributs on*.",
"admin.modal100.videoLabel": "Vidéo",
"admin.modal100.videoInfoShort": "accepte un chemin relatif (ex: video/reward.mp4) ou une URL complète.",
"admin.modal100.defaultTitle": "Félicitations! very nice 🎉🎉🎉",
"admin.users.usersCount": "utilisateur(s)",
"admin.users.addUser": "Ajouter un utilisateur",
"admin.users.name": "Nom",
"admin.users.status": "Statut",
"admin.users.actions": "Actions",
"admin.users.loading": "Charge la liste…",
"admin.users.resetPassword": "Reset MDP",
"admin.users.resetPasswordDesc": "Génère un mot de passe temporaire. L'utilisateur devra le changer à sa prochaine connexion.",
"admin.users.tempPasswordOnce": "Mot de passe temporaire (affiché une seule fois)",
"admin.users.generate": "Générer",
"admin.users.deleteUser": "Supprimer un utilisateur",
"admin.users.aboutToDelete": "Tu es sur le point de supprimer:",
"admin.users.actionIrreversible": "Cette action est irréversible.",
"admin.users.typeEmailToConfirm": "Pour confirmer, tape l'email exact:",
"admin.users.emailPlaceholder": "[email protected]",
"admin.users.deleteButtonActivates": "Le bouton \"Supprimer\" s'activera seulement si l'email correspond.",
"admin.users.addUserDesc": "Crée un compte avec un mot de passe temporaire (affiché une seule fois). L'utilisateur devra le changer à sa prochaine connexion.",
"admin.users.namePlaceholder": "Prénom / pseudo",
"admin.users.reset": "Reset",
"admin.users.cannotDeleteSelf": "Impossible de supprimer ton propre compte via cette interface.",
"admin.users.adminDeleteDisabled": "La suppression des comptes admin est désactivée via cette interface.",
"admin.users.creating": "Création…",
"admin.users.nameRequired": "Nom requis.",
"admin.users.emailRequired": "Email requis.",
"admin.users.userCreated": "Utilisateur créé. Mot de passe temporaire généré.",
"admin.users.tempPasswordExpires": "Expire: {expiresAt}",
"admin.users.tempPasswordGenerating": "Génération du mot de passe temporaire…",
"admin.users.tempPasswordGenerated": "Mot de passe temporaire généré. Copie-le et envoie-le à l'utilisateur.",
"admin.users.tempPasswordGeneratedOnReset": "Mot de passe temporaire généré. L'utilisateur devra le changer à sa prochaine connexion.",
"admin.users.cannotCopyAuto": "Impossible de copier automatiquement. Copie manuellement.",
"admin.users.copied": "Copié.",
"admin.movies.idCopied": "Movie ID copié.",
"admin.movies.addedWithSubtitles": "Film ajouté avec sous-titres.",
"admin.movies.addedSuccessfully": "Film ajouté avec succès.",
"admin.movies.addedNoSubtitles": "Film ajouté, mais sous-titres non uploadés: {error}",
"admin.movies.updatedSuccessfully": "Film mis à jour avec succès.",
"admin.movies.updatedNoSubtitles": "Film mis à jour, mais sous-titres non uploadés: {error}",
"admin.language.saved": "Langue enregistrée",
"admin.movies.addInfo": "Ajout de films : cette section récupère automatiquement les infos du film via l'imdb_id (OMDb).",
"admin.movies.oscarYear": "Oscar year",
"admin.movies.oscarYearDesc": "Sépare films & stats par année.",
"admin.movies.category": "Catégorie",
"admin.movies.allYears": "Toutes",
"admin.movies.refreshOmdb": "Refresh OMDb",
"admin.movies.selectAll": "Tout sélectionner",
"admin.movies.selected": "sélectionné(s)",
"admin.movies.sel": "Sel.",
"admin.movies.titleCol": "Titre",
"admin.movies.player": "Player",
"admin.movies.year": "Année",
"admin.movies.editMovie": "Modifier le film",
"admin.movies.info": "Info",
"admin.movies.playerVideo": "Player / Vidéo",
"admin.movies.imdbIdLabel": "IMDB ID (ex: tt1234567)",
"admin.movies.rating": "Rating (imdbRating)",
"admin.movies.runtime": "Runtime",
"admin.movies.runtimeExample": "Ex: 142 min",
"admin.movies.camTag": "Tag CAM",
"admin.movies.refreshFromOmdb": "Recharger depuis OMDb (écrase titre / plot / rating / runtime / poster)",
"admin.movies.refreshFromOmdbDesc": "Si coché, le serveur refait un appel OMDb via l'IMDB ID au moment de l'enregistrement.",
"admin.movies.posterUrl": "Poster URL",
"admin.movies.description": "Description (Plot)",
"admin.movies.playerSource": "Lecteur (source)",
"admin.movies.mode": "Mode",
"admin.movies.modeDesc": "Auto = video_src → embed_src → vod_link.",
"admin.movies.videoUrl": "Video URL (mp4/webm/m3u8)",
"admin.movies.videoUrlDesc": "Si tu utilises un fichier serveur (ci-dessous) et que tu laisses vide, il utilisera auto /api/video/<movieId>.",
"admin.movies.serverVideoFile": "Fichier vidéo serveur (optionnel)",
"admin.movies.serverVideoFileDesc": "Chemin relatif sous VIDEO_FILES_DIR (défaut: public/video).",
"admin.movies.serverVideoFileLow": "Fichier vidéo serveur (basse qualité, optionnel)",
"admin.movies.serverVideoFileLowDesc": "Chemin relatif sous VIDEO_FILES_DIR. Exemple: LOW/123.LOW.mp4.",
"admin.movies.subtitles": "Sous-titres (SRT, optionnel)",
"admin.movies.existingSubtitles": "Sous-titres existants:",
"admin.movies.subtitlesNote": "Ajoute un fichier par langue; répète l'upload pour plusieurs sous-titres.",
"admin.movies.removeAllSubtitles": "Supprimer tous les sous-titres",
"admin.movies.removeAllSubtitlesDesc": "Efface les fichiers VTT/SRT et réinitialise les champs de langue/label.",
"admin.movies.confirmRemoveSubtitle": "Supprimer ce sous-titre ?",
"admin.movies.confirmDeleteSelected": "Supprimer {count} film(s) ? Cette action est irréversible.",
"admin.movies.subtitleLang": "Langue (ex: fr, en)",
"admin.movies.subtitleLabel": "Label (affiché)",
"admin.movies.subtitleDefault": "Par défaut",
"admin.movies.embedUrl": "Embed URL or iframe code",
"admin.movies.legacyVodLink": "Legacy VOD link (optionnel)",
"admin.backup.info": "Sauvegarde et restauration de la base MongoDB.",
"admin.backup.backup": "Backup",
"admin.backup.restore": "Restore",
"admin.backup.help": "Aide",
"admin.backup.backups": "Sauvegardes",
"admin.backup.backupsDesc": "Format .ndjson.gz, stocké sur le serveur.",
"admin.backup.createBackup": "Créer une sauvegarde",
"admin.backup.file": "Fichier",
"admin.backup.size": "Taille",
"admin.backup.modified": "Modifié",
"admin.backup.openTabToLoad": "Ouvre l'onglet pour charger la liste…",
"admin.backup.restoreBackup": "Restaurer une sauvegarde",
"admin.backup.restoreDesc": "Restaure un fichier .ndjson.gz. L'option drop est recommandée.",
"admin.backup.restoreWarning": "La restauration peut écraser les données. Fais un backup juste avant si besoin.",
"admin.backup.backupFile": "Fichier de backup",
"admin.backup.dropBeforeRestore": "Drop les collections avant restore (recommandé)",
"admin.backup.tip": "Conseil",
"admin.backup.tipDesc": "Utilise drop sauf si tu sais exactement ce que tu fais (sinon risque de doublons/erreurs).",
"admin.backup.howItWorks": "Fonctionnement",
"admin.backup.backupHowDesc": "crée un fichier .ndjson.gz (export MongoDB) et le garde sur le serveur.",
"admin.backup.download": "Télécharger",
"admin.backup.downloadDesc": "récupère le fichier localement (utile avant une manipulation risquée).",
"admin.backup.restoreHowDesc": "importe le fichier. Avec drop, les collections restaurées sont d'abord supprimées.",
"admin.backup.quickCheck": "Check rapide",
"admin.backup.quickCheckDesc": "Après restore, recharge la page et vérifie \"Films\", \"Checklist\" et \"Statistiques\".",
"admin.backup.confirmDelete": "Supprimer la sauvegarde \"{name}\" ?",
"admin.backup.creating": "Création…",
"admin.backup.created": "Sauvegarde créée : {name}",
"admin.categories.info": "Créez et gérez les catégories manuellement.",
"admin.categories.manualCreation": "Création manuelle",
"admin.categories.categoryCreated": "Catégorie créée avec succès.",
"admin.categories.list": "Liste",
"admin.categories.createManually": "Créer une catégorie manuellement",
"admin.categories.createManuallyDesc": "Ajoutez une catégorie et ses nommés un par un.",
"admin.categories.categoryNumber": "Numéro de catégorie",
"admin.categories.categoryName": "Nom de la catégorie",
"admin.categories.nomineesOnePerLine": "Nommés (un par ligne)",
"admin.categories.nomineesDesc": "Entrez un nommé par ligne.",
"admin.categories.note": "Note",
"admin.categories.noteDesc": "Vous pouvez créer plusieurs catégories pour la même année. Le numéro de catégorie doit être unique par année.",
"admin.categories.importedCategories": "Catégories importées",
"admin.categories.manageExisting": "Gérez les catégories existantes",
"admin.categories.allYears": "Toutes les années",
"admin.categories.categoriesSelected": "catégorie(s) sélectionnée(s)",
"admin.categories.editCategory": "Modifier la catégorie",
"admin.categories.selectAllTitle": "Sélectionner tout",
"admin.categories.table.number": "#",
"admin.categories.table.name": "Nom",
"admin.categories.table.nominees": "Nommés",
"admin.categories.table.actions": "Actions",
"admin.categories.confirmDelete": "Êtes-vous sûr de vouloir supprimer cette catégorie?",
"admin.categories.confirmDeleteMultiple": "Êtes-vous sûr de vouloir supprimer {count} catégorie(s)?\n\n{names}\n\nCette action est irréversible.",
"admin.categories.noneFound": "Aucune catégorie trouvée.",
"admin.categories.noneFoundYear": "Aucune catégorie trouvée pour l'année {year}.",
"admin.winners.info": "Définis un ou plusieurs gagnants par année (égalité possible).",
"admin.winners.manage": "Gérer",
"admin.winners.addWinner": "Ajouter un gagnant",
"admin.winners.addWinnerDesc": "Tu peux ajouter plusieurs gagnants pour une même année (égalité).",
"admin.winners.user": "Utilisateur",
"admin.winners.removeNote": "Pour retirer: utilise la liste ci-dessous.",
"admin.winners.pointsOptional": "Points (optionnel)",
"admin.winners.pointsPlaceholder": "ex: 42",
"admin.winners.pointsDesc": "Laisse vide si non applicable.",
"admin.winners.deleteAll": "Tout supprimer",
"admin.winners.currentWinners": "Gagnants actuels",
"admin.winners.globalView": "Vue globale (toutes les années).",
"admin.winners.howItWorks": "Comment ça marche",
"admin.winners.multipleWinners": "Une année peut avoir plusieurs gagnants (égalité).",
"admin.winners.tieLabel": "(égalité)",
"admin.winners.tie": "(égalité)",
"admin.winners.chooseUser": "Choisis un utilisateur.",
"admin.winners.confirmDeleteAll": "Supprimer tous les gagnants pour {year} ?",
"admin.player.errorLoading": "Impossible de charger les réglages du lecteur.",
"admin.versions.updated": "Version mise à jour.",
"admin.versions.deleted": "Version supprimée.",
"admin.winners.pointsOptionalInfo": "Les points sont optionnels (affichage uniquement).",
"admin.winners.removeInfo": "Pour retirer un gagnant, utilise le bouton \"Retirer\" dans la liste \"Gagnants actuels\".",
"admin.winners.tipDesc": "Si tu changes l'année active du site, vérifie aussi les gagnants de cette année.",
"admin.winners.removedFor": "Gagnant retiré pour {year}.",
"admin.winners.reloaded": "Gagnants rechargés.",
"admin.winners.deletedFor": "Gagnant supprimé pour {year}.",
"admin.winners.addedFor": "Gagnant ajouté pour {year}.",
"admin.backup.deleted": "Sauvegarde supprimée.",
"admin.backup.restoreComplete": "Restore terminé.",
"admin.movies.deletedSuccessfully": "Film(s) supprimé(s) avec succès.",
"admin.movies.updatedFromOmdb": "{count} film(s) mis à jour depuis OMDb.",
"admin.movies.omdbResults": "{success} succès, {errors} échec(s). {details}",
"admin.movies.subtitleDeleted": "Sous-titre supprimé.",
"admin.modal100.saved": "Modal 100% enregistré.",
"admin.content.reloaded": "Contenu rechargé.",
"admin.oscars.invalidYear": "Année invalide. Exemple attendu: 2026",
"admin.oscars.dateSaved": "Date Oscars enregistrée pour {year}: {date}",
"admin.oscars.dateCleared": "Date Oscars effacée pour {year} (retour au défaut: 15 mars).",
"admin.player.settingsSaved": "Réglages du lecteur enregistrés.",
"admin.player.settingsReloaded": "Réglages du lecteur rechargés.",
"admin.activeYear.applied": "Année active appliquée: {year}",
"admin.configuration.reloaded": "Configuration rechargée.",
"admin.categories.categoryNotFound": "Catégorie non trouvée.",
"admin.categories.categoryDeleted": "Catégorie supprimée.",
"admin.categories.categoryUpdated": "Catégorie mise à jour avec succès.",
"admin.categories.deletedCount": "{count} catégorie(s) supprimée(s){errors}",
"admin.oscars.invalidYearShort": "Année invalide.",
"admin.movies.subtitleDeleted": "Sous-titre supprimé.",
"admin.categories.categoryInvalid": "Catégorie invalide.",
"footer.oscarPool": "Oscar Pool",
"footer.by": "par",
"footer.versionNotConfigured": "Maintenant en Full HD",
"footer.versionUnavailable": "Version indisponible (DB)."
}