Files
MyTube/frontend/src/utils/locales/fr.ts
2025-12-27 21:55:25 -05:00

640 lines
35 KiB
TypeScript

export const fr = {
// Header
myTube: "MyTube",
manage: "Gérer",
settings: "Paramètres",
logout: "Déconnexion",
pleaseEnterUrlOrSearchTerm:
"Veuillez entrer une URL de vidéo ou un terme de recherche",
unexpectedErrorOccurred:
"Une erreur inattendue s'est produite. Veuillez réessayer.",
uploadVideo: "Mettre en ligne une vidéo",
enterUrlOrSearchTerm: "Entrez l'URL de la vidéo ou le terme de recherche",
manageVideos: "Gérer les vidéos",
instruction: "Instructions",
// Home
pasteUrl: "Coller l'URL de la vidéo ou de la collection",
download: "Télécharger",
search: "Rechercher",
recentDownloads: "Téléchargements récents",
noDownloads: "Aucun téléchargement pour le moment",
downloadStarted: "Téléchargement commencé",
downloadFailed: "Échec du téléchargement",
loadingVideos: "Chargement des vidéos...",
searchResultsFor: "Résultats de recherche pour",
fromYourLibrary: "De votre bibliothèque",
noMatchingVideos: "Aucune vidéo correspondante dans votre bibliothèque.",
fromYouTube: "De YouTube",
loadingYouTubeResults: "Chargement des résultats YouTube...",
noYouTubeResults: "Aucun résultat YouTube trouvé",
noVideosYet:
"Pas encore de vidéos. Soumettez une URL de vidéo pour télécharger votre première !",
views: "vues",
// Settings
general: "Général",
security: "Sécurité",
videoDefaults: "Paramètres par défaut du lecteur",
downloadSettings: "Paramètres de téléchargement",
language: "Langue",
websiteName: "Nom du site web",
websiteNameHelper: "{current}/{max} caractères (Défaut: {default})",
infiniteScroll: "Défilement infini",
infiniteScrollDisabled: "Désactivé lorsque le défilement infini est activé",
maxVideoColumns: "Colonnes vidéo maximales (Accueil)",
videoColumns: "Colonnes vidéo (Accueil)",
columnsCount: "{count} Colonnes",
enableLogin: "Activer la protection par connexion",
password: "Mot de passe",
enterPassword: "Entrez le mot de passe",
togglePasswordVisibility: "Afficher/Masquer le mot de passe",
passwordHelper:
"Laisser vide pour conserver le mot de passe actuel, ou taper pour changer",
passwordSetHelper: "Définir un mot de passe pour accéder à l'application",
autoPlay: "Lecture automatique des vidéos",
autoLoop: "Boucle automatique des vidéos",
maxConcurrent: "Téléchargements simultanés max",
saveSettings: "Enregistrer les paramètres",
saving: "Enregistrement...",
backToManage: "Retour à la gestion",
settingsSaved: "Paramètres enregistrés avec succès",
settingsFailed: "Échec de l'enregistrement des paramètres",
debugMode: "Mode débogage",
debugModeDescription:
"Afficher ou masquer les messages de la console (nécessite une actualisation)",
tagsManagement: "Gestion des tags",
newTag: "Nouveau tag",
tags: "Tags",
tagsManagementNote:
'N\'oubliez pas de cliquer sur "Enregistrer les paramètres" après avoir ajouté ou supprimé des tags pour appliquer les modifications.',
// Database
database: "Base de données",
migrateDataDescription:
"Migrer les données des fichiers JSON hérités vers la nouvelle base de données SQLite. Cette action peut être exécutée plusieurs fois en toute sécurité (les doublons seront ignorés).",
migrateDataButton: "Migrer les données depuis JSON",
scanFiles: "Scanner les fichiers",
scanFilesSuccess: "Analyse terminée. {count} nouvelles vidéos ajoutées.",
previouslyDeletedVideo: "Vidéo précédemment supprimée",
previouslyDeleted: "Précédemment supprimé",
videoWasDeleted:
"Cette vidéo a été précédemment téléchargée mais a été supprimée.",
scanFilesDeleted: " {count} fichiers manquants supprimés.",
scanFilesFailed: "L'analyse a échoué",
scanFilesConfirmMessage:
"Le système analysera le dossier racine du chemin vidéo. Les nouveaux fichiers seront ajoutés et les fichiers vidéo manquants seront supprimés du système.",
scanning: "Analyse en cours...",
migrateConfirmation:
"Êtes-vous sûr de vouloir migrer les données ? Cela peut prendre quelques instants.",
migrationResults: "Résultats de la migration",
migrationReport: "Rapport de migration",
migrationSuccess: "Migration terminée. Voir les détails dans l'alerte.",
migrationNoData: "Migration terminée mais aucune donnée trouvée.",
migrationFailed: "Échec de la migration",
migrationWarnings: "AVERTISSEMENTS",
migrationErrors: "ERREURS",
itemsMigrated: "éléments migrés",
fileNotFound: "Fichier non trouvé à",
noDataFilesFound:
"Aucun fichier de données trouvé à migrer. Veuillez vérifier vos mappages de volume.",
removeLegacyData: "Supprimer les données héritées",
removeLegacyDataDescription:
"Supprimer les anciens fichiers JSON (videos.json, collections.json, etc.) pour libérer de l'espace disque. Ne le faites qu'après avoir vérifié que vos données ont été migrées avec succès.",
removeLegacyDataConfirmTitle: "Supprimer les données héritées ?",
removeLegacyDataConfirmMessage:
"Êtes-vous sûr de vouloir supprimer les fichiers de données JSON hérités ? Cette action est irréversible.",
legacyDataDeleted: "Données héritées supprimées avec succès.",
formatLegacyFilenames: "Formater les noms de fichiers hérités",
formatLegacyFilenamesDescription:
"Renommer par lot tous les fichiers vidéo, miniatures et sous-titres au nouveau format standard : Titre-Auteur-AAAA. Cette opération modifiera les noms de fichiers sur le disque et mettra à jour la logique de la base de données.",
formatLegacyFilenamesButton: "Formater les noms de fichiers",
formatFilenamesSuccess:
"Traités : {processed}\nRenommés : {renamed}\nErreurs : {errors}",
formatFilenamesDetails: "Détails :",
formatFilenamesMore: "...et {count} de plus",
formatFilenamesError: "Échec du formatage des noms de fichiers : {error}",
deleteLegacyDataButton: "Supprimer les données héritées",
cleanupTempFiles: "Nettoyer les fichiers temporaires",
cleanupTempFilesDescription:
"Supprimer tous les fichiers de téléchargement temporaires (.ytdl, .part) du répertoire des téléversements. Cela aide à libérer de l'espace disque des téléchargements incomplets ou annulés.",
cleanupTempFilesConfirmTitle: "Nettoyer les fichiers temporaires?",
cleanupTempFilesConfirmMessage:
"Cela supprimera définitivement tous les fichiers .ytdl et .part dans le répertoire des téléversements. Assurez-vous qu'il n'y a pas de téléchargements actifs avant de continuer.",
cleanupTempFilesActiveDownloads:
"Impossible de nettoyer pendant que des téléchargements sont actifs. Veuillez attendre la fin de tous les téléchargements ou les annuler d'abord.",
itemsPerPage: "Éléments par page",
itemsPerPageHelper: "Nombre de vidéos à afficher par page (Défaut : 12)",
showYoutubeSearch: "Afficher les résultats de recherche YouTube",
visitorMode: "Mode Visiteur (Lecture seule)",
visitorModeReadOnly: "Mode visiteur : Lecture seule",
visitorModeDescription:
"Mode lecture seule. Les vidéos masquées ne seront pas visibles pour les visiteurs.",
visitorModePasswordPrompt:
"Veuillez entrer le mot de passe du site web pour modifier les paramètres du mode visiteur.",
cleanupTempFilesSuccess:
"{count} fichier(s) temporaire(s) supprimé(s) avec succès.",
cleanupTempFilesFailed: "Échec du nettoyage des fichiers temporaires",
// Cookie Settings
cookieSettings: "Paramètres des Cookies",
cookieUploadDescription:
'Téléchargez cookies.txt pour passer les vérifications de robots YouTube et activer le téléchargement des sous-titres Bilibili. Le fichier sera automatiquement renommé en cookies.txt. (Exemple : utilisez l\'extension "Get cookies.txt LOCALLY" pour exporter les cookies)',
uploadCookies: "Télécharger les Cookies",
onlyTxtFilesAllowed: "Seuls les fichiers .txt sont autorisés",
cookiesUploadedSuccess: "Cookies téléchargés avec succès",
cookiesUploadFailed: "Échec du téléchargement des cookies",
cookiesFound: "cookies.txt trouvé",
cookiesNotFound: "cookies.txt introuvable",
deleteCookies: "Supprimer les cookies",
confirmDeleteCookies:
"Êtes-vous sûr de vouloir supprimer le fichier de cookies ? Cela affectera votre capacité à télécharger des vidéos soumises à une limite d'âge ou réservées aux membres.",
cookiesDeletedSuccess: "Cookies supprimés avec succès",
cookiesDeleteFailed: "Échec de la suppression des cookies",
// Cloud Drive
cloudDriveSettings: "Stockage Cloud (OpenList)",
cloudDriveDescription:
"Télécharge automatiquement les vidéos sur le stockage cloud (Alist) et recherche les nouveaux fichiers dans le cloud. Les fichiers locaux seront supprimés après un téléchargement réussi.",
enableAutoSave: "Activer la synchronisation Cloud",
apiUrl: "URL de l'API",
apiUrlHelper: "ex. https://your-alist-instance.com/api/fs/put",
token: "Jeton (Token)",
publicUrl: "URL Publique",
publicUrlHelper:
"Domaine public pour accéder aux fichiers (ex. https://your-cloudflare-tunnel-domain.com). S'il est défini, il sera utilisé à la place de l'URL de l'API pour accéder aux fichiers.",
uploadPath: "Chemin de téléchargement",
cloudDrivePathHelper:
"Chemin du répertoire dans le cloud, ex. /mytube-uploads",
scanPaths: "Chemins d'analyse",
scanPathsHelper:
"Un chemin par ligne. Les vidéos seront analysées à partir de ces chemins. Si vide, le chemin de téléchargement sera utilisé. Exemple :\n/a/Films\n/b/Documentaires",
cloudDriveNote:
"Après avoir activé cette fonctionnalité, les vidéos nouvellement téléchargées seront automatiquement téléchargées vers le stockage cloud et les fichiers locaux seront supprimés. Les vidéos seront lues depuis le stockage cloud via un proxy.",
cloudScanAdded: "Ajouté depuis le cloud",
testing: "Test en cours...",
testConnection: "Tester la connexion",
sync: "Synchroniser",
syncToCloud: "Synchronisation bidirectionnelle",
syncWarning:
"Cette opération téléchargera les vidéos locales vers le cloud et recherchera les nouveaux fichiers dans le stockage cloud. Les fichiers locaux seront supprimés après le téléchargement.",
syncing: "Synchronisation...",
syncCompleted: "Synchronisation Terminée",
syncFailed: "Échec de la Synchronisation",
syncReport: "Total : {total} | Téléchargés : {uploaded} | Échoués : {failed}",
syncErrors: "Erreurs :",
fillApiUrlToken: "Veuillez d'abord remplir l'URL de l'API et le jeton",
connectionTestSuccess:
"Test de connexion réussi ! Les paramètres sont valides.",
connectionFailedStatus:
"Échec de la connexion : Le serveur a renvoyé le statut {status}",
connectionFailedUrl:
"Impossible de se connecter au serveur. Veuillez vérifier l'URL de l'API.",
authFailed: "Échec de l'authentification. Veuillez vérifier votre jeton.",
connectionTestFailed: "Échec du test de connexion : {error}",
syncFailedMessage: "Échec de la synchronisation. Veuillez réessayer.",
foundVideosToSync:
"{count} vidéos avec des fichiers locaux à synchroniser trouvées",
uploadingVideo: "Téléversement : {title}",
clearThumbnailCache: "Clear Thumbnail Local Cache",
clearing: "Clearing...",
clearThumbnailCacheSuccess: "Thumbnail cache cleared successfully. Thumbnails will be regenerated when accessed next time.",
clearThumbnailCacheError: "Failed to clear thumbnail cache",
clearThumbnailCacheConfirmMessage: "This will clear all locally cached thumbnails for cloud videos. Thumbnails will be regenerated from cloud storage when accessed next time. Continue?",
// Manage
manageContent: "Gérer le contenu",
videos: "Vidéos",
collections: "Collections",
allVideos: "Toutes les vidéos",
delete: "Supprimer",
backToHome: "Retour à l'accueil",
confirmDelete: "Êtes-vous sûr de vouloir supprimer ceci ?",
deleteSuccess: "Supprimé avec succès",
deleteFailed: "Échec de la suppression",
noVideos: "Aucune vidéo trouvée",
noCollectionsFound: "Aucune collection trouvée",
noCollections: "Aucune collection trouvée",
searchVideos: "Rechercher des vidéos...",
thumbnail: "Miniature",
title: "Titre",
author: "Auteur",
authors: "Auteurs",
created: "Créé",
name: "Nom",
size: "Taille",
actions: "Actions",
deleteCollection: "Supprimer la collection",
deleteVideo: "Supprimer la vidéo",
noVideosFoundMatching: "Aucune vidéo ne correspond à votre recherche.",
refreshThumbnail: "Actualiser la miniature",
// Video Player
playing: "Lecture",
paused: "Pause",
next: "Suivant",
previous: "Précédent",
loop: "Boucle",
autoPlayOn: "Lecture auto activée",
autoPlayOff: "Lecture auto désactivée",
autoPlayNext: "Lecture automatique suivante",
videoNotFound: "Vidéo non trouvée",
videoNotFoundOrLoaded: "Vidéo non trouvée ou impossible à charger.",
deleting: "Suppression...",
addToCollection: "Ajouter à la collection",
originalLink: "Lien original",
source: "Source :",
addedDate: "Date d'ajout :",
hideComments: "Masquer les commentaires",
showComments: "Afficher les commentaires",
latestComments: "Derniers commentaires",
noComments: "Aucun commentaire disponible.",
upNext: "À suivre",
noOtherVideos: "Aucune autre vidéo disponible",
currentlyIn: "Actuellement dans :",
collectionWarning:
"L'ajout à une autre collection la supprimera de la collection.",
// Snackbar Messages
videoDownloading: "Téléchargement de la vidéo",
downloadStartedSuccessfully: "Le téléchargement a commencé avec succès",
collectionCreatedSuccessfully: "Collection créée avec succès",
videoAddedToCollection: "Vidéo ajoutée à la collection",
videoRemovedFromCollection: "Vidéo retirée de la collection",
collectionDeletedSuccessfully: "Collection supprimée avec succès",
failedToDeleteCollection: "Échec de la suppression de la collection",
addToExistingCollection: "Ajouter à une collection existante :",
selectCollection: "Sélectionner une collection",
add: "Ajouter",
createNewCollection: "Créer une nouvelle collection :",
collectionName: "Nom de la collection",
create: "Créer",
removeFromCollection: "Retirer de la collection",
confirmRemoveFromCollection:
"Êtes-vous sûr de vouloir retirer cette vidéo de la collection ?",
remove: "Retirer",
loadingVideo: "Chargement de la vidéo...",
current: "(Actuel)",
rateThisVideo: "Noter cette vidéo",
enterFullscreen: "Plein écran",
exitFullscreen: "Quitter le plein écran",
share: "Partager",
editTitle: "Modifier le titre",
hideVideo: "Rendre la vidéo cachée pour le mode visiteur",
showVideo: "Rendre la vidéo visible pour le mode visiteur",
toggleVisibility: "Basculer la visibilité",
titleUpdated: "Titre mis à jour avec succès",
titleUpdateFailed: "Échec de la mise à jour du titre",
thumbnailRefreshed: "Miniature actualisée avec succès",
thumbnailRefreshFailed: "Échec de l'actualisation de la miniature",
videoUpdated: "Vidéo mise à jour avec succès",
videoUpdateFailed: "Échec de la mise à jour de la vidéo",
failedToLoadVideos:
"Échec du chargement des vidéos. Veuillez réessayer plus tard.",
videoRemovedSuccessfully: "Vidéo supprimée avec succès",
failedToDeleteVideo: "Échec de la suppression de la vidéo",
pleaseEnterSearchTerm: "Veuillez entrer un terme de recherche",
failedToSearch: "Échec de la recherche. Veuillez réessayer.",
searchCancelled: "Recherche annulée",
openInExternalPlayer: "Ouvrir dans un lecteur externe",
playWith: "Lire avec...",
deleteAllFilteredVideos: "Supprimer toutes les vidéos filtrées",
confirmDeleteFilteredVideos:
"Êtes-vous sûr de vouloir supprimer {count} vidéos filtrées par les tags sélectionnés ?",
deleteFilteredVideosSuccess: "{count} vidéos supprimées avec succès.",
deletingVideos: "Suppression des vidéos...",
// Login
signIn: "Se connecter",
verifying: "Vérification...",
incorrectPassword: "Mot de passe incorrect",
loginFailed: "Échec de la vérification du mot de passe",
defaultPasswordHint: "Mot de passe par défaut : 123",
checkingConnection: "Vérification de la connexion...",
connectionError: "Erreur de Connexion",
backendConnectionFailed:
"Impossible de se connecter au serveur. Veuillez vérifier que le backend est en cours d'exécution et que le port est ouvert, puis réessayez.",
retry: "Réessayer",
resetPassword: "Réinitialiser le mot de passe",
resetPasswordTitle: "Réinitialiser le mot de passe",
resetPasswordMessage:
"Êtes-vous sûr de vouloir réinitialiser le mot de passe ? Le mot de passe actuel sera réinitialisé en une chaîne aléatoire de 8 caractères et affiché dans le journal du backend.",
resetPasswordConfirm: "Réinitialiser",
resetPasswordSuccess:
"Le mot de passe a été réinitialisé. Consultez les journaux du backend pour le nouveau mot de passe.",
waitTimeMessage: "Veuillez attendre {time} avant de réessayer.",
tooManyAttempts: "Trop de tentatives échouées.",
linkCopied: "Lien copié dans le presse-papiers",
copyFailed: "Échec de la copie du lien",
// Collection Page
loadingCollection: "Chargement de la collection...",
collectionNotFound: "Collection non trouvée",
noVideosInCollection: "Aucune vidéo dans cette collection.",
back: "Retour",
// Author Videos
loadVideosError:
"Échec du chargement des vidéos. Veuillez réessayer plus tard.",
unknownAuthor: "Inconnu",
noVideosForAuthor: "Aucune vidéo trouvée pour cet auteur.",
deleteAuthor: "Supprimer l'auteur",
deleteAuthorConfirmation:
"Êtes-vous sûr de vouloir supprimer l'auteur {author} ? Cela supprimera toutes les vidéos associées à cet auteur.",
authorDeletedSuccessfully: "Auteur supprimé avec succès",
failedToDeleteAuthor: "Échec de la suppression de l'auteur",
// Delete Collection Modal
deleteCollectionTitle: "Supprimer la collection",
deleteCollectionConfirmation:
"Êtes-vous sûr de vouloir supprimer la collection",
collectionContains: "Cette collection contient",
deleteCollectionOnly: "Supprimer la collection uniquement",
deleteCollectionAndVideos: "Supprimer la collection et toutes les vidéos",
// Common
loading: "Chargement...",
error: "Erreur",
success: "Succès",
cancel: "Annuler",
close: "Fermer",
ok: "OK",
confirm: "Confirmer",
save: "Enregistrer",
note: "Note",
on: "On",
off: "Off",
continue: "Continuer",
expand: "Développer",
collapse: "Réduire",
// Video Card
unknownDate: "Date inconnue",
part: "Partie",
collection: "Collection",
// Upload Modal
selectVideoFile: "Sélectionner un fichier vidéo",
pleaseSelectVideo: "Veuillez sélectionner un fichier vidéo",
uploadFailed: "Échec de la mise en ligne",
failedToUpload: "Échec de la mise en ligne de la vidéo",
uploading: "Mise en ligne...",
upload: "Mettre en ligne",
// Bilibili Modal
bilibiliCollectionDetected: "Collection Bilibili détectée",
bilibiliSeriesDetected: "Série Bilibili détectée",
multiPartVideoDetected: "Vidéo en plusieurs parties détectée",
authorOrPlaylist: "Auteur / Playlist",
playlistDetected: "Playlist détectée",
playlistHasVideos: "Cette playlist contient {count} vidéos.",
downloadPlaylistAndCreateCollection: "Télécharger les vidéos de la playlist et créer une collection pour celle-ci ?",
collectionHasVideos: "Cette collection Bilibili contient {count} vidéos.",
seriesHasVideos: "Cette série Bilibili contient {count} vidéos.",
videoHasParts: "Cette vidéo Bilibili contient {count} parties.",
downloadAllVideos: "Télécharger les {count} vidéos",
downloadAllParts: "Télécharger les {count} parties",
downloadThisVideoOnly: "Télécharger cette vidéo uniquement",
downloadCurrentPartOnly: "Télécharger la partie actuelle uniquement",
processing: "Traitement...",
wouldYouLikeToDownloadAllParts:
"Voulez-vous télécharger toutes les parties ?",
wouldYouLikeToDownloadAllVideos:
"Voulez-vous télécharger toutes les vidéos ?",
allPartsAddedToCollection:
"Toutes les parties seront ajoutées à cette collection",
allVideosAddedToCollection:
"Toutes les vidéos seront ajoutées à cette collection",
queued: "En file d'attente",
waitingInQueue: "En attente dans la file",
// Downloads
downloads: "Téléchargements",
activeDownloads: "Téléchargements Actifs",
manageDownloads: "Gérer les Téléchargements",
queuedDownloads: "Téléchargements en File d'Attente",
downloadHistory: "Historique des Téléchargements",
clearQueue: "Vider la File d'Attente",
clearHistory: "Effacer l'Historique",
noActiveDownloads: "Aucun téléchargement actif",
noQueuedDownloads: "Aucun téléchargement en file d'attente",
noDownloadHistory: "Aucun historique de téléchargement",
downloadCancelled: "Téléchargement annulé",
queueCleared: "File d'attente vidée",
historyCleared: "Historique effacé",
removedFromQueue: "Retiré de la file d'attente",
removedFromHistory: "Retiré de l'historique",
status: "Statut",
progress: "Progression",
speed: "Vitesse",
finishedAt: "Terminé à",
failed: "Échoué",
// Batch Download
batchDownload: "Téléchargement par lot",
batchDownloadDescription: "Collez plusieurs URL ci-dessous, une par ligne.",
urls: "URLs",
addToQueue: "Ajouter à la file d'attente",
batchTasksAdded: "{count} tâches ajoutées",
addBatchTasks: "Ajouter des tâches par lot",
// Subscriptions
subscribeToAuthor: "S'abonner à l'auteur",
subscribeConfirmationMessage: "Voulez-vous vous abonner à {author} ?",
subscribeDescription:
"Le système vérifiera automatiquement les nouvelles vidéos de cet auteur et les téléchargera.",
checkIntervalMinutes: "Intervalle de vérification (minutes)",
subscribe: "S'abonner",
subscriptions: "Abonnements",
interval: "Intervalle",
lastCheck: "Dernière vérification",
platform: "Plateforme",
unsubscribe: "Se désabonner",
confirmUnsubscribe: "Êtes-vous sûr de vouloir vous désabonner de {author} ?",
subscribedSuccessfully: "Abonné avec succès",
unsubscribedSuccessfully: "Désabonné avec succès",
subscriptionAlreadyExists: "Vous êtes déjà abonné à cet auteur.",
minutes: "minutes",
never: "Jamais",
downloadAllPreviousVideos:
"Télécharger toutes les vidéos précédentes de cet auteur",
downloadAllPreviousWarning:
"Avertissement : Cela téléchargera toutes les vidéos précédentes de cet auteur. Cela peut consommer un espace de stockage important et pourrait déclencher des mécanismes de détection de bots qui peuvent entraîner des interdictions temporaires ou permanentes de la plateforme. Utilisez à vos propres risques.",
continuousDownloadTasks: "Tâches de téléchargement continu",
taskStatusActive: "Actif",
taskStatusPaused: "En pause",
taskStatusCompleted: "Terminé",
taskStatusCancelled: "Annulé",
downloaded: "Téléchargé",
cancelTask: "Annuler la tâche",
confirmCancelTask:
"Êtes-vous sûr de vouloir annuler la tâche de téléchargement pour {author} ?",
taskCancelled: "Tâche annulée avec succès",
deleteTask: "Supprimer la tâche",
confirmDeleteTask:
"Êtes-vous sûr de vouloir supprimer l'enregistrement de tâche pour {author} ? Cette action ne peut pas être annulée.",
taskDeleted: "Tâche supprimée avec succès",
clearFinishedTasks: "Effacer les tâches terminées",
tasksCleared: "Tâches terminées effacées avec succès",
confirmClearFinishedTasks: "Êtes-vous sûr de vouloir effacer toutes les tâches terminées (complétées, annulées) ? Cela les supprimera de la liste mais ne supprimera aucun fichier téléchargé.",
clear: "Effacer",
// Instruction Page
instructionSection1Title: "1. Téléchargement et Gestion des Tâches",
instructionSection1Desc:
"Ce module comprend l'acquisition de vidéos, les tâches par lots et les fonctions d'importation de fichiers.",
instructionSection1Sub1: "Téléchargement de Lien :",
instructionSection1Item1Label: "Téléchargement de Base :",
instructionSection1Item1Text:
"Collez des liens de divers sites vidéo dans la zone de saisie pour télécharger directement.",
instructionSection1Item2Label: "Permissions :",
instructionSection1Item2Text:
"Pour les sites nécessitant une adhésion ou une connexion, veuillez d'abord vous connecter au compte correspondant dans un nouvel onglet du navigateur pour acquérir les permissions de téléchargement.",
instructionSection1Sub2: "Reconnaissance Intelligente :",
instructionSection1Item3Label: "Abonnement Auteur YouTube :",
instructionSection1Item3Text:
"Lorsque le lien collé est la chaîne d'un auteur, le système demandera si vous souhaitez vous abonner. Après l'abonnement, le système peut scanner et télécharger automatiquement les mises à jour de l'auteur à des intervalles définis.",
instructionSection1Item4Label: "Téléchargement de Collection Bilibili :",
instructionSection1Item4Text:
"Lorsque le lien collé est un favori/collection Bilibili, le système demandera si vous souhaitez télécharger tout le contenu de la collection.",
instructionSection1Sub3:
"Outils Avancés (Page de Gestion des Téléchargements) :",
instructionSection1Item5Label: "Ajouter des Tâches par Lots :",
instructionSection1Item5Text:
"Prend en charge le collage de plusieurs liens de téléchargement à la fois (un par ligne) pour l'ajout par lots.",
instructionSection1Item6Label: "Scanner les Fichiers :",
instructionSection1Item6Text:
"Recherche automatiquement tous les fichiers dans le répertoire racine de stockage vidéo et les dossiers de premier niveau. Cette fonction convient pour synchroniser les fichiers avec le système après que les administrateurs les ont déposés manuellement dans le backend du serveur.",
instructionSection1Item7Label: "Télécharger une Vidéo :",
instructionSection1Item7Text:
"Prend en charge le téléchargement de fichiers vidéo locaux directement du client vers le serveur.",
instructionSection2Title: "2. Gestion de la Bibliothèque Vidéo",
instructionSection2Desc:
"Maintenir et éditer les ressources vidéo téléchargées ou importées.",
instructionSection2Sub1: "Suppression de Collection/Vidéo :",
instructionSection2Text1:
"Lors de la suppression d'une collection sur la page de gestion, le système offre deux options : supprimer uniquement l'élément de la liste de collection (conserver les fichiers), ou supprimer complètement les fichiers physiques dans la collection.",
instructionSection2Sub2: "Réparation de Miniature :",
instructionSection2Text2:
"Si une vidéo n'a pas de couverture après le téléchargement, cliquez sur le bouton d'actualisation sur la miniature de la vidéo, et le système recapturera la première image de la vidéo comme nouvelle miniature.",
instructionSection3Title: "3. Paramètres du Système",
instructionSection3Desc:
"Configurer les paramètres du système, maintenir les données et étendre les fonctions.",
instructionSection3Sub1: "Paramètres de Sécurité :",
instructionSection3Text1:
"Définissez le mot de passe de connexion au système (le mot de passe initial par défaut est 123, il est recommandé de le changer après la première connexion).",
instructionSection3Sub2: "Gestion des Étiquettes :",
instructionSection3Text2:
"Prend en charge l'ajout ou la suppression d'étiquettes de classification vidéo. Remarque : Vous devez cliquer sur le bouton \"Enregistrer\" en bas de la page pour que les modifications prennent effet.",
instructionSection3Sub3: "Maintenance du Système :",
instructionSection3Item1Label: "Nettoyer les Fichiers Temporaires :",
instructionSection3Item1Text:
"Utilisé pour effacer les fichiers de téléchargement temporaires résiduels causés par des pannes occasionnelles du backend pour libérer de l'espace.",
instructionSection3Item2Label: "Migration de Base de Données :",
instructionSection3Item2Text:
"Conçu pour les utilisateurs des premières versions. Utilisez cette fonction pour migrer les données de JSON vers la nouvelle base de données SQLite. Après une migration réussie, cliquez sur le bouton de suppression pour nettoyer les anciennes données historiques.",
instructionSection3Sub4: "Services Étendus :",
instructionSection3Item3Label: "OpenList Cloud Drive :",
instructionSection3Item3Text:
"(En Développement) Prend en charge la connexion aux services OpenList déployés par l'utilisateur. Ajoutez la configuration ici pour activer l'intégration du lecteur cloud.",
history: "Historique",
downloading: "Téléchargement...",
poweredBy: "Propulsé par MyTube",
existingVideoDetected: "Vidéo existante détectée",
videoAlreadyDownloaded: "Cette vidéo a déjà été téléchargée.",
viewVideo: "Voir la vidéo",
downloadAgain: "Télécharger à nouveau",
downloadedOn: "Téléchargé le",
deletedOn: "Supprimé le",
existingVideo: "Vidéo existante",
skipped: "Ignoré",
videoSkippedExists: "La vidéo existe déjà, téléchargement ignoré",
videoSkippedDeleted:
"La vidéo a été supprimée précédemment, téléchargement ignoré",
// Sorting
sort: "Trier",
sortBy: "Trier par",
dateDesc: "Date d'ajout (Plus récent)",
dateAsc: "Date d'ajout (Plus ancien)",
viewsDesc: "Vues (Décroissant)",
viewsAsc: "Vues (Croissant)",
nameAsc: "Nom (A-Z)",
random: "Aléatoire",
// yt-dlp Configuration
ytDlpConfiguration: "Configuration yt-dlp",
ytDlpConfigurationDescription:
"Configurez les options de téléchargement yt-dlp. Voir",
ytDlpConfigurationDocs: "documentation",
ytDlpConfigurationDescriptionEnd: "pour plus d'informations.",
customize: "Personnaliser",
hide: "Masquer",
reset: "Réinitialiser",
more: "Plus",
proxyOnlyApplyToYoutube: "Proxy s'applique uniquement à Youtube",
moveSubtitlesToVideoFolder: "Emplacement des sous-titres",
moveSubtitlesToVideoFolderOn: "Avec la vidéo",
moveSubtitlesToVideoFolderOff: "Dans le dossier de sous-titres isolé",
moveSubtitlesToVideoFolderDescription:
"Si activé, les fichiers de sous-titres seront déplacés dans le même dossier que le fichier vidéo. Si désactivé, ils seront déplacés vers le dossier de sous-titres isolé.",
moveThumbnailsToVideoFolder: "Emplacement des miniatures",
moveThumbnailsToVideoFolderOn: "Avec la vidéo",
moveThumbnailsToVideoFolderOff: "Dans un dossier d'images isolé",
moveThumbnailsToVideoFolderDescription:
"Si activé, les fichiers de miniatures seront déplacés dans le même dossier que le fichier vidéo. Si désactivé, ils seront déplacés dans le dossier d'images isolé.",
// Database Export/Import
exportImportDatabase: "Exporter/Importer la Base de Données",
exportImportDatabaseDescription:
"Exportez votre base de données en tant que fichier de sauvegarde ou importez une sauvegarde précédemment exportée. L'importation remplacera les données existantes par les données de sauvegarde.",
exportDatabase: "Exporter la Base de Données",
importDatabase: "Importer la Base de Données",
onlyDbFilesAllowed: "Seuls les fichiers .db sont autorisés",
importDatabaseWarning:
"Avertissement : L'importation d'une base de données remplacera toutes les données existantes. Assurez-vous d'abord d'exporter votre base de données actuelle en tant que sauvegarde.",
selectDatabaseFile: "Sélectionner un Fichier de Base de Données",
databaseExportedSuccess: "Base de données exportée avec succès",
databaseExportFailed: "Échec de l'exportation de la base de données",
databaseImportedSuccess:
"Base de données importée avec succès. Les données existantes ont été remplacées par les données de sauvegarde.",
databaseImportFailed: "Échec de l'importation de la base de données",
cleanupBackupDatabases: "Nettoyer les Bases de Données de Sauvegarde",
cleanupBackupDatabasesWarning:
"Avertissement : Cela supprimera définitivement tous les fichiers de base de données de sauvegarde (mytube-backup-*.db.backup) qui ont été créés lors d'importations précédentes. Cette action ne peut pas être annulée. Êtes-vous sûr de vouloir continuer ?",
backupDatabasesCleanedUp:
"Bases de données de sauvegarde nettoyées avec succès",
backupDatabasesCleanupFailed:
"Échec du nettoyage des bases de données de sauvegarde",
restoreFromLastBackup: "Restaurer depuis la Dernière Sauvegarde",
restoreFromLastBackupWarning:
"Avertissement : Cela restaurera la base de données depuis le dernier fichier de sauvegarde automatique. Toutes les données actuelles seront remplacées par les données de sauvegarde. Cette action ne peut pas être annulée. Êtes-vous sûr de vouloir continuer ?",
restoreFromLastBackupSuccess:
"Base de données restaurée avec succès depuis la sauvegarde",
restoreFromLastBackupFailed: "Échec de la restauration depuis la sauvegarde",
lastBackupDate: "Date de la dernière sauvegarde",
noBackupAvailable: "Aucune sauvegarde disponible",
// Cloudflare Tunnel
cloudflaredTunnel: "Cloudflare Tunnel",
enableCloudflaredTunnel: "Enable Cloudflare Tunnel",
cloudflaredToken: "Tunnel Token (Optional)",
cloudflaredTokenHelper: "Paste your tunnel token here, or leave empty to use a random Quick Tunnel.",
waitingForUrl: "Waiting for Quick Tunnel URL...",
running: "Running",
stopped: "Stopped",
tunnelId: "Tunnel ID",
accountTag: "Account Tag",
copied: "Copied!",
clickToCopy: "Click to copy",
quickTunnelWarning: "Quick Tunnel URLs change every time the tunnel restarts.",
managedInDashboard: "Public hostname is managed in your Cloudflare Zero Trust Dashboard.",
failedToDownloadVideo: "Échec du téléchargement de la vidéo. Veuillez réessayer.",
failedToDownload: "Échec du téléchargement. Veuillez réessayer.",
playlistDownloadStarted: "Téléchargement de la playlist commencé",
copyUrl: "Copier l'URL",
new: "NOUVEAU",
disclaimerTitle: "Avis de non-responsabilité",
disclaimerText: "1. Objectif et Restrictions\nCe logiciel (y compris le code et la documentation) est destiné uniquement à l'apprentissage personnel, à la recherche et à l'échange technique. Il est strictement interdit d'utiliser ce logiciel à des fins commerciales ou pour toute activité illégale violant les lois et réglementations locales.\n\n2. Responsabilité\nLe développeur n'a aucune connaissance et aucun contrôle sur la façon dont les utilisateurs utilisent ce logiciel. Toute responsabilité légale, litige ou dommage découlant de l'utilisation illégale ou inappropriée de ce logiciel (y compris, mais sans s'y limiter, la violation du droit d'auteur) sera à la charge exclusive de l'utilisateur. Le développeur n'assume aucune responsabilité directe, indirecte ou conjointe.\n\n3. Modifications et Distribution\nCe projet est open source. Tout individu ou organisation modifiant ou forkant ce code doit se conformer à la licence open source. Important : Si un tiers modifie le code pour contourner ou supprimer les mécanismes d'authentification/sécurité d'origine de l'utilisateur et distribue de telles versions, le modificateur/distributeur porte l'entière responsabilité de toutes les conséquences. Nous déconseillons fortement de contourner ou d'altérer tout mécanisme de vérification de sécurité.\n\n4. Déclaration à But Non Lucratif\nCeci est un projet open source entièrement gratuit. Le développeur n'accepte pas de dons et n'a jamais publié de pages de dons. Le logiciel lui-même ne permet aucun frais et n'offre aucun service payant. Veuillez être vigilant et vous méfier de toute arnaque ou information trompeuse prétendant percevoir des frais au nom de ce projet.",
};