export const settings = {
  title: 'Paramètres',
  language: 'Langue',
  languageEn: 'English',
  languageDe: 'Deutsch',
  languageEs: 'Español',
  languageFr: 'Français',
  languageNl: 'Nederlands',
  languageNb: 'Norsk',
  languageRu: 'Русский',
  languageZh: '中文',
  languageRo: 'Română',
  font: 'Police',
  fontHintOpenDyslexic: 'Adapté à la dyslexie · sans prise en charge du chinois',
  theme: 'Thème',
  appearance: 'Apparence',
  servers: 'Serveurs',
  serverName: 'Nom du serveur',
  serverUrl: 'URL du serveur',
  serverUrlPlaceholder: '192.168.1.100:4533 ou https://music.exemple.com',
  serverAlternateUrl: 'Seconde adresse (optionnelle)',
  serverAlternateUrlPlaceholderPublic: 'https://music.example.com',
  serverAlternateUrlPlaceholderLocal: '192.168.1.100:4533',
  serverAlternateUrlHintAddPublic: 'Vous pouvez ajouter une adresse publique pour y accéder en dehors de votre réseau domestique.',
  serverAlternateUrlHintAddLocal: 'Vous pouvez ajouter une adresse locale pour une connexion plus rapide à domicile.',
  serverBothLanError: 'Les deux adresses sont locales — conservez-en une ou ajoutez une adresse publique.',
  dualAddressVerifying: 'Vérification que les deux adresses pointent vers le même serveur…',
  dualAddressMismatch: 'Les deux adresses pointent vers des serveurs différents. Vérifiez l’orthographe et réessayez.',
  dualAddressInsufficient: 'Impossible de confirmer que les deux adresses correspondent au même serveur. Supprimez une adresse pour continuer.',
  dualAddressUnreachable: 'Impossible de joindre {{host}}. Vérifiez l’adresse et votre réseau, puis réessayez.',
  urlRemigrationTitle: 'Déplacer les données de la bibliothèque ?',
  urlRemigrationMessage: 'Changer l’adresse déplacera toutes les données de la bibliothèque, de l’analyse et du cache de couvertures de {{oldKey}} vers {{newKey}}. Cette action est irréversible.',
  urlRemigrationConfirm: 'Déplacer les données',
  urlRemigrationProgress: 'Déplacement des données de la bibliothèque…',
  urlRemigrationFailureInspect: 'Impossible de vérifier ce qui serait déplacé. Réessayez ou ouvrez le journal de débogage.',
  urlRemigrationFailureRun: 'Le déplacement des données de la bibliothèque a échoué. Vos données enregistrées sont intactes — réessayez.',
  urlRemigrationFailureCoverRename: 'Les données de la bibliothèque ont été déplacées, mais les fichiers de couverture n’ont pas pu être renommés. Les couvertures seront reconstruites au prochain accès.',
  shareUsesLocalUrl: 'Utiliser l’adresse locale dans les liens de partage',
  shareUsesLocalUrlDesc: 'Affecte les invitations Orbit et les partages de bibliothèque. Par défaut : adresse publique.',
  serverUsername: 'Nom d\'utilisateur',
  serverPassword: 'Mot de passe',
  addServer: 'Ajouter un serveur',
  addServerTitle: 'Ajouter un nouveau serveur',
  editServer: 'Modifier',
  editServerTitle: 'Modifier le serveur',
  useServer: 'Utiliser',
  deleteServer: 'Supprimer',
  noServers: 'Aucun serveur enregistré.',
  serverActive: 'Actif',
  serverVersionUnknown: 'Version du serveur inconnue',
  confirmDeleteServer: 'Supprimer le serveur « {{name}} » ?',
  serverConnecting: 'Connexion…',
  serverConnected: 'Connecté !',
  serverFailed: 'Connexion échouée.',
  testBtn: 'Tester la connexion',
  testingBtn: 'Test en cours…',
  serverCompatible: 'Conçu pour Navidrome. Les autres serveurs compatibles Subsonic (Gonic, Airsonic, …) peuvent fonctionner avec des fonctionnalités réduites, car Psysonic utilise de nombreux endpoints d’API spécifiques à Navidrome.',
  userMgmtTitle: 'Gestion des utilisateurs',
  userMgmtDesc: 'Gérer les utilisateurs sur ce serveur. Nécessite des privilèges administrateur.',
  userMgmtNoAdmin: 'Vous devez être administrateur pour gérer les utilisateurs sur ce serveur.',
  userMgmtLoadError: 'Impossible de charger les utilisateurs.',
  userMgmtLoadFriendly: 'Le serveur n\'a pas répondu — généralement ponctuel.',
  userMgmtRetry: 'Réessayer',
  userMgmtEmpty: 'Aucun utilisateur trouvé.',
  userMgmtYouBadge: 'Vous',
  userMgmtAdminBadge: 'Admin',
  userMgmtAddUser: 'Ajouter un utilisateur',
  userMgmtAddUserTitle: 'Nouvel utilisateur',
  userMgmtEditUserTitle: 'Modifier l’utilisateur',
  userMgmtUsername: 'Nom d’utilisateur',
  userMgmtName: 'Nom affiché',
  userMgmtEmail: 'E-mail',
  userMgmtPassword: 'Mot de passe',
  userMgmtPasswordEditHint: 'Saisir un nouveau mot de passe pour le modifier.',
  userMgmtRoleAdmin: 'Admin',
  userMgmtLibraries: 'Bibliothèques',
  userMgmtLibrariesAdminHint: 'Les utilisateurs admin ont automatiquement accès à toutes les bibliothèques.',
  userMgmtLibrariesEmpty: 'Aucune bibliothèque disponible sur ce serveur.',
  userMgmtLibrariesValidation: 'Sélectionnez au moins une bibliothèque.',
  userMgmtLibrariesUpdateError: 'Utilisateur enregistré, mais l\u2019attribution des bibliothèques a échoué',
  userMgmtNoLibraries: 'Aucune bibliothèque attribuée',
  userMgmtNeverSeen: 'Jamais',
  userMgmtSave: 'Enregistrer',
  userMgmtCancel: 'Annuler',
  userMgmtDelete: 'Supprimer',
  userMgmtEdit: 'Modifier',
  userMgmtConfirmDelete: 'Supprimer l’utilisateur « {{username}} » ? Action irréversible.',
  userMgmtCreateError: 'Impossible de créer l’utilisateur.',
  userMgmtUpdateError: 'Impossible de mettre à jour l’utilisateur.',
  userMgmtDeleteError: 'Impossible de supprimer l’utilisateur.',
  userMgmtCreated: 'Utilisateur créé.',
  userMgmtUpdated: 'Utilisateur mis à jour.',
  userMgmtDeleted: 'Utilisateur supprimé.',
  userMgmtValidationMissing: 'Nom d’utilisateur, nom affiché et mot de passe sont requis.',
  userMgmtValidationMissingIdentity: 'Le nom d’utilisateur et le nom affiché sont requis.',
  userMgmtMagicStringGenerate: 'Générer la chaîne magique',
  userMgmtSaveAndMagicString: 'Enregistrer et obtenir la chaîne magique',
  userMgmtMagicStringPasswordNavHint:
    'Navidrome enregistrera ce mot de passe pour l’utilisateur. S’il diffère de l’actuel, le mot de passe de connexion sur le serveur sera mis à jour.',
  userMgmtMagicStringPlaintextWarning:
    'Partagez la chaîne magique avec prudence : elle contient un mot de passe non chiffré (l’encodage n’est pas du chiffrement). Quiconque possède la chaîne complète peut se connecter en tant que cet utilisateur.',
  userMgmtMagicStringCopied: 'Chaîne magique copiée dans le presse-papiers.',
  userMgmtMagicStringCopyFailed: 'Impossible de copier dans le presse-papiers.',
  userMgmtMagicStringLoginFailed: 'Échec de la vérification du mot de passe — identifiants non confirmés.',
  userMgmtMagicStringModalTitle: 'Générer la chaîne magique',
  userMgmtMagicStringModalDesc: 'Saisissez le mot de passe Subsonic de « {{username}} ». Il est inclus dans la chaîne magique copiée.',
  userMgmtMagicStringModalConfirm: 'Copier la chaîne',
  audiomuseTitle: 'AudioMuse-AI (Navidrome)',
  audiomuseBadge: 'AudioMuse-AI',
  audiomuseStatusActive: 'Actif',
  audiomuseStatusChecking: 'Vérification…',
  audiomuseStatusNotDetected: 'Non détecté',
  audiomuseStatusProbeFailed: 'Échec de la détection',
  audiomuseDesc:
    'Activez si ce serveur utilise le <pluginLink>plugin Navidrome AudioMuse-AI</pluginLink>. Active le mix instantané depuis un morceau et affiche les artistes similaires côté serveur au lieu de Last.fm sur les pages artiste.',
  audiomuseIssueHint:
    'Le mix instantané a échoué récemment — vérifiez le plugin Navidrome et l’API AudioMuse. Les artistes similaires utilisent Last.fm si le serveur ne renvoie rien.',
  connected: 'Connecté',
  failed: 'Échec',
  eqTitle: 'Égaliseur',
  eqEnabled: 'Activer l\'égaliseur',
  eqPreset: 'Préréglage',
  eqPresetCustom: 'Personnalisé',
  eqPresetBuiltin: 'Préréglages intégrés',
  eqPresetCustomGroup: 'Mes préréglages',
  eqSavePreset: 'Enregistrer comme préréglage',
  eqPresetName: 'Nom du préréglage…',
  eqDeletePreset: 'Supprimer le préréglage',
  eqResetBands: 'Réinitialiser à plat',
  eqPreGain: 'Pré-amplification',
  eqResetPreGain: 'Réinitialiser la pré-amplification',
  eqAutoEqTitle: 'Recherche AutoEQ',
  eqAutoEqPlaceholder: 'Rechercher un casque / IEM…',
  eqAutoEqSearching: 'Recherche…',
  eqAutoEqNoResults: 'Aucun résultat',
  eqAutoEqError: 'Échec de la recherche',
  eqAutoEqRateLimit: 'Limite GitHub atteinte — réessayez dans une minute',
  eqAutoEqFetchError: 'Impossible de charger le profil EQ',
  behavior: 'Comportement de l\'application',
  groupTray: 'Zone de notification',
  groupLinuxRendering: 'Rendu Linux',
  groupClock: 'Horloge',
  groupDisplay: 'Affichage',
  groupWindow: 'Fenêtre',
  cacheTitle: 'Taille max. du stockage',
  cacheDesc: 'Cache navigateur pour pochettes et images d\'artistes (IndexedDB). Quand il est plein, les entrées les plus anciennes sont supprimées automatiquement.',
  cacheUsedImages: 'Images :',
  cacheUsedOffline: 'Pistes hors ligne :',
  cacheUsedHot: 'Espace disque :',
  hotCacheTrackCount: 'Pistes en cache :',
  cacheMaxLabel: 'Taille max.',
  imageCacheScopeLabel: 'Portée',
  imageCacheSubTitle: 'Aperçus dans le navigateur',
  coverDiskCacheSubTitle: 'Cache des pochettes sur disque',
  coverCacheStrategyTitle: 'Cache des pochettes',
  coverCacheStrategyDesc: 'Vous pouvez choisir une stratégie pour chaque serveur : Lazy — charger les pochettes au besoin ; Aggressive — charger au besoin et précharger en arrière-plan.',
  coverCacheStrategyLabel: 'Stratégie',
  coverCacheStrategyServerLabel: 'Serveur',
  coverCacheStrategyProgressLabel: 'Cache',
  coverCacheStrategyActionsLabel: 'Actions',
  coverCacheStrategyLazy: 'Lazy',
  coverCacheStrategyLazyDesc: 'Charge les pochettes uniquement lorsqu\'elles sont nécessaires.',
  coverCacheStrategyAggressive: 'Aggressive',
  coverCacheStrategyAggressiveDesc: 'Comportement Lazy avec préchargement supplémentaire en arrière-plan.',
  coverCacheStrategyDiskUsage: 'Sur le disque : {{size}}',
  coverCacheStrategyProgressValue: '{{percent}}% ({{done}}/{{total}}) · {{size}}',
  coverCacheStrategyClearAction: 'Vider le cache des pochettes',
  coverCacheStrategyClearTitle: 'Vider le cache des pochettes ?',
  coverCacheStrategyClearDesc: 'Supprimer toutes les pochettes en cache pour {{server}}. Elles seront retéléchargées si nécessaire.',
  coverCacheStrategyClearConfirm: 'Vider',
  coverCacheStrategyClearCancel: 'Annuler',
  coverCacheStrategyClearSuccess: 'Cache des pochettes vidé pour ce serveur.',
  coverCacheStrategyClearError: 'Échec du vidage du cache des pochettes.',
  coverCacheStrategyServerRemoved: 'serveur supprimé',
  cacheClearBtn: 'Vider le cache',
  cacheClearWarning: 'Efface toutes les pochettes et images d\'artistes en cache. Elles seront retéléchargées si nécessaire.',
  cacheClearConfirm: 'Vider le cache d\'images',
  cacheClearCancel: 'Annuler',
  mediaDirTitle: 'Dossier média',
  mediaDirDesc: 'Dossier racine pour la lecture locale. Bibliothèque hors ligne : library/ ; tampon de file d\'attente : cache/.',
  mediaDirDefault: 'Par défaut (données d\'application)',
  mediaDirChange: 'Changer le dossier',
  mediaDirClear: 'Réinitialiser',
  mediaDirHint: 'Les nouveaux téléchargements utiliseront cet emplacement. Les fichiers existants restent à leur chemin d\'origine jusqu\'à suppression.',
  offlineStorageTitle: 'Stockage hors ligne',
  offlineDirTitle: 'Bibliothèque hors ligne (intégrée)',
  offlineDirDesc: 'Emplacement de stockage des titres rendus disponibles hors ligne dans Psysonic.',
  offlineDirDefault: 'Par défaut (données d\'application)',
  offlineDirChange: 'Changer le dossier',
  offlineDirClear: 'Réinitialiser',
  offlineDirHint: 'Les nouveaux téléchargements utiliseront cet emplacement. Les téléchargements existants restent à leur emplacement d\'origine.',
  hotCacheTitle: 'Cache de lecture à chaud',
  hotCacheDisclaimer: 'Précharge les titres à venir dans la file et conserve les précédents. Si activé : espace disque et réseau.',
  hotCacheDirDefault: 'Par défaut (données d\'application)',
  hotCacheDirChange: 'Changer le dossier',
  hotCacheDirClear: 'Réinitialiser',
  hotCacheDirHint: 'Changer de dossier réinitialise l’index dans l’app ; les fichiers déjà écrits restent à l’ancien emplacement.',
  hotCacheEnabled: 'Activer le cache de lecture à chaud',
  hotCacheMaxMb: 'Taille maximale du cache',
  hotCacheDebounce: 'Délai après changement de file',
  hotCacheDebounceImmediate: 'Immédiat',
  hotCacheDebounceSeconds: '{{n}} s',
  hotCacheClearBtn: 'Vider le cache à chaud',
  audioOutputDevice: 'Périphérique de sortie audio',
  audioOutputDeviceDesc: 'Choisissez le périphérique audio utilisé par Psysonic. Les changements sont immédiats et relancent la piste en cours.',
  audioOutputDeviceDefault: 'Défaut système',
  audioOutputDeviceRefresh: 'Actualiser la liste',
  audioOutputDeviceOsDefaultNow: 'sortie système actuelle',
  audioOutputDeviceListError: 'Impossible de charger la liste des périphériques audio.',
  audioOutputDeviceNotInCurrentList: 'absent de la liste actuelle',
  audioOutputDeviceMacNotice: 'Sur macOS, la lecture suit actuellement toujours la sortie audio du système pour des raisons techniques. Changez la cible via Réglages Système → Son ou l\'icône haut-parleur de la barre de menus. Contexte : CoreAudio déclenche une demande d\'autorisation du microphone à l\'ouverture d\'un flux non par défaut — nous l\'évitons en utilisant toujours la sortie système par défaut.',
  hiResTitle: 'Lecture haute résolution native',
  hiResEnabled: 'Activer la lecture haute résolution native',
  hiResDesc: "Lit chaque piste à sa fréquence d'échantillonnage d'origine au lieu de tout rééchantillonner à 44,1 kHz, en réglant le périphérique de sortie sur celle du fichier (88,2 kHz et plus). N'activer que si le matériel et le réseau gèrent ces hautes fréquences de façon fiable.",
  showArtistImages: 'Afficher les images d\'artistes',
  showArtistImagesDesc: 'Charge et affiche les images d\'artistes dans la vue d\'ensemble. Désactivé par défaut pour réduire les E/S disque serveur et la charge réseau sur les grandes bibliothèques.',
  showOrbitTrigger: 'Afficher « Orbit » dans l\'en-tête',
  showOrbitTriggerDesc: 'Le bouton d\'en-tête pour démarrer ou rejoindre une session d\'écoute partagée. Masque-le si tu n\'utilises pas Orbit — tu peux le réactiver ici.',
  showTrayIcon: 'Afficher l\'icône dans la barre système',
  showTrayIconDesc: 'Affiche l\'icône Psysonic dans la zone de notification / barre des menus.',
  minimizeToTray: 'Réduire dans la barre système',
  minimizeToTrayDesc: 'Lors de la fermeture, Psysonic continue de fonctionner dans la barre système au lieu de se fermer.',
  clockFormat: 'Format de l\'heure',
  clockFormatDesc: 'Format de l\'horloge utilisé par l\'ETA de la file d\'attente et l\'aperçu du minuteur de mise en veille.',
  clockFormatAuto: 'Automatique (langue du système)',
  clockFormatTwentyFour: '24 heures',
  clockFormatTwelve: '12 heures (AM/PM)',
  preloadMiniPlayer: 'Précharger le mini-lecteur',
  preloadMiniPlayerDesc: 'Construit la fenêtre du mini-lecteur en arrière-plan au démarrage de l\'application afin qu\'elle affiche son contenu instantanément à la première ouverture. Utilise un peu plus de mémoire.',
  linuxWebkitSmoothScroll: 'Molette fluide (Linux)',
  linuxWebkitSmoothScrollDesc: 'Activé : inertie. Désactivé : pas à la ligne, style GTK.',
  linuxWebkitInputForceRepaint: 'Repeindre les champs au focus (Linux)',
  linuxWebkitInputForceRepaintDesc: 'Contournement pour WebKitGTK 2.50.x où les champs texte gèlent au clic. Les loupes scintillent brièvement au focus.',
  linuxWaylandTextRender: 'Rendu du texte Wayland (Linux)',
  linuxWaylandTextRenderDesc:
    'Le lissage dans l’interface est immédiat. L’accélération matérielle WebKit (net / GPU) est enregistrée et appliquée au prochain lancement — la modifier en direct peut figer WebKitGTK.',
  linuxWaylandTextRenderBalanced: 'Équilibré',
  linuxWaylandTextRenderSharp: 'Net (favorise le CPU)',
  linuxWaylandTextRenderGpu: 'GPU prioritaire',
  linuxWaylandTextRenderMinimal: 'Minimal (lissage CSS par défaut)',
  discordRichPresence: 'Discord Rich Presence',
  discordRichPresenceDesc: 'Affiche le titre en cours de lecture sur votre profil Discord. Discord doit être ouvert.',
  discordRichPresenceNotice: 'Attention : il s\'agit de la Discord Rich Presence intégrée à Psysonic. Si vous préférez utiliser le plugin officiel Discord Rich Presence de Navidrome, laissez cette fonction désactivée et activez plutôt « Afficher dans la fenêtre live » plus bas sur cette page.',
  discordCoverTitle: 'Source de la pochette',
  discordCoverDesc: 'D\'où provient la pochette affichée sur votre profil Discord.',
  discordCoverNone: 'Aucune (icône de l\'app uniquement)',
  discordCoverServer: 'Serveur (via infos album)',
  discordCoverApple: 'Apple Music',
  discordOptions: 'Options Discord avancées',
  discordTemplates: 'Modèles de texte personnalisés',
  discordTemplatesDesc: 'Personnalisez les informations affichées sur votre profil Discord. Variables : {title}, {artist}, {album}',
  discordTemplateDetails: 'Ligne principale (details)',
  discordTemplateState: 'Ligne secondaire (state)',
  discordTemplateLargeText: 'Info-bulle album (largeText)',
  discordTemplateName: 'Ligne de la liste (name)',
  nowPlayingEnabled: 'Afficher dans la fenêtre live',
  nowPlayingEnabledDesc: 'Diffuse le titre en cours de lecture vers la vue des auditeurs en direct du serveur. Désactiver pour ne pas envoyer de données de lecture.',
  nowPlayingPluginNote: 'Requis lors de l\'utilisation du plugin officiel Discord Rich Presence de Navidrome.',
  enableBandsintown: 'Dates de tournée Bandsintown',
  enableBandsintownDesc: 'Affiche les concerts à venir de l\'artiste actuel dans l\'onglet Info. Les données proviennent de l\'API publique Bandsintown.',
  lyricsServerFirst: 'Préférer les paroles du serveur',
  lyricsServerFirstDesc: 'Consulter d\'abord les paroles fournies par le serveur (tags intégrés, fichiers sidecar) avant LRCLIB. Désactiver pour utiliser LRCLIB en priorité.',
  enableNeteaselyrics: 'Paroles Netease Cloud Music',
  enableNeteaselyricsDesc: 'Utiliser Netease Cloud Music en dernier recours lorsque le serveur et LRCLIB ne retournent rien. Meilleure couverture pour la musique asiatique et internationale.',
  lyricsSourcesTitle: 'Sources de paroles',
  lyricsSourcesDesc: 'Choisissez quelles sources interroger et dans quel ordre. Glissez pour réordonner. Les sources désactivées sont ignorées.',
  lyricsSourceServer: 'Serveur',
  lyricsSourceLrclib: 'LRCLIB',
  lyricsSourceNetease: 'Netease Cloud Music',
  lyricsYouLyPlus: 'YouLyPlus (Karaoké)',
  lyricsYouLyPlusDesc: 'Synchronisation mot à mot depuis un backend communautaire (Apple Music, Spotify, Musixmatch, QQ). Essayé en premier ; les sources activées ci-dessous servent de repli.',
  lyricsSourcesFallbackHint: 'Utilisées en repli quand YouLyPlus ne trouve rien. Glisser pour réordonner.',
  lyricsSourcesPrimaryHint: 'Essayées dans l\'ordre. Glisser pour réordonner. Tout désactivé = paroles désactivées.',
  lyricsStaticOnly: 'Afficher les paroles en texte statique uniquement',
  lyricsStaticOnlyDesc: 'Affiche les paroles synchronisées sans défilement automatique ni surlignage des mots.',
  downloadsTitle: 'Export ZIP & Archivage',
  downloadsFolderDesc: 'Dossier de destination pour les albums téléchargés en tant que fichier ZIP sur votre ordinateur.',
  downloadsDefault: 'Dossier de téléchargement par défaut',
  pickFolder: 'Sélectionner',
  pickFolderTitle: 'Sélectionner le dossier de téléchargement',
  clearFolder: 'Effacer le dossier',
  logout: 'Se déconnecter',
  aboutTitle: 'À propos de Psysonic',
  aboutDesc: 'Un lecteur de musique de bureau moderne conçu pour Navidrome. Utilise l\'API Subsonic ainsi que des extensions spécifiques à Navidrome. Basé sur Tauri v2 avec un moteur audio Rust natif — léger et rapide, mais riche en fonctionnalités : barre waveform, paroles synchronisées, intégration Last.fm, égaliseur 10 bandes, crossfade, lecture sans blanc, Replay Gain, navigation par genre et une grande bibliothèque de thèmes.',
  aboutLicense: 'Licence',
  aboutLicenseText: 'GNU GPL v3 — libre d\'utilisation, de modification et de distribution sous la même licence.',
  aboutRepo: 'Code source sur GitHub',
  aboutVersion: 'Version',
  aboutBuiltWith: 'Construit avec Tauri · React · TypeScript · Rust/rodio',
  aboutReleaseNotesLabel: 'Notes de version',
  aboutReleaseNotesLink: 'Ouvrir les nouveautés de cette version',
  aboutContributorsLabel: 'Contributeurs',
  showChangelogOnUpdate: "Afficher 'Quoi de neuf' lors des mises à jour",
  showChangelogOnUpdateDesc: "Affiche une bannière discrète du changelog au-dessus de Now Playing après une mise à jour. Un clic ouvre les notes de version, le X la masque.",
  libraryGridMaxColumnsTitle: 'Grilles de cartes dans la bibliothèque',
  libraryGridMaxColumnsPerfHint: 'Plus de colonnes signifie plus de tuiles par ligne et davantage de travail de mise en page et de peinture — surtout sur de grosses bibliothèques ou du matériel lent.',
  libraryGridMaxColumnsRangeLabel: 'Nombre maximal de colonnes ({{min}}–{{max}})',
  libraryGridMaxColumnsDesc: 'S’applique aux vues album, artiste, liste de lecture, radio, hors ligne et autres pages en cartes. Moins de colonnes = tuiles plus grandes et en général moins de charge CPU.',
  libraryIndexTitle: 'Index local de bibliothèque (aperçu)',
  libraryIndexDesc: 'Conserve une copie locale de la base de morceaux de chaque serveur pour que la navigation et la recherche restent rapides et fonctionnent hors ligne. La synchronisation initiale s’exécute pour tous les serveurs configurés ; les serveurs hors ligne sont réessayés automatiquement.',
  libraryIndexDeltaHint: 'La synchronisation delta en arrière-plan vérifie les serveurs liés toutes les 30 secondes et s’exécute quand c’est dû — en général toutes les 5 à 45 minutes selon la taille de la bibliothèque et la charge.',
  libraryIndexEnable: 'Activer l’index local de bibliothèque',
  libraryIndexEnableAllDesc: 'Indexer et synchroniser tous les serveurs configurés en arrière-plan.',
  libraryIndexNoServer: 'Ajoutez d’abord un serveur.',
  libraryIndexServerListTitle: 'Serveurs indexés',
  libraryIndexAllExcluded: 'Tous les serveurs sont exclus de la synchronisation. Réactivez l’index ou ajoutez un serveur.',
  libraryIndexServerOffline: 'Serveur hors ligne — synchronisation reportée',
  libraryIndexServerSyncing: 'Synchronisation…',
  libraryIndexFullResync: 'Resynchronisation complète',
  libraryIndexDeltaSync: 'Synchronisation delta',
  libraryIndexExcludeServer: 'Exclure de la synchronisation',
  libraryIndexExcludingServer: 'Exclusion…',
  libraryIndexExcludedTitle: 'Exclus de la synchronisation',
  libraryIndexIncludeServer: 'Réinclure',
  libraryIndexIncludingServer: 'Réinclusion…',
  libraryIndexStatus: 'État',
  libraryIndexStatusIdle: 'Inactif',
  libraryIndexStatusProbing: 'Vérification du serveur…',
  libraryIndexStatusInitial: 'Synchronisation initiale…',
  libraryIndexStatusReady: 'Prêt ({{count}} morceaux)',
  libraryIndexStatusError: 'Erreur — voir les journaux',
  libraryIndexProgressIngest: '{{count}} morceaux indexés…',
  libraryIndexProgressVerify: '{{checked}} vérifiés ({{deleted}} supprimés)',
  libraryIndexSyncNow: 'Synchroniser maintenant',
  libraryIndexVerify: 'Vérifier l’intégrité de la bibliothèque',
  libraryIndexCancel: 'Annuler',
  libraryIndexAutoReconcile: 'Réconciliation auto en cas de baisse du nombre',
  libraryIndexAutoReconcileDesc: 'Recherche automatiquement les morceaux supprimés lorsque le serveur en signale moins que prévu.',
  libraryIndexSyncError: 'Échec de la synchronisation de la bibliothèque : {{error}}',
  libraryIndexBindError: 'Impossible d’activer l’index : {{error}}',
  randomMixTitle: 'Liste noire du mix aléatoire',
  luckyMixMenuTitle: 'Afficher Mix Chance dans le menu',
  luckyMixMenuDesc: 'Active Mix Chance dans "Créer un mix" et comme entrée séparée quand la navigation est scindée. Visible uniquement si AudioMuse est actif sur le serveur courant.',
  randomMixBlacklistTitle: 'Mots-clés de filtre personnalisés',
  randomMixBlacklistDesc: 'Les morceaux sont exclus si un mot-clé correspond à leur genre, titre, album ou artiste (actif quand la case ci-dessus est cochée).',
  randomMixBlacklistPlaceholder: 'Ajouter un mot-clé…',
  randomMixBlacklistAdd: 'Ajouter',
  randomMixBlacklistEmpty: 'Aucun mot-clé personnalisé ajouté.',
  randomMixHardcodedTitle: 'Mots-clés intégrés (actifs quand la case est cochée)',
  tabAudio: 'Audio',
  tabStorage: 'Hors ligne & Cache',
  tabAppearance: 'Apparence',
  tabThemes: 'Thèmes',
  themesYourThemesTitle: 'Vos thèmes',
  themesCvdTooltip: 'Adapté au daltonisme — deutéranopie, protanopie, tritanopie',
  themeAnimationWarning: 'Ce thème utilise des animations qui peuvent augmenter l’utilisation du processeur sur votre configuration (Nvidia/Linux ou compositing désactivé).',
  themeStoreTitle: 'Boutique de thèmes',
  themeStoreSubmitText: "Vous avez créé votre propre thème ? Partagez-le avec la communauté — plus d'infos dans le dépôt de thèmes.",
  themeStoreSubmitLink: 'Ouvrir le dépôt de thèmes',
  themeStoreNetworkNotice: 'Le Theme Store charge son catalogue et ses aperçus depuis GitHub. Aucune donnée personnelle n’est envoyée.',
  themeStoreStatsNotice: 'Les dates de dernière modification sont actualisées une fois par jour (vers 04h17 UTC).',
  themeStoreSearchPlaceholder: 'Rechercher des thèmes…',
  themeStoreFilterMode: 'Filtrer par mode',
  themeStoreModeAll: 'Tous',
  themeStoreModeDark: 'Sombre',
  themeStoreModeLight: 'Clair',
  themeStoreRefresh: 'Actualiser',
  themeStoreLoading: 'Chargement des thèmes…',
  themeStoreError: 'Impossible de charger la boutique de thèmes. Vérifiez votre connexion.',
  themeStoreRetry: 'Réessayer',
  themeStoreOfflineTitle: 'Le Theme Store est hors ligne',
  themeStoreEmpty: 'Aucun thème ne correspond à vos filtres.',
  themeStoreActive: 'Actif',
  themeStoreEnlarge: "Agrandir l'aperçu",
  themeStoreSortNewest: 'Plus récents',
  themeStoreSortName: 'Alphabétique',
  themeStoreAnimAll: 'Tous',
  themeStoreAnimAnimated: 'Animés',
  themeStoreAnimStatic: 'Statiques',
  themeStoreByAuthor: 'par {{author}}',
  themeStoreLastChanged: 'Dernière modification',
  themeMigrationNoticeTitle: 'Thème déplacé vers la boutique',
  themeMigrationNoticeBody: "{{themes}} n'est plus inclus dans l'application. Vous pouvez le réinstaller depuis la boutique de thèmes (Paramètres → Thèmes) ou choisir un autre thème.",
  themeMigrationNoticeOpen: 'Ouvrir la boutique de thèmes',
  themeStoreOffline: 'Affichage du dernier catalogue en cache — vous semblez hors ligne.',
  themeStoreInstall: 'Installer',
  themeStoreInstalling: 'Installation…',
  themeStoreApply: 'Appliquer',
  themeStoreUpdate: 'Mettre à jour',
  themeStoreUpdating: 'Mise à jour…',
  themeStoreUninstall: 'Désinstaller',
  themeStoreInstallFailed: "Échec de l'installation",
  themeStorePagePrev: 'Page précédente',
  themeStorePageNext: 'Page suivante',
  themeStorePageStatus: 'Page {{page}} sur {{total}}',
  themeImportTitle: 'Importer un thème',
  themeImportButton: 'Importer un thème…',
  themeImporting: 'Importation…',
  themeImportHint: 'Charge un thème empaqueté en .zip (manifest.json + theme.css).',
  themeImportSuccess: '« {{name}} » importé.',
  themeImportErrorTitle: "Ce thème n'a pas pu être importé",
  themeImportErrorBody: "Il ne correspond pas au format de thème Psysonic. Il a peut-être été conçu pour une autre version, ou le fichier est incomplet — vérifiez que vous avez choisi le bon .zip, ou contactez l'auteur du thème.",
  themeImportErrorDetails: 'Détails techniques',
  themeImportConfirmTitle: 'Installer le thème ?',
  themeImportConfirmBody: 'Installer « {{name}} » de {{author}} ?',
  themeImportConfirmRisk: "Les thèmes importés ne sont pas vérifiés — n'installez que des thèmes de confiance.",
  tabLibrary: 'Bibliothèque',
  tabServers: 'Serveurs',
  tabLyrics: 'Paroles',
  tabPersonalisation: 'Personnalisation',
  tabIntegrations: 'Intégrations',
  inputKeybindingsTitle: 'Raccourcis clavier',
  aboutContributorsCount_one: '{{count}} contribution',
  aboutContributorsCount_other: '{{count}} contributions',
  searchPlaceholder: 'Rechercher dans les paramètres…',
  searchNoResults: 'Aucun réglage ne correspond à votre recherche.',
  aboutMaintainersLabel: 'Mainteneurs',
  integrationsPrivacyTitle: 'Avis de confidentialité',
  integrationsPrivacyBody: 'Toutes les intégrations de cet onglet sont <strong>facultatives</strong> et, une fois activées, envoient des données à des services externes ou à votre serveur Navidrome. Last.fm reçoit votre historique d\'écoute, Discord affiche le morceau en cours dans votre profil, Bandsintown est interrogé par artiste pour récupérer les dates de tournée, et le partage « En cours de lecture » publie votre morceau actuel auprès des autres utilisateurs de votre serveur Navidrome. Si vous ne voulez rien de tout cela, laissez simplement la section correspondante désactivée.',
  homeCustomizerTitle: 'Scène principale',
  queueModeTitle: 'Mode d\'affichage de la file',
  queueModeQueueSub: 'N\'affiche que les pistes à venir. La piste en cours reste dans l\'en-tête et quitte la liste une fois jouée.',
  queueModePlaylistSub: 'Conserve toute la file dans la liste, la piste en cours surlignée en haut ; les pistes jouées restent.',
  queueModeTimelineSub: 'Centrer le morceau en cours, avec l\'historique au-dessus et les morceaux à venir (dans l\'ordre aléatoire) en dessous.',
  queueToolbarTitle: 'Barre d\'outils de file d\'attente',
  queueToolbarReset: 'Réinitialiser',
  queueToolbarSeparator: 'Séparateur',
  sidebarTitle: 'Barre latérale',
  sidebarReset: 'Réinitialiser',
  artistLayoutTitle: 'Sections de la page artiste',
  artistLayoutDesc: 'Glissez pour réorganiser, basculez pour masquer des sections individuelles de la page artiste. Les sections sans données sont ignorées automatiquement.',
  artistLayoutReset: 'Réinitialiser',
  artistLayoutBio: 'Biographie de l\'artiste',
  artistLayoutTopTracks: 'Titres populaires',
  artistLayoutSimilar: 'Artistes similaires',
  artistLayoutAlbums: 'Albums',
  artistLayoutFeatured: 'Apparaît aussi sur',
  playlistLayoutTitle: 'Mise en page de la playlist',
  playlistLayoutDesc: 'Afficher ou masquer des éléments individuels sur la page de la playlist.',
  playlistLayoutReset: 'Réinitialiser',
  playerBarTitle: 'Barre de lecture',
  playerBarReset: 'Réinitialiser',
  playerBarStarRating: 'Note par étoiles',
  playerBarFavorite: 'Favori (cœur)',
  playerBarLastfmLove: 'Bouton J’aime',
  playerBarPlaybackRate: 'Vitesse de lecture',
  playerBarEqualizer: 'Égaliseur',
  playerBarMiniPlayer: 'Mini-lecteur',
  playbackRateTitle: 'Vitesse de lecture',
  playbackRateEnabled: 'Activer la vitesse de lecture',
  playbackRateEnabledDesc: 'Vitesse globale pour toutes les pistes. Non appliquée à la radio ni aux aperçus.',
  playbackRateStrategy: 'Stratégie',
  playbackRateStrategySpeed: 'Vitesse',
  playbackRateStrategyVarispeed: 'Avec hauteur',
  playbackRateStrategyVarispeedSemitones: 'Demi-tons',
  playbackRateStrategyPreserve: 'Hauteur',
  playbackRateStrategySpeedTip: 'Modifie le tempo ; la hauteur est corrigée automatiquement.',
  playbackRateStrategyVarispeedTip: 'La vitesse et la hauteur changent ensemble, comme une bande. Hauteur selon la vitesse : 12 × log2(vitesse).',
  playbackRateStrategyVarispeedSemitonesTip: 'Comme « Avec hauteur », mais réglé directement en demi-tons. Vitesse = 2^(dt/12).',
  playbackRateStrategyPreserveTip: 'Tempo réglable plus un décalage de hauteur manuel (±12 dt).',
  playbackRateSpeed: 'Vitesse',
  playbackRatePitch: 'Hauteur',
  playbackRateDerivedPitch: 'Décalage de hauteur lié à la vitesse : {{value}}',
  playbackRateDerivedSpeed: 'Vitesse selon les demi-tons : {{value}}',
  playbackRateFineStep: 'Réglage fin',
  playbackRateFineStepDesc: 'Pas de curseur plus petits : 0,01× pour la vitesse et 0,01 dt pour la hauteur.',
  playbackRateAutoPitch: 'La hauteur est corrigée automatiquement.',
  playbackRateHint: '« Vitesse » conserve la hauteur naturelle. « Avec hauteur » change la hauteur avec la vitesse. « Avec hauteur (demi-tons) » règle ce changement directement en demi-tons. « Hauteur » ajoute un décalage manuel. Plus gourmand en CPU que « Avec hauteur ». Non pour la radio, les aperçus ou Orbit.',
  playbackRateNeutral: 'À 1,0× sans décalage de hauteur, la lecture est normale.',
  playbackRateOrbitPaused: 'Non appliqué pendant les sessions Orbit — la lecture reste à 1,0× pour la synchro.',
  playbackRateOrbitPausedShort: 'Orbit : 1,0× pour la synchro.',
  advancedMode: 'Avancé',
  advancedModeTooltip: 'Afficher les options avancées dans tous les onglets des paramètres. Contributions de la communauté qui ne reflètent pas nécessairement la philosophie de conception des mainteneurs de Psysonic.',
  advancedBadge: 'Avancé',
  sidebarDrag: 'Glisser pour réorganiser',
  sidebarFixed: 'Toujours visible',
  nowPlayingTopTitle: '« En cours » en haut',
  nowPlayingTopDesc: 'Épingler l\'entrée « En cours » en haut de la barre latérale au lieu du bas.',
  randomNavSplitTitle: 'Diviser la navigation Mix',
  randomNavSplitDesc: 'Afficher "Mix Aléatoire", "Albums Aléatoires" et "Mix Chance" comme entrées séparées dans la barre latérale plutôt que le hub "Créer un Mix".',
  tabInput: 'Entrée',
  tabUsers: 'Utilisateurs',
  shortcutsReset: 'Réinitialiser',
  shortcutListening: 'Appuyez sur une touche…',
  shortcutUnbound: '—',
  shortcutClear: 'Effacer',
  globalShortcutsTitle: 'Raccourcis globaux',
  globalShortcutsNote: 'Fonctionnent à l\'échelle du système, même quand Psysonic est en arrière-plan. Nécessite Ctrl, Alt ou Super comme modificateur.',
  shortcutPlayPause: 'Lecture / Pause',
  shortcutNext: 'Piste suivante',
  shortcutPrev: 'Piste précédente',
  shortcutVolumeUp: 'Volume +',
  shortcutVolumeDown: 'Volume -',
  shortcutSeekForward: 'Avancer de 10s',
  shortcutSeekBackward: 'Reculer de 10s',
  shortcutToggleQueue: 'Afficher/masquer la file',
  shortcutOpenFolderBrowser: 'Ouvrir {{folderBrowser}}',
  shortcutFullscreenPlayer: 'Lecteur plein écran',
  shortcutNativeFullscreen: 'Plein écran natif',
  shortcutOpenMiniPlayer: 'Ouvrir le mini-lecteur',
  shortcutStartSearch: 'Lancer une recherche',
  shortcutStartAdvancedSearch: 'Lancer une recherche avancée',
  shortcutToggleSidebar: 'Afficher / masquer la barre latérale',
  shortcutMuteSound: 'Couper le son',
  shortcutToggleEqualizer: 'Ouvrir / basculer l\'égaliseur',
  shortcutToggleRepeat: 'Basculer la répétition',
  shortcutOpenNowPlaying: 'Ouvrir « En cours »',
  shortcutShowLyrics: 'Afficher les paroles',
  shortcutFavoriteCurrentTrack: 'Ajouter la piste actuelle aux favoris',
  shortcutOpenHelp: 'Aide',
  tabSystem: 'Système',
  loggingTitle: 'Journalisation',
  loggingModeDesc: 'Contrôle le niveau de verbosité des journaux backend dans le terminal.',
  loggingModeOff: 'Désactivé',
  loggingModeNormal: 'Normal',
  loggingModeDebug: 'Débogage',
  loggingExport: 'Exporter les journaux',
  loggingExportSuccess: 'Journaux exportés ({{count}} lignes).',
  loggingExportError: 'Impossible d\'exporter les journaux.',
  ratingsSectionTitle: 'Notes',
  ratingsSkipStarTitle: 'Passer pour 1 étoile',
  ratingsSkipStarDesc:
    "Après plusieurs sauts d’affilée, le morceau passe à 1 étoile. Uniquement s’il n’était pas encore noté.",
  ratingsSkipStarThresholdLabel: 'Sauts',
  ratingsMixFilterTitle: 'Filtrage par note',
  ratingsMixFilterDesc:
    "Filtrer le contenu peu noté dans {{mix}} et {{albums}}. Cliquer de nouveau sur l’étoile choisie désactive le seuil.",
  ratingsMixMinSong: 'Morceaux',
  ratingsMixMinAlbum: 'Albums',
  ratingsMixMinArtist: 'Artistes',
  ratingsMixMinThresholdAria: 'Étoiles minimum : {{label}}',
  backupTitle: 'Sauvegarde & Restauration',
  backupExport: 'Exporter les paramètres',
  backupExportDesc: 'Enregistre tous les paramètres, profils serveur, configuration Last.fm, thème, EQ et raccourcis dans un fichier .psybkp. Les mots de passe sont stockés en clair — conservez le fichier en sécurité.',
  backupImport: 'Importer les paramètres',
  backupImportDesc: 'Restaure les paramètres depuis un fichier .psybkp. L\'application sera rechargée après l\'import.',
  backupImportConfirm: 'Tous les paramètres actuels seront écrasés. Continuer ?',
  backupSuccess: 'Sauvegarde enregistrée',
  backupImportSuccess: 'Paramètres restaurés — rechargement…',
  backupImportError: 'Fichier de sauvegarde invalide ou corrompu.',
  playbackTitle: 'Lecture',
  replayGain: 'Replay Gain',
  replayGainDesc: 'Normaliser le volume des pistes avec les métadonnées ReplayGain',
  replayGainMode: 'Mode',
  replayGainAuto: 'Auto',
  replayGainAutoDesc: 'Utilise le gain d\'album quand les pistes voisines de la file proviennent du même album, sinon le gain de piste.',
  replayGainTrack: 'Piste',
  replayGainAlbum: 'Album',
  replayGainPreGain: 'Pré-Gain (fichiers taggés)',
  replayGainPreGainDesc: 'Boost universel ajouté à chaque calcul ReplayGain. Utile si votre bibliothèque semble globalement trop discrète.',
  replayGainFallback: 'Repli (sans tags / radio)',
  replayGainFallbackDesc: 'Appliqué aux pistes (et flux radio) sans tags ReplayGain, pour que le contenu non taggé ne sorte pas plus fort que le reste.',
  normalization: 'Normalisation',
  normalizationDesc: 'Égalise la sonie perçue entre pistes, albums et radio.',
  normalizationOff: 'Désactivé',
  normalizationReplayGain: 'ReplayGain',
  normalizationLufs: 'LUFS',
  loudnessTargetLufs: 'LUFS cible',
  loudnessTargetLufsDesc: 'Sonie de référence sur laquelle toutes les pistes sont calées. Valeur plus basse = sortie plus forte. Les services de streaming tournent autour de -14 LUFS.',
  loudnessPreAnalysisAttenuation: 'Atténuation avant mesure',
  loudnessPreAnalysisAttenuationDesc:
    'Réduit le volume tant que la loudness du morceau n’est pas enregistrée. En streaming, des estimations grossières suivent, pas une mesure complète. 0 dB = rien ; plus négatif = plus discret. À droite, le dB effectif pour la cible actuelle.',
  loudnessPreAnalysisAttenuationRef: 'Effectif {{eff}} dB avec cible {{tgt}} LUFS.',
  loudnessPreAnalysisAttenuationReset: 'Valeur par défaut',
  loudnessFirstPlayNote:
    'À la première lecture d’un nouveau morceau, le volume peut brièvement varier pendant la mesure. La fois suivante, la mesure mise en cache prend le relais et tout reste stable. Les pistes à venir dans la file sont en général pré-analysées pendant la lecture précédente, ce cas est donc rare en pratique.',
  crossfade: 'Fondu enchaîné',
  crossfadeSecs: '{{n}} s',
  autoDj: 'AutoDJ',
  autoDjDesc: 'Sans durée fixe : AutoDJ suit l’audio réel et se superpose aux vrais fondus et intros plutôt qu’à un nombre fixe de secondes. Pour un résultat fiable, activez le Cache de lecture à chaud.',
  autodjSmoothSkip: 'Passage en fondu',
  autodjSmoothSkipDesc: 'Lors d’un passage à la piste suivante ou précédente pendant la lecture, la piste en cours s’estompe brièvement au lieu d’être coupée net.',
  gapless: 'Lecture sans blanc',
  transitionsTitle: 'Transitions entre pistes',
  transitionsDesc: 'Comment les pistes consécutives s’enchaînent. Un seul mode peut être actif à la fois.',
  transitionOff: 'Désactivé',
  queueBehaviourTitle: 'Comportement de la file',
  preservePlayNextOrder: "Préserver l'ordre « Lire ensuite »",
  preservePlayNextOrderDesc: 'Les nouveaux éléments « Lire ensuite » s\'ajoutent à la fin de la file existante au lieu de la doubler.',
  trackPreviewsTitle: 'Aperçus de pistes',
  trackPreviewsToggle: 'Activer les aperçus de pistes',
  trackPreviewsDesc: 'Affiche les boutons Lecture et Aperçu dans les listes pour un court extrait au milieu du morceau.',
  trackPreviewStart: 'Position de départ',
  trackPreviewStartDesc: 'À quel point du morceau l\'aperçu commence (% de la durée).',
  trackPreviewDuration: 'Durée',
  trackPreviewDurationDesc: 'Combien de temps chaque aperçu joue avant de s\'arrêter.',
  trackPreviewDurationSecs: '{{n}} s',
  trackPreviewLocationsTitle: 'Où afficher les aperçus',
  trackPreviewLocationsDesc: 'Choisissez dans quelles listes afficher les boutons d\'aperçu.',
  trackPreviewLocation_suggestions: 'Dans les suggestions de playlist',
  trackPreviewLocation_albums: 'Dans les listes d\'albums',
  trackPreviewLocation_playlists: 'Dans les playlists',
  trackPreviewLocation_favorites: 'Dans les favoris',
  trackPreviewLocation_artist: 'Dans les meilleurs morceaux de l\'artiste',
  trackPreviewLocation_randomMix: 'Dans Random Mix',
  nextTrackBufferingTitle: 'Mise en mémoire tampon',
  infiniteQueue: 'File infinie',
  infiniteQueueDesc: 'Ajouter automatiquement des morceaux aléatoires quand la file est épuisée',
  experimental: 'Expérimental',
  sidebarLyricsStyle: "Style de défilement des paroles",
  sidebarLyricsStyleClassic: "Classique",
  sidebarLyricsStyleClassicDesc: "La ligne active est centrée.",
  sidebarLyricsStyleApple: "Apple Music-like",
  sidebarLyricsStyleAppleDesc: "La ligne active reste en haut avec une animation fluide.",
  seekbarStyle: 'Style de la barre de lecture',
  seekbarStyleDesc: 'Choisir l\'apparence de la barre de progression',
  seekbarTruewave: 'Forme d\'onde réelle',
  seekbarPseudowave: 'Forme d\'onde pseudo',
  seekbarLinedot: 'Ligne & point',
  seekbarBar: 'Barre',
  seekbarThick: 'Barre épaisse',
  seekbarSegmented: 'Segmentée',
  seekbarNeon: 'Néon',
  seekbarPulsewave: 'Onde pulsée',
  seekbarParticletrail: 'Traînée de particules',
  seekbarLiquidfill: 'Tube liquide',
  seekbarRetrotape: 'Bande rétro',
  themeSchedulerTitle: 'Planificateur de thème',
  themeSchedulerEnable: 'Activer le planificateur de thème',
  themeSchedulerEnableSub: 'Bascule automatiquement entre deux thèmes selon l\'heure',
  themeSchedulerDayTheme: 'Thème de jour',
  themeSchedulerDayStart: 'Début du jour',
  themeSchedulerNightTheme: 'Thème de nuit',
  themeSchedulerNightStart: 'Début de la nuit',
  themeSchedulerActiveHint: 'Le planificateur de thème est actif - les thèmes changent automatiquement.',
  visualOptionsTitle: 'Options Visuelles',
  coverArtBackground: "Fond d'Art de Poche",
  coverArtBackgroundSub: "Afficher la pochette floutée comme fond dans les en-têtes d'albums et de playlists",
  playlistCoverPhoto: 'Photo de Couverture de Playlist',
  playlistCoverPhotoSub: 'Afficher la grille de photos de couverture dans la vue détaillée des playlists',
  showBitrate: 'Afficher le Débit',
  showBitrateSub: 'Afficher le débit audio dans les listes de pistes',
  floatingPlayerBar: 'Barre de Lecteur Flottante',
  floatingPlayerBarSub: 'Garder la barre du lecteur flottante au-dessus du contenu',
  uiScaleTitle: "Mise à l'échelle de l'interface",
  uiScaleLabel: 'Zoom',
  confirmDeleteServerLibrary: 'Supprimer aussi l’index local de bibliothèque de ce serveur ? Cliquez sur Annuler pour conserver la copie en cache pour un usage hors ligne.',
  waveformCacheClearBtn: 'Vider le cache des formes d’onde',
  waveformCacheCleared: 'Cache des formes d’onde vidé ({{count}} lignes).',
  waveformCacheClearFailed: 'Impossible de vider le cache des formes d’onde.',
  useCustomTitlebar: 'Barre de titre personnalisée',
  useCustomTitlebarDesc: 'Remplace la barre de titre système par une barre intégrée assortie au thème de l’app. Désactivez pour utiliser la barre GNOME/GTK native.',
  windowButtonStyle: 'Boutons de fenêtre',
  windowButtonStyleDesc: 'Choisissez l’apparence des boutons réduire, agrandir et fermer.',
  windowButtonsDots: 'Points',
  windowButtonsDotsGlyph: 'Points + icônes',
  windowButtonsFlat: 'Plat',
  windowButtonsPill: 'Pilule',
  windowButtonsOutline: 'Contour',
  windowButtonsGlyph: 'Minimal',
  showMinimizeButton: 'Afficher le bouton réduire',
  showMinimizeButtonDesc: 'Désactivez pour n’afficher qu’agrandir et fermer.',
  analyticsStrategyTitle: 'Stratégies d’analyse',
  analyticsStrategyDesc: 'Choisissez le style d’analyse pour la bibliothèque.',
  analyticsStrategyLabel: 'Stratégie',
  analyticsStrategyLazy: 'Paresseuse',
  analyticsStrategyLazyDesc: 'Analyse uniquement quand les pistes sont lues ou entrent dans le cache hot/hors ligne — utilisation minimale du CPU et du réseau.',
  analyticsStrategyAdvanced: 'Agressive',
  analyticsStrategyAdvancedDesc: 'Analyse de fond plus agressive. Une fois terminée, vous obtenez le BPM pour toutes les pistes et un chargement immédiat de loudness et de formes d’onde.',
  analyticsStrategyPriorityTitle: 'Priorité d’analyse (toujours appliquée)',
  analyticsStrategyPriorityHigh: '1 — En cours de lecture : télécharger et analyser en premier (octets de lecture, backfill loudness ou HTTP si nécessaire).',
  analyticsStrategyPriorityMiddle: '2 — À suivre : les ~5 pistes suivantes de la file et voisines du hot-cache — analyse depuis cache/téléchargements si possible, backfill HTTP seulement en cas d’absence.',
  analyticsStrategyPriorityLow: '3 — Lot bibliothèque (Agressive uniquement) : file d’arrière-plan automatique en fin de file ; réalimentée par watermark (~3× workers) sans attendre une file vide.',
  analyticsStrategyServerLabel: 'Server',
  analyticsStrategyProgressLabel: 'Progression de l’analyse :',
  analyticsStrategyProgressValue: '{{percent}}% ({{done}}/{{total}})',
  analyticsStrategyActionsLabel: 'Actions',
  analyticsStrategyParallelismLabel: 'Workers parallèles',
  analyticsStrategyParallelismValue: '{{n}} threads',
  analyticsStrategyParallelismDesc: 'Nombre de pistes à télécharger et analyser en même temps (HTTP + CPU). Des valeurs plus élevées accélèrent le rattrapage de la bibliothèque, mais consomment plus de réseau et de CPU.',
  analyticsStrategyAdvancedWarning: 'Le mode agressif utilise davantage de CPU et de bande passante réseau pendant l’exécution du lot bibliothèque en arrière-plan.',
  analyticsStrategyServerRemoved: 'Serveur supprimé',
  analyticsStrategyClearAction: 'Effacer l’analyse',
  analyticsStrategyClearTitle: 'Effacer l’analyse ?',
  analyticsStrategyClearDesc: 'Effacer l’analyse de {{server}} supprime les formes d’onde et données de loudness mises en cache. Réajouter ce serveur plus tard peut nécessiter une longue réindexation.',
  analyticsStrategyClearCancel: 'Annuler',
  analyticsStrategyClearConfirm: 'Effacer l’analyse',
  analyticsStrategyClearSuccess: 'Analyse effacée pour le serveur supprimé.',
  analyticsStrategyClearError: 'Échec de l’effacement de l’analyse pour le serveur supprimé.',
  analyticsStrategyProgressEmptyAfterFailed: '100% (0/0, bloqué par des pistes en échec)',
  analyticsFailedTracksOpenTitle: 'Pistes en échec : {{count}}',
  analyticsFailedTracksTitle: 'Pistes d’analyse en échec — {{server}}',
  analyticsFailedTracksDesc: 'Ces pistes ont échoué de manière répétée au décodage/enrichissement et sont exclues de l’analyse de fond automatique.',
  analyticsFailedTracksLoading: 'Chargement de la liste des pistes en échec…',
  analyticsFailedTracksEmpty: 'Aucune piste en échec pour ce serveur.',
  analyticsFailedTracksClose: 'Fermer',
  analyticsFailedTracksExport: 'Exporter la liste',
  analyticsFailedTracksExportSuccess: 'Liste des pistes en échec exportée ({{count}}).',
  analyticsFailedTracksExportError: 'Impossible d’exporter la liste des pistes en échec.',
  analyticsFailedTracksRescan: 'Relancer l’analyse des pistes en échec',
  analyticsFailedTracksRescanSuccess: 'Relance programmée pour {{count}} pistes en échec.',
  analyticsFailedTracksRescanError: 'Impossible de relancer l’analyse des pistes en échec.',
  analyticsFailedTracksLoadError: 'Impossible de charger les pistes en échec.',
  backupImportAny: 'Importer une sauvegarde',
  backupImportAnyConfirm: 'Importer le fichier de sauvegarde sélectionné et appliquer son contenu (réglages, bases de données de bibliothèque ou sauvegarde complète). Continuer ?',
  backupModeFull: 'Complet',
  backupModeLibrary: 'Bases de données de bibliothèque',
  backupModeConfig: 'Configuration',
  backupFullDesc: 'Archive les réglages et les bases de données de bibliothèque dans un seul fichier de sauvegarde.',
  backupFullExport: 'Exporter une sauvegarde complète',
  backupFullImport: 'Importer une sauvegarde complète',
  backupFullImportConfirm: 'Cela écrasera les réglages, remplacera les bases de données actuelles et les déplacera en .bak. Continuer ?',
  backupFullExportSuccess: 'Sauvegarde complète exportée.',
  backupFullImportSuccess: 'Sauvegarde complète importée — rechargement…',
  backupFullImportError: 'Impossible d’importer la sauvegarde complète.',
  backupLibraryExport: 'Exporter les bases de données',
  backupLibraryExportDesc: 'Crée une archive compressée contenant des instantanés SQLite propres des bases de données de bibliothèque.',
  backupLibraryImport: 'Importer les bases de données',
  backupLibraryImportDesc: 'Restaure les bases de données de bibliothèque depuis un fichier d’archive. Les bases actuelles sont déplacées en .bak avant le basculement.',
  backupLibraryImportConfirm: 'Cela remplacera les bases de données actuelles et les déplacera en .bak. Continuer ?',
  backupLibraryExportSuccess: 'Sauvegarde des bases de données exportée.',
  backupLibraryImportSuccess: 'Sauvegarde des bases de données importée.',
  backupLibraryImportError: 'Impossible d’importer la sauvegarde des bases de données.',
  backupOverlayExportTitle: 'Création de la sauvegarde…',
  backupOverlayImportTitle: 'Restauration de la sauvegarde…',
  backupOverlayHint: 'Vous pouvez garder la fenêtre ouverte pendant le traitement des fichiers. La saisie est temporairement verrouillée.',
};
