v4: users sign in to one gerbeur instance with their account on another — topic instances, each with its own admins, domain and data, had no way to share accounts. Sign-in is federated over a subset of OpenID Connect, the authorization code flow with PKCE: each instance is an identity provider for its own users and a client for the others', and signs what it tells them with an Ed25519 key kept in federation_keys and published at /.well-known/jwks.json, beside its metadata at /.well-known/openid-configuration. Only sign-in is federated: an account from another instance is a local users row linked to (issuer, subject) in user_identities, with no password (password_hash ''), so sessions, roles, permissions, the socket and every foreign key work as before.

A remote user is name@host here, in users.username, in paths (/@alice@music.example) and in mentions, through one handle rule in shared/validation.ts that paths, MENTION_RE and Markdown all build on; Markdown undoes GFM's email autolink of a handle. Their name, email and avatar come from their home at each sign-in and by its signed events (federation_outbox, delivered by the federation job with backoff): a rename at home leaves the old handle an alias here, and a password change or a withdrawn grant ends their sessions here. Their password, email, avatar and name can't change here (assertLocalUser), nor can they sign in elsewhere from here.

An admin keeps the trusted and blocked instances on /manage (federation:manage): a trusted instance's users sign in from a button on the login page, a blocked one's can't and are signed out at once, and any other's join with an invite from the register page. The /authorize page asks the user once per instance, and /settings lists the instances their account signs in to, each disconnectable; /login?next= brings a signed-out visitor back to /authorize. Emails stay unique among local accounts only, and migration 0024 adds the tables, makes that index partial and reserves authorize and federation as category slugs. remote/gerbeur-instance.ts is the only way to other instances: https and public addresses only, no redirects, no certificate fallback, unless GERBEUR_FEDERATION_ALLOW_PRIVATE lets two instances on one machine talk.

298 backend tests and 702 frontend tests pass, and deno check, deno fmt, deno lint, tsc, eslint, doc:lint and i18n:compile --strict are clean; checked end to end with two built instances on one machine: sign-in through the other's login and consent pages, consent skipped once granted and asked again after disconnecting, a rename and a password change at home reaching the other, and blocking; screenshots of the login, consent, profile, settings and manage pages at 1280 and 390px.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
khannurien
2026-10-09 14:23:00 +00:00
parent 2d26d0aada
commit c0d03e9aaa
67 changed files with 5261 additions and 339 deletions

File diff suppressed because one or more lines are too long

View File

@@ -51,7 +51,7 @@ msgstr "{0} more online: {restNames}"
#. placeholder {0}: VALIDATION.USERNAME_MIN
#. placeholder {1}: VALIDATION.USERNAME_MAX
#: src/pages/UserRegister.tsx:145
#: src/pages/UserRegister.tsx:147
msgid "{0}–{1} characters: letters, numbers, or underscores"
msgstr "{0}–{1} characters: letters, numbers, or underscores"
@@ -280,6 +280,10 @@ msgstr "<0>{0}</0> upvoted <1>{1}</1>"
msgid "<0>{0}</0> was added to <1>{1}</1>"
msgstr "<0>{0}</0> was added to <1>{1}</1>"
#: src/pages/Authorize.tsx:138
msgid "<0>{name}</0> ({host}) asks to sign you in with your account here, <1>@{username}</1>. It will receive your username, your email address and your avatar."
msgstr "<0>{name}</0> ({host}) asks to sign you in with your account here, <1>@{username}</1>. It will receive your username, your email address and your avatar."
#: src/components/chat/ChatModal.tsx:778
msgid "1 new message"
msgstr "1 new message"
@@ -296,10 +300,14 @@ msgstr "A link is required"
msgid "a post"
msgstr "a post"
#: src/pages/Settings.tsx:85
#: src/pages/Settings.tsx:89
msgid "Account"
msgstr "Account"
#: src/components/profile/ProfileHeader.tsx:144
msgid "Account on <0>{host}</0>"
msgstr "Account on <0>{host}</0>"
#: src/components/comment/CommentThread.tsx:102
msgid "Add a comment…"
msgstr "Add a comment…"
@@ -309,7 +317,7 @@ msgstr "Add a comment…"
msgid "Add category"
msgstr "Add category"
#: src/components/profile/ProfileHeader.tsx:153
#: src/components/profile/ProfileHeader.tsx:173
msgid "Add email…"
msgstr "Add email…"
@@ -342,10 +350,14 @@ msgstr "All"
msgid "Already dumped by {0} {1}"
msgstr "Already dumped by {0} {1}"
#: src/pages/UserRegister.tsx:175
#: src/pages/UserRegister.tsx:179
msgid "Already have an account? <0>Log in</0>"
msgstr "Already have an account? <0>Log in</0>"
#: src/components/federation/PeerManager.tsx:149
msgid "An instance's address, like music.example"
msgstr "An instance's address, like music.example"
#: src/utils/shared/api.ts:35
msgid "An unexpected error occurred."
msgstr "An unexpected error occurred."
@@ -355,14 +367,14 @@ msgstr "An unexpected error occurred."
msgid "email.digest.andMore"
msgstr "and {n} more"
#: src/pages/Settings.tsx:101
#: src/pages/Settings.tsx:134
msgid "Appearance"
msgstr "Appearance"
#. placeholder {0}: VALIDATION.PASSWORD_MIN
#: src/components/profile/ChangePasswordModal.tsx:101
#: src/pages/ResetPassword.tsx:124
#: src/pages/UserRegister.tsx:164
#: src/pages/UserRegister.tsx:166
msgid "At least {0} characters"
msgstr "At least {0} characters"
@@ -370,7 +382,7 @@ msgstr "At least {0} characters"
msgid "At most {maxLength} characters."
msgstr "At most {maxLength} characters."
#: src/pages/Settings.tsx:46
#: src/pages/Settings.tsx:48
msgid "Auto"
msgstr "Auto"
@@ -379,6 +391,18 @@ msgstr "Auto"
msgid "Back to login"
msgstr "Back to login"
#: src/pages/FederationCallback.tsx:66
msgid "Back to the login page"
msgstr "Back to the login page"
#: src/components/federation/PeerManager.tsx:163
msgid "Block"
msgstr "Block"
#: src/components/federation/PeerManager.tsx:33
msgid "Blocked"
msgstr "Blocked"
#. js-lingui-explicit-id
#: api/mail/digest.ts:225
msgid "email.digest.by"
@@ -394,6 +418,11 @@ msgstr "by @{username} · {n, plural, one {# dump} other {# dumps}}"
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/pages/Authorize.tsx:117
#: src/pages/Authorize.tsx:145
msgid "Can't sign in there"
msgstr "Can't sign in there"
#: src/components/category/CategoryManager.tsx:225
#: src/components/category/CategoryManager.tsx:226
#: src/components/chat/ChatEditBox.tsx:92
@@ -404,6 +433,7 @@ msgstr "Can't connect to the live updates server. Upvotes and notifications may
#: 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
msgid "Cancel"
@@ -423,7 +453,7 @@ msgid "Cancel search"
msgstr "Cancel search"
#: src/components/category/CategorySelect.tsx:33
#: src/pages/Manage.tsx:30
#: src/pages/Manage.tsx:36
msgid "Categories"
msgstr "Categories"
@@ -431,7 +461,7 @@ msgstr "Categories"
msgid "Category"
msgstr "Category"
#: src/components/profile/ProfileHeader.tsx:95
#: src/components/profile/ProfileHeader.tsx:102
msgid "Change avatar"
msgstr "Change avatar"
@@ -439,12 +469,16 @@ msgstr "Change avatar"
msgid "Change image"
msgstr "Change image"
#: src/pages/Settings.tsx:101
msgid "Change it on {home}"
msgstr "Change it on {home}"
#: src/components/profile/ChangePasswordModal.tsx:66
#: src/components/profile/ChangePasswordModal.tsx:120
msgid "Change password"
msgstr "Change password"
#: src/pages/Settings.tsx:96
#: src/pages/Settings.tsx:112
msgid "Change password…"
msgstr "Change password…"
@@ -464,10 +498,14 @@ msgstr "Chat"
msgid "Chat ({unreadChatCount} unread)"
msgstr "Chat ({unreadChatCount} unread)"
#: src/pages/UserRegister.tsx:106
#: src/pages/UserRegister.tsx:108
msgid "Checking invite…"
msgstr "Checking invite…"
#: src/components/federation/PeerManager.tsx:154
msgid "Checking…"
msgstr "Checking…"
#: src/components/profile/ChangePasswordModal.tsx:75
#: src/components/shared/Modal.tsx:76
msgid "Close"
@@ -493,7 +531,7 @@ msgstr "Close without posting? The attached file won't be kept — everything yo
msgid "Collapse player"
msgstr "Collapse player"
#: src/pages/Settings.tsx:110
#: src/pages/Settings.tsx:143
msgid "Color scheme"
msgstr "Color scheme"
@@ -507,10 +545,22 @@ msgstr "Community"
msgid "Confirm new password"
msgstr "Confirm new password"
#: src/components/federation/FederatedSignIn.tsx:111
msgid "Connecting…"
msgstr "Connecting…"
#: src/contexts/ws/WSProvider.tsx:757
msgid "Connection lost — this message may not have been sent"
msgstr "Connection lost — this message may not have been sent"
#: src/components/federation/FederatedSignIn.tsx:113
msgid "Continue"
msgstr "Continue"
#: src/pages/Authorize.tsx:155
msgid "Continue as @{username}"
msgstr "Continue as @{username}"
#: src/components/profile/ProfileOwnActions.tsx:99
msgid "Copied!"
msgstr "Copied!"
@@ -540,6 +590,10 @@ msgstr "Could not rename"
msgid "Could not save"
msgstr "Could not save"
#: src/components/federation/PeerManager.tsx:146
msgid "Couldn't add that instance"
msgstr "Couldn't add that instance"
#: src/components/dump/create/DumpCreateModal.tsx:607
msgid "Couldn't load a preview for this link — check it, or post it as-is and refresh the preview later."
msgstr "Couldn't load a preview for this link — check it, or post it as-is and refresh the preview later."
@@ -548,6 +602,10 @@ msgstr "Couldn't load a preview for this link — check it, or post it as-is and
msgid "Couldn't load the chat."
msgstr "Couldn't load the chat."
#: src/components/federation/FederatedSignIn.tsx:102
msgid "Couldn't reach that instance"
msgstr "Couldn't reach that instance"
#: src/pages/Unsubscribe.tsx:116
msgid "Couldn't unsubscribe"
msgstr "Couldn't unsubscribe"
@@ -576,11 +634,11 @@ msgstr "Creating…"
msgid "Current password"
msgstr "Current password"
#: src/pages/Settings.tsx:48
#: src/pages/Settings.tsx:50
msgid "Dark"
msgstr "Dark"
#: src/pages/Settings.tsx:121
#: src/pages/Settings.tsx:154
msgid "Default tab"
msgstr "Default tab"
@@ -655,6 +713,10 @@ msgstr "Description (optional)"
msgid "Discard"
msgstr "Discard"
#: src/components/federation/GrantList.tsx:84
msgid "Disconnect"
msgstr "Disconnect"
#: src/components/chat/ChatModal.tsx:743
msgid "Disconnected — reconnecting…"
msgstr "Disconnected — reconnecting…"
@@ -730,7 +792,7 @@ msgstr "Edit {0}"
msgid "Edit description"
msgstr "Edit description"
#: src/components/profile/ProfileHeader.tsx:151
#: src/components/profile/ProfileHeader.tsx:171
msgid "Edit email"
msgstr "Edit email"
@@ -772,11 +834,11 @@ msgstr "Editing"
msgid "Editing {0}"
msgstr "Editing {0}"
#: src/pages/Settings.tsx:145
#: src/pages/Settings.tsx:178
msgid "Email"
msgstr "Email"
#: src/pages/UserRegister.tsx:152
#: src/pages/UserRegister.tsx:154
msgid "Email address"
msgstr "Email address"
@@ -822,6 +884,8 @@ msgstr "Failed to post comment"
msgid "Failed to post reply"
msgstr "Failed to post reply"
#: src/components/federation/GrantList.tsx:98
#: src/components/federation/PeerManager.tsx:143
#: src/components/playlist/PlaylistEditForm.tsx:185
#: src/components/profile/DescriptionEditor.tsx:99
#: src/components/profile/EmailEditor.tsx:86
@@ -836,7 +900,7 @@ msgstr "Failed to save category"
msgid "Failed to save edit"
msgstr "Failed to save edit"
#: src/components/profile/ProfileHeader.tsx:162
#: src/components/profile/ProfileHeader.tsx:182
msgid "Failed to update avatar"
msgstr "Failed to update avatar"
@@ -844,7 +908,7 @@ msgstr "Failed to update avatar"
msgid "Failed to update role"
msgstr "Failed to update role"
#: src/pages/Settings.tsx:119
#: src/pages/Settings.tsx:152
msgid "Feeds"
msgstr "Feeds"
@@ -879,7 +943,7 @@ msgstr "Follow some users to see their dumps here."
#: src/components/feed/FeedTabBar.tsx:43
#: src/components/profile/ProfileFollowTab.tsx:140
#: src/pages/Settings.tsx:55
#: src/pages/Settings.tsx:57
#: src/pages/UserPublicProfile.tsx:161
msgid "Followed"
msgstr "Followed"
@@ -894,7 +958,7 @@ msgstr "Following"
msgid "email.digest.forYou"
msgstr "For you"
#: src/pages/UserLogin.tsx:97
#: src/pages/UserLogin.tsx:101
msgid "Forgot password?"
msgstr "Forgot password?"
@@ -929,11 +993,11 @@ msgid "email.reset.hi"
msgstr "Hi {username},"
#: src/components/feed/FeedTabBar.tsx:39
#: src/pages/Settings.tsx:52
#: src/pages/Settings.tsx:54
msgid "Hot"
msgstr "Hot"
#: src/pages/UserLogin.tsx:136
#: src/pages/UserLogin.tsx:142
msgid "If that address is registered you'll receive a reset link shortly."
msgstr "If that address is registered you'll receive a reset link shortly."
@@ -965,7 +1029,11 @@ msgstr "In the chat"
msgid "Insert emoji"
msgstr "Insert emoji"
#: src/pages/UserRegister.tsx:117
#: src/pages/Manage.tsx:43
msgid "Instances"
msgstr "Instances"
#: src/pages/UserRegister.tsx:119
msgid "Invalid invite"
msgstr "Invalid invite"
@@ -979,7 +1047,7 @@ msgstr "Invalid link"
msgid "Invite link"
msgstr "Invite link"
#: src/components/profile/ProfileHeader.tsx:116
#: src/components/profile/ProfileHeader.tsx:126
msgid "invited by"
msgstr "invited by"
@@ -998,8 +1066,12 @@ msgstr "invited by you"
msgid "Invitees"
msgstr "Invitees"
#: src/components/federation/FederatedSignIn.tsx:105
msgid "Its address, like music.example"
msgstr "Its address, like music.example"
#: src/components/feed/FeedTabBar.tsx:41
#: src/pages/Settings.tsx:54
#: src/pages/Settings.tsx:56
msgid "Journal"
msgstr "Journal"
@@ -1007,11 +1079,16 @@ msgstr "Journal"
msgid "Keep editing"
msgstr "Keep editing"
#. placeholder {0}: relativeTime(grant.lastUsedAt)
#: src/components/federation/GrantList.tsx:77
msgid "last used {0}"
msgstr "last used {0}"
#: src/components/profile/UsernameField.tsx:59
msgid "Letters, numbers and underscores only"
msgstr "Letters, numbers and underscores only"
#: src/pages/Settings.tsx:47
#: src/pages/Settings.tsx:49
msgid "Light"
msgstr "Light"
@@ -1068,17 +1145,20 @@ msgstr "Loading profile…"
#: src/components/category/CategoryManager.tsx:60
#: src/components/chat/ChatModal.tsx:763
#: src/components/editor/EmojiPickerPopup.tsx:125
#: src/components/federation/PeerManager.tsx:108
#: src/components/playlist/PlaylistMembershipPanel.tsx:45
#: src/components/shared/ListState.tsx:38
#: src/components/shared/LoadMoreButton.tsx:32
#: src/components/social/UserListPopover.tsx:151
#: src/pages/Authorize.tsx:122
msgid "Loading…"
msgstr "Loading…"
#: src/components/layout/AppHeader.tsx:208
#: src/pages/UserLogin.tsx:41
#: src/pages/UserLogin.tsx:67
#: src/pages/UserLogin.tsx:86
#: src/pages/FederationCallback.tsx:31
#: src/pages/UserLogin.tsx:44
#: src/pages/UserLogin.tsx:71
#: src/pages/UserLogin.tsx:90
msgid "Log in"
msgstr "Log in"
@@ -1090,16 +1170,22 @@ msgstr "Log in to like"
msgid "Log in to vote"
msgstr "Log in to vote"
#: src/components/layout/UserMenu.tsx:126
#. placeholder {0}: peer.name ?? peer.host
#: src/components/federation/FederatedSignIn.tsx:97
msgid "Log in with {0}"
msgstr "Log in with {0}"
#: src/components/layout/UserMenu.tsx:127
#: src/pages/UserPublicProfile.tsx:131
msgid "Log out"
msgstr "Log out"
#: src/pages/UserLogin.tsx:85
#: src/pages/UserLogin.tsx:89
msgid "Logging in…"
msgstr "Logging in…"
#: src/pages/UserLogin.tsx:72
#: src/pages/FederationCallback.tsx:63
#: src/pages/UserLogin.tsx:76
msgid "Login failed"
msgstr "Login failed"
@@ -1107,9 +1193,9 @@ msgstr "Login failed"
msgid "Lowercase letters, numbers and single hyphens only"
msgstr "Lowercase letters, numbers and single hyphens only"
#: src/components/layout/UserMenu.tsx:113
#: src/pages/Manage.tsx:24
#: src/pages/Manage.tsx:29
#: src/components/layout/UserMenu.tsx:114
#: src/pages/Manage.tsx:27
#: src/pages/Manage.tsx:34
#: src/pages/UserPublicProfile.tsx:164
msgid "Manage"
msgstr "Manage"
@@ -1138,7 +1224,7 @@ msgstr "Name"
#: src/components/chat/ChatModal.tsx:692
#: src/components/feed/FeedTabBar.tsx:40
#: src/pages/Settings.tsx:53
#: src/pages/Settings.tsx:55
msgid "New"
msgstr "New"
@@ -1231,6 +1317,10 @@ msgstr "No users match \"{q}\"."
msgid "Not following anyone yet."
msgstr "Not following anyone yet."
#: src/pages/Authorize.tsx:103
msgid "Not from here"
msgstr "Not from here"
#: src/pages/Community.tsx:127
msgid "Nothing happened this month."
msgstr "Nothing happened this month."
@@ -1248,7 +1338,7 @@ msgstr "Nothing here yet."
#: src/components/layout/NotificationBell.tsx:57
#: src/pages/Notifications.tsx:387
#: src/pages/Notifications.tsx:505
#: src/pages/Settings.tsx:130
#: src/pages/Settings.tsx:163
msgid "Notifications"
msgstr "Notifications"
@@ -1256,11 +1346,11 @@ msgstr "Notifications"
msgid "Notifications ({unreadNotificationCount} unread)"
msgstr "Notifications ({unreadNotificationCount} unread)"
#: src/pages/Settings.tsx:60
#: src/pages/Settings.tsx:62
msgid "Off"
msgstr "Off"
#: src/pages/Settings.tsx:59
#: src/pages/Settings.tsx:61
msgid "On"
msgstr "On"
@@ -1300,6 +1390,18 @@ msgstr "Open the chat"
msgid "or <0>browse files</0>"
msgstr "or <0>browse files</0>"
#: src/components/federation/FederatedSignIn.tsx:82
msgid "Or join with your account on another gerbeur"
msgstr "Or join with your account on another gerbeur"
#: src/components/federation/FederatedSignIn.tsx:83
msgid "Or log in with your account on another gerbeur"
msgstr "Or log in with your account on another gerbeur"
#: src/pages/Settings.tsx:128
msgid "Other instances"
msgstr "Other instances"
#: src/pages/UserPublicProfile.tsx:157
msgid "Overview"
msgstr "Overview"
@@ -1308,13 +1410,14 @@ msgstr "Overview"
msgid "Page not found"
msgstr "Page not found"
#: src/pages/Settings.tsx:90
#: src/pages/UserLogin.tsx:82
#: src/pages/Settings.tsx:96
#: src/pages/Settings.tsx:106
#: src/pages/UserLogin.tsx:86
msgid "Password"
msgstr "Password"
#. placeholder {0}: VALIDATION.PASSWORD_MIN
#: src/pages/UserRegister.tsx:158
#: src/pages/UserRegister.tsx:160
msgid "Password (min. {0} characters)"
msgstr "Password (min. {0} characters)"
@@ -1416,17 +1519,17 @@ msgstr "Refreshing stream…"
msgid "Refreshing…"
msgstr "Refreshing…"
#: src/pages/UserRegister.tsx:45
#: src/pages/UserRegister.tsx:129
#: src/pages/UserRegister.tsx:169
#: src/pages/UserRegister.tsx:47
#: src/pages/UserRegister.tsx:131
#: src/pages/UserRegister.tsx:171
msgid "Register"
msgstr "Register"
#: src/pages/UserRegister.tsx:168
#: src/pages/UserRegister.tsx:170
msgid "Registering…"
msgstr "Registering…"
#: src/pages/UserRegister.tsx:134
#: src/pages/UserRegister.tsx:136
msgid "Registration failed"
msgstr "Registration failed"
@@ -1434,6 +1537,12 @@ msgstr "Registration failed"
msgid "Related"
msgstr "Related"
#. placeholder {0}: peer.host
#: src/components/federation/PeerManager.tsx:133
#: src/components/federation/PeerManager.tsx:134
msgid "Remove {0}"
msgstr "Remove {0}"
#: src/components/form/FileDropZone.tsx:139
msgid "Remove file"
msgstr "Remove file"
@@ -1472,7 +1581,7 @@ msgstr "Reply"
msgid "Replying to"
msgstr "Replying to"
#: src/pages/UserLogin.tsx:148
#: src/pages/UserLogin.tsx:154
msgid "Request failed"
msgstr "Request failed"
@@ -1579,12 +1688,12 @@ msgstr "Seek"
msgid "Send"
msgstr "Send"
#: src/pages/UserLogin.tsx:157
#: src/pages/UserLogin.tsx:163
msgid "Send reset link"
msgstr "Send reset link"
#: src/components/chat/PendingItem.tsx:104
#: src/pages/UserLogin.tsx:156
#: src/pages/UserLogin.tsx:162
msgid "Sending…"
msgstr "Sending…"
@@ -1603,8 +1712,8 @@ msgid "email.settings"
msgstr "Settings"
#: src/components/layout/UserMenu.tsx:104
#: src/pages/Settings.tsx:72
#: src/pages/Settings.tsx:84
#: src/pages/Settings.tsx:75
#: src/pages/Settings.tsx:88
msgid "Settings"
msgstr "Settings"
@@ -1612,6 +1721,19 @@ msgstr "Settings"
msgid "Several people are typing…"
msgstr "Several people are typing…"
#: src/pages/Authorize.tsx:37
msgid "Sign in elsewhere"
msgstr "Sign in elsewhere"
#: src/pages/Authorize.tsx:135
msgid "Sign in to {name}?"
msgstr "Sign in to {name}?"
#: src/pages/Authorize.tsx:154
#: src/pages/FederationCallback.tsx:73
msgid "Signing you in…"
msgstr "Signing you in…"
#: src/components/profile/ProfileOwnActions.tsx:102
msgid "Single use, valid for 7 days."
msgstr "Single use, valid for 7 days."
@@ -1636,7 +1758,7 @@ msgstr "Someone asked to reset the password of your {site} account. The button b
msgid "Something went wrong"
msgstr "Something went wrong"
#: src/pages/Settings.tsx:132
#: src/pages/Settings.tsx:165
msgid "Sounds"
msgstr "Sounds"
@@ -1644,7 +1766,7 @@ msgstr "Sounds"
msgid "Start fresh"
msgstr "Start fresh"
#: src/pages/Settings.tsx:103
#: src/pages/Settings.tsx:136
msgid "Style"
msgstr "Style"
@@ -1696,11 +1818,11 @@ msgstr "The new order couldn't be saved. Try again."
msgid "This comment couldn't be deleted. Try again."
msgstr "This comment couldn't be deleted. Try again."
#: src/pages/UserRegister.tsx:118
#: src/pages/UserRegister.tsx:120
msgid "This invite link is missing, expired, or already used."
msgstr "This invite link is missing, expired, or already used."
#: src/pages/UserLogin.tsx:104
#: src/pages/UserLogin.tsx:110
msgid "This is a mirage."
msgstr "This is a mirage."
@@ -1716,7 +1838,11 @@ msgstr "This page does not exist."
msgid "This reset link is missing or malformed."
msgstr "This reset link is missing or malformed."
#: src/pages/Settings.tsx:168
#: src/pages/FederationCallback.tsx:38
msgid "This sign-in link is incomplete."
msgstr "This sign-in link is incomplete."
#: src/pages/Settings.tsx:201
msgid "This site doesn't send email, so no digest goes out."
msgstr "This site doesn't send email, so no digest goes out."
@@ -1763,6 +1889,14 @@ msgstr "Top this week"
msgid "Track {0}"
msgstr "Track {0}"
#: src/components/federation/PeerManager.tsx:155
msgid "Trust"
msgstr "Trust"
#: src/components/federation/PeerManager.tsx:32
msgid "Trusted"
msgstr "Trusted"
#: src/components/chat/ChatModal.tsx:668
msgid "Try again"
msgstr "Try again"
@@ -1826,7 +1960,7 @@ msgstr "Unsubscribed"
msgid "email.digest.upload"
msgstr "upload"
#: src/components/profile/ProfileHeader.tsx:72
#: src/components/profile/ProfileHeader.tsx:79
msgid "Upload failed"
msgstr "Upload failed"
@@ -1883,9 +2017,9 @@ msgstr "User menu"
#: src/components/profile/ProfileManageTab.tsx:61
#: src/components/profile/UsernameField.tsx:51
#: src/pages/Settings.tsx:87
#: src/pages/UserLogin.tsx:75
#: src/pages/UserRegister.tsx:137
#: src/pages/Settings.tsx:91
#: src/pages/UserLogin.tsx:79
#: src/pages/UserRegister.tsx:139
msgid "Username"
msgstr "Username"
@@ -1894,6 +2028,10 @@ msgstr "Username"
msgid "Users"
msgstr "Users"
#: src/components/federation/PeerManager.tsx:169
msgid "Users of a trusted instance sign in here with their account there. Those of a blocked one can't. Users of any other instance need an invite."
msgstr "Users of a trusted instance sign in here with their account there. Those of a blocked one can't. Users of any other instance need an invite."
#: src/components/profile/ProfileSection.tsx:43
msgid "View all →"
msgstr "View all →"
@@ -1952,6 +2090,10 @@ msgstr "Yesterday"
msgid "You can post it anyway."
msgstr "You can post it anyway."
#: src/components/federation/GrantList.tsx:93
msgid "You haven't signed in to another gerbeur with this account yet."
msgstr "You haven't signed in to another gerbeur with this account yet."
#: src/pages/Unsubscribe.tsx:94
msgid "You won't get the monthly recap any more. You can turn it back on in your settings."
msgstr "You won't get the monthly recap any more. You can turn it back on in your settings."
@@ -1997,7 +2139,15 @@ msgstr "You've reached the end."
msgid "email.welcome.preheader"
msgstr "Your account is ready."
#: src/pages/UserLogin.tsx:152
#: src/pages/Authorize.tsx:104
msgid "Your account lives on {home}: sign in to other instances from there."
msgstr "Your account lives on {home}: sign in to other instances from there."
#: src/pages/Settings.tsx:119
msgid "Your account lives on {home}: your password, email address, avatar and username change there."
msgstr "Your account lives on {home}: your password, email address, avatar and username change there."
#: src/pages/UserLogin.tsx:158
msgid "Your email address"
msgstr "Your email address"

File diff suppressed because one or more lines are too long

View File

@@ -51,7 +51,7 @@ msgstr "{0} de plus en ligne : {restNames}"
#. placeholder {0}: VALIDATION.USERNAME_MIN
#. placeholder {1}: VALIDATION.USERNAME_MAX
#: src/pages/UserRegister.tsx:145
#: src/pages/UserRegister.tsx:147
msgid "{0}–{1} characters: letters, numbers, or underscores"
msgstr "{0}–{1} caractères : lettres, chiffres ou tirets bas"
@@ -280,6 +280,10 @@ msgstr "<0>{0}</0> a voté pour <1>{1}</1>"
msgid "<0>{0}</0> was added to <1>{1}</1>"
msgstr "<0>{0}</0> a été ajouté à <1>{1}</1>"
#: src/pages/Authorize.tsx:138
msgid "<0>{name}</0> ({host}) asks to sign you in with your account here, <1>@{username}</1>. It will receive your username, your email address and your avatar."
msgstr "<0>{name}</0> ({host}) demande à vous connecter avec votre compte d'ici, <1>@{username}</1>. Il recevra votre nom d'utilisateur, votre adresse e-mail et votre avatar."
#: src/components/chat/ChatModal.tsx:778
msgid "1 new message"
msgstr "1 nouveau message"
@@ -296,10 +300,14 @@ msgstr "Il faut un lien"
msgid "a post"
msgstr "une publication"
#: src/pages/Settings.tsx:85
#: src/pages/Settings.tsx:89
msgid "Account"
msgstr "Compte"
#: src/components/profile/ProfileHeader.tsx:144
msgid "Account on <0>{host}</0>"
msgstr "Compte sur <0>{host}</0>"
#: src/components/comment/CommentThread.tsx:102
msgid "Add a comment…"
msgstr "Ajouter un commentaire…"
@@ -309,7 +317,7 @@ msgstr "Ajouter un commentaire…"
msgid "Add category"
msgstr "Ajouter une catégorie"
#: src/components/profile/ProfileHeader.tsx:153
#: src/components/profile/ProfileHeader.tsx:173
msgid "Add email…"
msgstr "Ajouter un e-mail…"
@@ -342,10 +350,14 @@ msgstr "Tout"
msgid "Already dumped by {0} {1}"
msgstr "Déjà recommandé par {0} {1}"
#: src/pages/UserRegister.tsx:175
#: src/pages/UserRegister.tsx:179
msgid "Already have an account? <0>Log in</0>"
msgstr "Vous avez déjà un compte ? <0>Se connecter</0>"
#: src/components/federation/PeerManager.tsx:149
msgid "An instance's address, like music.example"
msgstr "L'adresse d'une instance, comme music.example"
#: src/utils/shared/api.ts:35
msgid "An unexpected error occurred."
msgstr "Une erreur inattendue s'est produite."
@@ -355,14 +367,14 @@ msgstr "Une erreur inattendue s'est produite."
msgid "email.digest.andMore"
msgstr "et {n} de plus"
#: src/pages/Settings.tsx:101
#: src/pages/Settings.tsx:134
msgid "Appearance"
msgstr "Apparence"
#. placeholder {0}: VALIDATION.PASSWORD_MIN
#: src/components/profile/ChangePasswordModal.tsx:101
#: src/pages/ResetPassword.tsx:124
#: src/pages/UserRegister.tsx:164
#: src/pages/UserRegister.tsx:166
msgid "At least {0} characters"
msgstr "Au moins {0} caractères"
@@ -370,7 +382,7 @@ msgstr "Au moins {0} caractères"
msgid "At most {maxLength} characters."
msgstr "{maxLength} caractères au maximum."
#: src/pages/Settings.tsx:46
#: src/pages/Settings.tsx:48
msgid "Auto"
msgstr "Auto"
@@ -379,6 +391,18 @@ msgstr "Auto"
msgid "Back to login"
msgstr "Retour à la connexion"
#: src/pages/FederationCallback.tsx:66
msgid "Back to the login page"
msgstr "Retour à la page de connexion"
#: src/components/federation/PeerManager.tsx:163
msgid "Block"
msgstr "Bloquer"
#: src/components/federation/PeerManager.tsx:33
msgid "Blocked"
msgstr "Bloquée"
#. js-lingui-explicit-id
#: api/mail/digest.ts:225
msgid "email.digest.by"
@@ -394,6 +418,11 @@ msgstr "par @{username} · {n, plural, one {# reco} other {# recos}}"
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/pages/Authorize.tsx:117
#: src/pages/Authorize.tsx:145
msgid "Can't sign in there"
msgstr "Connexion impossible"
#: src/components/category/CategoryManager.tsx:225
#: src/components/category/CategoryManager.tsx:226
#: src/components/chat/ChatEditBox.tsx:92
@@ -404,6 +433,7 @@ msgstr "Impossible de se connecter au serveur de mises à jour en direct. Les vo
#: 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
msgid "Cancel"
@@ -423,7 +453,7 @@ msgid "Cancel search"
msgstr "Annuler la recherche"
#: src/components/category/CategorySelect.tsx:33
#: src/pages/Manage.tsx:30
#: src/pages/Manage.tsx:36
msgid "Categories"
msgstr "Catégories"
@@ -431,7 +461,7 @@ msgstr "Catégories"
msgid "Category"
msgstr "Catégorie"
#: src/components/profile/ProfileHeader.tsx:95
#: src/components/profile/ProfileHeader.tsx:102
msgid "Change avatar"
msgstr "Changer l'avatar"
@@ -439,12 +469,16 @@ msgstr "Changer l'avatar"
msgid "Change image"
msgstr "Changer l'image"
#: src/pages/Settings.tsx:101
msgid "Change it on {home}"
msgstr "Le changer sur {home}"
#: src/components/profile/ChangePasswordModal.tsx:66
#: src/components/profile/ChangePasswordModal.tsx:120
msgid "Change password"
msgstr "Changer le mot de passe"
#: src/pages/Settings.tsx:96
#: src/pages/Settings.tsx:112
msgid "Change password…"
msgstr "Changer le mot de passe…"
@@ -464,10 +498,14 @@ msgstr "Tribune"
msgid "Chat ({unreadChatCount} unread)"
msgstr "{unreadChatCount} messages non lus"
#: src/pages/UserRegister.tsx:106
#: src/pages/UserRegister.tsx:108
msgid "Checking invite…"
msgstr "Vérification de l'invitation…"
#: src/components/federation/PeerManager.tsx:154
msgid "Checking…"
msgstr "Vérification…"
#: src/components/profile/ChangePasswordModal.tsx:75
#: src/components/shared/Modal.tsx:76
msgid "Close"
@@ -493,7 +531,7 @@ msgstr "Fermer sans publier ? Le fichier joint sera perdu — ce que vous avez
msgid "Collapse player"
msgstr "Réduire le lecteur"
#: src/pages/Settings.tsx:110
#: src/pages/Settings.tsx:143
msgid "Color scheme"
msgstr "Thème de couleur"
@@ -507,10 +545,22 @@ msgstr "Communauté"
msgid "Confirm new password"
msgstr "Confirmer le nouveau mot de passe"
#: src/components/federation/FederatedSignIn.tsx:111
msgid "Connecting…"
msgstr "Connexion…"
#: src/contexts/ws/WSProvider.tsx:757
msgid "Connection lost — this message may not have been sent"
msgstr "Connexion perdue — ce message n'a peut-être pas été envoyé"
#: src/components/federation/FederatedSignIn.tsx:113
msgid "Continue"
msgstr "Continuer"
#: src/pages/Authorize.tsx:155
msgid "Continue as @{username}"
msgstr "Continuer en tant que @{username}"
#: src/components/profile/ProfileOwnActions.tsx:99
msgid "Copied!"
msgstr "Copié !"
@@ -540,6 +590,10 @@ msgstr "Renommage impossible"
msgid "Could not save"
msgstr "Sauvegarde impossible"
#: src/components/federation/PeerManager.tsx:146
msgid "Couldn't add that instance"
msgstr "Impossible d'ajouter cette instance"
#: src/components/dump/create/DumpCreateModal.tsx:607
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."
@@ -548,6 +602,10 @@ msgstr "Impossible de charger un aperçu pour ce lien — vérifiez-le, ou publi
msgid "Couldn't load the chat."
msgstr "Impossible de charger le chat."
#: src/components/federation/FederatedSignIn.tsx:102
msgid "Couldn't reach that instance"
msgstr "Impossible de joindre cette instance"
#: src/pages/Unsubscribe.tsx:116
msgid "Couldn't unsubscribe"
msgstr "Désabonnement impossible"
@@ -576,11 +634,11 @@ msgstr "Création…"
msgid "Current password"
msgstr "Mot de passe actuel"
#: src/pages/Settings.tsx:48
#: src/pages/Settings.tsx:50
msgid "Dark"
msgstr "Sombre"
#: src/pages/Settings.tsx:121
#: src/pages/Settings.tsx:154
msgid "Default tab"
msgstr "Onglet par défaut"
@@ -655,6 +713,10 @@ msgstr "Description (facultatif)"
msgid "Discard"
msgstr "Abandonner"
#: src/components/federation/GrantList.tsx:84
msgid "Disconnect"
msgstr "Déconnecter"
#: src/components/chat/ChatModal.tsx:743
msgid "Disconnected — reconnecting…"
msgstr "Déconnecté — reconnexion…"
@@ -730,7 +792,7 @@ msgstr "Modifier {0}"
msgid "Edit description"
msgstr "Modifier la description"
#: src/components/profile/ProfileHeader.tsx:151
#: src/components/profile/ProfileHeader.tsx:171
msgid "Edit email"
msgstr "Modifier l'e-mail"
@@ -772,11 +834,11 @@ msgstr "Modification"
msgid "Editing {0}"
msgstr "Édition de {0}"
#: src/pages/Settings.tsx:145
#: src/pages/Settings.tsx:178
msgid "Email"
msgstr "E-mail"
#: src/pages/UserRegister.tsx:152
#: src/pages/UserRegister.tsx:154
msgid "Email address"
msgstr "Adresse e-mail"
@@ -822,6 +884,8 @@ msgstr "Impossible de publier le commentaire"
msgid "Failed to post reply"
msgstr "Impossible de publier la réponse"
#: src/components/federation/GrantList.tsx:98
#: src/components/federation/PeerManager.tsx:143
#: src/components/playlist/PlaylistEditForm.tsx:185
#: src/components/profile/DescriptionEditor.tsx:99
#: src/components/profile/EmailEditor.tsx:86
@@ -836,7 +900,7 @@ msgstr "Échec de l’enregistrement de la catégorie"
msgid "Failed to save edit"
msgstr "Impossible d'enregistrer la modification"
#: src/components/profile/ProfileHeader.tsx:162
#: src/components/profile/ProfileHeader.tsx:182
msgid "Failed to update avatar"
msgstr "Impossible de mettre à jour l'avatar"
@@ -844,7 +908,7 @@ msgstr "Impossible de mettre à jour l'avatar"
msgid "Failed to update role"
msgstr "Erreur lors de la mise à jour du rôle"
#: src/pages/Settings.tsx:119
#: src/pages/Settings.tsx:152
msgid "Feeds"
msgstr "Flux"
@@ -879,7 +943,7 @@ msgstr "Suivez des utilisateurs pour voir leurs recos ici."
#: src/components/feed/FeedTabBar.tsx:43
#: src/components/profile/ProfileFollowTab.tsx:140
#: src/pages/Settings.tsx:55
#: src/pages/Settings.tsx:57
#: src/pages/UserPublicProfile.tsx:161
msgid "Followed"
msgstr "Suivi"
@@ -894,7 +958,7 @@ msgstr "Abonné"
msgid "email.digest.forYou"
msgstr "Pour vous"
#: src/pages/UserLogin.tsx:97
#: src/pages/UserLogin.tsx:101
msgid "Forgot password?"
msgstr "Mot de passe oublié ?"
@@ -929,11 +993,11 @@ msgid "email.reset.hi"
msgstr "Bonjour {username},"
#: src/components/feed/FeedTabBar.tsx:39
#: src/pages/Settings.tsx:52
#: src/pages/Settings.tsx:54
msgid "Hot"
msgstr "Tendances"
#: src/pages/UserLogin.tsx:136
#: src/pages/UserLogin.tsx:142
msgid "If that address is registered you'll receive a reset link shortly."
msgstr "Si cette adresse est enregistrée, vous recevrez un lien de réinitialisation sous peu."
@@ -965,7 +1029,11 @@ msgstr "Dans la tribune"
msgid "Insert emoji"
msgstr "Insérer un emoji"
#: src/pages/UserRegister.tsx:117
#: src/pages/Manage.tsx:43
msgid "Instances"
msgstr "Instances"
#: src/pages/UserRegister.tsx:119
msgid "Invalid invite"
msgstr "Invitation invalide"
@@ -979,7 +1047,7 @@ msgstr "Lien invalide"
msgid "Invite link"
msgstr "Lien d'invitation"
#: src/components/profile/ProfileHeader.tsx:116
#: src/components/profile/ProfileHeader.tsx:126
msgid "invited by"
msgstr "invité par"
@@ -998,8 +1066,12 @@ msgstr "sur votre invitation"
msgid "Invitees"
msgstr "Invités"
#: src/components/federation/FederatedSignIn.tsx:105
msgid "Its address, like music.example"
msgstr "Son adresse, comme music.example"
#: src/components/feed/FeedTabBar.tsx:41
#: src/pages/Settings.tsx:54
#: src/pages/Settings.tsx:56
msgid "Journal"
msgstr "Journal"
@@ -1007,11 +1079,16 @@ msgstr "Journal"
msgid "Keep editing"
msgstr "Continuer l'édition"
#. placeholder {0}: relativeTime(grant.lastUsedAt)
#: src/components/federation/GrantList.tsx:77
msgid "last used {0}"
msgstr "utilisée {0}"
#: src/components/profile/UsernameField.tsx:59
msgid "Letters, numbers and underscores only"
msgstr "Lettres, chiffres et tirets bas seulement"
#: src/pages/Settings.tsx:47
#: src/pages/Settings.tsx:49
msgid "Light"
msgstr "Clair"
@@ -1068,17 +1145,20 @@ msgstr "Chargement du profil…"
#: src/components/category/CategoryManager.tsx:60
#: src/components/chat/ChatModal.tsx:763
#: src/components/editor/EmojiPickerPopup.tsx:125
#: src/components/federation/PeerManager.tsx:108
#: src/components/playlist/PlaylistMembershipPanel.tsx:45
#: src/components/shared/ListState.tsx:38
#: src/components/shared/LoadMoreButton.tsx:32
#: src/components/social/UserListPopover.tsx:151
#: src/pages/Authorize.tsx:122
msgid "Loading…"
msgstr "Chargement…"
#: src/components/layout/AppHeader.tsx:208
#: src/pages/UserLogin.tsx:41
#: src/pages/UserLogin.tsx:67
#: src/pages/UserLogin.tsx:86
#: src/pages/FederationCallback.tsx:31
#: src/pages/UserLogin.tsx:44
#: src/pages/UserLogin.tsx:71
#: src/pages/UserLogin.tsx:90
msgid "Log in"
msgstr "Se connecter"
@@ -1090,16 +1170,22 @@ msgstr "Se connecter pour aimer"
msgid "Log in to vote"
msgstr "Se connecter pour voter"
#: src/components/layout/UserMenu.tsx:126
#. placeholder {0}: peer.name ?? peer.host
#: src/components/federation/FederatedSignIn.tsx:97
msgid "Log in with {0}"
msgstr "Se connecter avec {0}"
#: src/components/layout/UserMenu.tsx:127
#: src/pages/UserPublicProfile.tsx:131
msgid "Log out"
msgstr "Se déconnecter"
#: src/pages/UserLogin.tsx:85
#: src/pages/UserLogin.tsx:89
msgid "Logging in…"
msgstr "Connexion…"
#: src/pages/UserLogin.tsx:72
#: src/pages/FederationCallback.tsx:63
#: src/pages/UserLogin.tsx:76
msgid "Login failed"
msgstr "Connexion échouée"
@@ -1107,9 +1193,9 @@ msgstr "Connexion échouée"
msgid "Lowercase letters, numbers and single hyphens only"
msgstr "Minuscules, chiffres et tirets simples seulement"
#: src/components/layout/UserMenu.tsx:113
#: src/pages/Manage.tsx:24
#: src/pages/Manage.tsx:29
#: src/components/layout/UserMenu.tsx:114
#: src/pages/Manage.tsx:27
#: src/pages/Manage.tsx:34
#: src/pages/UserPublicProfile.tsx:164
msgid "Manage"
msgstr "Administration"
@@ -1138,7 +1224,7 @@ msgstr "Nom"
#: src/components/chat/ChatModal.tsx:692
#: src/components/feed/FeedTabBar.tsx:40
#: src/pages/Settings.tsx:53
#: src/pages/Settings.tsx:55
msgid "New"
msgstr "Nouveau"
@@ -1231,6 +1317,10 @@ msgstr "Aucun utilisateur ne correspond à « {q} »."
msgid "Not following anyone yet."
msgstr "Aucun abonnement pour le moment."
#: src/pages/Authorize.tsx:103
msgid "Not from here"
msgstr "Compte d'ailleurs"
#: src/pages/Community.tsx:127
msgid "Nothing happened this month."
msgstr "Rien de neuf ce mois-ci."
@@ -1248,7 +1338,7 @@ msgstr "Rien ici pour l'instant."
#: src/components/layout/NotificationBell.tsx:57
#: src/pages/Notifications.tsx:387
#: src/pages/Notifications.tsx:505
#: src/pages/Settings.tsx:130
#: src/pages/Settings.tsx:163
msgid "Notifications"
msgstr "Notifications"
@@ -1256,11 +1346,11 @@ msgstr "Notifications"
msgid "Notifications ({unreadNotificationCount} unread)"
msgstr "Notifications ({unreadNotificationCount} non lues)"
#: src/pages/Settings.tsx:60
#: src/pages/Settings.tsx:62
msgid "Off"
msgstr "Désactivés"
#: src/pages/Settings.tsx:59
#: src/pages/Settings.tsx:61
msgid "On"
msgstr "Activés"
@@ -1300,6 +1390,18 @@ msgstr "Ouvrir la tribune"
msgid "or <0>browse files</0>"
msgstr "ou <0>parcourir les fichiers</0>"
#: src/components/federation/FederatedSignIn.tsx:82
msgid "Or join with your account on another gerbeur"
msgstr "Ou rejoignez-nous avec votre compte d'un autre gerbeur"
#: src/components/federation/FederatedSignIn.tsx:83
msgid "Or log in with your account on another gerbeur"
msgstr "Ou connectez-vous avec votre compte d'un autre gerbeur"
#: src/pages/Settings.tsx:128
msgid "Other instances"
msgstr "Autres instances"
#: src/pages/UserPublicProfile.tsx:157
msgid "Overview"
msgstr "Aperçu"
@@ -1308,13 +1410,14 @@ msgstr "Aperçu"
msgid "Page not found"
msgstr "Page introuvable"
#: src/pages/Settings.tsx:90
#: src/pages/UserLogin.tsx:82
#: src/pages/Settings.tsx:96
#: src/pages/Settings.tsx:106
#: src/pages/UserLogin.tsx:86
msgid "Password"
msgstr "Mot de passe"
#. placeholder {0}: VALIDATION.PASSWORD_MIN
#: src/pages/UserRegister.tsx:158
#: src/pages/UserRegister.tsx:160
msgid "Password (min. {0} characters)"
msgstr "Mot de passe (min. {0} caractères)"
@@ -1416,17 +1519,17 @@ msgstr "Actualisation du flux…"
msgid "Refreshing…"
msgstr "Actualisation…"
#: src/pages/UserRegister.tsx:45
#: src/pages/UserRegister.tsx:129
#: src/pages/UserRegister.tsx:169
#: src/pages/UserRegister.tsx:47
#: src/pages/UserRegister.tsx:131
#: src/pages/UserRegister.tsx:171
msgid "Register"
msgstr "S'inscrire"
#: src/pages/UserRegister.tsx:168
#: src/pages/UserRegister.tsx:170
msgid "Registering…"
msgstr "Inscription…"
#: src/pages/UserRegister.tsx:134
#: src/pages/UserRegister.tsx:136
msgid "Registration failed"
msgstr "Inscription échouée"
@@ -1434,6 +1537,12 @@ msgstr "Inscription échouée"
msgid "Related"
msgstr "Connexe"
#. placeholder {0}: peer.host
#: src/components/federation/PeerManager.tsx:133
#: src/components/federation/PeerManager.tsx:134
msgid "Remove {0}"
msgstr "Retirer {0}"
#: src/components/form/FileDropZone.tsx:139
msgid "Remove file"
msgstr "Supprimer le fichier"
@@ -1472,7 +1581,7 @@ msgstr "Répondre"
msgid "Replying to"
msgstr "En réponse à"
#: src/pages/UserLogin.tsx:148
#: src/pages/UserLogin.tsx:154
msgid "Request failed"
msgstr "Échec de la demande"
@@ -1579,12 +1688,12 @@ msgstr "Position"
msgid "Send"
msgstr "Envoyer"
#: src/pages/UserLogin.tsx:157
#: src/pages/UserLogin.tsx:163
msgid "Send reset link"
msgstr "Envoyer le lien de réinitialisation"
#: src/components/chat/PendingItem.tsx:104
#: src/pages/UserLogin.tsx:156
#: src/pages/UserLogin.tsx:162
msgid "Sending…"
msgstr "Envoi…"
@@ -1603,8 +1712,8 @@ msgid "email.settings"
msgstr "Paramètres"
#: src/components/layout/UserMenu.tsx:104
#: src/pages/Settings.tsx:72
#: src/pages/Settings.tsx:84
#: src/pages/Settings.tsx:75
#: src/pages/Settings.tsx:88
msgid "Settings"
msgstr "Paramètres"
@@ -1612,6 +1721,19 @@ msgstr "Paramètres"
msgid "Several people are typing…"
msgstr "Plusieurs personnes écrivent…"
#: src/pages/Authorize.tsx:37
msgid "Sign in elsewhere"
msgstr "Se connecter ailleurs"
#: src/pages/Authorize.tsx:135
msgid "Sign in to {name}?"
msgstr "Se connecter à {name} ?"
#: src/pages/Authorize.tsx:154
#: src/pages/FederationCallback.tsx:73
msgid "Signing you in…"
msgstr "Connexion…"
#: src/components/profile/ProfileOwnActions.tsx:102
msgid "Single use, valid for 7 days."
msgstr "Usage unique, valable 7 jours."
@@ -1636,7 +1758,7 @@ msgstr "Quelqu'un a demandé à réinitialiser le mot de passe de votre compte {
msgid "Something went wrong"
msgstr "Une erreur est survenue"
#: src/pages/Settings.tsx:132
#: src/pages/Settings.tsx:165
msgid "Sounds"
msgstr "Sons"
@@ -1644,7 +1766,7 @@ msgstr "Sons"
msgid "Start fresh"
msgstr "Repartir de zéro"
#: src/pages/Settings.tsx:103
#: src/pages/Settings.tsx:136
msgid "Style"
msgstr "Style"
@@ -1696,11 +1818,11 @@ msgstr "Le nouvel ordre n'a pas pu être enregistré. Réessayez."
msgid "This comment couldn't be deleted. Try again."
msgstr "Ce commentaire n'a pas pu être supprimé. Réessayez."
#: src/pages/UserRegister.tsx:118
#: src/pages/UserRegister.tsx:120
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:104
#: src/pages/UserLogin.tsx:110
msgid "This is a mirage."
msgstr "C'est un mirage."
@@ -1716,7 +1838,11 @@ msgstr "Rien à voir, circulez."
msgid "This reset link is missing or malformed."
msgstr "Ce lien de réinitialisation est absent ou malformé."
#: src/pages/Settings.tsx:168
#: src/pages/FederationCallback.tsx:38
msgid "This sign-in link is incomplete."
msgstr "Ce lien de connexion est incomplet."
#: src/pages/Settings.tsx:201
msgid "This site doesn't send email, so no digest goes out."
msgstr "Ce site n'envoie pas d'e-mails, aucun résumé ne part donc."
@@ -1763,6 +1889,14 @@ msgstr "Les plus votées de la semaine"
msgid "Track {0}"
msgstr "Piste {0}"
#: src/components/federation/PeerManager.tsx:155
msgid "Trust"
msgstr "Approuver"
#: src/components/federation/PeerManager.tsx:32
msgid "Trusted"
msgstr "Approuvée"
#: src/components/chat/ChatModal.tsx:668
msgid "Try again"
msgstr "Réessayer"
@@ -1826,7 +1960,7 @@ msgstr "Désabonné"
msgid "email.digest.upload"
msgstr "fichier"
#: src/components/profile/ProfileHeader.tsx:72
#: src/components/profile/ProfileHeader.tsx:79
msgid "Upload failed"
msgstr "Envoi échoué"
@@ -1883,9 +2017,9 @@ msgstr "Menu utilisateur"
#: src/components/profile/ProfileManageTab.tsx:61
#: src/components/profile/UsernameField.tsx:51
#: src/pages/Settings.tsx:87
#: src/pages/UserLogin.tsx:75
#: src/pages/UserRegister.tsx:137
#: src/pages/Settings.tsx:91
#: src/pages/UserLogin.tsx:79
#: src/pages/UserRegister.tsx:139
msgid "Username"
msgstr "Nom d'utilisateur"
@@ -1894,6 +2028,10 @@ msgstr "Nom d'utilisateur"
msgid "Users"
msgstr "Utilisateurs"
#: src/components/federation/PeerManager.tsx:169
msgid "Users of a trusted instance sign in here with their account there. Those of a blocked one can't. Users of any other instance need an invite."
msgstr "Les utilisateurs d'une instance approuvée se connectent ici avec leur compte de là-bas. Ceux d'une instance bloquée ne le peuvent pas. Ceux de toute autre instance ont besoin d'une invitation."
#: src/components/profile/ProfileSection.tsx:43
msgid "View all →"
msgstr "Tout voir →"
@@ -1952,6 +2090,10 @@ msgstr "Hier"
msgid "You can post it anyway."
msgstr "Vous pouvez la publier quand même."
#: src/components/federation/GrantList.tsx:93
msgid "You haven't signed in to another gerbeur with this account yet."
msgstr "Vous ne vous êtes encore connecté à aucun autre gerbeur avec ce compte."
#: src/pages/Unsubscribe.tsx:94
msgid "You won't get the monthly recap any more. You can turn it back on in your settings."
msgstr "Vous ne recevrez plus le récap mensuel. Vous pouvez le réactiver dans vos paramètres."
@@ -1997,7 +2139,15 @@ msgstr "Vous avez tout lu, tout vu, tout bu."
msgid "email.welcome.preheader"
msgstr "Votre compte est prêt."
#: src/pages/UserLogin.tsx:152
#: src/pages/Authorize.tsx:104
msgid "Your account lives on {home}: sign in to other instances from there."
msgstr "Votre compte est sur {home} : connectez-vous aux autres instances depuis là-bas."
#: src/pages/Settings.tsx:119
msgid "Your account lives on {home}: your password, email address, avatar and username change there."
msgstr "Votre compte est sur {home} : votre mot de passe, votre adresse e-mail, votre avatar et votre nom d'utilisateur se changent là-bas."
#: src/pages/UserLogin.tsx:158
msgid "Your email address"
msgstr "Votre adresse e-mail"