feat(i18n): Russian locale and translations in src/locales

- Add Russian UI strings with idiomatic phrasing and plural forms
- Split en/de/fr/nl/zh/nb strings into src/locales/*.ts for maintainability
- Register ru in i18n and Settings language picker
- Add languageRu to all locales; extend English help (supported languages)

Made-with: Cursor
This commit is contained in:
Maxim Isaev
2026-04-06 11:08:40 +03:00
parent 1d0965708b
commit 83c36de091
9 changed files with 5580 additions and 4734 deletions
+788
View File
@@ -0,0 +1,788 @@
export const frTranslation = {
sidebar: {
library: 'Bibliothèque',
mainstage: 'Scène principale',
newReleases: 'Nouveautés',
allAlbums: 'Tous les albums',
randomAlbums: 'Albums aléatoires',
artists: 'Artistes',
randomMix: 'Mix aléatoire',
favorites: 'Favoris',
nowPlaying: 'En cours',
system: 'Système',
statistics: 'Statistiques',
settings: 'Paramètres',
help: 'Aide',
expand: 'Développer la barre latérale',
collapse: 'Réduire la barre latérale',
updateAvailable: 'Mise à jour disponible',
updateReady: '{{version}} est prêt',
updateLink: 'Voir la version →',
downloadingTracks: '{{n}} pistes en cache…',
offlineLibrary: 'Bibliothèque hors ligne',
genres: 'Genres',
playlists: 'Playlists',
radio: 'Radio Internet',
},
home: {
hero: 'En vedette',
starred: 'Favoris personnels',
recent: 'Ajoutés récemment',
mostPlayed: 'Les plus écoutés',
recentlyPlayed: 'Récemment écoutés',
discover: 'Découvrir',
loadMore: 'Charger plus',
discoverMore: 'Découvrir plus',
discoverArtists: 'Découvrir des artistes',
discoverArtistsMore: 'Tous les artistes'
},
hero: {
eyebrow: 'Album en vedette',
playAlbum: 'Lire l\'album',
enqueue: 'Mettre en file',
enqueueTooltip: 'Ajouter l\'album entier à la file d\'attente',
},
search: {
placeholder: 'Rechercher un artiste, album ou morceau…',
noResults: 'Aucun résultat pour « {{query}} »',
artists: 'Artistes',
albums: 'Albums',
songs: 'Morceaux',
clearLabel: 'Effacer la recherche',
title: 'Recherche',
resultsFor: 'Résultats pour « {{query}} »',
album: 'Album',
advanced: 'Recherche avancée',
advancedSearchTerm: 'Terme de recherche',
advancedSearchPlaceholder: 'Titre, album, artiste…',
advancedGenre: 'Genre',
advancedAllGenres: 'Tous les genres',
advancedYear: 'Année',
advancedYearFrom: 'de',
advancedYearTo: 'à',
advancedAll: 'Tous',
advancedSearch: 'Rechercher',
advancedEmpty: 'Entrez un terme de recherche ou sélectionnez un filtre.',
advancedNoResults: 'Aucun résultat trouvé.',
advancedGenreNote: 'Les morceaux sont sélectionnés aléatoirement dans ce genre.',
},
nowPlaying: {
tooltip: 'Qui écoute ?',
title: 'Qui écoute ?',
loading: 'Chargement…',
nobody: 'Personne n\'écoute en ce moment.',
minutesAgo: 'il y a {{n}} min',
nothingPlaying: 'Rien en cours. Lancez un morceau !',
aboutArtist: "À propos de l'artiste",
fromAlbum: 'De cet album',
viewAlbum: "Voir l'album",
goToArtist: "Aller à l'artiste",
readMore: 'Lire la suite',
showLess: 'Réduire',
genreInfo: 'Genre',
trackInfo: 'Infos piste',
},
contextMenu: {
playNow: 'Lire maintenant',
playNext: 'Lire ensuite',
addToQueue: 'Ajouter à la file',
enqueueAlbum: 'Mettre l\'album en file',
startRadio: 'Démarrer la radio',
lfmLove: 'Aimer sur Last.fm',
lfmUnlove: 'Ne plus aimer sur Last.fm',
favorite: 'Favori',
favoriteArtist: 'Artiste favori',
favoriteAlbum: 'Album favori',
unfavorite: 'Retirer des favoris',
unfavoriteArtist: 'Retirer l\'artiste des favoris',
unfavoriteAlbum: 'Retirer l\'album des favoris',
removeFromQueue: 'Retirer de la file',
openAlbum: 'Ouvrir l\'album',
goToArtist: 'Aller à l\'artiste',
download: 'Télécharger (ZIP)',
addToPlaylist: 'Ajouter à la playlist',
songInfo: 'Infos du morceau',
},
albumDetail: {
back: 'Retour',
playAll: 'Tout lire',
enqueue: 'Mettre en file',
enqueueTooltip: 'Ajouter l\'album entier à la file d\'attente',
artistBio: 'Biographie',
download: 'Télécharger (ZIP)',
downloading: 'Chargement…',
cacheOffline: 'Rendre disponible hors ligne',
offlineCached: 'Disponible hors ligne',
offlineDownloading: 'Mise en cache… ({{n}}/{{total}})',
removeOffline: 'Supprimer le cache hors ligne',
offlineStorageFull: 'Stockage hors ligne plein (limite : {{mb}} Mo). Supprimez un album de votre bibliothèque hors ligne ou augmentez la limite dans les paramètres.',
offlineStorageGoToSettings: 'Paramètres',
offlineStorageGoToLibrary: 'Bibliothèque hors ligne',
favoriteAdd: 'Ajouter aux favoris',
favoriteRemove: 'Retirer des favoris',
favorite: 'Favori',
noBio: 'Aucune biographie disponible.',
moreByArtist: 'Plus de {{artist}}',
tracksCount: '{{n}} pistes',
goToArtist: 'Aller à {{artist}}',
moreLabelAlbums: 'Plus d\'albums sur {{label}}',
trackTitle: 'Titre',
trackArtist: 'Artiste',
trackGenre: 'Genre',
trackFormat: 'Format',
trackFavorite: 'Favori',
trackRating: 'Note',
trackDuration: 'Durée',
trackTotal: 'Total',
columns: 'Colonnes',
notFound: 'Album introuvable.',
bioModal: 'Biographie de l\'artiste',
bioClose: 'Fermer',
ratingLabel: 'Note',
enlargeCover: 'Agrandir',
},
artistDetail: {
back: 'Retour',
albums: 'Albums',
album: 'Album',
playAll: 'Tout lire',
shuffle: 'Aléatoire',
radio: 'Radio',
loading: 'Chargement…',
noRadio: 'Aucun morceau similaire trouvé pour cet artiste.',
notFound: 'Artiste introuvable.',
albumsBy: 'Albums de {{name}}',
topTracks: 'Morceaux populaires',
noAlbums: 'Aucun album trouvé.',
trackTitle: 'Titre',
trackAlbum: 'Album',
trackDuration: 'Durée',
favoriteAdd: 'Ajouter aux favoris',
favoriteRemove: 'Retirer des favoris',
favorite: 'Favori',
albumCount_one: '{{count}} album',
albumCount_other: '{{count}} albums',
openedInBrowser: 'Ouvert dans le navigateur',
featuredOn: 'Également sur',
similarArtists: 'Artistes similaires',
cacheOffline: 'Enregistrer la discographie hors ligne',
offlineCached: 'Discographie en cache',
offlineDownloading: 'En cache… ({{done}}/{{total}} albums)',
uploadImage: "Téléverser l'image de l'artiste",
uploadImageError: "Échec du téléversement de l'image",
},
favorites: {
title: 'Favoris',
empty: 'Vous n\'avez pas encore de favoris.',
artists: 'Artistes',
albums: 'Albums',
songs: 'Morceaux',
enqueueAll: 'Tout ajouter à la file',
playAll: 'Tout lire',
removeSong: 'Retirer des favoris',
stations: 'Stations de radio',
},
randomAlbums: {
title: 'Albums aléatoires',
refresh: 'Actualiser',
},
genres: {
title: 'Genres',
genreCount: 'genres',
albumCount_one: '{{count}} album',
albumCount_other: '{{count}} albums',
loading: 'Chargement des genres…',
empty: 'Aucun genre trouvé.',
albumsLoading: 'Chargement des albums…',
albumsEmpty: 'Aucun album trouvé pour ce genre.',
loadMore: 'Charger plus',
back: 'Retour',
},
randomMix: {
title: 'Mix aléatoire',
remix: 'Remixer',
remixTooltip: 'Charger de nouveaux morceaux aléatoires',
playAll: 'Tout lire',
trackTitle: 'Titre',
trackArtist: 'Artiste',
trackAlbum: 'Album',
trackFavorite: 'Favori',
trackDuration: 'Durée',
favoriteAdd: 'Ajouter aux favoris',
favoriteRemove: 'Retirer des favoris',
play: 'Lire',
trackGenre: 'Genre',
excludeAudiobooks: 'Exclure les livres audio et pièces radiophoniques',
excludeAudiobooksDesc: 'Correspond aux mots-clés dans le genre, le titre, l\'album et l\'artiste — ex. Hörbuch, Audiobook, Spoken Word, …',
genreBlocked: 'Mot-clé bloqué',
genreAddedToBlacklist: 'Ajouté à la liste de filtres',
genreAlreadyBlocked: 'Déjà bloqué',
artistBlocked: 'Artiste bloqué',
artistAddedToBlacklist: 'Artiste ajouté à la liste de filtres',
artistClickHint: 'Cliquer pour bloquer cet artiste',
blacklistToggle: 'Filtre par mot-clé',
genreMixTitle: 'Mix par genre',
genreMixDesc: 'Top 20 genres par nombre de morceaux — cliquer pour un mix aléatoire',
genreMixLoadMore: 'Charger 10 de plus',
genreMixNoGenres: 'Aucun genre trouvé sur le serveur.',
shuffleGenres: 'Afficher d\'autres genres',
filterPanelTitle: 'Filtres',
filterPanelDesc: 'Cliquez sur un tag de genre ou un nom d\'artiste dans la liste pour l\'exclure des futurs mix.',
genreClickHint: 'Cliquez sur un tag de genre pour l\'ajouter\ncomme mot-clé de filtre.\nCorrespond au genre, titre, album et artiste.',
},
albums: {
title: 'Tous les albums',
sortByName: 'AZ (Album)',
sortByArtist: 'AZ (Artiste)',
sortNewest: 'Plus récents',
sortRandom: 'Aléatoire',
yearFrom: 'De',
yearTo: 'À',
yearFilterClear: 'Effacer le filtre année',
yearFilterLabel: 'Année',
},
artists: {
title: 'Artistes',
search: 'Rechercher…',
all: 'Tous',
gridView: 'Vue en grille',
listView: 'Vue en liste',
imagesOn: 'Images d\'artistes activées — peut augmenter la charge réseau et système',
imagesOff: 'Images d\'artistes désactivées — affichage des initiales uniquement',
loadMore: 'Charger plus',
notFound: 'Aucun artiste trouvé.',
albumCount_one: '{{count}} album',
albumCount_other: '{{count}} albums',
},
login: {
subtitle: 'Votre lecteur de bureau Navidrome',
serverName: 'Nom du serveur (facultatif)',
serverNamePlaceholder: 'Mon Navidrome',
serverUrl: 'URL du serveur',
serverUrlPlaceholder: '192.168.1.100:4533 ou music.exemple.com',
username: 'Nom d\'utilisateur',
usernamePlaceholder: 'admin',
password: 'Mot de passe',
showPassword: 'Afficher le mot de passe',
hidePassword: 'Masquer le mot de passe',
connect: 'Se connecter',
connecting: 'Connexion…',
connected: 'Connecté !',
error: 'Connexion échouée — vérifiez vos informations.',
urlRequired: 'Veuillez saisir une URL de serveur.',
savedServers: 'Serveurs enregistrés',
addNew: 'Ou ajouter un nouveau serveur',
},
connection: {
connected: 'Connecté',
connectedTo: 'Connecté à {{server}}',
disconnected: 'Déconnecté',
disconnectedFrom: 'Impossible d\'atteindre {{server}} — cliquez pour vérifier les paramètres',
checking: 'Connexion…',
extern: 'Externe',
offlineTitle: 'Pas de connexion au serveur',
offlineSubtitle: 'Impossible d\'atteindre {{server}}. Vérifiez votre réseau ou le serveur.',
offlineModeBanner: 'Mode hors ligne — lecture depuis le cache local',
offlineLibraryTitle: 'Bibliothèque hors ligne',
offlineLibraryEmpty: 'Aucun album en cache. Connectez-vous, ouvrez un album et cliquez sur "Rendre disponible hors ligne".',
offlineAlbumCount: '{{n}} album',
offlineAlbumCount_plural: '{{n}} albums',
offlineFilterAll: 'Tout',
offlineFilterAlbums: 'Albums',
offlineFilterPlaylists: 'Playlists',
offlineFilterArtists: 'Discographies',
retry: 'Réessayer',
lastfmConnected: 'Last.fm connecté en tant que @{{user}}',
lastfmSessionInvalid: 'Session invalide — cliquez pour vous reconnecter',
},
common: {
albums: 'Albums',
album: 'Album',
loading: 'Chargement…',
loadingMore: 'Chargement…',
loadingPlaylists: 'Chargement des listes…',
noAlbums: 'Aucun album trouvé.',
downloading: 'Téléchargement…',
downloadZip: 'Télécharger (ZIP)',
back: 'Retour',
cancel: 'Annuler',
save: 'Enregistrer',
delete: 'Supprimer',
use: 'Utiliser',
add: 'Ajouter',
active: 'Actif',
download: 'Télécharger',
chooseDownloadFolder: 'Choisir le dossier de téléchargement',
noFolderSelected: 'Aucun dossier sélectionné',
rememberDownloadFolder: 'Mémoriser ce dossier',
filterGenre: 'Filtre genre',
filterSearchGenres: 'Rechercher des genres…',
filterNoGenres: 'Aucun genre trouvé',
filterClear: 'Effacer',
bulkSelected: '{{count}} sélectionné(s)',
bulkAddToPlaylist: 'Ajouter à la playlist',
bulkRemoveFromPlaylist: 'Retirer de la playlist',
bulkClear: 'Désélectionner',
updaterAvailable: 'Mise à jour disponible',
updaterVersion: 'v{{version}} est prête',
updaterInstall: 'Installer & Redémarrer',
updaterDownloading: 'Téléchargement…',
updaterInstalling: 'Installation…',
updaterDownload: 'Télécharger depuis GitHub',
updaterExperimentalHint: 'La mise à jour automatique est encore en développement',
},
settings: {
title: 'Paramètres',
language: 'Langue',
languageEn: 'Anglais',
languageDe: 'Allemand',
languageFr: 'Français',
languageNl: 'Néerlandais',
languageZh: 'Chinois',
languageNb: 'Norvégien',
languageRu: 'Russe',
font: 'Police',
theme: 'Thème',
appearance: 'Apparence',
servers: 'Serveurs',
serverName: 'Nom du serveur',
serverUrl: 'URL du serveur',
serverUsername: 'Nom d\'utilisateur',
serverPassword: 'Mot de passe',
addServer: 'Ajouter un serveur',
addServerTitle: 'Ajouter un nouveau serveur',
useServer: 'Utiliser',
deleteServer: 'Supprimer',
noServers: 'Aucun serveur enregistré.',
serverActive: 'Actif',
confirmDeleteServer: 'Supprimer le serveur « {{name}} » ?',
serverConnecting: 'Connexion…',
serverConnected: 'Connecté !',
serverFailed: 'Connexion échouée.',
testBtn: 'Tester la connexion',
testingBtn: 'Test en cours…',
serverCompatible: 'Compatible avec : Navidrome · Gonic · Airsonic · Subsonic',
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',
lfmTitle: 'Last.fm',
lfmConnect: 'Connecter avec Last.fm',
lfmConnecting: 'En attente d\'autorisation…',
lfmConfirm: 'J\'ai autorisé l\'application',
lfmConnected: 'Connecté en tant que',
lfmDisconnect: 'Déconnecter',
lfmConnectDesc: 'Connectez votre compte Last.fm pour activer le scrobbling et les mises à jour « En cours de lecture » depuis Psysonic — aucune configuration Navidrome requise.',
lfmOpenBrowser: 'Une fenêtre de navigateur s\'ouvrira. Autorisez Psysonic sur Last.fm, puis cliquez sur le bouton ci-dessous.',
lfmScrobbles: '{{n}} scrobbles',
lfmMemberSince: 'Membre depuis {{year}}',
scrobbleEnabled: 'Scrobbling activé',
scrobbleDesc: 'Envoyer les morceaux à Last.fm après 50% d\'écoute',
behavior: 'Comportement de l\'application',
cacheTitle: 'Taille max. du stockage',
cacheDesc: 'Pochettes et images d\'artistes. Quand le cache est plein, les entrées les plus anciennes sont supprimées automatiquement. Les albums hors ligne ne sont pas supprimés automatiquement, mais le seront lors d\'un nettoyage manuel.',
cacheUsedImages: 'Images :',
cacheUsedOffline: 'Pistes hors ligne :',
cacheMaxLabel: 'Taille max.',
cacheClearBtn: 'Vider le cache',
cacheClearWarning: 'Cela supprimera aussi tous les albums hors ligne de la bibliothèque.',
cacheClearConfirm: 'Tout supprimer',
cacheClearCancel: 'Annuler',
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.',
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.',
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.',
discordRichPresence: 'Discord Rich Presence',
discordRichPresenceDesc: 'Affiche le titre en cours de lecture sur votre profil Discord. Discord doit être ouvert.',
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.',
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 pour les serveurs compatibles Subsonic (Navidrome, Gonic, et autres). Construit 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.',
aboutFeatures: 'Multi-serveur · Scrobbling & love Last.fm · Ambient Stage plein écran · Waveform seek · Paroles synchro · EQ 10 bandes · Crossfade & Gapless · Replay Gain · Genres · 63 thèmes · 5 langues',
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',
aboutAiCredit: 'Développé avec le soutien de Claude Code par Anthropic',
aboutContributorsLabel: 'Contributeurs',
aboutSpecialThanksLabel: 'Remerciements spéciaux',
changelog: 'Journal des modifications',
showChangelogOnUpdate: "Afficher 'Quoi de neuf' lors des mises à jour",
showChangelogOnUpdateDesc: 'Affiche automatiquement les nouveautés au premier lancement d\'une nouvelle version.',
randomMixTitle: 'Mix aléatoire',
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: 'Stockage & Téléchargements',
tabAppearance: 'Apparence',
homeCustomizerTitle: 'Page d\'accueil',
sidebarTitle: 'Barre latérale',
sidebarReset: 'Réinitialiser',
sidebarDrag: 'Glisser pour réorganiser',
sidebarFixed: 'Toujours visible',
tabInput: 'Entrée',
tabServer: 'Serveur',
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',
shortcutFullscreenPlayer: 'Lecteur plein écran',
shortcutNativeFullscreen: 'Plein écran natif',
tabSystem: 'Système',
tabGeneral: 'Général',
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',
replayGainTrack: 'Piste',
replayGainAlbum: 'Album',
crossfade: 'Fondu enchaîné',
crossfadeDesc: 'Fondu entre les pistes',
crossfadeSecs: '{{n}} s',
notWithGapless: 'Non disponible quand la lecture sans blanc est active',
notWithCrossfade: 'Non disponible quand le fondu enchaîné est actif',
gapless: 'Lecture sans blanc',
gaplessDesc: 'Préparer la piste suivante pour éliminer les silences entre les morceaux',
preloadMode: 'Précharger la piste suivante',
preloadModeDesc: 'Quand commencer à mettre en mémoire tampon la piste suivante',
preloadBalanced: 'Équilibré (30 s avant la fin)',
preloadEarly: 'Tôt (après 5 s de lecture)',
preloadCustom: 'Personnalisé',
preloadCustomSeconds: 'Secondes avant la fin : {{n}}',
infiniteQueue: 'File infinie',
infiniteQueueDesc: 'Ajouter automatiquement des morceaux aléatoires quand la file est épuisée',
experimental: 'Expérimental',
},
changelog: {
modalTitle: 'Quoi de neuf',
dontShowAgain: 'Ne plus afficher',
close: 'Compris',
},
help: {
title: 'Aide',
s1: 'Démarrage',
q1: 'Quels serveurs sont compatibles ?',
a1: 'Psysonic fonctionne avec tout serveur compatible Subsonic : Navidrome, Gonic, Subsonic, Airsonic, et autres. Navidrome est recommandé.',
q2: 'Comment me connecter à mon serveur ?',
a2: 'Ouvrez les Paramètres et cliquez sur « Ajouter un serveur ». Saisissez l\'URL du serveur (ex. 192.168.1.100:4533), votre nom d\'utilisateur et mot de passe. Psysonic teste la connexion avant d\'enregistrer.',
q3: 'Puis-je utiliser plusieurs serveurs ?',
a3: 'Oui. Vous pouvez ajouter autant de serveurs que vous le souhaitez dans les Paramètres et basculer entre eux à tout moment. Un seul serveur est actif à la fois.',
s2: 'Lecture',
q4: 'Comment lire de la musique ?',
a4: 'Double-cliquez sur une piste pour la lire. Sur les pages d\'album et d\'artiste, utilisez « Tout lire » pour démarrer l\'album entier. Vous pouvez aussi glisser des pistes dans la file d\'attente.',
q5: 'Quels raccourcis clavier sont disponibles ?',
a5: 'Espace = Lecture / Pause · Échap = Fermer le lecteur plein écran. Les touches multimédia fonctionnent sur toutes les plateformes. Sur Linux, utilisez les boutons de la barre du lecteur. Les raccourcis in-app et les raccourcis système peuvent être personnalisés dans Paramètres → Raccourcis / Raccourcis globaux.',
q6: 'Qu\'est-ce que la file d\'attente ?',
a6: 'La file d\'attente affiche toutes les pistes à venir. Ouvrez-la avec l\'icône de panneau en haut à droite. Vous pouvez réorganiser les pistes par glisser-déposer, les mélanger et enregistrer la file comme liste de lecture.',
q7: 'Comment ouvrir le lecteur plein écran ?',
a7: 'Cliquez sur la pochette dans la barre du lecteur en bas, ou sur l\'icône d\'agrandissement à côté. Appuyez sur Échap pour fermer.',
q8: 'Comment fonctionne la répétition ?',
a8: 'Cliquez sur le bouton répéter pour alterner : Désactivé → Répéter tout → Répéter un.',
s3: 'Bibliothèque',
q9: 'Comment télécharger un album ?',
a9: 'Ouvrez la page de détail d\'un album et cliquez sur « Télécharger (ZIP) ». Le serveur compresse d\'abord l\'album en ZIP — pour les grands albums ou les fichiers sans perte (FLAC / WAV), cela peut prendre un moment avant que le téléchargement ne démarre réellement. La barre de progression n\'apparaît qu\'une fois la compression terminée.',
q10: 'Comment mettre des pistes et albums en favoris ?',
a10: 'Cliquez sur l\'icône étoile sur une piste ou dans l\'en-tête de l\'album. Les éléments favoris apparaissent dans la section Favoris de la barre latérale.',
q11: 'Qu\'est-ce que le carousel hero sur la page d\'accueil ?',
a11: 'La bannière en haut de la page d\'accueil sélectionne aléatoirement des albums de votre bibliothèque et les fait défiler toutes les 10 secondes. Cliquez sur les points pour accéder à un album spécifique.',
s4: 'Paramètres',
q12: 'Comment changer le thème ?',
a12: 'Paramètres → Thème. Un grand choix de thèmes en 8 groupes : Psysonic Themes, Mediaplayer, Systèmes d\'exploitation, Jeux, Films, Séries, Réseaux sociaux et Open Source Classics (Catppuccin, Nord, Gruvbox).',
q13: 'Comment changer la langue ?',
a13: 'Paramètres → Langue. L\'anglais, l\'allemand, le français, le néerlandais et le chinois sont pris en charge.',
q15: 'Comment définir un dossier de téléchargement ?',
a15: 'Paramètres → Comportement → Dossier de téléchargement. Les albums téléchargés y sont enregistrés en ZIP.',
s5: 'Scrobbling',
q16: 'Comment fonctionne le scrobbling ?',
a16: 'Psysonic envoie les scrobbles directement à Last.fm — aucune configuration Navidrome nécessaire. Connectez votre compte dans Paramètres → Last.fm et activez le scrobbling.',
q17: 'Quand un scrobble est-il envoyé ?',
a17: 'Un scrobble est soumis après avoir écouté 50% d\'une piste.',
q22: 'Qu\'est-ce que la forme d\'onde dans la barre du lecteur ?',
a22: 'La barre de forme d\'onde remplace le curseur de progression classique. Cliquez n\'importe où pour sauter à cette position, ou faites glisser pour naviguer.',
q24: 'Puis-je mélanger la file d\'attente ?',
a24: 'Oui. Ouvrez le panneau de file et cliquez sur l\'icône de mélange. La piste en cours reste en position 1 — les autres sont réorganisées aléatoirement.',
q25: 'Les liens Last.fm et Wikipédia s\'ouvrent-ils dans un navigateur ?',
a25: 'Oui — ils s\'ouvrent dans votre navigateur système par défaut. Le bouton affiche brièvement une confirmation au clic.',
s7: 'Mix aléatoire',
q26: 'Qu\'est-ce que le Mix aléatoire ?',
a26: 'Le Mix aléatoire crée une liste de morceaux aléatoires depuis toute votre bibliothèque. Ouvrez-le via « Mix aléatoire » dans la barre latérale et cliquez sur « Nouveau mix ».',
q27: 'Qu\'est-ce que le Filtre par mot-clé ?',
a27: 'Le Filtre par mot-clé exclut les pistes dont le genre, le titre ou l\'album contient des mots spécifiques. Les livres audio sont filtrés automatiquement. Ajoutez des mots-clés dans Paramètres → Mix aléatoire.',
q28: 'Qu\'est-ce que le Mix par super-genre ?',
a28: 'Le Mix par super-genre regroupe votre bibliothèque en grandes catégories (Rock, Métal, Électronique, Jazz, Classique, etc.) et crée un mix ciblé. Sélectionnez une catégorie dans les puces sous la liste.',
s6: 'Dépannage',
q18: 'Les pochettes et images d\'artistes chargent lentement.',
a18: 'Les images sont récupérées depuis le disque de votre serveur au premier chargement, puis mises en cache localement pendant 30 jours. Les visites suivantes seront instantanées.',
q19: 'Le test de connexion échoue.',
a19: 'Vérifiez l\'URL avec le port (ex. http://192.168.1.100:4533). Assurez-vous qu\'aucun pare-feu ne bloque la connexion. Essayez http:// au lieu de https:// sur un réseau local.',
q20: 'Pas d\'audio sur Linux.',
a20: 'Psysonic est disponible en .deb (Ubuntu/Debian), .rpm (Fedora/RHEL) et via AUR sur Arch/CachyOS (yay -S psysonic). Il n\'y a pas d\'AppImage. Si l\'audio ne fonctionne pas, vérifiez que PipeWire ou PulseAudio est actif.',
q21: 'L\'application affiche un écran noir sur Linux.',
a21: 'Cela est généralement dû à des problèmes de pilote GPU/EGL dans WebKitGTK. Lancez avec GDK_BACKEND=x11 WEBKIT_DISABLE_COMPOSITING_MODE=1 WEBKIT_DISABLE_DMABUF_RENDERER=1. Les paquets AUR et installateurs .deb/.rpm officiels le configurent automatiquement.',
q29: 'Que sont le fondu enchaîné et la lecture sans blanc ?',
a29: 'Ce sont des fonctionnalités audio expérimentales dans Paramètres → Audio. La lecture sans blanc pré-charge la piste suivante pour éliminer les silences. Le fondu enchaîné effectue un fondu sortant de la piste en cours tout en faisant un fondu entrant de la suivante — durée réglable (110 s).',
q30: 'Psysonic affiche-t-il les paroles ?',
a30: 'Oui. Cliquez sur l\'icône microphone dans la barre du lecteur pour ouvrir l\'onglet Paroles. Psysonic récupère automatiquement les paroles depuis LRCLIB. Si des paroles synchronisées sont disponibles, la ligne active est mise en évidence et défile en temps réel. Sinon, le texte complet est affiché statiquement.',
q31: 'Puis-je personnaliser les raccourcis clavier ?',
a31: 'Oui. Paramètres → Raccourcis clavier permet de réattribuer les actions in-app (Lecture/Pause, Suivant, Précédent, Volume, Plein écran, etc.). Paramètres → Raccourcis globaux permet d\'assigner des raccourcis système actifs même quand l\'application est en arrière-plan.',
q32: 'Puis-je changer la police ?',
a32: 'Oui. Paramètres → Police propose 10 polices dont IBM Plex Mono, Fira Code, JetBrains Mono et Courier Prime. La police choisie s\'applique à toute l\'interface.',
s8: 'Mode hors ligne',
q34: 'Qu\'est-ce que le mode hors ligne ?',
a34: 'Le mode hors ligne (Bêta) permet de mettre des albums en cache sur l\'appareil afin d\'écouter de la musique sans connexion serveur active. Les pistes mises en cache sont stockées localement et lues directement depuis le disque — sans requête réseau.',
q35: 'Comment mettre un album en cache pour une utilisation hors ligne ?',
a35: 'Ouvrez un album et cliquez sur l\'icône de téléchargement dans l\'en-tête de l\'album. Psysonic télécharge toutes les pistes en arrière-plan. La progression est affichée sur le bouton. Une fois en cache, l\'icône devient verte. Les albums mis en cache peuvent être consultés et supprimés dans la page Bibliothèque hors ligne (barre latérale).',
q36: 'Quelle quantité de stockage le cache hors ligne peut-il utiliser ?',
a36: 'Vous pouvez définir une taille de cache maximale dans Paramètres → Bibliothèque. Lorsque la limite est atteinte, une bannière d\'avertissement s\'affiche sur la page de l\'album. Vous pouvez supprimer des albums individuels dans la Bibliothèque hors ligne pour libérer de l\'espace.',
},
queue: {
title: 'File d\'attente',
savePlaylist: 'Enregistrer la liste',
updatePlaylist: 'Mettre à jour la liste',
filterPlaylists: 'Filtrer les listes…',
playlistName: 'Nom de la liste',
cancel: 'Annuler',
save: 'Enregistrer',
loadPlaylist: 'Charger une liste',
loading: 'Chargement…',
noPlaylists: 'Aucune liste trouvée.',
load: 'Remplacer la file et lire',
appendToQueue: 'Ajouter à la file',
delete: 'Supprimer',
deleteConfirm: 'Supprimer la liste « {{name}} » ?',
clear: 'Vider',
shuffle: 'Mélanger la file',
gapless: 'Sans blanc',
crossfade: 'Fondu',
infiniteQueue: 'File infinie',
autoAdded: '— Ajouté automatiquement —',
radioAdded: '— Radio —',
hide: 'Masquer',
close: 'Fermer',
nextTracks: 'Pistes suivantes',
emptyQueue: 'La file d\'attente est vide.',
trackSingular: 'piste',
trackPlural: 'pistes',
showRemaining: 'Afficher le temps restant',
showTotal: 'Afficher la durée totale',
},
statistics: {
title: 'Statistiques',
recentlyPlayed: 'Écoutés récemment',
mostPlayed: 'Albums les plus écoutés',
highestRated: 'Albums les mieux notés',
genreDistribution: 'Répartition par genre (Top 20)',
loadMore: 'Charger plus',
statArtists: 'Artistes',
statAlbums: 'Albums',
statSongs: 'Morceaux',
statGenres: 'Genres',
statPlaytime: 'Durée totale',
genreInsights: 'Aperçu des genres',
formatDistribution: 'Distribution des formats',
formatSample: 'Échantillon de {{n}} pistes',
computing: 'Calcul en cours…',
genreSongs: '{{count}} morceaux',
genreAlbums: '{{count}} albums',
recentlyAdded: 'Ajoutés récemment',
decadeDistribution: 'Albums par décennie',
decadeAlbums_one: '{{count}} album',
decadeAlbums_other: '{{count}} albums',
decadeUnknown: 'Inconnu',
lfmTitle: 'Stats Last.fm',
lfmTopArtists: 'Artistes favoris',
lfmTopAlbums: 'Albums favoris',
lfmTopTracks: 'Morceaux favoris',
lfmPlays: '{{count}} écoutes',
lfmPeriodOverall: 'Tout le temps',
lfmPeriod7day: '7 jours',
lfmPeriod1month: '1 mois',
lfmPeriod3month: '3 mois',
lfmPeriod6month: '6 mois',
lfmPeriod12month: '12 mois',
lfmNotConnected: 'Connectez Last.fm dans les Paramètres pour voir vos stats.',
lfmRecentTracks: 'Scrobbles récents',
lfmNowPlaying: 'En cours de lecture',
lfmJustNow: 'à l\'instant',
lfmMinutesAgo: 'il y a {{n}} min',
lfmHoursAgo: 'il y a {{n}}h',
lfmDaysAgo: 'il y a {{n}}j',
},
player: {
regionLabel: 'Lecteur de musique',
openFullscreen: 'Ouvrir le lecteur plein écran',
fullscreen: 'Lecteur plein écran',
closeFullscreen: 'Fermer le plein écran',
closeTooltip: 'Fermer (Échap)',
noTitle: 'Sans titre',
stop: 'Arrêter',
prev: 'Piste précédente',
play: 'Lecture',
pause: 'Pause',
next: 'Piste suivante',
repeat: 'Répéter',
repeatOff: 'Désactivé',
repeatAll: 'Tout',
repeatOne: 'Un',
progress: 'Progression',
volume: 'Volume',
toggleQueue: 'Afficher/masquer la file',
lyrics: 'Paroles',
lyricsLoading: 'Chargement des paroles…',
lyricsNotFound: 'Aucune parole trouvée pour ce titre',
},
songInfo: {
title: 'Infos du morceau',
songTitle: 'Titre',
artist: 'Artiste',
album: 'Album',
albumArtist: 'Artiste de l\'album',
year: 'Année',
genre: 'Genre',
duration: 'Durée',
track: 'Piste',
format: 'Format',
bitrate: 'Débit',
sampleRate: 'Fréquence d\'échantillonnage',
bitDepth: 'Profondeur de bits',
channels: 'Canaux',
fileSize: 'Taille du fichier',
path: 'Emplacement',
replayGainTrack: 'RG Gain de piste',
replayGainAlbum: 'RG Gain d\'album',
replayGainPeak: 'RG Crête de piste',
mono: 'Mono',
stereo: 'Stéréo',
},
playlists: {
title: 'Playlists',
newPlaylist: 'Nouvelle playlist',
unnamed: 'Playlist sans nom',
createName: 'Nom de la playlist…',
create: 'Créer',
cancel: 'Annuler',
empty: 'Aucune playlist pour l\'instant.',
emptyPlaylist: 'Cette playlist est vide.',
addFirstSong: 'Ajouter votre premier titre',
notFound: 'Playlist introuvable.',
songs: '{{n}} titres',
playAll: 'Tout lire',
shuffle: 'Aléatoire',
addToQueue: 'Ajouter à la file',
back: 'Retour aux playlists',
deletePlaylist: 'Supprimer',
confirmDelete: 'Cliquer à nouveau pour confirmer',
removeSong: 'Retirer de la playlist',
addSongs: 'Ajouter des titres',
searchPlaceholder: 'Rechercher dans la bibliothèque…',
noResults: 'Aucun résultat.',
suggestions: 'Titres suggérés',
noSuggestions: 'Aucune suggestion disponible.',
titleBadge: 'Playlist',
refreshSuggestions: 'Nouvelles suggestions',
addSong: 'Ajouter à la playlist',
cacheOffline: 'Mettre la playlist hors ligne',
offlineCached: 'Playlist en cache',
offlineDownloading: 'En cache… ({{done}}/{{total}} albums)',
publicLabel: 'Publique',
privateLabel: 'Privée',
editMeta: 'Modifier la playlist',
editNamePlaceholder: 'Nom de la playlist…',
editCommentPlaceholder: 'Ajouter une description…',
editPublic: 'Playlist publique',
editSave: 'Enregistrer',
editCancel: 'Annuler',
changeCover: 'Changer la pochette',
changeCoverLabel: 'Changer la photo',
removeCover: 'Supprimer la photo',
coverUpdated: 'Pochette mise à jour',
metaSaved: 'Playlist mise à jour',
},
radio: {
title: 'Radio Internet',
empty: 'Aucune station radio configurée.',
addStation: 'Ajouter une station',
editStation: 'Modifier',
deleteStation: 'Supprimer la station',
confirmDelete: 'Cliquer à nouveau pour confirmer',
stationName: 'Nom de la station…',
streamUrl: 'URL du flux…',
homepageUrl: 'URL de la page d\'accueil (optionnel)',
save: 'Enregistrer',
cancel: 'Annuler',
live: 'LIVE',
liveStream: 'Radio Internet',
openHomepage: 'Ouvrir la page d\'accueil',
changeCoverLabel: 'Changer la pochette',
removeCover: 'Supprimer la pochette',
browseDirectory: 'Parcourir l\'annuaire',
directoryPlaceholder: 'Rechercher des stations…',
noResults: 'Aucune station trouvée.',
stationAdded: 'Station ajoutée',
filterAll: 'Toutes',
filterFavorites: 'Favoris',
sortManual: 'Manuel',
sortAZ: 'A → Z',
sortZA: 'Z → A',
sortNewest: 'Plus récentes',
favorite: 'Ajouter aux favoris',
unfavorite: 'Retirer des favoris',
noFavorites: 'Aucune station favorite.',
}
};