v3: added localization, use global player for uploaded audio/video files

This commit is contained in:
khannurien
2026-04-03 15:29:33 +00:00
parent 378b3ffa46
commit 0ce80398a4
64 changed files with 4248 additions and 941 deletions

1
src/locales/en.js Normal file

File diff suppressed because one or more lines are too long

1
src/locales/en.mjs Normal file

File diff suppressed because one or more lines are too long

956
src/locales/en.po Normal file
View File

@@ -0,0 +1,956 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2026-03-31 06:22+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: en\n"
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
"Plural-Forms: \n"
#: src/components/CommentThread.tsx:170
msgid "[deleted]"
msgstr "[deleted]"
#. placeholder {0}: dump.commentCount
#: src/components/DumpCard.tsx:82
msgid "{0, plural, one {# comment} other {# comments}}"
msgstr "{0, plural, one {# comment} other {# comments}}"
#. placeholder {0}: playlist.dumpCount
#: src/components/PlaylistCard.tsx:84
msgid "{0, plural, one {# dump} other {# dumps}}"
msgstr "{0, plural, one {# dump} other {# dumps}}"
#. placeholder {0}: VALIDATION.USERNAME_MIN
#. placeholder {1}: VALIDATION.USERNAME_MAX
#: src/pages/UserRegister.tsx:128
msgid "{0}{1} characters: letters, numbers, or underscores"
msgstr "{0}{1} characters: letters, numbers, or underscores"
#: src/pages/Notifications.tsx:184
msgid "{days}d ago"
msgstr "{days}d ago"
#: src/pages/Notifications.tsx:182
msgid "{hrs}h ago"
msgstr "{hrs}h ago"
#: src/pages/Search.tsx:176
msgid "{label} ({count})"
msgstr "{label} ({count})"
#: src/pages/Notifications.tsx:180
msgid "{mins}m ago"
msgstr "{mins}m ago"
#: src/components/CommentThread.tsx:436
msgid "{visibleCount, plural, one {# comment} other {# comments}}"
msgstr "{visibleCount, plural, one {# comment} other {# comments}}"
#: src/pages/PlaylistDetail.tsx:605
#: src/pages/UserPublicProfile.tsx:606
msgid "← Back"
msgstr "← Back"
#: src/pages/Dump.tsx:216
#: src/pages/Dump.tsx:318
#: src/pages/DumpEdit.tsx:166
msgid "← Back to all dumps"
msgstr "← Back to all dumps"
#: src/pages/UserDumps.tsx:61
#: src/pages/UserPlaylists.tsx:352
#: src/pages/UserUpvoted.tsx:130
msgid "← Back to profile"
msgstr "← Back to profile"
#: src/pages/UserPublicProfile.tsx:90
msgid "+ Invite someone"
msgstr "+ Invite someone"
#: src/components/AppHeader.tsx:63
msgid "+ New"
msgstr "+ New"
#: src/pages/UserDumps.tsx:82
#: src/pages/UserPublicProfile.tsx:922
msgid "+ New dump"
msgstr "+ New dump"
#: src/components/PlaylistMembershipPanel.tsx:72
msgid "+ New playlist"
msgstr "+ New playlist"
#: src/pages/Dump.tsx:248
msgid "+ Playlist"
msgstr "+ Playlist"
#. placeholder {0}: d.followerUsername
#. placeholder {1}: d.playlistTitle
#: src/pages/Notifications.tsx:124
msgid "<0>{0}</0> followed your playlist <1>{1}</1>"
msgstr "<0>{0}</0> followed your playlist <1>{1}</1>"
#. placeholder {0}: d.mentionerUsername
#: src/pages/Notifications.tsx:166
msgid "<0>{0}</0> mentioned you in <1>{where}</1>"
msgstr "<0>{0}</0> mentioned you in <1>{where}</1>"
#. placeholder {0}: d.dumperUsername
#. placeholder {1}: d.dumpTitle
#: src/pages/Notifications.tsx:134
msgid "<0>{0}</0> posted <1>{1}</1>"
msgstr "<0>{0}</0> posted <1>{1}</1>"
#. placeholder {0}: d.followerUsername
#: src/pages/Notifications.tsx:115
msgid "<0>{0}</0> started following you"
msgstr "<0>{0}</0> started following you"
#. placeholder {0}: d.voterUsername
#. placeholder {1}: d.dumpTitle
#: src/pages/Notifications.tsx:154
msgid "<0>{0}</0> upvoted <1>{1}</1>"
msgstr "<0>{0}</0> upvoted <1>{1}</1>"
#. placeholder {0}: d.dumpTitle
#. placeholder {1}: d.playlistTitle
#: src/pages/Notifications.tsx:144
msgid "<0>{0}</0> was added to <1>{1}</1>"
msgstr "<0>{0}</0> was added to <1>{1}</1>"
#: src/pages/Notifications.tsx:164
msgid "a comment"
msgstr "a comment"
#: src/pages/Notifications.tsx:164
msgid "a post"
msgstr "a post"
#: src/pages/UserPublicProfile.tsx:802
msgid "Add a bio…"
msgstr "Add a bio…"
#: src/components/CommentThread.tsx:456
msgid "Add a comment…"
msgstr "Add a comment…"
#: src/pages/UserPublicProfile.tsx:718
msgid "Add email…"
msgstr "Add email…"
#: src/components/AddToPlaylistModal.tsx:64
#: src/components/DumpCreateModal.tsx:262
msgid "Add to playlist"
msgstr "Add to playlist"
#: api/auth:
#~ msgid "Admin access required"
#~ msgstr "Admin access required"
#. placeholder {0}: dumps.length
#: src/pages/UserDumps.tsx:114
msgid "All {0, plural, one {# dump} other {# dumps}} loaded."
msgstr "All {0, plural, one {# dump} other {# dumps}} loaded."
#. placeholder {0}: votes.length
#: src/pages/UserUpvoted.tsx:184
msgid "All {0, plural, one {# upvoted dump} other {# upvoted dumps}} loaded."
msgstr "All {0, plural, one {# upvoted dump} other {# upvoted dumps}} loaded."
#: src/pages/UserRegister.tsx:160
msgid "Already have an account? <0>Log in</0>"
msgstr "Already have an account? <0>Log in</0>"
#: src/contexts/WSProvider.tsx:168
#: src/contexts/WSProvider.tsx:360
msgid "Can't connect to the live updates server. Upvotes and notifications may not sync until it reconnects."
msgstr "Can't connect to the live updates server. Upvotes and notifications may not sync until it reconnects."
#: src/components/CommentThread.tsx:268
#: src/components/CommentThread.tsx:353
#: src/components/CommentThread.tsx:483
#: src/components/ConfirmModal.tsx:32
#: src/components/DumpCreateModal.tsx:394
#: src/components/PlaylistCreateForm.tsx:105
#: src/pages/DumpEdit.tsx:288
#: src/pages/PlaylistDetail.tsx:672
#: src/pages/UserPublicProfile.tsx:700
#: src/pages/UserPublicProfile.tsx:773
msgid "Cancel"
msgstr "Cancel"
#: src/pages/PlaylistDetail.tsx:848
msgid "Cancel removal"
msgstr "Cancel removal"
#: api/comments:
#~ msgid "Cannot edit a deleted comment"
#~ msgstr "Cannot edit a deleted comment"
#: src/pages/UserPublicProfile.tsx:633
msgid "Change avatar"
msgstr "Change avatar"
#: src/pages/UserRegister.tsx:94
msgid "Checking invite…"
msgstr "Checking invite…"
#: src/components/Modal.tsx:45
msgid "Close"
msgstr "Close"
#: api/comments:
#~ msgid "Comment not found"
#~ msgstr "Comment not found"
#: src/pages/UserPublicProfile.tsx:81
msgid "Copied!"
msgstr "Copied!"
#: src/pages/UserPublicProfile.tsx:81
msgid "Copy"
msgstr "Copy"
#: src/components/CommentThread.tsx:108
#: src/components/CommentThread.tsx:147
#: src/components/CommentThread.tsx:425
msgid "Could not reach the server. Please try again."
msgstr "Could not reach the server. Please try again."
#: src/components/PlaylistCreateForm.tsx:116
msgid "Create"
msgstr "Create"
#: src/components/PlaylistCreateForm.tsx:115
msgid "Create & Add"
msgstr "Create & Add"
#. placeholder {0}: created.items.length
#. placeholder {1}: created.hasMore ? "+" : ""
#: src/pages/UserPlaylists.tsx:386
msgid "Created ({0}{1})"
msgstr "Created ({0}{1})"
#: src/components/PlaylistCreateForm.tsx:113
msgid "Creating…"
msgstr "Creating…"
#: src/components/CommentThread.tsx:306
#: src/components/CommentThread.tsx:312
#: src/components/ConfirmModal.tsx:16
#: src/pages/PlaylistDetail.tsx:679
msgid "Delete"
msgstr "Delete"
#: src/pages/DumpEdit.tsx:284
#: src/pages/DumpEdit.tsx:300
msgid "Delete dump"
msgstr "Delete dump"
#: src/components/PlaylistCard.tsx:107
#: src/pages/PlaylistDetail.tsx:861
#: src/pages/UserPlaylists.tsx:443
msgid "Delete playlist"
msgstr "Delete playlist"
#: src/components/CommentThread.tsx:311
msgid "Delete this comment?"
msgstr "Delete this comment?"
#: src/pages/DumpEdit.tsx:299
msgid "Delete this dump? This cannot be undone."
msgstr "Delete this dump? This cannot be undone."
#: src/pages/PlaylistDetail.tsx:860
#: src/pages/UserPlaylists.tsx:442
msgid "Delete this playlist? This cannot be undone."
msgstr "Delete this playlist? This cannot be undone."
#: src/components/PlaylistCreateForm.tsx:76
#: src/pages/PlaylistDetail.tsx:710
msgid "Description (optional)"
msgstr "Description (optional)"
#: src/components/DumpCreateModal.tsx:439
msgid "Done"
msgstr "Done"
#: src/components/FileDropZone.tsx:32
msgid "Drop a file here"
msgstr "Drop a file here"
#: src/pages/DumpEdit.tsx:242
msgid "Drop a replacement here"
msgstr "Drop a replacement here"
#: src/components/DumpCreateModal.tsx:405
msgid "Dump it"
msgstr "Dump it"
#: api/dumps:
#~ msgid "Dump not found"
#~ msgstr "Dump not found"
#: src/components/DumpCreateModal.tsx:416
msgid "Dumped!"
msgstr "Dumped!"
#: src/pages/Search.tsx:172
#: src/pages/UserDumps.tsx:75
msgid "Dumps"
msgstr "Dumps"
#. placeholder {0}: dumps.items.length
#. placeholder {1}: dumps.hasMore ? "+" : ""
#: src/pages/UserPublicProfile.tsx:817
msgid "Dumps ({0}{1})"
msgstr "Dumps ({0}{1})"
#: src/pages/Notifications.tsx:341
msgid "Earlier"
msgstr "Earlier"
#: src/components/CommentThread.tsx:297
#: src/pages/Dump.tsx:315
#: src/pages/PlaylistDetail.tsx:698
msgid "Edit"
msgstr "Edit"
#. placeholder {0}: relativeTime(comment.updatedAt)
#. placeholder {0}: relativeTime(dump.updatedAt)
#. placeholder {0}: relativeTime(playlist.updatedAt)
#: src/components/CommentThread.tsx:231
#: src/pages/Dump.tsx:276
#: src/pages/PlaylistDetail.tsx:768
msgid "edited {0}"
msgstr "edited {0}"
#. placeholder {0}: comment.updatedAt.toLocaleString()
#. placeholder {0}: dump.updatedAt.toLocaleString()
#. placeholder {0}: playlist.updatedAt.toLocaleString()
#: src/components/CommentThread.tsx:229
#: src/pages/Dump.tsx:274
#: src/pages/PlaylistDetail.tsx:765
msgid "Edited {0}"
msgstr "Edited {0}"
#: src/pages/DumpEdit.tsx:180
msgid "Editing"
msgstr "Editing"
#: src/pages/UserRegister.tsx:135
msgid "Email address"
msgstr "Email address"
#: src/pages/Search.tsx:206
msgid "Enter a query to search."
msgstr "Enter a query to search."
#: src/components/PlaylistCreateForm.tsx:59
#: src/components/PlaylistCreateForm.tsx:97
msgid "Failed to create playlist"
msgstr "Failed to create playlist"
#: src/pages/UserPublicProfile.tsx:62
#: src/pages/UserPublicProfile.tsx:65
#: src/pages/UserPublicProfile.tsx:92
msgid "Failed to generate invite"
msgstr "Failed to generate invite"
#: src/pages/index/FollowedFeed.tsx:77
#: src/pages/index/HotFeed.tsx:30
#: src/pages/index/JournalFeed.tsx:42
#: src/pages/index/NewFeed.tsx:30
#: src/pages/Notifications.tsx:321
msgid "Failed to load"
msgstr "Failed to load"
#: src/components/DumpCreateModal.tsx:300
msgid "Failed to post"
msgstr "Failed to post"
#: src/components/CommentThread.tsx:462
msgid "Failed to post comment"
msgstr "Failed to post comment"
#: src/components/CommentThread.tsx:334
msgid "Failed to post reply"
msgstr "Failed to post reply"
#: src/pages/PlaylistDetail.tsx:776
#: src/pages/UserPublicProfile.tsx:546
#: src/pages/UserPublicProfile.tsx:581
#: src/pages/UserPublicProfile.tsx:704
#: src/pages/UserPublicProfile.tsx:776
msgid "Failed to save"
msgstr "Failed to save"
#: src/components/CommentThread.tsx:249
msgid "Failed to save edit"
msgstr "Failed to save edit"
#: src/pages/UserPublicProfile.tsx:726
msgid "Failed to update avatar"
msgstr "Failed to update avatar"
#: src/components/DumpCreateModal.tsx:333
msgid "Fetching preview…"
msgstr "Fetching preview…"
#: src/components/DumpCreateModal.tsx:403
msgid "Fetching…"
msgstr "Fetching…"
#: src/components/DumpCreateModal.tsx:293
#: src/components/FileDropZone.tsx:31
msgid "File"
msgstr "File"
#: api/avatars:
#~ msgid "File content is not a recognised image (JPEG, PNG, GIF, WebP)"
#~ msgstr "File content is not a recognised image (JPEG, PNG, GIF, WebP)"
#: api/avatars:
#~ msgid "File too large (max 5 MB)"
#~ msgstr "File too large (max 5 MB)"
#: api/dumps:
#~ msgid "File too large (max 50 MB)"
#~ msgstr "File too large (max 50 MB)"
#: src/components/DumpCreateModal.tsx:187
msgid "File too large (max 50 MB)."
msgstr "File too large (max 50 MB)."
#: src/components/FollowButton.tsx:37
#: src/components/FollowButton.tsx:64
msgid "Follow"
msgstr "Follow"
#: src/components/FollowButton.tsx:35
msgid "Follow {targetUsername}"
msgstr "Follow {targetUsername}"
#: src/components/FollowButton.tsx:62
msgid "Follow playlist"
msgstr "Follow playlist"
#: src/pages/index/FollowedFeed.tsx:359
msgid "Follow some public playlists to see their dumps here."
msgstr "Follow some public playlists to see their dumps here."
#: src/pages/index/FollowedFeed.tsx:345
msgid "Follow some users to see their dumps here."
msgstr "Follow some users to see their dumps here."
#: src/components/FeedTabBar.tsx:47
msgid "Followed"
msgstr "Followed"
#. placeholder {0}: followed.items.length
#. placeholder {1}: followed.hasMore ? "+" : ""
#: src/pages/UserPlaylists.tsx:416
msgid "Followed ({0}{1})"
msgstr "Followed ({0}{1})"
#: src/components/FollowButton.tsx:37
#: src/components/FollowButton.tsx:64
msgid "Following"
msgstr "Following"
#: api/playlists:
#~ msgid "Forbidden"
#~ msgstr "Forbidden"
#: src/pages/index/FollowedFeed.tsx:325
msgid "From people"
msgstr "From people"
#: src/pages/index/FollowedFeed.tsx:332
msgid "From playlists"
msgstr "From playlists"
#: src/components/FeedTabBar.tsx:25
msgid "Hot"
msgstr "Hot"
#: api/auth:
#~ msgid "Invalid email address"
#~ msgstr "Invalid email address"
#: src/pages/UserRegister.tsx:104
msgid "Invalid invite"
msgstr "Invalid invite"
#: api/invites:
#~ msgid "Invalid or expired invite"
#~ msgstr "Invalid or expired invite"
#: api/dumps:
#~ msgid "Invalid URL"
#~ msgstr "Invalid URL"
#. Backend error strings (manually maintained)
#: api/auth:
#~ msgid "Invalid username or password"
#~ msgstr "Invalid username or password"
#: api/invites:
#~ msgid "Invite already used"
#~ msgstr "Invite already used"
#: src/pages/UserPublicProfile.tsx:651
msgid "invited by"
msgstr "invited by"
#: src/components/FeedTabBar.tsx:39
msgid "Journal"
msgstr "Journal"
#: src/pages/Notifications.tsx:178
msgid "just now"
msgstr "just now"
#: src/contexts/WSProvider.tsx:359
msgid "Live updates are temporarily disconnected. Trying to reconnect…"
msgstr "Live updates are temporarily disconnected. Trying to reconnect…"
#: src/components/AppHeader.tsx:79
msgid "Live updates unavailable."
msgstr "Live updates unavailable."
#: src/pages/Notifications.tsx:386
msgid "Load more"
msgstr "Load more"
#: src/pages/Dump.tsx:193
#: src/pages/DumpEdit.tsx:143
msgid "Loading dump…"
msgstr "Loading dump…"
#: src/pages/index/FollowedFeed.tsx:103
#: src/pages/index/HotFeed.tsx:52
#: src/pages/index/JournalFeed.tsx:65
#: src/pages/index/NewFeed.tsx:52
#: src/pages/Search.tsx:239
#: src/pages/UserDumps.tsx:111
#: src/pages/UserPlaylists.tsx:409
#: src/pages/UserPlaylists.tsx:436
#: src/pages/UserUpvoted.tsx:180
msgid "Loading more…"
msgstr "Loading more…"
#: src/pages/PlaylistDetail.tsx:590
msgid "Loading playlist…"
msgstr "Loading playlist…"
#: src/pages/UserPublicProfile.tsx:590
msgid "Loading profile…"
msgstr "Loading profile…"
#: src/components/PlaylistMembershipPanel.tsx:26
#: src/components/TextEditor.tsx:273
#: src/pages/index/FollowedFeed.tsx:74
#: src/pages/index/HotFeed.tsx:29
#: src/pages/index/JournalFeed.tsx:41
#: src/pages/index/NewFeed.tsx:29
#: src/pages/Notifications.tsx:318
#: src/pages/Notifications.tsx:386
#: src/pages/UserDumps.tsx:50
#: src/pages/UserPlaylists.tsx:341
#: src/pages/UserUpvoted.tsx:119
msgid "Loading…"
msgstr "Loading…"
#: src/components/AppHeader.tsx:70
#: src/pages/UserLogin.tsx:62
#: src/pages/UserLogin.tsx:91
msgid "Log in"
msgstr "Log in"
#: src/pages/UserPublicProfile.tsx:610
#: src/pages/UserPublicProfile.tsx:738
msgid "Log out"
msgstr "Log out"
#: src/pages/UserLogin.tsx:90
msgid "Logging in…"
msgstr "Logging in…"
#: src/pages/UserLogin.tsx:65
msgid "Login failed"
msgstr "Login failed"
#: src/components/FileDropZone.tsx:141
msgid "Max 50 MB"
msgstr "Max 50 MB"
#: src/pages/Notifications.tsx:312
msgid "new"
msgstr "new"
#: src/components/FeedTabBar.tsx:32
msgid "New"
msgstr "New"
#: src/components/DumpCreateModal.tsx:262
msgid "New dump"
msgstr "New dump"
#: src/pages/PlaylistDetail.tsx:783
msgid "No dumps in this playlist yet."
msgstr "No dumps in this playlist yet."
#: src/pages/Search.tsx:220
msgid "No dumps match \"{q}\"."
msgstr "No dumps match \"{q}\"."
#: src/pages/index/HotFeed.tsx:32
#: src/pages/index/JournalFeed.tsx:44
#: src/pages/index/NewFeed.tsx:32
msgid "No dumps yet. Be the first!"
msgstr "No dumps yet. Be the first!"
#: src/components/TextEditor.tsx:274
msgid "No emoji found."
msgstr "No emoji found."
#: src/pages/UserPlaylists.tsx:424
msgid "No followed playlists yet."
msgstr "No followed playlists yet."
#: src/pages/Search.tsx:273
msgid "No playlists match \"{q}\"."
msgstr "No playlists match \"{q}\"."
#: src/components/PlaylistMembershipPanel.tsx:28
#: src/pages/UserPlaylists.tsx:392
#: src/pages/UserPublicProfile.tsx:865
msgid "No playlists yet."
msgstr "No playlists yet."
#: src/pages/Search.tsx:249
msgid "No users match \"{q}\"."
msgstr "No users match \"{q}\"."
#: api/auth:
#~ msgid "Not authenticated"
#~ msgstr "Not authenticated"
#: src/pages/Notifications.tsx:327
#: src/pages/UserDumps.tsx:92
#: src/pages/UserPublicProfile.tsx:930
#: src/pages/UserPublicProfile.tsx:1049
#: src/pages/UserUpvoted.tsx:151
msgid "Nothing here yet."
msgstr "Nothing here yet."
#: src/components/NotificationBell.tsx:42
#: src/pages/Notifications.tsx:308
msgid "Notifications"
msgstr "Notifications"
#: src/components/NotificationBell.tsx:41
msgid "Notifications ({unreadNotificationCount} unread)"
msgstr "Notifications ({unreadNotificationCount} unread)"
#: src/components/SearchBar.tsx:71
msgid "Open search"
msgstr "Open search"
#: src/components/FileDropZone.tsx:139
msgid "or <0>browse files</0>"
msgstr "or <0>browse files</0>"
#: src/pages/UserLogin.tsx:80
msgid "Password"
msgstr "Password"
#. placeholder {0}: VALIDATION.PASSWORD_MIN
#: src/pages/UserRegister.tsx:142
msgid "Password (min. {0} characters)"
msgstr "Password (min. {0} characters)"
#: api/auth:
#~ msgid "Password must be at least 8 characters"
#~ msgstr "Password must be at least 8 characters"
#: api/auth:
#~ msgid "Password must be at most 128 characters"
#~ msgstr "Password must be at most 128 characters"
#: api/playlists:
#~ msgid "Playlist not found"
#~ msgstr "Playlist not found"
#: src/components/AppHeader.tsx:46
#: src/components/UserMenu.tsx:62
#: src/pages/Search.tsx:175
#: src/pages/UserPlaylists.tsx:366
msgid "Playlists"
msgstr "Playlists"
#. placeholder {0}: playlists.items.length
#. placeholder {1}: playlists.hasMore ? "+" : ""
#: src/pages/UserPublicProfile.tsx:845
msgid "Playlists ({0}{1})"
msgstr "Playlists ({0}{1})"
#: src/components/DumpCreateModal.tsx:180
msgid "Please select a file."
msgstr "Please select a file."
#: src/components/CommentThread.tsx:472
msgid "Post comment"
msgstr "Post comment"
#: src/components/CommentThread.tsx:342
msgid "Post reply"
msgstr "Post reply"
#: src/components/CommentThread.tsx:342
#: src/components/CommentThread.tsx:472
msgid "Posting…"
msgstr "Posting…"
#: src/components/DumpCard.tsx:91
#: src/components/PlaylistCard.tsx:71
#: src/components/PlaylistMembershipPanel.tsx:47
#: src/pages/Dump.tsx:282
#: src/pages/PlaylistDetail.tsx:748
msgid "private"
msgstr "private"
#: src/components/DumpCreateModal.tsx:383
#: src/components/PlaylistCreateForm.tsx:94
#: src/pages/DumpEdit.tsx:274
#: src/pages/PlaylistDetail.tsx:737
msgid "Private"
msgstr "Private"
#: src/components/PlaylistCard.tsx:71
#: src/pages/PlaylistDetail.tsx:748
msgid "public"
msgstr "public"
#: src/components/DumpCreateModal.tsx:375
#: src/components/PlaylistCreateForm.tsx:87
#: src/pages/DumpEdit.tsx:267
#: src/pages/PlaylistDetail.tsx:730
msgid "Public"
msgstr "Public"
#: src/pages/DumpEdit.tsx:206
msgid "Refresh metadata"
msgstr "Refresh metadata"
#: src/pages/DumpEdit.tsx:206
msgid "Refreshing…"
msgstr "Refreshing…"
#: src/pages/UserRegister.tsx:115
#: src/pages/UserRegister.tsx:155
msgid "Register"
msgstr "Register"
#: src/pages/UserRegister.tsx:154
msgid "Registering…"
msgstr "Registering…"
#: src/pages/UserRegister.tsx:118
msgid "Registration failed"
msgstr "Registration failed"
#: src/components/FileDropZone.tsx:115
msgid "Remove file"
msgstr "Remove file"
#: src/pages/PlaylistDetail.tsx:838
msgid "Remove from playlist"
msgstr "Remove from playlist"
#: src/pages/DumpEdit.tsx:241
msgid "Replace file"
msgstr "Replace file"
#: src/components/CommentThread.tsx:284
msgid "Reply"
msgstr "Reply"
#: src/pages/Dump.tsx:209
#: src/pages/DumpEdit.tsx:159
msgid "Retry"
msgstr "Retry"
#: src/components/CommentThread.tsx:257
#: src/pages/DumpEdit.tsx:291
#: src/pages/PlaylistDetail.tsx:665
#: src/pages/UserPublicProfile.tsx:692
#: src/pages/UserPublicProfile.tsx:765
msgid "Save"
msgstr "Save"
#: src/components/CommentThread.tsx:257
#: src/pages/PlaylistDetail.tsx:665
#: src/pages/UserPublicProfile.tsx:692
#: src/pages/UserPublicProfile.tsx:765
msgid "Saving…"
msgstr "Saving…"
#: src/components/SearchBar.tsx:65
msgid "Search"
msgstr "Search"
#: src/components/SearchBar.tsx:61
msgid "Search dumps, users, playlists…"
msgstr "Search dumps, users, playlists…"
#: src/pages/Search.tsx:214
msgid "Search failed"
msgstr "Search failed"
#: src/pages/Search.tsx:210
msgid "Searching…"
msgstr "Searching…"
#: src/components/AppHeader.tsx:61
msgid "Server unreachable"
msgstr "Server unreachable"
#: src/components/PageError.tsx:13
msgid "Something went wrong"
msgstr "Something went wrong"
#: src/components/SearchBar.tsx:71
msgid "Submit search"
msgstr "Submit search"
#: src/pages/UserPublicProfile.tsx:755
msgid "Tell people about yourself…"
msgstr "Tell people about yourself…"
#: src/components/DumpCreateModal.tsx:363
#: src/pages/DumpEdit.tsx:256
msgid "Tell the community what makes this worth their time..."
msgstr "Tell the community what makes this worth their time..."
#: src/pages/UserRegister.tsx:105
msgid "This invite link is missing, expired, or already used."
msgstr "This invite link is missing, expired, or already used."
#: src/pages/UserLogin.tsx:96
msgid "This is a mirage."
msgstr "This is a mirage."
#: src/components/PlaylistCreateForm.tsx:69
msgid "Title"
msgstr "Title"
#: src/pages/Notifications.tsx:341
msgid "Today"
msgstr "Today"
#: src/pages/PlaylistDetail.tsx:850
msgid "Undo"
msgstr "Undo"
#: api/generic:
#~ msgid "Unexpected server error"
#~ msgstr "Unexpected server error"
#: src/components/FollowButton.tsx:34
msgid "Unfollow {targetUsername}"
msgstr "Unfollow {targetUsername}"
#: src/components/FollowButton.tsx:62
msgid "Unfollow playlist"
msgstr "Unfollow playlist"
#: src/pages/UserPublicProfile.tsx:515
msgid "Upload failed"
msgstr "Upload failed"
#: src/components/DumpCreateModal.tsx:404
msgid "Uploading…"
msgstr "Uploading…"
#: src/pages/UserUpvoted.tsx:147
msgid "Upvoted"
msgstr "Upvoted"
#. placeholder {0}: votes.items.length
#. placeholder {1}: votes.hasMore ? "+" : ""
#: src/pages/UserPublicProfile.tsx:829
msgid "Upvoted ({0}{1})"
msgstr "Upvoted ({0}{1})"
#: src/components/DumpCreateModal.tsx:309
#: src/pages/DumpEdit.tsx:221
msgid "URL"
msgstr "URL"
#: src/components/DumpCreateModal.tsx:164
msgid "URL is required."
msgstr "URL is required."
#: src/components/UserMenu.tsx:37
msgid "User menu"
msgstr "User menu"
#: src/pages/UserLogin.tsx:72
#: src/pages/UserRegister.tsx:125
msgid "Username"
msgstr "Username"
#: api/auth:
#~ msgid "Username already exists"
#~ msgstr "Username already exists"
#: api/auth:
#~ msgid "Username must be 132 characters and contain only letters, numbers, or underscores"
#~ msgstr "Username must be 132 characters and contain only letters, numbers, or underscores"
#: src/pages/Search.tsx:174
msgid "Users"
msgstr "Users"
#: src/pages/UserPublicProfile.tsx:878
#: src/pages/UserPublicProfile.tsx:948
#: src/pages/UserPublicProfile.tsx:1076
msgid "View all →"
msgstr "View all →"
#: src/components/DumpCreateModal.tsx:418
msgid "View dump →"
msgstr "View dump →"
#: src/components/DumpCreateModal.tsx:356
#: src/pages/DumpEdit.tsx:250
msgid "Why are you dumping this?"
msgstr "Why are you dumping this?"
#: src/components/CommentThread.tsx:329
msgid "Write a reply…"
msgstr "Write a reply…"
#: src/pages/Notifications.tsx:341
msgid "Yesterday"
msgstr "Yesterday"
#: src/pages/Notifications.tsx:329
msgid "You'll be notified when someone follows your playlists, upvotes your dumps, or posts new content."
msgstr "You'll be notified when someone follows your playlists, upvotes your dumps, or posts new content."
#: src/pages/index/HotFeed.tsx:54
#: src/pages/index/JournalFeed.tsx:67
#: src/pages/index/NewFeed.tsx:54
#: src/pages/Search.tsx:242
msgid "You've reached the end."
msgstr "You've reached the end."

870
src/locales/fr.po Normal file
View File

@@ -0,0 +1,870 @@
msgid ""
msgstr ""
"POT-Creation-Date: 2026-04-01 16:55+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: @lingui/cli\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: src/components/CommentThread.tsx:170
msgid "[deleted]"
msgstr "[supprimé]"
#. placeholder {0}: dump.commentCount
#: src/components/DumpCard.tsx:82
msgid "{0, plural, one {# comment} other {# comments}}"
msgstr "{0, plural, one {# commentaire} other {# commentaires}}"
#. placeholder {0}: playlist.dumpCount
#: src/components/PlaylistCard.tsx:84
msgid "{0, plural, one {# dump} other {# dumps}}"
msgstr "{0, plural, one {# reco} other {# recos}}"
#. placeholder {0}: VALIDATION.USERNAME_MIN
#. placeholder {1}: VALIDATION.USERNAME_MAX
#: src/pages/UserRegister.tsx:128
msgid "{0}{1} characters: letters, numbers, or underscores"
msgstr "{0}{1} caractères : lettres, chiffres ou tirets bas"
#: src/pages/Notifications.tsx:184
msgid "{days}d ago"
msgstr "il y a {days}j"
#: src/pages/Notifications.tsx:182
msgid "{hrs}h ago"
msgstr "il y a {hrs}h"
#: src/pages/Search.tsx:176
msgid "{label} ({count})"
msgstr "{label} ({count})"
#: src/pages/Notifications.tsx:180
msgid "{mins}m ago"
msgstr "il y a {mins}min"
#: src/components/CommentThread.tsx:436
msgid "{visibleCount, plural, one {# comment} other {# comments}}"
msgstr "{visibleCount, plural, one {# commentaire} other {# commentaires}}"
#: src/pages/PlaylistDetail.tsx:605
#: src/pages/UserPublicProfile.tsx:606
msgid "← Back"
msgstr "← Retour"
#: src/pages/Dump.tsx:216
#: src/pages/Dump.tsx:318
#: src/pages/DumpEdit.tsx:166
msgid "← Back to all dumps"
msgstr "← Retour à toutes les recos"
#: src/pages/UserDumps.tsx:61
#: src/pages/UserPlaylists.tsx:352
#: src/pages/UserUpvoted.tsx:130
msgid "← Back to profile"
msgstr "← Retour au profil"
#: src/pages/UserPublicProfile.tsx:90
msgid "+ Invite someone"
msgstr "+ Inviter quelqu'un"
#: src/components/AppHeader.tsx:63
msgid "+ New"
msgstr "+ Nouveau"
#: src/pages/UserDumps.tsx:82
#: src/pages/UserPublicProfile.tsx:922
msgid "+ New dump"
msgstr "+ Nouvelle reco"
#: src/components/PlaylistMembershipPanel.tsx:72
msgid "+ New playlist"
msgstr "+ Nouvelle collection"
#: src/pages/Dump.tsx:248
msgid "+ Playlist"
msgstr "+ Collection"
#. placeholder {0}: d.followerUsername
#. placeholder {1}: d.playlistTitle
#: src/pages/Notifications.tsx:124
msgid "<0>{0}</0> followed your playlist <1>{1}</1>"
msgstr "<0>{0}</0> a suivi votre collection <1>{1}</1>"
#. placeholder {0}: d.mentionerUsername
#: src/pages/Notifications.tsx:166
msgid "<0>{0}</0> mentioned you in <1>{where}</1>"
msgstr "<0>{0}</0> vous a mentionné dans <1>{where}</1>"
#. placeholder {0}: d.dumperUsername
#. placeholder {1}: d.dumpTitle
#: src/pages/Notifications.tsx:134
msgid "<0>{0}</0> posted <1>{1}</1>"
msgstr "<0>{0}</0> a publié <1>{1}</1>"
#. placeholder {0}: d.followerUsername
#: src/pages/Notifications.tsx:115
msgid "<0>{0}</0> started following you"
msgstr "<0>{0}</0> a commencé à vous suivre"
#. placeholder {0}: d.voterUsername
#. placeholder {1}: d.dumpTitle
#: src/pages/Notifications.tsx:154
msgid "<0>{0}</0> upvoted <1>{1}</1>"
msgstr "<0>{0}</0> a voté pour <1>{1}</1>"
#. placeholder {0}: d.dumpTitle
#. placeholder {1}: d.playlistTitle
#: src/pages/Notifications.tsx:144
msgid "<0>{0}</0> was added to <1>{1}</1>"
msgstr "<0>{0}</0> a été ajouté à <1>{1}</1>"
#: src/pages/Notifications.tsx:164
msgid "a comment"
msgstr "un commentaire"
#: src/pages/Notifications.tsx:164
msgid "a post"
msgstr "une publication"
#: src/pages/UserPublicProfile.tsx:802
msgid "Add a bio…"
msgstr "Ajouter une bio…"
#: src/components/CommentThread.tsx:456
msgid "Add a comment…"
msgstr "Ajouter un commentaire…"
#: src/pages/UserPublicProfile.tsx:718
msgid "Add email…"
msgstr "Ajouter un e-mail…"
#: src/components/AddToPlaylistModal.tsx:64
#: src/components/DumpCreateModal.tsx:262
msgid "Add to playlist"
msgstr "Ajouter à la collection"
#. placeholder {0}: dumps.length
#: src/pages/UserDumps.tsx:114
msgid "All {0, plural, one {# dump} other {# dumps}} loaded."
msgstr "Toutes les {0, plural, one {# reco} other {# recos}} chargées."
#. placeholder {0}: votes.length
#: src/pages/UserUpvoted.tsx:184
msgid "All {0, plural, one {# upvoted dump} other {# upvoted dumps}} loaded."
msgstr "Toutes les {0, plural, one {# reco votée} other {# recos votées}} chargées."
#: src/pages/UserRegister.tsx:160
msgid "Already have an account? <0>Log in</0>"
msgstr "Vous avez déjà un compte ? <0>Se connecter</0>"
#: src/contexts/WSProvider.tsx:168
#: src/contexts/WSProvider.tsx:360
msgid "Can't connect to the live updates server. Upvotes and notifications may not sync until it reconnects."
msgstr "Impossible de se connecter au serveur de mises à jour en direct. Les votes et les notifications pourraient ne pas se synchroniser avant la reconnexion."
#: src/components/CommentThread.tsx:268
#: src/components/CommentThread.tsx:353
#: src/components/CommentThread.tsx:483
#: src/components/ConfirmModal.tsx:32
#: src/components/DumpCreateModal.tsx:394
#: src/components/PlaylistCreateForm.tsx:105
#: src/pages/DumpEdit.tsx:288
#: src/pages/PlaylistDetail.tsx:672
#: src/pages/UserPublicProfile.tsx:700
#: src/pages/UserPublicProfile.tsx:773
msgid "Cancel"
msgstr "Annuler"
#: src/pages/PlaylistDetail.tsx:848
msgid "Cancel removal"
msgstr "Annuler la suppression"
#: src/pages/UserPublicProfile.tsx:633
msgid "Change avatar"
msgstr "Changer l'avatar"
#: src/pages/UserRegister.tsx:94
msgid "Checking invite…"
msgstr "Vérification de l'invitation…"
#: src/components/Modal.tsx:45
msgid "Close"
msgstr "Fermer"
#: src/pages/UserPublicProfile.tsx:81
msgid "Copied!"
msgstr "Copié !"
#: src/pages/UserPublicProfile.tsx:81
msgid "Copy"
msgstr "Copier"
#: src/components/CommentThread.tsx:108
#: src/components/CommentThread.tsx:147
#: src/components/CommentThread.tsx:425
msgid "Could not reach the server. Please try again."
msgstr "Impossible de contacter le serveur. Veuillez réessayer."
#: src/components/PlaylistCreateForm.tsx:116
msgid "Create"
msgstr "Créer"
#: src/components/PlaylistCreateForm.tsx:115
msgid "Create & Add"
msgstr "Créer et ajouter"
#. placeholder {0}: created.items.length
#. placeholder {1}: created.hasMore ? "+" : ""
#: src/pages/UserPlaylists.tsx:386
msgid "Created ({0}{1})"
msgstr "Créées ({0}{1})"
#: src/components/PlaylistCreateForm.tsx:113
msgid "Creating…"
msgstr "Création…"
#: src/components/CommentThread.tsx:306
#: src/components/CommentThread.tsx:312
#: src/components/ConfirmModal.tsx:16
#: src/pages/PlaylistDetail.tsx:679
msgid "Delete"
msgstr "Supprimer"
#: src/pages/DumpEdit.tsx:284
#: src/pages/DumpEdit.tsx:300
msgid "Delete dump"
msgstr "Supprimer la reco"
#: src/components/PlaylistCard.tsx:107
#: src/pages/PlaylistDetail.tsx:861
#: src/pages/UserPlaylists.tsx:443
msgid "Delete playlist"
msgstr "Supprimer la collection"
#: src/components/CommentThread.tsx:311
msgid "Delete this comment?"
msgstr "Supprimer ce commentaire ?"
#: src/pages/DumpEdit.tsx:299
msgid "Delete this dump? This cannot be undone."
msgstr "Supprimer cette reco ? Cette action est irréversible."
#: src/pages/PlaylistDetail.tsx:860
#: src/pages/UserPlaylists.tsx:442
msgid "Delete this playlist? This cannot be undone."
msgstr "Supprimer cette collection ? Cette action est irréversible."
#: src/components/PlaylistCreateForm.tsx:76
#: src/pages/PlaylistDetail.tsx:710
msgid "Description (optional)"
msgstr "Description (facultatif)"
#: src/components/DumpCreateModal.tsx:439
msgid "Done"
msgstr "Terminé"
#: src/components/FileDropZone.tsx:32
msgid "Drop a file here"
msgstr "Déposez un fichier ici"
#: src/pages/DumpEdit.tsx:242
msgid "Drop a replacement here"
msgstr "Déposez un fichier de remplacement ici"
#: src/components/DumpCreateModal.tsx:405
msgid "Dump it"
msgstr "Recommander"
#: src/components/DumpCreateModal.tsx:416
msgid "Dumped!"
msgstr "Recommandé !"
#: src/pages/Search.tsx:172
#: src/pages/UserDumps.tsx:75
msgid "Dumps"
msgstr "Recos"
#. placeholder {0}: dumps.items.length
#. placeholder {1}: dumps.hasMore ? "+" : ""
#: src/pages/UserPublicProfile.tsx:817
msgid "Dumps ({0}{1})"
msgstr "Recos ({0}{1})"
#: src/pages/Notifications.tsx:341
msgid "Earlier"
msgstr "Plus tôt"
#: src/components/CommentThread.tsx:297
#: src/pages/Dump.tsx:315
#: src/pages/PlaylistDetail.tsx:698
msgid "Edit"
msgstr "Modifier"
#. placeholder {0}: relativeTime(comment.updatedAt)
#. placeholder {0}: relativeTime(dump.updatedAt)
#. placeholder {0}: relativeTime(playlist.updatedAt)
#: src/components/CommentThread.tsx:231
#: src/pages/Dump.tsx:276
#: src/pages/PlaylistDetail.tsx:768
msgid "edited {0}"
msgstr "modifié {0}"
#. placeholder {0}: comment.updatedAt.toLocaleString()
#. placeholder {0}: dump.updatedAt.toLocaleString()
#. placeholder {0}: playlist.updatedAt.toLocaleString()
#: src/components/CommentThread.tsx:229
#: src/pages/Dump.tsx:274
#: src/pages/PlaylistDetail.tsx:765
msgid "Edited {0}"
msgstr "Modifié le {0}"
#: src/pages/DumpEdit.tsx:180
msgid "Editing"
msgstr "Modification"
#: src/pages/UserRegister.tsx:135
msgid "Email address"
msgstr "Adresse e-mail"
#: src/pages/Search.tsx:206
msgid "Enter a query to search."
msgstr "Saisissez une recherche."
#: src/components/PlaylistCreateForm.tsx:59
#: src/components/PlaylistCreateForm.tsx:97
msgid "Failed to create playlist"
msgstr "Impossible de créer la collection"
#: src/pages/UserPublicProfile.tsx:62
#: src/pages/UserPublicProfile.tsx:65
#: src/pages/UserPublicProfile.tsx:92
msgid "Failed to generate invite"
msgstr "Impossible de générer une invitation"
#: src/pages/index/FollowedFeed.tsx:77
#: src/pages/index/HotFeed.tsx:30
#: src/pages/index/JournalFeed.tsx:42
#: src/pages/index/NewFeed.tsx:30
#: src/pages/Notifications.tsx:321
msgid "Failed to load"
msgstr "Chargement échoué"
#: src/components/DumpCreateModal.tsx:300
msgid "Failed to post"
msgstr "Publication échouée"
#: src/components/CommentThread.tsx:462
msgid "Failed to post comment"
msgstr "Impossible de publier le commentaire"
#: src/components/CommentThread.tsx:334
msgid "Failed to post reply"
msgstr "Impossible de publier la réponse"
#: src/pages/PlaylistDetail.tsx:776
#: src/pages/UserPublicProfile.tsx:546
#: src/pages/UserPublicProfile.tsx:581
#: src/pages/UserPublicProfile.tsx:704
#: src/pages/UserPublicProfile.tsx:776
msgid "Failed to save"
msgstr "Enregistrement échoué"
#: src/components/CommentThread.tsx:249
msgid "Failed to save edit"
msgstr "Impossible d'enregistrer la modification"
#: src/pages/UserPublicProfile.tsx:726
msgid "Failed to update avatar"
msgstr "Impossible de mettre à jour l'avatar"
#: src/components/DumpCreateModal.tsx:333
msgid "Fetching preview…"
msgstr "Récupération de l'aperçu…"
#: src/components/DumpCreateModal.tsx:403
msgid "Fetching…"
msgstr "Récupération…"
#: src/components/DumpCreateModal.tsx:293
#: src/components/FileDropZone.tsx:31
msgid "File"
msgstr "Fichier"
#: src/components/DumpCreateModal.tsx:187
msgid "File too large (max 50 MB)."
msgstr "Fichier trop volumineux (max 50 Mo)."
#: src/components/FollowButton.tsx:37
#: src/components/FollowButton.tsx:64
msgid "Follow"
msgstr "Suivre"
#: src/components/FollowButton.tsx:35
msgid "Follow {targetUsername}"
msgstr "Suivre {targetUsername}"
#: src/components/FollowButton.tsx:62
msgid "Follow playlist"
msgstr "Suivre la collection"
#: src/pages/index/FollowedFeed.tsx:359
msgid "Follow some public playlists to see their dumps here."
msgstr "Suivez des collections publiques pour voir leurs recos ici."
#: src/pages/index/FollowedFeed.tsx:345
msgid "Follow some users to see their dumps here."
msgstr "Suivez des utilisateurs pour voir leurs recos ici."
#: src/components/FeedTabBar.tsx:47
msgid "Followed"
msgstr "Suivi"
#. placeholder {0}: followed.items.length
#. placeholder {1}: followed.hasMore ? "+" : ""
#: src/pages/UserPlaylists.tsx:416
msgid "Followed ({0}{1})"
msgstr "Suivies ({0}{1})"
#: src/components/FollowButton.tsx:37
#: src/components/FollowButton.tsx:64
msgid "Following"
msgstr "Abonné"
#: src/pages/index/FollowedFeed.tsx:325
msgid "From people"
msgstr "De personnes"
#: src/pages/index/FollowedFeed.tsx:332
msgid "From playlists"
msgstr "De collections"
#: src/components/FeedTabBar.tsx:25
msgid "Hot"
msgstr "Tendances"
#: src/pages/UserRegister.tsx:104
msgid "Invalid invite"
msgstr "Invitation invalide"
#: src/pages/UserPublicProfile.tsx:651
msgid "invited by"
msgstr "invité par"
#: src/components/FeedTabBar.tsx:39
msgid "Journal"
msgstr "Journal"
#: src/pages/Notifications.tsx:178
msgid "just now"
msgstr "à l'instant"
#: src/contexts/WSProvider.tsx:359
msgid "Live updates are temporarily disconnected. Trying to reconnect…"
msgstr "Les mises à jour en direct sont temporairement interrompues. Tentative de reconnexion…"
#: src/components/AppHeader.tsx:79
msgid "Live updates unavailable."
msgstr "Mises à jour en direct indisponibles."
#: src/pages/Notifications.tsx:386
msgid "Load more"
msgstr "Charger plus"
#: src/pages/Dump.tsx:193
#: src/pages/DumpEdit.tsx:143
msgid "Loading dump…"
msgstr "Chargement de la reco…"
#: src/pages/index/FollowedFeed.tsx:103
#: src/pages/index/HotFeed.tsx:52
#: src/pages/index/JournalFeed.tsx:65
#: src/pages/index/NewFeed.tsx:52
#: src/pages/Search.tsx:239
#: src/pages/UserDumps.tsx:111
#: src/pages/UserPlaylists.tsx:409
#: src/pages/UserPlaylists.tsx:436
#: src/pages/UserUpvoted.tsx:180
msgid "Loading more…"
msgstr "Chargement…"
#: src/pages/PlaylistDetail.tsx:590
msgid "Loading playlist…"
msgstr "Chargement de la collection…"
#: src/pages/UserPublicProfile.tsx:590
msgid "Loading profile…"
msgstr "Chargement du profil…"
#: src/components/PlaylistMembershipPanel.tsx:26
#: src/components/TextEditor.tsx:273
#: src/pages/index/FollowedFeed.tsx:74
#: src/pages/index/HotFeed.tsx:29
#: src/pages/index/JournalFeed.tsx:41
#: src/pages/index/NewFeed.tsx:29
#: src/pages/Notifications.tsx:318
#: src/pages/Notifications.tsx:386
#: src/pages/UserDumps.tsx:50
#: src/pages/UserPlaylists.tsx:341
#: src/pages/UserUpvoted.tsx:119
msgid "Loading…"
msgstr "Chargement…"
#: src/components/AppHeader.tsx:70
#: src/pages/UserLogin.tsx:62
#: src/pages/UserLogin.tsx:91
msgid "Log in"
msgstr "Se connecter"
#: src/pages/UserPublicProfile.tsx:610
#: src/pages/UserPublicProfile.tsx:738
msgid "Log out"
msgstr "Se déconnecter"
#: src/pages/UserLogin.tsx:90
msgid "Logging in…"
msgstr "Connexion…"
#: src/pages/UserLogin.tsx:65
msgid "Login failed"
msgstr "Connexion échouée"
#: src/components/FileDropZone.tsx:141
msgid "Max 50 MB"
msgstr "Max 50 Mo"
#: src/pages/Notifications.tsx:312
msgid "new"
msgstr "nouveau"
#: src/components/FeedTabBar.tsx:32
msgid "New"
msgstr "Nouveau"
#: src/components/DumpCreateModal.tsx:262
msgid "New dump"
msgstr "Nouvelle reco"
#: src/pages/PlaylistDetail.tsx:783
msgid "No dumps in this playlist yet."
msgstr "Aucune reco dans cette collection pour l'instant."
#: src/pages/Search.tsx:220
msgid "No dumps match \"{q}\"."
msgstr "Aucune reco ne correspond à « {q} »."
#: src/pages/index/HotFeed.tsx:32
#: src/pages/index/JournalFeed.tsx:44
#: src/pages/index/NewFeed.tsx:32
msgid "No dumps yet. Be the first!"
msgstr "Pas encore de recos. Soyez le premier !"
#: src/components/TextEditor.tsx:274
msgid "No emoji found."
msgstr "Aucun emoji trouvé."
#: src/pages/UserPlaylists.tsx:424
msgid "No followed playlists yet."
msgstr "Pas encore de collections suivies."
#: src/pages/Search.tsx:273
msgid "No playlists match \"{q}\"."
msgstr "Aucune collection ne correspond à « {q} »."
#: src/components/PlaylistMembershipPanel.tsx:28
#: src/pages/UserPlaylists.tsx:392
#: src/pages/UserPublicProfile.tsx:865
msgid "No playlists yet."
msgstr "Pas encore de collections."
#: src/pages/Search.tsx:249
msgid "No users match \"{q}\"."
msgstr "Aucun utilisateur ne correspond à « {q} »."
#: src/pages/Notifications.tsx:327
#: src/pages/UserDumps.tsx:92
#: src/pages/UserPublicProfile.tsx:930
#: src/pages/UserPublicProfile.tsx:1049
#: src/pages/UserUpvoted.tsx:151
msgid "Nothing here yet."
msgstr "Rien ici pour l'instant."
#: src/components/NotificationBell.tsx:42
#: src/pages/Notifications.tsx:308
msgid "Notifications"
msgstr "Notifications"
#: src/components/NotificationBell.tsx:41
msgid "Notifications ({unreadNotificationCount} unread)"
msgstr "Notifications ({unreadNotificationCount} non lues)"
#: src/components/SearchBar.tsx:71
msgid "Open search"
msgstr "Ouvrir la recherche"
#: src/components/FileDropZone.tsx:139
msgid "or <0>browse files</0>"
msgstr "ou <0>parcourir les fichiers</0>"
#: src/pages/UserLogin.tsx:80
msgid "Password"
msgstr "Mot de passe"
#. placeholder {0}: VALIDATION.PASSWORD_MIN
#: src/pages/UserRegister.tsx:142
msgid "Password (min. {0} characters)"
msgstr "Mot de passe (min. {0} caractères)"
#: src/components/AppHeader.tsx:46
#: src/components/UserMenu.tsx:62
#: src/pages/Search.tsx:175
#: src/pages/UserPlaylists.tsx:366
msgid "Playlists"
msgstr "Collections"
#. placeholder {0}: playlists.items.length
#. placeholder {1}: playlists.hasMore ? "+" : ""
#: src/pages/UserPublicProfile.tsx:845
msgid "Playlists ({0}{1})"
msgstr "Collections ({0}{1})"
#: src/components/DumpCreateModal.tsx:180
msgid "Please select a file."
msgstr "Veuillez sélectionner un fichier."
#: src/components/CommentThread.tsx:472
msgid "Post comment"
msgstr "Publier le commentaire"
#: src/components/CommentThread.tsx:342
msgid "Post reply"
msgstr "Publier la réponse"
#: src/components/CommentThread.tsx:342
#: src/components/CommentThread.tsx:472
msgid "Posting…"
msgstr "Publication…"
#: src/components/DumpCard.tsx:91
#: src/components/PlaylistCard.tsx:71
#: src/components/PlaylistMembershipPanel.tsx:47
#: src/pages/Dump.tsx:282
#: src/pages/PlaylistDetail.tsx:748
msgid "private"
msgstr "privé"
#: src/components/DumpCreateModal.tsx:383
#: src/components/PlaylistCreateForm.tsx:94
#: src/pages/DumpEdit.tsx:274
#: src/pages/PlaylistDetail.tsx:737
msgid "Private"
msgstr "Privé"
#: src/components/PlaylistCard.tsx:71
#: src/pages/PlaylistDetail.tsx:748
msgid "public"
msgstr "public"
#: src/components/DumpCreateModal.tsx:375
#: src/components/PlaylistCreateForm.tsx:87
#: src/pages/DumpEdit.tsx:267
#: src/pages/PlaylistDetail.tsx:730
msgid "Public"
msgstr "Public"
#: src/pages/DumpEdit.tsx:206
msgid "Refresh metadata"
msgstr "Actualiser les métadonnées"
#: src/pages/DumpEdit.tsx:206
msgid "Refreshing…"
msgstr "Actualisation…"
#: src/pages/UserRegister.tsx:115
#: src/pages/UserRegister.tsx:155
msgid "Register"
msgstr "S'inscrire"
#: src/pages/UserRegister.tsx:154
msgid "Registering…"
msgstr "Inscription…"
#: src/pages/UserRegister.tsx:118
msgid "Registration failed"
msgstr "Inscription échouée"
#: src/components/FileDropZone.tsx:115
msgid "Remove file"
msgstr "Supprimer le fichier"
#: src/pages/PlaylistDetail.tsx:838
msgid "Remove from playlist"
msgstr "Retirer de la collection"
#: src/pages/DumpEdit.tsx:241
msgid "Replace file"
msgstr "Remplacer le fichier"
#: src/components/CommentThread.tsx:284
msgid "Reply"
msgstr "Répondre"
#: src/pages/Dump.tsx:209
#: src/pages/DumpEdit.tsx:159
msgid "Retry"
msgstr "Réessayer"
#: src/components/CommentThread.tsx:257
#: src/pages/DumpEdit.tsx:291
#: src/pages/PlaylistDetail.tsx:665
#: src/pages/UserPublicProfile.tsx:692
#: src/pages/UserPublicProfile.tsx:765
msgid "Save"
msgstr "Enregistrer"
#: src/components/CommentThread.tsx:257
#: src/pages/PlaylistDetail.tsx:665
#: src/pages/UserPublicProfile.tsx:692
#: src/pages/UserPublicProfile.tsx:765
msgid "Saving…"
msgstr "Enregistrement…"
#: src/components/SearchBar.tsx:65
msgid "Search"
msgstr "Rechercher"
#: src/components/SearchBar.tsx:61
msgid "Search dumps, users, playlists…"
msgstr "Rechercher des recos, utilisateurs, collections…"
#: src/pages/Search.tsx:214
msgid "Search failed"
msgstr "Recherche échouée"
#: src/pages/Search.tsx:210
msgid "Searching…"
msgstr "Recherche…"
#: src/components/AppHeader.tsx:61
msgid "Server unreachable"
msgstr "Serveur inaccessible"
#: src/components/PageError.tsx:13
msgid "Something went wrong"
msgstr "Une erreur est survenue"
#: src/components/SearchBar.tsx:71
msgid "Submit search"
msgstr "Lancer la recherche"
#: src/pages/UserPublicProfile.tsx:755
msgid "Tell people about yourself…"
msgstr "Parlez de vous…"
#: src/components/DumpCreateModal.tsx:363
#: src/pages/DumpEdit.tsx:256
msgid "Tell the community what makes this worth their time..."
msgstr "Dites à la communauté pourquoi ça vaut le coup…"
#: src/pages/UserRegister.tsx:105
msgid "This invite link is missing, expired, or already used."
msgstr "Ce lien d'invitation est manquant, expiré ou déjà utilisé."
#: src/pages/UserLogin.tsx:96
msgid "This is a mirage."
msgstr "C'est un mirage."
#: src/components/PlaylistCreateForm.tsx:69
msgid "Title"
msgstr "Titre"
#: src/pages/Notifications.tsx:341
msgid "Today"
msgstr "Aujourd'hui"
#: src/pages/PlaylistDetail.tsx:850
msgid "Undo"
msgstr "Annuler"
#: src/components/FollowButton.tsx:34
msgid "Unfollow {targetUsername}"
msgstr "Ne plus suivre {targetUsername}"
#: src/components/FollowButton.tsx:62
msgid "Unfollow playlist"
msgstr "Ne plus suivre la collection"
#: src/pages/UserPublicProfile.tsx:515
msgid "Upload failed"
msgstr "Envoi échoué"
#: src/components/DumpCreateModal.tsx:404
msgid "Uploading…"
msgstr "Envoi…"
#: src/pages/UserUpvoted.tsx:147
msgid "Upvoted"
msgstr "Voté"
#. placeholder {0}: votes.items.length
#. placeholder {1}: votes.hasMore ? "+" : ""
#: src/pages/UserPublicProfile.tsx:829
msgid "Upvoted ({0}{1})"
msgstr "Votés ({0}{1})"
#: src/components/DumpCreateModal.tsx:309
#: src/pages/DumpEdit.tsx:221
msgid "URL"
msgstr "URL"
#: src/components/DumpCreateModal.tsx:164
msgid "URL is required."
msgstr "L'URL est obligatoire."
#: src/components/UserMenu.tsx:37
msgid "User menu"
msgstr "Menu utilisateur"
#: src/pages/UserLogin.tsx:72
#: src/pages/UserRegister.tsx:125
msgid "Username"
msgstr "Nom d'utilisateur"
#: src/pages/Search.tsx:174
msgid "Users"
msgstr "Utilisateurs"
#: src/pages/UserPublicProfile.tsx:878
#: src/pages/UserPublicProfile.tsx:948
#: src/pages/UserPublicProfile.tsx:1076
msgid "View all →"
msgstr "Tout voir →"
#: src/components/DumpCreateModal.tsx:418
msgid "View dump →"
msgstr "Voir la reco →"
#: src/components/DumpCreateModal.tsx:356
#: src/pages/DumpEdit.tsx:250
msgid "Why are you dumping this?"
msgstr "Pourquoi recommandez-vous ça ?"
#: src/components/CommentThread.tsx:329
msgid "Write a reply…"
msgstr "Écrire une réponse…"
#: src/pages/Notifications.tsx:341
msgid "Yesterday"
msgstr "Hier"
#: src/pages/Notifications.tsx:329
msgid "You'll be notified when someone follows your playlists, upvotes your dumps, or posts new content."
msgstr "Vous serez notifié lorsque quelqu'un suit vos collections, vote pour vos recos ou publie du nouveau contenu."
#: src/pages/index/HotFeed.tsx:54
#: src/pages/index/JournalFeed.tsx:67
#: src/pages/index/NewFeed.tsx:54
#: src/pages/Search.tsx:242
msgid "You've reached the end."
msgstr "Vous avez tout lu, tout vu, tout bu."