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:
276
locales/fr.po
276
locales/fr.po
@@ -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"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user