v4: playlists have categories of their own — a set apart from the dumps', which admins manage on /manage under "Playlist categories", next to "Dump categories". Each category now has a kind, dump or playlist, its slug and name unique within its kind only; migration 0025 rebuilds categories with the column, every existing one becoming a dump category with its dumps, and adds playlist_categories. A playlist's owner files it under any of them in the create and edit forms, and it shows them as chips on its card and its page, each leading to /playlists/<slug>.

/playlists is the new page of every public playlist, newest first (GET /api/playlists), and /playlists/<slug> a playlist category's, with a menu of the categories, linked from the user menu as "All playlists"; `playlists` is reserved as a dump category's slug, and one that had it is renamed. A profile's Playlists tab narrows to a playlist category with the same menu as its Dumps tab (?category=), and so do the Dumps and Playlists tabs of /search, each with its own kind (category and playlistCategory for GET /api/search), another tab dropping it.

The category service takes the kind throughout, so a dump can't be filed under a playlist category nor the other way round, and categoryJoin is the one filter join the dump, follow and playlist services share. useCategories(kind) gives one kind's set from the one fetch, CategoryChips replaces the chips the dump card and page each drew, useCategoryFilter keeps a list to its category as the socket brings more, and useCategorySelection holds a form's picked categories.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
khannurien
2026-10-09 21:53:16 +00:00
parent 681170a517
commit 53515ce46f
71 changed files with 2166 additions and 705 deletions

View File

@@ -18,13 +18,13 @@ msgid "[deleted]"
msgstr "[supprimé]"
#. placeholder {0}: dump.commentCount
#: src/components/dump/DumpCard.tsx:139
#: src/components/dump/DumpCard.tsx:135
#: src/components/dump/JournalCard.tsx:136
msgid "{0, plural, one {# comment} other {# comments}}"
msgstr "{0, plural, one {# commentaire} other {# commentaires}}"
#. placeholder {0}: playlist.dumpCount
#: src/components/playlist/PlaylistCard.tsx:118
#: src/components/playlist/PlaylistCard.tsx:120
msgid "{0, plural, one {# dump} other {# dumps}}"
msgstr "{0, plural, one {# reco} other {# recos}}"
@@ -60,7 +60,7 @@ msgstr "{0}–{1} caractères : lettres, chiffres ou tirets bas"
msgid "email.digest.totals"
msgstr "{dumps, plural, one {# reco} other {# recos}}, {upvotes, plural, one {# vote} other {# votes}} et {comments, plural, one {# commentaire} other {# commentaires}}."
#: src/pages/Search.tsx:124
#: src/pages/Search.tsx:152
msgid "{label} ({count})"
msgstr "{label} ({count})"
@@ -205,15 +205,15 @@ msgstr "# Bienvenue sur {site} !\n"
"\n"
"Votre compte a bien été créé. Bienvenue à bord !"
#: src/components/dump/create/DumpCreateModal.tsx:742
#: src/components/dump/create/DumpCreateModal.tsx:736
#: src/pages/PlaylistDetail.tsx:80
#: src/pages/UserPublicProfile.tsx:125
msgid "← Back"
msgstr "← Retour"
#: src/pages/Dump.tsx:326
#: src/pages/Dump.tsx:568
#: src/pages/DumpEdit.tsx:232
#: src/pages/Dump.tsx:325
#: src/pages/Dump.tsx:552
#: src/pages/DumpEdit.tsx:233
msgid "← Back to all dumps"
msgstr "← Retour à toutes les recos"
@@ -225,7 +225,7 @@ msgstr "+ Inviter quelqu'un"
msgid "+ New playlist"
msgstr "+ Nouvelle collection"
#: src/pages/Dump.tsx:403
#: src/pages/Dump.tsx:399
msgid "+ Playlist"
msgstr "+ Collection"
@@ -312,8 +312,8 @@ msgstr "Compte sur <0>{host}</0>"
msgid "Add a comment…"
msgstr "Ajouter un commentaire…"
#: src/components/category/CategoryManager.tsx:104
#: src/components/category/CategoryManager.tsx:105
#: src/components/category/CategoryManager.tsx:115
#: src/components/category/CategoryManager.tsx:116
msgid "Add category"
msgstr "Ajouter une catégorie"
@@ -325,7 +325,7 @@ msgstr "Ajouter un e-mail…"
msgid "Add image"
msgstr "Ajouter une image"
#: src/components/dump/create/DumpCreateModal.tsx:465
#: src/components/dump/create/DumpCreateModal.tsx:458
#: src/components/playlist/AddToPlaylistModal.tsx:29
msgid "Add to playlist"
msgstr "Ajouter à la collection"
@@ -339,11 +339,15 @@ msgstr "ajoutée à {playlist}"
msgid "Admin"
msgstr "Administrateur"
#: src/components/category/CategorySwitcher.tsx:100
#: src/components/category/CategorySwitcher.tsx:103
#: src/components/category/CategorySwitcher.tsx:104
#: src/components/category/CategorySwitcher.tsx:107
msgid "All"
msgstr "Tout"
#: src/components/layout/UserMenu.tsx:108
msgid "All playlists"
msgstr "Toutes les collections"
#. placeholder {0}: first.ownerUsername
#. placeholder {1}: relativeTime(first.createdAt)
#: src/components/dump/create/DuplicateNotice.tsx:39
@@ -424,19 +428,19 @@ msgstr "Impossible de se connecter au serveur de mises à jour en direct. Les vo
msgid "Can't sign in there"
msgstr "Connexion impossible"
#: src/components/category/CategoryManager.tsx:225
#: src/components/category/CategoryManager.tsx:226
#: src/components/category/CategoryManager.tsx:241
#: src/components/category/CategoryManager.tsx:242
#: src/components/chat/ChatEditBox.tsx:92
#: src/components/comment/CommentForm.tsx:127
#: src/components/dump/create/DumpCreateModal.tsx:752
#: src/components/dump/create/DumpCreateModal.tsx:746
#: src/components/form/FormActions.tsx:42
#: src/components/playlist/PlaylistEditForm.tsx:200
#: src/components/playlist/PlaylistEditForm.tsx:222
#: src/components/profile/DescriptionEditor.tsx:97
#: src/components/profile/EmailEditor.tsx:83
#: src/components/shared/ConfirmModal.tsx:63
#: src/pages/Authorize.tsx:158
#: src/pages/Dump.tsx:445
#: src/pages/DumpEdit.tsx:565
#: src/pages/Dump.tsx:441
#: src/pages/DumpEdit.tsx:560
msgid "Cancel"
msgstr "Annuler"
@@ -453,12 +457,11 @@ msgstr "Annuler la réponse"
msgid "Cancel search"
msgstr "Annuler la recherche"
#: src/components/category/CategorySelect.tsx:33
#: src/pages/Manage.tsx:42
#: src/components/category/CategorySelect.tsx:38
msgid "Categories"
msgstr "Catégories"
#: src/components/category/CategorySwitcher.tsx:123
#: src/components/category/CategorySwitcher.tsx:127
msgid "Category"
msgstr "Catégorie"
@@ -513,7 +516,7 @@ msgstr "Vérification…"
msgid "Close"
msgstr "Fermer"
#: src/components/dump/create/DumpCreateModal.tsx:496
#: src/components/dump/create/DumpCreateModal.tsx:489
msgid "Close anyway"
msgstr "Fermer quand même"
@@ -525,7 +528,7 @@ msgstr "Fermer le sélecteur d'emoji"
msgid "Close player"
msgstr "Fermer le lecteur"
#: src/components/dump/create/DumpCreateModal.tsx:486
#: src/components/dump/create/DumpCreateModal.tsx:479
msgid "Close without posting? The attached file won't be kept — everything you typed will."
msgstr "Fermer sans publier ? Le fichier joint sera perdu — ce que vous avez écrit sera conservé."
@@ -579,8 +582,8 @@ msgstr "Impossible de changer le mot de passe"
msgid "Could not connect to the server. Check your connection and try again."
msgstr "Impossible de joindre le serveur. Vérifiez votre connexion et réessayez."
#: src/components/profile/ProfilePlaylistsTab.tsx:126
#: src/pages/DumpEdit.tsx:559
#: src/components/profile/ProfilePlaylistsTab.tsx:177
#: src/pages/DumpEdit.tsx:554
msgid "Could not delete"
msgstr "Suppression impossible"
@@ -588,7 +591,7 @@ msgstr "Suppression impossible"
msgid "Could not rename"
msgstr "Renommage impossible"
#: src/pages/DumpEdit.tsx:512
#: src/pages/DumpEdit.tsx:506
msgid "Could not save"
msgstr "Sauvegarde impossible"
@@ -596,7 +599,7 @@ msgstr "Sauvegarde impossible"
msgid "Couldn't add that instance"
msgstr "Impossible d'ajouter cette instance"
#: src/components/dump/create/DumpCreateModal.tsx:607
#: src/components/dump/create/DumpCreateModal.tsx:600
msgid "Couldn't load a preview for this link — check it, or post it as-is and refresh the preview later."
msgstr "Impossible de charger un aperçu pour ce lien — vérifiez-le, ou publiez-le tel quel et actualisez l'aperçu plus tard."
@@ -616,19 +619,19 @@ msgstr "Désabonnement impossible"
msgid "Couldn't update. Try again."
msgstr "La mise à jour a échoué. Réessayez."
#: src/components/playlist/PlaylistEditForm.tsx:135
#: src/components/playlist/PlaylistEditForm.tsx:150
msgid "Cover"
msgstr "Couverture"
#: src/components/playlist/PlaylistCreateForm.tsx:112
#: src/components/playlist/PlaylistCreateForm.tsx:122
msgid "Create"
msgstr "Créer"
#: src/components/playlist/PlaylistCreateForm.tsx:112
#: src/components/playlist/PlaylistCreateForm.tsx:122
msgid "Create & Add"
msgstr "Créer et ajouter"
#: src/components/playlist/PlaylistCreateForm.tsx:111
#: src/components/playlist/PlaylistCreateForm.tsx:121
msgid "Creating…"
msgstr "Création…"
@@ -644,8 +647,8 @@ msgstr "Sombre"
msgid "Default tab"
msgstr "Onglet par défaut"
#: src/components/category/CategoryManager.tsx:236
#: src/components/category/CategoryManager.tsx:237
#: src/components/category/CategoryManager.tsx:252
#: src/components/category/CategoryManager.tsx:253
#: src/components/chat/ChatMessageItem.tsx:118
#: src/components/chat/ChatMessageItem.tsx:119
#: src/components/chat/ChatMessageItem.tsx:220
@@ -656,28 +659,28 @@ msgstr "Onglet par défaut"
msgid "Delete"
msgstr "Supprimer"
#: src/components/category/CategoryManager.tsx:253
#: src/components/category/CategoryManager.tsx:269
msgid "Delete category"
msgstr "Supprimer la catégorie"
#. placeholder {0}: category.name
#: src/components/category/CategoryManager.tsx:252
#: src/components/category/CategoryManager.tsx:268
msgid "Delete category \"{0}\"? This cannot be undone."
msgstr "Supprimer la catégorie \"{0}\" ? Cette action est irréversible."
#: src/pages/DumpEdit.tsx:314
#: src/pages/DumpEdit.tsx:562
#: src/pages/DumpEdit.tsx:315
#: src/pages/DumpEdit.tsx:557
msgid "Delete dump"
msgstr "Supprimer la reco"
#. placeholder {0}: res.status
#: src/pages/DumpEdit.tsx:193
#: src/pages/DumpEdit.tsx:194
msgid "Delete failed ({0})"
msgstr "Échec de la suppression ({0})"
#: src/components/playlist/PlaylistCard.tsx:142
#: src/components/playlist/PlaylistEditForm.tsx:191
#: src/components/profile/ProfilePlaylistsTab.tsx:156
#: src/components/playlist/PlaylistCard.tsx:149
#: src/components/playlist/PlaylistEditForm.tsx:213
#: src/components/profile/ProfilePlaylistsTab.tsx:207
#: src/pages/PlaylistDetail.tsx:141
msgid "Delete playlist"
msgstr "Supprimer la collection"
@@ -686,7 +689,7 @@ msgstr "Supprimer la collection"
msgid "Delete this comment?"
msgstr "Supprimer ce commentaire ?"
#: src/pages/DumpEdit.tsx:313
#: src/pages/DumpEdit.tsx:314
msgid "Delete this dump? This cannot be undone."
msgstr "Supprimer cette reco ? Cette action est irréversible."
@@ -694,7 +697,7 @@ msgstr "Supprimer cette reco ? Cette action est irréversible."
msgid "Delete this message?"
msgstr "Supprimer ce message ?"
#: src/components/profile/ProfilePlaylistsTab.tsx:155
#: src/components/profile/ProfilePlaylistsTab.tsx:206
#: src/pages/PlaylistDetail.tsx:140
msgid "Delete this playlist? This cannot be undone."
msgstr "Supprimer cette collection ? Cette action est irréversible."
@@ -703,11 +706,11 @@ msgstr "Supprimer cette collection ? Cette action est irréversible."
msgid "deleted message"
msgstr "message supprimé"
#: src/components/playlist/PlaylistEditForm.tsx:176
#: src/components/playlist/PlaylistEditForm.tsx:191
msgid "Description"
msgstr "Description"
#: src/components/playlist/PlaylistCreateForm.tsx:104
#: src/components/playlist/PlaylistCreateForm.tsx:108
msgid "Description (optional)"
msgstr "Description (facultatif)"
@@ -728,7 +731,7 @@ msgstr "Déconnecté — reconnexion…"
msgid "Dismiss"
msgstr "Fermer"
#: src/components/dump/create/DumpCreateModal.tsx:546
#: src/components/dump/create/DumpCreateModal.tsx:539
msgid "Done"
msgstr "Terminé"
@@ -741,11 +744,11 @@ msgstr "Télécharger {0}"
msgid "Drop a file here"
msgstr "Déposez un fichier ici"
#: src/components/dump/create/DumpCreateModal.tsx:653
#: src/components/dump/create/DumpCreateModal.tsx:646
msgid "Drop a file here, or paste one"
msgstr "Déposez un fichier ici, ou collez-en un"
#: src/pages/DumpEdit.tsx:503
#: src/pages/DumpEdit.tsx:497
msgid "Drop a replacement here"
msgstr "Déposez un fichier de remplacement ici"
@@ -753,16 +756,20 @@ msgstr "Déposez un fichier de remplacement ici"
msgid "Dump"
msgstr "Reco"
#: src/components/dump/create/DumpCreateModal.tsx:765
#: src/pages/Manage.tsx:43
msgid "Dump categories"
msgstr "Catégories de recos"
#: src/components/dump/create/DumpCreateModal.tsx:759
msgid "Dump it"
msgstr "Recommander"
#: src/components/dump/create/DumpCreateModal.tsx:524
#: src/components/dump/create/DumpCreateModal.tsx:517
msgid "Dumped!"
msgstr "Recommandé !"
#: src/components/profile/ProfileDumpsTab.tsx:46
#: src/pages/Search.tsx:120
#: src/pages/Search.tsx:148
#: src/pages/UserPublicProfile.tsx:160
msgid "Dumps"
msgstr "Recos"
@@ -780,13 +787,13 @@ msgstr "Plus tôt"
#: src/components/chat/ChatMessageItem.tsx:108
#: src/components/chat/PendingItem.tsx:93
#: src/components/comment/CommentNode.tsx:256
#: src/components/playlist/PlaylistHeader.tsx:59
#: src/pages/Dump.tsx:564
#: src/components/playlist/PlaylistHeader.tsx:60
#: src/pages/Dump.tsx:548
msgid "Edit"
msgstr "Modifier"
#. placeholder {0}: category.name
#: src/components/category/CategoryManager.tsx:84
#: src/components/category/CategoryManager.tsx:94
msgid "Edit {0}"
msgstr "Modifier {0}"
@@ -799,7 +806,7 @@ msgid "Edit email"
msgstr "Modifier l'e-mail"
#: src/components/dump/create/TitleField.tsx:69
#: src/pages/Dump.tsx:462
#: src/pages/Dump.tsx:458
msgid "Edit title"
msgstr "Modifier le titre"
@@ -812,8 +819,8 @@ msgstr "modifié"
#. placeholder {0}: relativeTime(message.updatedAt)
#: src/components/chat/ChatMessageItem.tsx:132
#: src/components/comment/CommentNode.tsx:205
#: src/components/playlist/PlaylistHeader.tsx:94
#: src/pages/Dump.tsx:505
#: src/components/playlist/PlaylistHeader.tsx:95
#: src/pages/Dump.tsx:501
msgid "edited {0}"
msgstr "modifié {0}"
@@ -822,17 +829,17 @@ msgstr "modifié {0}"
#. placeholder {0}: message.updatedAt.toLocaleString()
#: src/components/chat/ChatMessageItem.tsx:128
#: src/components/comment/CommentNode.tsx:203
#: src/components/playlist/PlaylistHeader.tsx:92
#: src/pages/Dump.tsx:503
#: src/components/playlist/PlaylistHeader.tsx:93
#: src/pages/Dump.tsx:499
msgid "Edited {0}"
msgstr "Modifié le {0}"
#: src/pages/DumpEdit.tsx:257
#: src/pages/DumpEdit.tsx:258
msgid "Editing"
msgstr "Modification"
#. placeholder {0}: state.dump.title
#: src/pages/DumpEdit.tsx:80
#: src/pages/DumpEdit.tsx:81
msgid "Editing {0}"
msgstr "Édition de {0}"
@@ -844,7 +851,7 @@ msgstr "E-mail"
msgid "Email address"
msgstr "Adresse e-mail"
#: src/pages/Search.tsx:155
#: src/pages/Search.tsx:204
msgid "Enter a query to search."
msgstr "Saisissez une recherche."
@@ -852,15 +859,15 @@ msgstr "Saisissez une recherche."
msgid "Expand player"
msgstr "Agrandir le lecteur"
#: src/components/category/CategoryManager.tsx:246
#: src/components/category/CategoryManager.tsx:262
msgid "Failed to create category"
msgstr "Échec de la création de la catégorie"
#: src/components/playlist/PlaylistCreateForm.tsx:109
#: src/components/playlist/PlaylistCreateForm.tsx:119
msgid "Failed to create playlist"
msgstr "Impossible de créer la collection"
#: src/components/category/CategoryManager.tsx:169
#: src/components/category/CategoryManager.tsx:185
msgid "Failed to delete"
msgstr "Suppression échouée"
@@ -874,7 +881,7 @@ msgstr "Impossible de générer une invitation"
msgid "Failed to load"
msgstr "Chargement échoué"
#: src/components/dump/create/DumpCreateModal.tsx:555
#: src/components/dump/create/DumpCreateModal.tsx:548
msgid "Failed to post"
msgstr "Publication échouée"
@@ -888,13 +895,13 @@ msgstr "Impossible de publier la réponse"
#: src/components/federation/GrantList.tsx:98
#: src/components/federation/PeerManager.tsx:158
#: src/components/playlist/PlaylistEditForm.tsx:185
#: src/components/playlist/PlaylistEditForm.tsx:207
#: src/components/profile/DescriptionEditor.tsx:99
#: src/components/profile/EmailEditor.tsx:86
msgid "Failed to save"
msgstr "Enregistrement échoué"
#: src/components/category/CategoryManager.tsx:247
#: src/components/category/CategoryManager.tsx:263
msgid "Failed to save category"
msgstr "Échec de l’enregistrement de la catégorie"
@@ -914,11 +921,11 @@ msgstr "Erreur lors de la mise à jour du rôle"
msgid "Feeds"
msgstr "Flux"
#: src/components/dump/create/DumpCreateModal.tsx:594
#: src/components/dump/create/DumpCreateModal.tsx:587
msgid "Fetching preview…"
msgstr "Récupération de l'aperçu…"
#: src/components/dump/create/DumpCreateModal.tsx:417
#: src/components/dump/create/DumpCreateModal.tsx:410
msgid "File too large (max {max})."
msgstr "Fichier trop volumineux (max {max})."
@@ -1017,7 +1024,7 @@ msgstr "Si vous n'êtes pas à l'origine de cette demande, ignorez cet e-mail. V
msgid "image"
msgstr "image"
#: src/pages/Dump.tsx:584
#: src/pages/Dump.tsx:568
msgid "In collections"
msgstr "Dans les collections"
@@ -1031,7 +1038,7 @@ msgstr "Dans la tribune"
msgid "Insert emoji"
msgstr "Insérer un emoji"
#: src/pages/Manage.tsx:49
#: src/pages/Manage.tsx:56
msgid "Instances"
msgstr "Instances"
@@ -1073,7 +1080,7 @@ msgstr "Invités"
msgid "Journal"
msgstr "Journal"
#: src/components/dump/create/DumpCreateModal.tsx:493
#: src/components/dump/create/DumpCreateModal.tsx:486
msgid "Keep editing"
msgstr "Continuer l'édition"
@@ -1094,7 +1101,7 @@ msgstr "Clair"
msgid "Like"
msgstr "Aimer"
#: src/components/dump/create/DumpCreateModal.tsx:569
#: src/components/dump/create/DumpCreateModal.tsx:562
#: src/components/form/SlugField.tsx:69
msgid "Link"
msgstr "Lien"
@@ -1119,8 +1126,8 @@ msgstr "Charger plus"
msgid "Load older messages"
msgstr "Charger les messages plus anciens"
#: src/pages/Dump.tsx:302
#: src/pages/DumpEdit.tsx:208
#: src/pages/Dump.tsx:301
#: src/pages/DumpEdit.tsx:209
msgid "Loading dump…"
msgstr "Chargement de la reco…"
@@ -1140,7 +1147,7 @@ msgstr "Chargement de la collection…"
msgid "Loading profile…"
msgstr "Chargement du profil…"
#: src/components/category/CategoryManager.tsx:60
#: src/components/category/CategoryManager.tsx:69
#: src/components/chat/ChatModal.tsx:763
#: src/components/editor/EmojiPickerPopup.tsx:125
#: src/components/federation/PeerManager.tsx:120
@@ -1173,7 +1180,7 @@ msgstr "Se connecter pour valider"
msgid "Log in with {0}"
msgstr "Se connecter avec {0}"
#: src/components/layout/UserMenu.tsx:127
#: src/components/layout/UserMenu.tsx:139
#: src/pages/UserPublicProfile.tsx:133
msgid "Log out"
msgstr "Se déconnecter"
@@ -1191,7 +1198,7 @@ msgstr "Connexion échouée"
msgid "Lowercase letters, numbers and single hyphens only"
msgstr "Minuscules, chiffres et tirets simples seulement"
#: src/components/layout/UserMenu.tsx:114
#: src/components/layout/UserMenu.tsx:126
#: src/pages/Manage.tsx:32
#: src/pages/Manage.tsx:40
#: src/pages/UserPublicProfile.tsx:166
@@ -1215,8 +1222,8 @@ msgstr "Récap mensuel"
msgid "Mute"
msgstr "Couper le son"
#: src/components/category/CategoryManager.tsx:192
#: src/components/category/CategoryManager.tsx:193
#: src/components/category/CategoryManager.tsx:208
#: src/components/category/CategoryManager.tsx:209
msgid "Name"
msgstr "Nom"
@@ -1226,7 +1233,7 @@ msgstr "Nom"
msgid "New"
msgstr "Nouveau"
#: src/components/dump/create/DumpCreateModal.tsx:465
#: src/components/dump/create/DumpCreateModal.tsx:458
#: src/components/dump/NewDumpButton.tsx:27
#: src/components/layout/DumpFab.tsx:66
#: src/components/layout/DumpFab.tsx:67
@@ -1253,7 +1260,7 @@ msgstr "Nouvelle collection"
msgid "digest.newPlaylists"
msgstr "Nouvelles collections publiques"
#: src/components/dump/create/DumpCreateModal.tsx:764
#: src/components/dump/create/DumpCreateModal.tsx:758
msgid "Next →"
msgstr "Suivant →"
@@ -1265,7 +1272,7 @@ msgstr "Piste suivante"
msgid "No dumps in this playlist yet."
msgstr "Aucune reco dans cette collection pour l'instant."
#: src/pages/Search.tsx:171
#: src/pages/Search.tsx:220
msgid "No dumps match \"{q}\"."
msgstr "Aucune reco ne correspond à « {q} »."
@@ -1294,12 +1301,13 @@ msgstr "Aucun message pour l'instant. Dites bonjour !"
msgid "No one yet."
msgstr "Personne pour le moment."
#: src/pages/Search.tsx:212
#: src/pages/Search.tsx:261
msgid "No playlists match \"{q}\"."
msgstr "Aucune collection ne correspond à « {q} »."
#: src/components/playlist/PlaylistMembershipPanel.tsx:51
#: src/components/profile/ProfilePlaylistsTab.tsx:133
#: src/components/profile/ProfilePlaylistsTab.tsx:184
#: src/pages/Playlists.tsx:118
msgid "No playlists yet."
msgstr "Pas encore de collections."
@@ -1307,7 +1315,7 @@ msgstr "Pas encore de collections."
msgid "No reply from the server — this message may not have been sent"
msgstr "Pas de réponse du serveur — ce message n'a peut-être pas été envoyé"
#: src/pages/Search.tsx:186
#: src/pages/Search.tsx:235
msgid "No users match \"{q}\"."
msgstr "Aucun utilisateur ne correspond à « {q} »."
@@ -1327,7 +1335,7 @@ msgstr "Rien de neuf ce mois-ci."
msgid "Nothing happened this week."
msgstr "Rien de neuf cette semaine."
#: src/components/profile/ProfileDumpsTab.tsx:96
#: src/components/profile/ProfileDumpsTab.tsx:97
#: src/components/profile/ProfileOverviewTab.tsx:47
#: src/pages/Notifications.tsx:522
msgid "Nothing here yet."
@@ -1361,7 +1369,7 @@ msgstr "Chaque semaine, vous recevrez un résumé de ce qui s'est passé ici, et
msgid "Only images can be dropped here."
msgstr "Seules les images peuvent être déposées ici."
#: src/pages/DumpEdit.tsx:118
#: src/pages/DumpEdit.tsx:119
msgid "Only its poster or a moderator can edit this dump."
msgstr "Seuls son auteur et les modérateurs peuvent modifier ce dump."
@@ -1432,7 +1440,7 @@ msgstr "Mot de passe mis à jour"
msgid "Passwords do not match"
msgstr "Les mots de passe ne correspondent pas"
#: src/components/dump/create/DumpCreateModal.tsx:587
#: src/components/dump/create/DumpCreateModal.tsx:580
msgid "Paste a link…"
msgstr "Collez un lien…"
@@ -1443,7 +1451,7 @@ msgstr "Collez un lien…"
msgid "Pause"
msgstr "Pause"
#: src/components/dump/create/DumpCreateModal.tsx:505
#: src/components/dump/create/DumpCreateModal.tsx:498
msgid "Picked up where you left off."
msgstr "Reprise de votre brouillon."
@@ -1455,12 +1463,18 @@ msgstr "Reprise de votre brouillon."
msgid "Play"
msgstr "Lecture"
#: src/pages/Manage.tsx:48
msgid "Playlist categories"
msgstr "Catégories de collections"
#: src/components/dump/create/StepIndicator.tsx:21
#: src/components/layout/AppHeader.tsx:172
#: src/components/layout/UserMenu.tsx:88
#: src/components/layout/UserMenu.tsx:92
#: src/components/profile/ProfileFollowTab.tsx:144
#: src/components/profile/ProfilePlaylistsTab.tsx:118
#: src/pages/Search.tsx:123
#: src/components/profile/ProfilePlaylistsTab.tsx:155
#: src/pages/Playlists.tsx:52
#: src/pages/Playlists.tsx:106
#: src/pages/Search.tsx:151
#: src/pages/UserPublicProfile.tsx:162
msgid "Playlists"
msgstr "Collections"
@@ -1475,7 +1489,7 @@ msgstr "Publier la réponse"
#: src/components/comment/CommentNode.tsx:290
#: src/components/comment/CommentThread.tsx:100
#: src/components/dump/create/DumpCreateModal.tsx:758
#: src/components/dump/create/DumpCreateModal.tsx:752
msgid "Posting…"
msgstr "Publication…"
@@ -1483,12 +1497,12 @@ msgstr "Publication…"
msgid "Previous track"
msgstr "Piste précédente"
#: src/components/dump/DumpCard.tsx:148
#: src/components/dump/DumpCard.tsx:144
#: src/components/dump/JournalCard.tsx:145
#: src/components/playlist/PlaylistCard.tsx:104
#: src/components/playlist/PlaylistHeader.tsx:76
#: src/components/playlist/PlaylistCard.tsx:106
#: src/components/playlist/PlaylistHeader.tsx:77
#: src/components/playlist/PlaylistMembershipPanel.tsx:81
#: src/pages/Dump.tsx:511
#: src/pages/Dump.tsx:507
msgid "private"
msgstr "privé"
@@ -1496,8 +1510,8 @@ msgstr "privé"
msgid "Private"
msgstr "Privé"
#: src/components/playlist/PlaylistCard.tsx:103
#: src/components/playlist/PlaylistHeader.tsx:76
#: src/components/playlist/PlaylistCard.tsx:105
#: src/components/playlist/PlaylistHeader.tsx:77
msgid "public"
msgstr "public"
@@ -1505,7 +1519,7 @@ msgstr "public"
msgid "Public"
msgstr "Public"
#: src/pages/DumpEdit.tsx:290
#: src/pages/DumpEdit.tsx:291
msgid "Refresh metadata"
msgstr "Actualiser les métadonnées"
@@ -1513,7 +1527,7 @@ msgstr "Actualiser les métadonnées"
msgid "Refreshing stream…"
msgstr "Actualisation du flux…"
#: src/pages/DumpEdit.tsx:289
#: src/pages/DumpEdit.tsx:290
msgid "Refreshing…"
msgstr "Actualisation…"
@@ -1531,7 +1545,7 @@ msgstr "Inscription…"
msgid "Registration failed"
msgstr "Inscription échouée"
#: src/pages/Dump.tsx:575
#: src/pages/Dump.tsx:559
msgid "Related"
msgstr "Connexe"
@@ -1565,7 +1579,7 @@ msgstr "Renommer"
msgid "Renaming…"
msgstr "Renommage…"
#: src/pages/DumpEdit.tsx:495
#: src/pages/DumpEdit.tsx:489
msgid "Replace file"
msgstr "Remplacer le fichier"
@@ -1596,8 +1610,8 @@ msgstr "Choisir un nouveau mot de passe"
msgid "Reset password"
msgstr "Réinitialiser le mot de passe"
#: src/pages/DumpEdit.tsx:471
#: src/pages/DumpEdit.tsx:526
#: src/pages/DumpEdit.tsx:465
#: src/pages/DumpEdit.tsx:520
msgid "Reset to default"
msgstr "Réinitialiser par défaut"
@@ -1617,8 +1631,8 @@ msgid "email.reset.title"
msgstr "Réinitialiser votre mot de passe"
#: src/components/chat/PendingItem.tsx:86
#: src/pages/Dump.tsx:319
#: src/pages/DumpEdit.tsx:225
#: src/pages/Dump.tsx:318
#: src/pages/DumpEdit.tsx:226
msgid "Retry"
msgstr "Réessayer"
@@ -1626,30 +1640,30 @@ msgstr "Réessayer"
msgid "Role"
msgstr "Rôle"
#: src/components/category/CategoryManager.tsx:216
#: src/components/category/CategoryManager.tsx:232
#: src/components/chat/ChatEditBox.tsx:85
#: src/components/comment/CommentNode.tsx:216
#: src/components/playlist/PlaylistEditForm.tsx:207
#: src/components/playlist/PlaylistEditForm.tsx:229
#: src/components/profile/DescriptionEditor.tsx:89
#: src/components/profile/EmailEditor.tsx:75
#: src/pages/Dump.tsx:437
#: src/pages/DumpEdit.tsx:568
#: src/pages/Dump.tsx:433
#: src/pages/DumpEdit.tsx:563
msgid "Save"
msgstr "Enregistrer"
#: src/components/comment/CommentNode.tsx:217
#: src/components/playlist/PlaylistEditForm.tsx:204
#: src/components/playlist/PlaylistEditForm.tsx:226
#: src/components/profile/ChangePasswordModal.tsx:119
#: src/components/profile/DescriptionEditor.tsx:86
#: src/components/profile/EmailEditor.tsx:72
#: src/pages/Dump.tsx:436
#: src/pages/Dump.tsx:432
#: src/pages/ResetPassword.tsx:139
msgid "Saving…"
msgstr "Enregistrement…"
#: src/components/layout/AppHeader.tsx:182
#: src/components/layout/SearchBar.tsx:83
#: src/pages/Search.tsx:69
#: src/pages/Search.tsx:87
msgid "Search"
msgstr "Rechercher"
@@ -1665,11 +1679,11 @@ msgstr "Rechercher un emoji"
msgid "Search emoji…"
msgstr "Rechercher un emoji…"
#: src/pages/Search.tsx:166
#: src/pages/Search.tsx:215
msgid "Search failed"
msgstr "Recherche échouée"
#: src/pages/Search.tsx:161
#: src/pages/Search.tsx:210
msgid "Searching…"
msgstr "Recherche…"
@@ -1709,7 +1723,7 @@ msgstr "Définir un nouveau mot de passe"
msgid "email.settings"
msgstr "Paramètres"
#: src/components/layout/UserMenu.tsx:104
#: src/components/layout/UserMenu.tsx:116
#: src/pages/Settings.tsx:75
#: src/pages/Settings.tsx:88
msgid "Settings"
@@ -1736,7 +1750,7 @@ msgstr "Connexion…"
msgid "Single use, valid for 7 days."
msgstr "Usage unique, valable 7 jours."
#: src/components/category/CategoryManager.tsx:205
#: src/components/category/CategoryManager.tsx:221
msgid "slug"
msgstr "identifiant"
@@ -1760,7 +1774,7 @@ msgstr "Une erreur est survenue"
msgid "Sounds"
msgstr "Sons"
#: src/components/dump/create/DumpCreateModal.tsx:512
#: src/components/dump/create/DumpCreateModal.tsx:505
msgid "Start fresh"
msgstr "Repartir de zéro"
@@ -1856,18 +1870,18 @@ msgstr "Ce lien de désabonnement est absent ou mal formé."
msgid "This week"
msgstr "Cette semaine"
#: src/pages/DumpEdit.tsx:455
#: src/pages/DumpEdit.tsx:449
msgid "Thumbnail"
msgstr "Miniature"
#: src/components/dump/create/TitleField.tsx:45
#: src/components/playlist/PlaylistCreateForm.tsx:96
#: src/components/playlist/PlaylistEditForm.tsx:160
#: src/pages/DumpEdit.tsx:516
#: src/components/playlist/PlaylistCreateForm.tsx:100
#: src/components/playlist/PlaylistEditForm.tsx:175
#: src/pages/DumpEdit.tsx:510
msgid "Title"
msgstr "Titre"
#: src/components/dump/create/DumpCreateModal.tsx:414
#: src/components/dump/create/DumpCreateModal.tsx:407
msgid "Title is required."
msgstr "Un titre est requis."
@@ -1967,7 +1981,7 @@ msgid "Upload failed"
msgstr "Envoi échoué"
#. placeholder {0}: Math.round((uploadProgress ?? 0) * 100)
#: src/components/dump/create/DumpCreateModal.tsx:449
#: src/components/dump/create/DumpCreateModal.tsx:442
msgid "Uploading {0}%"
msgstr "Envoi {0} %"
@@ -1975,7 +1989,7 @@ msgstr "Envoi {0} %"
msgid "Uploading image…"
msgstr "Envoi de l'image…"
#: src/components/dump/create/DumpCreateModal.tsx:761
#: src/components/dump/create/DumpCreateModal.tsx:755
msgid "Uploading…"
msgstr "Envoi…"
@@ -1993,15 +2007,15 @@ msgstr "Validé"
msgid "Upvoted ({0})"
msgstr "Validé ({0})"
#: src/pages/DumpEdit.tsx:487
#: src/pages/DumpEdit.tsx:481
msgid "URL"
msgstr "URL"
#: src/components/dump/create/DumpCreateModal.tsx:398
#: src/components/dump/create/DumpCreateModal.tsx:391
msgid "URL is required."
msgstr "L'URL est obligatoire."
#: src/components/category/CategoryManager.tsx:206
#: src/components/category/CategoryManager.tsx:222
msgid "URL slug"
msgstr "Identifiant d’URL"
@@ -2013,7 +2027,7 @@ msgstr "Utilisateur"
msgid "User management"
msgstr "Gestion utilisateur"
#: src/components/layout/UserMenu.tsx:63
#: src/components/layout/UserMenu.tsx:67
msgid "User menu"
msgstr "Menu utilisateur"
@@ -2026,7 +2040,7 @@ msgid "Username"
msgstr "Nom d'utilisateur"
#: src/components/profile/ProfileFollowTab.tsx:143
#: src/pages/Search.tsx:122
#: src/pages/Search.tsx:150
msgid "Users"
msgstr "Utilisateurs"
@@ -2046,7 +2060,7 @@ msgstr "Les utilisateurs d'une instance approuvée se connectent ici avec leur c
msgid "View all →"
msgstr "Tout voir →"
#: src/components/dump/create/DumpCreateModal.tsx:526
#: src/components/dump/create/DumpCreateModal.tsx:519
msgid "View dump →"
msgstr "Voir la reco →"
@@ -2064,8 +2078,8 @@ msgstr "Résumé hebdomadaire"
msgid "email.welcome.subject"
msgstr "Bienvenue sur {site}"
#: src/components/dump/create/DumpCreateModal.tsx:712
#: src/pages/DumpEdit.tsx:544
#: src/components/dump/create/DumpCreateModal.tsx:705
#: src/pages/DumpEdit.tsx:538
msgid "What makes it worth it?"
msgstr "Pourquoi on en voudrait ?"
@@ -2074,7 +2088,7 @@ msgstr "Pourquoi on en voudrait ?"
msgid "Who am I?"
msgstr "Qui suis-je ?"
#: src/components/dump/create/DumpCreateModal.tsx:727
#: src/components/dump/create/DumpCreateModal.tsx:721
msgid "Who can see it"
msgstr "Qui peut la voir"
@@ -2082,8 +2096,8 @@ msgstr "Qui peut la voir"
msgid "Why & where"
msgstr "Pourquoi & où"
#: src/components/dump/create/DumpCreateModal.tsx:711
#: src/pages/DumpEdit.tsx:543
#: src/components/dump/create/DumpCreateModal.tsx:704
#: src/pages/DumpEdit.tsx:537
msgid "Why?"
msgstr "Pourquoi ?"