jami-docs/locales/fr/LC_MESSAGES/developer.po

10059 lines
388 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# LANGUAGE translation of FILENAME.pot
# Copyright (C) 2018-2024 Savoir-faire Linux Inc. and contributors
# This file is distributed under the same license as the Jami documentation.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
# Translators:
# Alexandre Lision, 2022
# Antoine Gorenflot, 2022
# Fadi Shehadeh, 2023
# savoirfairelinux <support@savoirfairelinux.com>, 2023
# Adrien Béraud <adrien.beraud@savoirfairelinux.com>, 2023
# Guillaume Roguez, 2023
# Cyrille Béraud <cyrille.beraud@savoirfairelinux.com>, 2024
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Jami\n"
"Report-Msgid-Bugs-To: https://git.jami.net/savoirfairelinux/jami-docs/-/issues\n"
"POT-Creation-Date: 2024-03-19 02:52+0000\n"
"PO-Revision-Date: 2022-09-14 17:48+0000\n"
"Last-Translator: Cyrille Béraud <cyrille.beraud@savoirfairelinux.com>, 2024\n"
"Language-Team: French (https://app.transifex.com/savoirfairelinux/teams/49466/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: ../../../developer/account-management.md:1
msgid "Account management"
msgstr "Gestion du compte"
#: ../../../developer/account-management.md:4
msgid ""
"In this part, we will learn how to manage a Jami account. This means, how to"
" create a Jami account, modify the basic settings and delete the account. "
"This part will *NOT* explain what all the settings mean or how we can use "
"the account to do any action like adding a contact."
msgstr ""
"Dans cette partie, nous allons apprendre à gérer un compte Jami. En d'autres"
" termes, comment créer un compte Jami, modifier les paramètres de base et "
"supprimer le compte. Cette partie n'expliquera *PAS* ce que signifient tous "
"les paramètres ou comment utiliser le compte pour effectuer une action telle"
" que l'ajout d'un contact."
#: ../../../developer/account-management.md:6
msgid "Create a new account"
msgstr "Création d'un nouveau compte"
#: ../../../developer/account-management.md:8
#: ../../../developer/account-management.md:89 ../../../developer/calls.md:8
msgid "Daemon side"
msgstr "Le côté du Daemon"
#: ../../../developer/account-management.md:10
#: ../../../developer/account-management.md:91
#: ../../../developer/account-management.md:116
#: ../../../developer/account-management.md:143
#: ../../../developer/account-management.md:168
#: ../../../developer/account-management.md:192
msgid "API"
msgstr "API"
#: ../../../developer/account-management.md:12
#: ../../../developer/account-management.md:93
#: ../../../developer/account-management.md:118
#: ../../../developer/account-management.md:145
#: ../../../developer/account-management.md:170
msgid "In cx.ring.Ring.ConfigurationManager:"
msgstr "Dans cx.ring.Ring.ConfigurationManager:"
#: ../../../developer/account-management.md:35
msgid ""
"The details can be retrieven from the method `getAccountTemplate(type)` with"
" `type=RING` or `type=SIP`. For example, this is the following code used in "
"LRC."
msgstr ""
"Les détails peuvent être récupérés à partir de la méthode "
"`getAccountTemplate(type)` avec `type=RING` ou `type=SIP`. Par exemple, "
"voici le code suivant utilisé dans LRC."
#: ../../../developer/account-management.md:62
msgid ""
"When a new account is added, the signal `accountsChanged` will be emitted. "
"The client should update its internal structure after this signal with other"
" methods in ConfigurationManager."
msgstr ""
"Lorsqu'un nouveau compte est ajouté, le signal `accountsChanged` sera émis. "
"Lors de la réception de ce signal, le client doit mettre à jour sa structure"
" interne avec d'autres méthodes dans ConfigurationManager."
#: ../../../developer/account-management.md:64
#: ../../../developer/account-management.md:110
msgid "Core"
msgstr "Noyau"
#: ../../../developer/account-management.md:66
msgid ""
"The main logic to create a new account is located in "
"`src/ringdht/ringaccount.cpp`, in `RingAccount::createAccount`"
msgstr ""
"La logique principale pour créer un nouveau compte se trouve dans "
"`src/ringdht/ringaccount.cpp`, dans `RingAccount::createAccount`"
#: ../../../developer/account-management.md:68
msgid "How it works, from scratch"
msgstr "Comment cela fonctionne, depuis le début."
#: ../../../developer/account-management.md:70
msgid ""
"A Jami account is in fact represented by some files stored in a gzip "
"archive. If a password is provided during the account creation, the archive "
"will be encrypted as following: `dht::crypto::aesEncrypt(archive, password)`"
" (`dht::crypto::aesEncrypt` is defined in OpenDHT and use "
"`nettle/{aes,gcm}`). This is what the archive will contain a big JSON file "
"with:"
msgstr ""
"Un compte Jami est en fait représenté par des fichiers stockés dans une "
"archive gzip. Si un mot de passe est fourni lors de la création du compte, "
"l'archive sera cryptée comme suit : `dht::crypto::aesEncrypt(archive, "
"password)` (`dht::crypto::aesEncrypt` est défini dans OpenDHT et utilise "
"`nettle/{aes,gcm}`). C'est ce que l'archive contiendra dans un gros fichier "
"JSON :"
#: ../../../developer/account-management.md:72
msgid ""
"The private key `ringAccountKey` and certificate chain `ringAccountCert` "
"(base64 encoded)"
msgstr ""
"La clé privée `ringAccountKey` et la chaîne de certificats `ringAccountCert`"
" (code de base 64)"
#: ../../../developer/account-management.md:73
msgid "Generated CA key (for self-signed certificates) `ringCAKey`"
msgstr "Clé CA générée (pour les certificats auto-signés) `ringCAKey`"
#: ../../../developer/account-management.md:74
msgid "Revocated devices `ringAccountCRL`"
msgstr "Appareils révoqués `ringAccountCRL`"
#: ../../../developer/account-management.md:75
msgid ""
"The ethereum private key `ethKey` for the device. It's only used when you "
"register your name on `ns.jami.net`. Not mandatory."
msgstr ""
"La clé privée ethereum `ethKey` pour l'appareil. Elle n'est utilisée que "
"lorsque vous enregistrez votre nom sur `ns.jami.net`. Ce n'est pas "
"obligatoire."
#: ../../../developer/account-management.md:76
msgid "The contacts"
msgstr "Les contacts"
#: ../../../developer/account-management.md:77
msgid "The account settings"
msgstr "Les paramètres du compte"
#: ../../../developer/account-management.md:79
msgid "So let's generate it!"
msgstr "Alors générons-le !"
#: ../../../developer/account-management.md:81
#: ../../../developer/contact-management.md:162
msgid "**TODO**"
msgstr "**A FAIRE**"
#: ../../../developer/account-management.md:84
msgid "Delete the account"
msgstr "Supprimer le compte"
#: ../../../developer/account-management.md:86
msgid ""
"Deleting a Jami account is pretty simple. Because the keys are only on the "
"device, if the keys are deleted... the account is deleted! The only thing "
"outside the device is the username, on the nameserver. To remove this info, "
"it depends how the nameserver work. For example, it's not possible with "
"https://ns.jami.net"
msgstr ""
"La suppression d'un compte Jami est très simple. Comme les clés ne se "
"trouvent que sur l'appareil, si les clés sont supprimées... le compte est "
"supprimé ! La seule chose en dehors de l'appareil est le nom d'utilisateur, "
"sur le serveur de noms. Pour supprimer cette information, cela dépend du "
"fonctionnement du serveur de noms. Par exemple, ce n'est pas possible avec "
"https://ns.jami.net"
#: ../../../developer/account-management.md:108
msgid ""
"When the account is deleted, the signal `accountsChanged` will be emitted. "
"The client should update its internal structure after this signal with other"
" methods in ConfigurationManager."
msgstr ""
"Lorsque le compte est supprimé, le signal `accountsChanged` sera émis. Lors "
"de la réception du signal, le client doit mettre à jour sa structure interne"
" avec d'autres méthodes dans ConfigurationManager."
#: ../../../developer/account-management.md:112
msgid ""
"The main logic to create a new account is located in `src/manager.cpp`, in "
"`Manager::removeAccount`. It removes the accounts files and update the "
"config (`dring.yml`)."
msgstr ""
"La logique principale pour créer un nouveau compte se trouve dans "
"`src/manager.cpp`, dans `Manager::removeAccount`. Il supprime les fichiers "
"des comptes et met à jour la configuration (`dring.yml`)."
#: ../../../developer/account-management.md:114
msgid "Update the details of an account"
msgstr "Mettre à jour les détails d'un compte"
#: ../../../developer/account-management.md:135
msgid ""
"The map can contains a partial update and `accountDetailsChanged` will be "
"emitted on success. `getAccountDetails`"
msgstr ""
"La carte peut contenir une mise à jour partielle et `accountDetailsChanged` "
"sera émis en cas de succès. `getAccountDetails`"
#: ../../../developer/account-management.md:137
msgid "Add a device"
msgstr "Ajouter un appareil"
#: ../../../developer/account-management.md:139
msgid "There is two possibilities to add a device."
msgstr "Il y a deux possibilités pour ajouter un appareil."
#: ../../../developer/account-management.md:141
msgid "Backup archive (Then import from backup)"
msgstr "Sauvegarde de l'archive (puis importation à partir de la sauvegarde)"
#: ../../../developer/account-management.md:166
msgid "Export on DHT"
msgstr "Exportation sur la DHT"
#: ../../../developer/account-management.md:188
msgid "Then `exportOnRingEnded` is emitted."
msgstr "Ensuite, le message `exportOnRingEnded` est émis."
#: ../../../developer/account-management.md:190
msgid "Revoke device"
msgstr "Révoquer l'appareil"
#: ../../../developer/apis-of-jami.md:1
msgid "The APIs of Jami"
msgstr "Les APIs de Jami"
#: ../../../developer/apis-of-jami.md:4
msgid "OpenDHT"
msgstr "OpenDHT"
#: ../../../developer/apis-of-jami.md:6
msgid ""
"The documentation related to the API of OpenDHT is "
"[here](https://github.com/savoirfairelinux/opendht/wiki/API-Overview) and "
"will not be detailed in the following part."
msgstr ""
"La documentation relative à l'API d'OpenDHT est [ici] "
"(https://github.com/savoirfairelinux/opendht/wiki/API-Overview) et ne sera "
"pas détaillée dans la partie suivante."
#: ../../../developer/apis-of-jami.md:8
msgid "Daemon"
msgstr "Daemon"
#: ../../../developer/apis-of-jami.md:10
msgid "The managers"
msgstr "Les gestionnaires"
#: ../../../developer/apis-of-jami.md:12
msgid ""
"The API of the daemon is decomposed between 5 Managers + 1 Instance file:"
msgstr ""
"L'API du daemon est décomposée entre 5 gestionnaires + 1 fichier d'instance:"
#: ../../../developer/apis-of-jami.md:13
msgid ""
"The **CallManager** interface is used to manage call and conference related "
"actions. Since the Jami daemon supports multiple incoming/outgoing calls, "
"any actions involving a specific call must address the method by the means "
"of a unique callID. Jami daemon will generate a unique callID for outgoing "
"and incoming calls."
msgstr ""
"L'interface **CallManager** est utilisée pour gérer les actions liées aux "
"appels et aux conférences. Étant donné que le daemon Jami prend en charge "
"plusieurs appels entrants/sorties, toutes les actions impliquant un appel "
"spécifique doivent traiter la méthode au moyen d'un callID unique."
#: ../../../developer/apis-of-jami.md:14
msgid ""
"The **ConfigurationManager** used to handle the configuration stuff: "
"accounts settings, user preferences, ..."
msgstr ""
"Le **ConfigurationManager** était utilisé pour gérer les configurations: "
"réglages de comptes, préférences utilisateur,..."
#: ../../../developer/apis-of-jami.md:15
msgid "The **PresenceManager** is used to track the presence of contacts"
msgstr ""
"Le **PresenceManager** est utilisé pour suivre la présence de contacts"
#: ../../../developer/apis-of-jami.md:16
msgid "The **VideoManager** used to manage video devices and renderers"
msgstr ""
"Le **VideoManager** utilisé pour gérer les appareils vidéo et les moteurs de"
" rendu"
#: ../../../developer/apis-of-jami.md:17
msgid ""
"The **Instance** is used to count the number of clients actually registered "
"to the core. When initializing your client, you need to register it against "
"the core by using this interface."
msgstr ""
"L'instance** est utilisée pour compter le nombre de clients réellement "
"enregistrés dans le noyau. Lorsque vous initialiez votre client, vous devez "
"l'enregistrer contre le noyau en utilisant cette interface."
#: ../../../developer/apis-of-jami.md:19
msgid "DBUS"
msgstr "DBUS"
#: ../../../developer/apis-of-jami.md:21
msgid ""
"All the documentation and code for the dbus API is located in `jami-"
"daemon/bin/dbus`."
msgstr ""
"Toute la documentation et le code de l'API dbus se trouvent dans `jami-"
"daemon/bin/dbus`."
#: ../../../developer/apis-of-jami.md:23
msgid ""
"If you use linux, you can use `d-feet` when the daemon is running to "
"manipulate the API (or with any another tool)."
msgstr ""
"Si vous utilisez linux, vous pouvez utiliser `d-feet` lorsque le daemon est "
"en cours d'exécution pour manipuler l'API (ou avec tout autre outil)."
#: ../../../developer/apis-of-jami.md:25
msgid "The LRC project uses this API (and use libwrap on windows and mac os)."
msgstr ""
"Le projet LRC utilise cette API (et utilise libwrap sur Windows et macOS)."
#: ../../../developer/apis-of-jami.md:27
msgid "JNI"
msgstr "JNI"
#: ../../../developer/apis-of-jami.md:29
msgid ""
"All the documentation and code for the JNI API is located in `jami-"
"daemon/bin/jni`."
msgstr ""
"Toute la documentation et le code de l'API JNI se trouvent dans `jami-"
"daemon/bin/jni`."
#: ../../../developer/apis-of-jami.md:31
msgid "node js"
msgstr "node js"
#: ../../../developer/apis-of-jami.md:33
msgid ""
"All the documentation and code for the Node JS API is located in `jami-"
"daemon/bin/nodejs`. This API is not used in any known project and maybe is "
"not up-to-date."
msgstr ""
"Toute la documentation et le code de l'API Node JS se trouvent dans `jami-"
"daemon/bin/nodejs`. Cette API n'est pas utilisée dans aucun projet connu et "
"peut-être ne sera pas mise à jour."
#: ../../../developer/apis-of-jami.md:35
msgid "REST"
msgstr "REST"
#: ../../../developer/apis-of-jami.md:37
msgid ""
"All the documentation and code for the REST API is located in `jami-"
"daemon/bin/restcpp`. This API is not used in any known project and maybe is "
"not up-to-date."
msgstr ""
"Toute la documentation et le code de l'API REST se trouvent dans `jami-"
"daemon/bin/restcpp`. Cette API n'est utilisée dans aucun projet connu et "
"peut-être pas à jour."
#: ../../../developer/apis-of-jami.md:39
msgid "Python wrapper"
msgstr "Enveloppe Python"
#: ../../../developer/apis-of-jami.md:41
msgid ""
"A Python wrapper is available in `jami-daemon/tools/jamictrl`. This wrapper "
"uses DBus."
msgstr ""
"Un enveloppe Python est disponible en `jami-daemon/tools/jamictrl`. Ce "
"enveloppe utilise DBus."
#: ../../../developer/banned-contacts.md:1
msgid "Banned contacts"
msgstr "Contacts bannis"
#: ../../../developer/banned-contacts.md:4
msgid ""
"Following information are here for development purposes and may not reflect "
"the current state of any Jami client."
msgstr ""
"Les informations suivantes sont fournies à des fins de développement et "
"peuvent ne pas refléter l'état actuel d'un client Jami."
#: ../../../developer/banned-contacts.md:7
msgid "Introducing scenario"
msgstr "Sénario d'introduction"
#: ../../../developer/banned-contacts.md:10
msgid "Let's explain banned contacts with a simple scenario:"
msgstr "Expliquons les contacts bannis avec un scénario simple:"
#: ../../../developer/banned-contacts.md:12
msgid ""
"Alice and Jessica are friends, and like all good friends do, they use Jami "
"to communicate. They are both Jami contact of each other, so Alice is a "
"contact of Jessica and Jessica is a contact of Alice. Some day however, "
"Jessica does something really bad to Alice and Alice doesn't want to hear "
"from her anymore. Instead of removing Jessica from her Ring contacts -- "
"which would still allow Jessica to send her contact requests, Alice *bans* "
"Jessica."
msgstr ""
"Alice et Jessica sont amies et, comme toutes les bonnes amies, elles "
"utilisent Jami pour communiquer. Elles sont toutes les deux des contacts "
"Jami l'une de l'autre, donc Alice est un contact de Jessica et Jessica est "
"un contact d'Alice. Un jour, Jessica fait quelque chose de très mal à Alice "
"et celle-ci ne veut plus entendre parler d'elle. Au lieu de supprimer "
"Jessica de ses contacts Ring - ce qui permettrait à Jessica de lui envoyer "
"des demandes de contact - Alice *interdit* Jessica."
#: ../../../developer/banned-contacts.md:20
msgid "**So, what does it mean ?**"
msgstr "**Qu'est-ce que cela signifie ?**"
#: ../../../developer/banned-contacts.md:22
msgid "In the daemon"
msgstr "Dans le daemon"
#: ../../../developer/banned-contacts.md:25
msgid "Jessica *won't be notified that she was banned by Alice*."
msgstr "Jessica *ne sera pas informée qu'elle a été bannie par Alice*."
#: ../../../developer/banned-contacts.md:27
msgid ""
"As a *banned contact* of Alice, Jessica *won't be allowed to contact her "
"anymore*, in any way. Text messages, voice or video calls won't be "
"acknowledged or answered in any way. Alice won't even be aware that Jessica "
"tried to contact her."
msgstr ""
"En tant que contact interdit d'Alice, Jessica * ne sera plus autorisée à la "
"contacter*, de aucune façon. Les messages texte, les appels vocaux ou vidéo "
"ne seront pas reconnus ou répondus de aucune façon. Alice ne sera même pas "
"au courant que Jessica a essayé de la contacter."
#: ../../../developer/banned-contacts.md:32
msgid "Banned contacts are synched across linked devices like other contacts."
msgstr ""
"Les contacts interdits sont synchronisés entre les appareils connectés comme"
" les autres contacts."
#: ../../../developer/banned-contacts.md:34
msgid "In Jami clients (recommended implementation)"
msgstr "Dans les clients Jami (implémentation recommandée)"
#: ../../../developer/banned-contacts.md:37
msgid ""
"As long as Jessica is a banned contact, the conversation with Jessica "
"doesn't appears in the conversations list. The conversation history, "
"however, is not deleted. Jessica appears in Alice' account banned contact "
"list. Alice might also find/open the conversation by performing an exact "
"search for Jessica' username."
msgstr ""
"Tant que Jessica est un contact interdit, la conversation avec Jessica "
"n'apparaît pas dans la liste des conversations. L'historique de la "
"conversation n'est cependant pas supprimé. Jessica apparaît dans la liste "
"des contacts interdits du compte d'Alice. Alice pourrait également "
"trouver/ouvrir la conversation en effectuant une recherche exacte du nom "
"d'utilisateur de Jessica."
#: ../../../developer/banned-contacts.md:43
msgid ""
"Alice can un-ban Jessica from the conversation or the banned contact list."
msgstr ""
"Alice peut débannir Jessica de la conversation ou de la liste de contacts "
"bannis."
#: ../../../developer/banned-contacts.md:46
msgid ""
"The search result and the conversation indicates Jessica' banned status. "
"Alice must unban Jessica to send her a message, call her or otherwise "
"interract with her."
msgstr ""
"Le résultat de la recherche et la conversation indiquent que Jessica est "
"bannie. Alice doit débannir Jessica pour lui envoyer un message, l'appeler "
"ou entrer en contact avec elle de toute autre manière."
#: ../../../developer/banned-contacts.md:50
msgid ""
"Alice can still delete the conversation history using a *Delete History* "
"button."
msgstr ""
"Alice peut toujours supprimer l'historique de conversation en utilisant le "
"bouton * Supprimer l'historique *."
#: ../../../developer/calls.md:1 ../../../developer/swarm.md:536
#: ../../../developer/synchronizing-profiles.md:19
msgid "Calls"
msgstr "Appels"
#: ../../../developer/calls.md:4
msgid ""
"**NOTE: this page detail the principle for Jami accounts. For SIP accounts, "
"the SIP protocol is used.**"
msgstr ""
"** NOTE: cette page détaille le principe des comptes Jami. Pour les comptes "
"SIP, le protocole SIP est utilisé.**"
#: ../../../developer/calls.md:6
msgid "Let's do a call in Jami!"
msgstr "Faisons un appel à Jami!"
#: ../../../developer/calls.md:10
msgid ""
"When creating a call between two peers, Jami mainly uses known protocols "
"such as ICE, SIP or TLS. However, to make it distributed, the process of "
"creating a call is a bit different. To summarize, when someone wants to "
"contact one of its contact, this is what they will do:"
msgstr ""
"Lorsqu'il crée un appel entre deux pairs, Jami utilise principalement des "
"protocoles connus tels que ICE, SIP ou TLS. Cependant, pour le faire "
"distribuer, le processus de création d'un appel est un peu différent. Pour "
"résumer, quand quelqu'un veut contacter un de ses contacts, voici ce qu'il "
"fera:"
#: ../../../developer/calls.md:12
msgid ""
"Search the contact presence on the DHT (for more details, see {doc}`contact-"
"management`)"
msgstr ""
"Rechercher la présence de contacts sur le DHT (pour plus de détails, voir "
"{doc}`contact-management`)"
#: ../../../developer/calls.md:13
msgid ""
"Once the contact is found, send a call request, announcing the known "
"candidates (the ip of each network interfaces + relay addresses (TURN) + "
"reflexives addresses (UPnP, public ones)."
msgstr ""
"Une fois le contact trouvé, envoyez une demande d'appel, en annonçant les "
"candidats connus (l'IP de chaque interface réseau + adresses de relais "
"(TURN) + adresses réflexives (UPnP, public)."
#: ../../../developer/calls.md:14
msgid ""
"Wait for the response of the contact (they will respond their known "
"addresses)."
msgstr "Attendez la réponse du contact (il répondra à ses adresses connues)."
#: ../../../developer/calls.md:15
msgid ""
"Negotiate the socket via ICE. In fact, two ICE sessions are negotiated. One "
"(preferred) in TCP, one in UDP (as a fallback)."
msgstr ""
"En fait, deux sessions ICE sont négociées. Une (privé) en TCP, une en UDP "
"(en tant que rétroaction)."
#: ../../../developer/calls.md:16
msgid "Then, the socket is encrypted in TLS (if TCP) or DTLS (if UDP)."
msgstr "Ensuite, la prise est cryptée en TLS (si TCP) ou DTLS (si UDP)."
#: ../../../developer/calls.md:17
msgid ""
"The contact is now able to accept or decline the call. When they accept, a "
"ICE transport (UDP only for now) is negotiated to create 4 new sockets for "
"the medias (2 for audio, 2 for video)."
msgstr ""
"Le contact est désormais en mesure d'accepter ou de refuser l'appel. "
"Lorsqu'il accepte, un transport ICE (UDP seulement pour l'instant) est "
"négocié pour créer 4 nouvelles prises pour les médias (2 pour l'audio, 2 "
"pour la vidéo)."
#: ../../../developer/calls.md:18
msgid "The call is now alive!"
msgstr "L'appel est maintenant vivant!"
#: ../../../developer/calls.md:20
msgid "Exchange ICE candidates"
msgstr "Échange de candidats à l'ICE"
#: ../../../developer/calls.md:22
msgid ""
"Everything really starts in `jamiaccount.cpp` "
"(`JamiAccount::startOutgoingCall`). Once both ICE objects are ready and when"
" the contact is found via the DHT, the call request for the contact is "
"crafted. This request contains all the informations necessary for the remote"
" ICE session defined by:"
msgstr ""
"Tout commence vraiment dans `jamiaccount.cpp` "
"(`JamiAccount::startOutgoingCall`). Une fois que les deux objets ICE sont "
"prêts et que le contact est trouvé via le DHT, la demande d'appel pour le "
"contact est créée. Cette demande contient toutes les informations "
"nécessaires à la session ICE à distance définie par:"
#: ../../../developer/calls.md:28
msgid ""
"where `callvid` is a random number used to identify the call and blob "
"contains two concatened ICE messages (`IceTransport::packIceMsg` in "
"`ice_transport.cpp`) containing the password of the session, the *ufrag* and"
" ICE candidates.) like:"
msgstr ""
"où `callvid` est un numéro aléatoire utilisé pour identifier l'appel et où "
"le blob contient deux messages ICE concatenés (`IceTransport::packIceMsg` en"
" `ice_transport.cpp`) contenant le mot de passe de la session, le *ufrag* et"
" les candidats ICE.) comme:"
#: ../../../developer/calls.md:48
msgid ""
"and is sent via the DHT in an encrypted message for the device to "
"`hash(callto:xxxxxx)` where `xxxxxx` is the device id. The peer will answer "
"at the exact same place (but encrypted for the sender device) its own "
"`dht::IceCandidates`. See `JamiAccount::replyToIncomingIceMsg` for more "
"details."
msgstr ""
"et est envoyé par l'intermédiaire du DHT dans un message crypté pour le "
"dispositif à `hash(call:xxxxxx) ` où `xxxxxx` est l'id du dispositif. Le "
"pair répondra exactement au même endroit (mais crypté pour le dispositif "
"d'expédition) son propre `dht::IceCandidates`. Voir "
"`JamiAccount::replyToIncomingIceMsg` pour plus de détails."
#: ../../../developer/calls.md:50
msgid ""
"The ICE session is created both side when they have all the candidates (so "
"for the sender, when the reply from the contact is received)."
msgstr ""
"La session ICE est créée des deux côtés lorsqu'ils ont tous les candidats "
"(donc pour l'expéditeur, lorsque la réponse du contact est reçue)."
#: ../../../developer/calls.md:52
msgid "ICE negotiation"
msgstr "Les négociations ICE"
#: ../../../developer/calls.md:54
msgid ""
"Pending calls are managed by `JamiAccount::handlePendingCallList()`, which "
"first wait that the TCP negotiation finish (and if it fails, wait for the "
"UDP one). The code for the ICE negotiation is mainly managed by "
"[pjproject](https://github.com/pjsip/pjproject) but for Jami, the "
"interesting part is located in `ice_transport.cpp`. Moreover, we add some "
"important patches/features on top of *pjproject* not merged upstream for now"
" (for example, ICE over TCP). These patches are present in "
"`contrib/src/pjproject`."
msgstr ""
"Les appels en attente sont gérés par `JamiAccount::handlePendingCallList() "
"`, qui attend d'abord que la négociation TCP se termine (et si elle échoue, "
"attend celle de l'UDP). Le code de la négociation ICE est principalement "
"géré par [pjproject] (https://github.com/pjsip/pjproject) mais pour Jami, la"
" partie intéressante est située dans `ice_transport.cpp`. En outre, nous "
"ajoutons quelques correctifs/fonctionnalités importants en plus de "
"*pjproject* qui n'ont pas été fusionnés en amont pour le moment (par "
"exemple, ICE sur TCP). Ces correctifs sont présents dans "
"`contrib/src/pjproject`."
#: ../../../developer/calls.md:56
msgid "Encrypt the control socket"
msgstr "Chiffrer la socket de contrôle"
#: ../../../developer/calls.md:58
msgid ""
"Once the socket is created and managed by an **IceTransport** instance, it "
"is then wrapped in a **SipTransport** corresponding to a *TlsIceTransport*. "
"The main code is located into `JamiAccount::handlePendingCall()` and the "
"wrapping is done into `SipTransportBroker::getTlsIceTransport`. Finally, our"
" session is managed by **TlsSession** in "
"`daemon/src/security/tls_session.cpp` and uses the GnuTLS library."
msgstr ""
"Une fois que la prise est créée et gérée par une instance **IceTransport**, "
"elle est ensuite enveloppée dans un **SipTransport** correspondant à un "
"*TlsIceTransport*. Le code principal est situé dans "
"`JamiAccount::handlePendingCall() ` et l'enveloppe est effectuée dans "
"`SipTransportBroker::getTlsIceTransport`. Enfin, notre session est gérée par"
" **TlsSession** en `daemon/src/security/tls_session.cpp` et utilise la "
"bibliothèque GnuTLS."
#: ../../../developer/calls.md:60
msgid ""
"So, the control socket will be a TLS (1.3 if your and your peer gnutls "
"version support it) if a TCP socket is negotiated. If a UDP socket is "
"negotiated instead (due to firewall restrictions/problem in the "
"negotiation/etc), the socket will use DTLS (still managed by the same "
"parts)."
msgstr ""
"Ainsi, la prise de contrôle sera un TLS (1.3 si votre version et celle de "
"vos pairs gnutls le supportent) si une prise TCP est négociée. Si une prise "
"UDP est négociée à la place (en raison des restrictions du pare-feu / "
"problème dans la négociation / etc.), la prise utilisera DTLS (encore géré "
"par les mêmes parties)."
#: ../../../developer/calls.md:62
msgid ""
"The control socket is used to transmit SIP packets, like invites, custom "
"messages (Jami sends the VCard of your profile on this socket at the start "
"of the call, or the rotation of the camera), text messages."
msgstr ""
"La prise de contrôle est utilisée pour transmettre des paquets SIP, comme "
"des invitations, des messages personnalisés (Jami envoie la carte V de votre"
" profil sur cette prise au début de l'appel, ou la rotation de la caméra), "
"des messages texte."
#: ../../../developer/calls.md:64
msgid "Related articles:"
msgstr "Articles connexes:"
#: ../../../developer/calls.md:66
msgid "https://jami.net/improved-video-rotation-support/"
msgstr "https://jami.net/improved-video-rotation-support/"
#: ../../../developer/calls.md:67
msgid "https://jami.net/peer-to-peer-file-sharing-support-in-jami/"
msgstr "https://jami.net/peer-to-peer-file-sharing-support-in-jami/"
#: ../../../developer/calls.md:69
msgid "Media sockets"
msgstr "Sockets multimédia"
#: ../../../developer/calls.md:71
msgid ""
"Media sockets are SRTP sockets where the key is negotiated through the TLS "
"Session previously created. **TODO**"
msgstr ""
"Les sockets multimédia sont des sockets SRTP où la clé est négociée par "
"l'intermédiaire de la session TLS créée précédemment. ** A FAIRE**"
#: ../../../developer/calls.md:74 ../../../developer/drt.rst:140
msgid "Architecture"
msgstr "Architecture"
#: ../../../developer/calls.md:76
msgid "**TOOD**"
msgstr "**A FAIRE**"
#: ../../../developer/calls.md:79
msgid "Multi-stream"
msgstr "Multi-stream"
#: ../../../developer/calls.md:81
msgid ""
"Since daemon's version 13.3.0, multi-stream is fully supported. This "
"feature allows users to share multiple videos during a call at the same "
"time. In the following parts, we will describe all related changes."
msgstr ""
"Depuis la version 13.3.0 de Daemon, le multi-stream est entièrement pris en "
"charge. Cette fonctionnalité permet aux utilisateurs de partager plusieurs "
"vidéos pendant un appel en même temps. Dans les parties suivantes, nous "
"décrirons toutes les modifications connexes."
#: ../../../developer/calls.md:86
msgid "pjsip"
msgstr "le plâtre"
#: ../../../developer/calls.md:88
msgid ""
"The first part is to negotiate enough media streams. In fact, every media "
"stream uses 2 UDP sockets. We consider three scenarios:"
msgstr ""
"La première partie est de négocier suffisamment de flux de médias. En fait, "
"chaque flux de médias utilise 2 prises UDP. Nous examinons trois scénarios:"
#: ../../../developer/calls.md:91
msgid ""
"If it's the host of a conference who wants to add media, there is nothing "
"more to negotiate, because we already mix the videos into one stream. So, "
"we add the new media directly to the video-mixer without negotiations."
msgstr ""
"Si c'est l'hôte d'une conférence qui veut ajouter des médias, il n'y a plus "
"rien à négocier, parce que nous mélangons déjà les vidéos dans un flux."
#: ../../../developer/calls.md:96
msgid ""
"If we're in 1:1, for now, as there is no conference information, multi-"
"stream is not supported."
msgstr ""
"Si nous sommes à 1:1, pour l'instant, comme il n'y a pas d'informations de "
"conférence, multi-stream n'est pas pris en charge."
#: ../../../developer/calls.md:99
msgid "Else, 2 new sockets are negotiated for new media."
msgstr "Sinon, deux nouvelles prises sont négociées pour de nouveaux médias."
#: ../../../developer/calls.md:101
msgid ""
"To make pjsip able to generate more sockets per ICE session, "
"`PJ_ICE_COMP_BITS` was modified to `5` (which corresponds to `2^5`, so 32 "
"streams)."
msgstr ""
"Pour que pjsip puisse générer plus de prises par session ICE, "
"`PJ_ICE_COMP_BITS` a été modifié en `5` (qui correspond à `2^5`, donc 32 "
"flux)."
#: ../../../developer/calls.md:105
msgid "Deprecate switchInput, support requestMediaChange"
msgstr "Déprécier switchInput, prendre en charge requestMediaChange"
#: ../../../developer/calls.md:107
msgid ""
"In the daemon, the old API `switchInput` is now **DEPRECATED**; same for "
"`switchSecondaryInput`:"
msgstr ""
"Dans le daemon, l'ancienne API `switchInput` est maintenant **DEPRECATED**; "
"la même pour `switchSecondaryInput`:"
#: ../../../developer/calls.md:133
msgid "`requestMediaChange` replaces this, for both calls and conferences:"
msgstr ""
"`requestMediaChange` remplace ce terme, tant pour les appels que pour les "
"conférences:"
#: ../../../developer/calls.md:157
msgid "Compability"
msgstr "Compatibilité"
#: ../../../developer/calls.md:159
msgid ""
"If a call is done with a peer where the daemon's version is < 13.3.0, multi-"
"stream is not enabled and the old behavior is used (1 video only)."
msgstr ""
"Si un appel est effectué avec un peer où la version du daemon est < 13.3.0, "
"multi-stream n'est pas activé et l'ancien comportement est utilisé (1 vidéo "
"seulement)."
#: ../../../developer/calls.md:163
msgid "Identifications of streams"
msgstr "Identification des courants"
#: ../../../developer/calls.md:165
msgid ""
"Because there can be multiple streams now, every media stream is identified "
"by its identifier, and the format is \"<type>_<idx>\"; for example: "
"\"audio_0\", \"video_2\", etc."
msgstr ""
"Parce qu'il peut y avoir plusieurs flux maintenant, chaque flux multimédia "
"est identifié par son identifiant, et le format est \"<type>_<idx>\"; par "
"exemple: \"audio_0\", \"video_2\", etc."
#: ../../../developer/calls.md:169
msgid "Rotation"
msgstr "Retour"
#: ../../../developer/calls.md:171 ../../../developer/calls.md:187
#: ../../../developer/calls.md:201
msgid "The XML was updated to add the wanted stream:"
msgstr "Le XML a été mis à jour pour ajouter le flux recherché:"
#: ../../../developer/calls.md:185
msgid "Key-frame"
msgstr "Le cadre de la clé"
#: ../../../developer/calls.md:199
msgid "Voice activity"
msgstr "Activité vocale"
#: ../../../developer/calls.md:215
msgid "Conference"
msgstr "Conférence"
#: ../../../developer/calls.md:217
msgid "Reflected changes are documented {doc}`here <conference-protocol>`."
msgstr "Les modifications reflétées sont documentées ici."
#: ../../../developer/calls.md:219
msgid "Client"
msgstr "Client"
#: ../../../developer/calls.md:221
msgid ""
"Even if the back-end supports up to 32 media at the same time, except for "
"custom clients we currently recommend only giving the ability to share one "
"camera and one video at the same time. The camera is controlled via the "
"camera button, and the other media via the \"Share\" button."
msgstr ""
"Même si le back-end prend en charge jusqu'à 32 supports simultanément, sauf "
"pour les clients personnalisés, nous recommandons actuellement de ne donner "
"la possibilité de partager qu'une caméra et une vidéo en même temps."
#: ../../../developer/calls.md:227
msgid ""
"In client-qt, the interesting part is in `AvAdapter` (methods like "
"`isCapturing`, `shareAllScreens`, `stopSharing`). In the library's logic, "
"`addMedia` and `removeMedia` in the `callModel` directly use the "
"`requestMediaChange` and can be used as a design reference."
msgstr ""
"Dans le client-qt, la partie intéressante est dans `AvAdapter` (méthodes "
"comme `isCapturing`, `shareAllScreens`, `stopSharing`). Dans la logique de "
"la bibliothèque, `addMedia` et `removeMedia` dans le `callModel` utilisent "
"directement le `requestMediaChange` et peuvent être utilisés comme référence"
" de conception."
#: ../../../developer/calls-in-swarm.md:1
msgid "Calls in Swarm"
msgstr "Les appels à l'arrivée"
#: ../../../developer/calls-in-swarm.md:4
msgid "Goals"
msgstr "Objectifs"
#: ../../../developer/calls-in-swarm.md:6
msgid ""
"This page aims to describe how call will works with groups. This method will"
" allow clients to provides call for multiple participants with a shared text"
" history. The protocol must be flexible, keep compatibility with the SIP "
"stack, adn must work in a distributed environment. This distributed "
"environment also brings some challenges, such as possible race conditions "
"(where multiple parties can start a call at the same time). Finally, because"
" the Swarm can be with members only using mobiles, or by companies with "
"dedicated servers to mix the video, it should also be able to work with the "
"best experience possible on heterogeneous environment."
msgstr ""
"Cette page vise à décrire comment l'appel fonctionnera avec les groupes. "
"Cette méthode permettra aux clients de fournir l'appel pour plusieurs "
"participants avec un historique de texte partagé. Le protocole doit être "
"flexible, maintenir la compatibilité avec la pile SIP, adn doit travailler "
"dans un environnement distribué. Cet environnement distribué apporte "
"également certains défis, tels que des conditions de course possibles (où "
"plusieurs parties peuvent lancer un appel en même temps). Enfin, parce que "
"le Swarm peut être avec des membres utilisant uniquement des mobiles, ou par"
" des entreprises avec des serveurs dédiés pour mélanger la vidéo, il devrait"
" également être capable de travailler avec la meilleure expérience possible "
"sur un environnement hétérogène."
#: ../../../developer/calls-in-swarm.md:8
#: ../../../developer/conference-protocol.md:5
#: ../../../developer/design-process.md:4 ../../../developer/drt.rst:23
msgid "Definitions"
msgstr "Définitions"
#: ../../../developer/calls-in-swarm.md:10
msgid ""
"a **Rendezvous** will mix all authorized incoming calls in a conference."
msgstr ""
"Un **Rendez-vous** mélange tous les appels autorisés entrants dans une "
"conférence."
#: ../../../developer/calls-in-swarm.md:11
msgid "Two new URIs will be used for this feature:"
msgstr "Deux nouveaux URI seront utilisés pour cette fonctionnalité:"
#: ../../../developer/calls-in-swarm.md:12
msgid "`swarm:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`"
msgstr "`swarm:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`"
#: ../../../developer/calls-in-swarm.md:13
msgid "`rdv:accountUri/deviceId/conversationId/confId`"
msgstr "`rdv:accountUri/appareilId/conversationId/confId"
#: ../../../developer/calls-in-swarm.md:14
msgid ""
"**Swarm's profile** is the profile of the swarm stored in a vCard "
"(`profile.vcf`, see {ref}`developer/swarm:Conversation's profile "
"synchronization` and {doc}`synchronizing-profiles`)"
msgstr ""
"**Le profil de l'envahisseur** est le profil de l'envahisseur stocké dans "
"une vCard (`profile.vcf`, voir {ref}`developer/swarm:Conversation's profile "
"synchronisation` et {doc}`synchronisation-profiles`)"
#: ../../../developer/calls-in-swarm.md:15
msgid "`rdvUri` is the default URI for a Swarm, set in the *Swarm's profile*"
msgstr ""
"`rdvUri` est l'URI par défaut d'un groupe, réglé dans le profil de la bande*"
#: ../../../developer/calls-in-swarm.md:17
msgid ""
"Note: those two URIs allow the client to place a call in order to join a "
"*Rendezvous* or to init a call to a swarm, resulting in the logic described "
"in the next section."
msgstr ""
"Remarque: ces deux URI permettent au client de passer un appel pour "
"rejoindre un *Rendez-vous* ou d'initier un appel à un essaim, ce qui donne "
"la logique décrite dans la section suivante."
#: ../../../developer/calls-in-swarm.md:19
msgid "Place a call in a Swarm"
msgstr "Faites un appel à un groupe"
#: ../../../developer/calls-in-swarm.md:21
msgid "Proposed flow:"
msgstr "Débit proposé:"
#: ../../../developer/calls-in-swarm.md:23
msgid "**a:** If `rdvUri` is set:"
msgstr "**a:** Si `rdvUri` est réglée:"
#: ../../../developer/calls-in-swarm.md:24
#: ../../../developer/calls-in-swarm.md:27
msgid "Call it"
msgstr "Ça va."
#: ../../../developer/calls-in-swarm.md:25
msgid "If failed, go to **b:**"
msgstr "Si vous échouez, allez à **b:**"
#: ../../../developer/calls-in-swarm.md:26
msgid "**b:** else if there is a current active call:"
msgstr "**b:** sinon, s'il y a une appel active en cours:"
#: ../../../developer/calls-in-swarm.md:28
msgid "If failed, go to **c:**"
msgstr "Si vous échouez, allez à **c:**"
#: ../../../developer/calls-in-swarm.md:29
msgid "**c:** else, host a new *Rendezvous* and join it."
msgstr "Sinon, accueillez un nouveau rendez-vous et rejoignez-le."
#: ../../../developer/calls-in-swarm.md:30
msgid "Also, ask users if they want to be the host for next calls."
msgstr ""
"Demandez également aux utilisateurs s'ils veulent être l'hôte des prochains "
"appels."
#: ../../../developer/calls-in-swarm.md:32
msgid ""
"![Diagram: Placing a call in a Swarm](images/placing-call-in-swarm-"
"diagram.png)"
msgstr "! [Diagramme: Placer un appel dans un swarm]"
#: ../../../developer/calls-in-swarm.md:32
msgid "Diagram: Placing a call in a Swarm"
msgstr "Diagramme: Placement d'un appel dans un groupe"
#: ../../../developer/calls-in-swarm.md:34
msgid "**TODO, when to commit and who is commiting**"
msgstr "** TODO, quand s'engager et qui s'engage**"
#: ../../../developer/calls-in-swarm.md:36
msgid "Incoming calls for swarm"
msgstr "Appels à la population"
#: ../../../developer/calls-in-swarm.md:38
msgid ""
"When receiving a new incoming call, the URI MUST be parsed. If the incoming "
"call is for a *Rendezvous* which is currently hosted by the device and the "
"caller is authorized to join, the call MUST be answered and added to the "
"current *Rendezvous*"
msgstr ""
"Lorsque vous recevez un nouvel appel entrant, l'URI DOIT être analysé. Si "
"l'appel entrant est pour un *Rendezvous* qui est actuellement hébergé par "
"l'appareil et que l'appelant est autorisé à rejoindre, l'appel DOIT être "
"répondu et ajouté au *Rendezvous* actuel"
#: ../../../developer/calls-in-swarm.md:41
msgid "Defining a host for a Swarm"
msgstr "Définition d'un hôte pour un amas"
#: ../../../developer/calls-in-swarm.md:43
msgid ""
"To define a default URI, the member who wants to be the host should update "
"the profile of the conversation, and this will be synced and validated by "
"peers. However, the host MUST be able to accept or not to be the host and a "
"member with enough permissions SHOULD be able to ask a device to be the "
"host. This process is not decided for now."
msgstr ""
"Pour définir un URI par défaut, le membre qui veut être l'hôte doit mettre à"
" jour le profil de la conversation, et cela sera synchronisé et validé par "
"des pairs. Cependant, l'hôte DOIT être en mesure d'accepter ou de ne pas "
"être l'hôte et un membre avec suffisamment d'autorisations DOIT être en "
"mesure de demander à un appareil d'être l'hôte. Ce processus n'est pas "
"décidé pour l'instant."
#: ../../../developer/calls-in-swarm.md:45
msgid "**TODO? Permissions to update, negotiation of the host**"
msgstr "** TODO? Permis de mise à jour, négociation de l'hôte**"
#: ../../../developer/calls-in-swarm.md:47
#: ../../../developer/conference-protocol.md:181
#: ../../../developer/file-transfer.md:196
msgid "Future"
msgstr "L'avenir"
#: ../../../developer/calls-in-swarm.md:49
msgid "Join notifications?"
msgstr "Vous rejoignez les notifications?"
#: ../../../developer/calls-in-swarm.md:51
msgid ""
"Members of the swarm that aren't in a call SHOULD be able to know who is in "
"the active calls."
msgstr ""
"Les membres du swarm qui ne sont pas dans un appel DEVRAI être en mesure de "
"savoir qui est dans les appels actifs."
#: ../../../developer/calls-in-swarm.md:53
msgid "SIP Bridge?"
msgstr "Le pont de SIP?"
#: ../../../developer/calls-in-swarm.md:55
msgid ""
"Because conferences are still mixed SIP calls, a SIP bridge is still "
"possible. In the *Swarm's profile* it should be possible to add a SIP entry,"
" like some popular VoIP systems)"
msgstr ""
"Parce que les conférences sont toujours des appels SIP mixtes, un pont SIP "
"est toujours possible."
#: ../../../developer/choosing-crf-value-for-encoder.md:1
msgid "Choosing CRF value for encoder"
msgstr "Choisir la valeur CRF pour le codeur"
#: ../../../developer/choosing-crf-value-for-encoder.md:4
#: ../../../developer/design-process.md:13
msgid "Context"
msgstr "Contextes"
#: ../../../developer/choosing-crf-value-for-encoder.md:5
msgid ""
"Bandwidth usage by the Jami application is not optimal for all types of "
"connections. Indeed, in some cases, the user experience is not good "
"(satellite connection, ...) despite the bandwidth management algorithm."
msgstr ""
"L'utilisation de la bande passante par l'application Jami n'est pas optimale"
" pour tous les types de connexions. En effet, dans certains cas, "
"l'expérience utilisateur n'est pas bonne (connexion par satellite,...) "
"malgré l'algorithme de gestion de la bande passante."
#: ../../../developer/choosing-crf-value-for-encoder.md:7
msgid "Observation"
msgstr "Observation"
#: ../../../developer/choosing-crf-value-for-encoder.md:8
msgid ""
"It is not necessary to aim for an optimal quality (CRF < 20) because beyond "
"that, the visual perception is almost similar while the data flow (bitrate) "
"required is much higher."
msgstr ""
"Il n'est pas nécessaire de viser une qualité optimale (CRF < 20) car, outre "
"cela, la perception visuelle est presque similaire tandis que le flux de "
"données (bitrate) requis est beaucoup plus élevé."
#: ../../../developer/choosing-crf-value-for-encoder.md:10
msgid "Objective"
msgstr "Objectif"
#: ../../../developer/choosing-crf-value-for-encoder.md:11
msgid ""
"The purpose of this document is to verify the impact of a change in video "
"quality with the CRF parameter of the encoder."
msgstr ""
"Le présent document a pour objet de vérifier l'impact d'un changement de "
"qualité vidéo avec le paramètre CRF du codeur."
#: ../../../developer/choosing-crf-value-for-encoder.md:13
msgid "Test"
msgstr "Test"
#: ../../../developer/choosing-crf-value-for-encoder.md:14
msgid "These tests were performed by comparing :"
msgstr "Ces tests ont été effectués en comparant:"
#: ../../../developer/choosing-crf-value-for-encoder.md:15
msgid "The first one encoded with Jami's current parameters"
msgstr "Le premier codé avec les paramètres actuels de Jami"
#: ../../../developer/choosing-crf-value-for-encoder.md:16
msgid "The second encoded with a lower quality"
msgstr "Le second est codé avec une qualité inférieure"
#: ../../../developer/choosing-crf-value-for-encoder.md:18
msgid ""
"Each of these tests were performed for the following resolutions: 1080p, "
"720p and 436p."
msgstr ""
"Chacun de ces essais a été effectué pour les résolutions suivantes: 1080p, "
"720p et 436p."
#: ../../../developer/choosing-crf-value-for-encoder.md:20
msgid "For each of these resolutions several bitrates have been used:"
msgstr "Pour chacune de ces résolutions, plusieurs bitrates ont été utilisés:"
#: ../../../developer/choosing-crf-value-for-encoder.md:21
msgid "300 Kbit/s (Jami low value)"
msgstr "300 Kbit/s (valeur minimale de la puissance)"
#: ../../../developer/choosing-crf-value-for-encoder.md:22
msgid "1.5 Mbit/s (Intermediate value)"
msgstr "1,5 Mbit/s (valeur intermédiaire)"
#: ../../../developer/choosing-crf-value-for-encoder.md:23
msgid "6 Mbit/s (High value)"
msgstr "6 Mbit/s (valeur élevée)"
#: ../../../developer/choosing-crf-value-for-encoder.md:25
msgid ""
"The graphs show the evolution of the bitrate with the file being tested "
"(resolution and specific set bitrate)."
msgstr ""
"Les graphiques montrent l'évolution du bitrate avec le fichier testé "
"(résolution et bitrate spécifique)."
#: ../../../developer/choosing-crf-value-for-encoder.md:27
msgid "A visual comparison (side by side) was made for each test."
msgstr "Une comparaison visuelle ( côte à côte) a été faite pour chaque test."
#: ../../../developer/choosing-crf-value-for-encoder.md:29
msgid ""
"Thanks to this test we can estimate the bitrate that will be emitted in Jami"
" according to the chosen parameters. We also have an overview of the visual "
"quality."
msgstr ""
"Grâce à ce test, nous pouvons estimer le bitrate qui sera émis à Jami en "
"fonction des paramètres choisis."
#: ../../../developer/choosing-crf-value-for-encoder.md:33
msgid ""
"1080p / 300 kbit/s / CRF28 ![image](images/choosing-crf-1080p-300kbps-"
"crf28.png) 1080p / 300 kbit/s / CRF38 ![image](images/choosing-"
"crf-1080p-300kbps-crf38.png)"
msgstr ""
"1080p / 300 kbit/s / CRF28! [image](images/choosing-crf-1080p-300kbps-"
"crf28.png) 1080p / 300 kbit/s / CRF38! [image](images/choosing-"
"crf-1080p-300kbps-crf38.png)"
#: ../../../developer/choosing-crf-value-for-encoder.md:33
#: ../../../developer/choosing-crf-value-for-encoder.md:40
#: ../../../developer/choosing-crf-value-for-encoder.md:47
#: ../../../developer/choosing-crf-value-for-encoder.md:56
#: ../../../developer/choosing-crf-value-for-encoder.md:62
#: ../../../developer/choosing-crf-value-for-encoder.md:69
#: ../../../developer/choosing-crf-value-for-encoder.md:78
#: ../../../developer/choosing-crf-value-for-encoder.md:85
#: ../../../developer/choosing-crf-value-for-encoder.md:92
msgid "image"
msgstr "image"
#: ../../../developer/choosing-crf-value-for-encoder.md:38
msgid "Visual comparison (CRF28 a gauche / CRF38 a droite)"
msgstr "Comparaison visuelle (CRF28 à gauche / CRF38 à droite)"
#: ../../../developer/choosing-crf-value-for-encoder.md:40
msgid ""
"1080p / 1.5 Mbps / CRF22 ![image](images/choosing-crf-1080p-1.5mbps-"
"crf22.png) 1080p / 1.5 Mbit/s / CRF30 ![image](images/choosing-"
"crf-1080p-1.5mbps-crf30.png)"
msgstr ""
"1080p / 1,5 Mbps / CRF22! [image](images/choosing-crf-1080p-1.5mbps-"
"crf22.png) 1080p / 1,5 Mbit/s / CRF30! [image](images/choosing-"
"crf-1080p-1.5mbps-crf30.png)"
#: ../../../developer/choosing-crf-value-for-encoder.md:45
#: ../../../developer/choosing-crf-value-for-encoder.md:67
#: ../../../developer/choosing-crf-value-for-encoder.md:90
msgid "Visual comparison (CRF22 left / CRF30 right)"
msgstr "Comparaison visuelle (CRF22 à gauche / CRF30 à droite)"
#: ../../../developer/choosing-crf-value-for-encoder.md:47
msgid ""
"1080p / 6 Mbps / CRF17 ![image](images/choosing-crf-1080p-6mbps-crf17.png) "
"1080p / 6 Mbit/s / CRF23 ![image](images/choosing-crf-1080p-6mbps-crf23.png)"
msgstr ""
"1080p / 6 Mbps / CRF17! [image](images/choosing-crf-1080p-6mbps-crf17.png) "
"1080p / 6 Mbit/s / CRF23! [image](images/choosing-crf-1080p-6mbps-crf23.png)"
#: ../../../developer/choosing-crf-value-for-encoder.md:52
msgid "Visual comparison (CRF17 on the left / CRF23 on the right)"
msgstr "Comparaison visuelle (CRF17 à gauche / CRF23 à droite)"
#: ../../../developer/choosing-crf-value-for-encoder.md:56
msgid ""
"720p / 300 kbps / CRF28 ![image](images/choosing-crf-720p-300kbps-crf28.png)"
" 720p / 300 kbit/s / CRF38 ![image](images/choosing-crf-720p-300kbps-"
"crf38.png) Visual comparison (CRF28 left / CRF38 right)"
msgstr ""
"720p / 300 kbps / CRF28! [image](images/choosing-crf-720p-300kbps-crf28.png)"
" 720p / 300 kbit/s / CRF38! [image](images/choosing-crf-720p-300kbps-"
"crf38.png) Comparaison visuelle (CRF28 à gauche / CRF38 à droite)"
#: ../../../developer/choosing-crf-value-for-encoder.md:62
msgid ""
"720p / 1.5 Mbps / CRF22 ![image](images/choosing-crf-720p-1.5mbps-crf22.png)"
" 720p / 1.5 Mbit/s / CRF30 (Test with reduced CRF) ![image](images/choosing-"
"crf-720p-1.5mbps-crf30.png)"
msgstr ""
"720p / 1,5 Mbps / CRF22! [image](images/choosing-crf-720p-1.5mbps-crf22.png)"
" 720p / 1.5 Mbit/s / CRF30 (Test avec CRF réduit)! [image](images/choosing-"
"crf-720p-1.5mbps-crf30.png)"
#: ../../../developer/choosing-crf-value-for-encoder.md:69
msgid ""
"720p / 6 Mbps / CRF17 ![image](images/choosing-crf-720p-6mbps-crf17.png) "
"720p / 6 Mbit/s / CRF23 ![image](images/choosing-crf-720p-6mbps-crf23.png)"
msgstr ""
"720p / 6 Mbps / CRF17! [image](images/choosing-crf-720p-6mbps-crf17.png) "
"720p / 6 Mbit/s / CRF23! [image](images/choosing-crf-720p-6mbps-crf23.png)"
#: ../../../developer/choosing-crf-value-for-encoder.md:74
#: ../../../developer/choosing-crf-value-for-encoder.md:97
msgid "Visual comparison (CRF17 left / CRF23 right)"
msgstr "Comparaison visuelle (CRF17 à gauche / CRF23 à droite)"
#: ../../../developer/choosing-crf-value-for-encoder.md:78
msgid ""
"436p / 300 kbps / CRF28 ![image](images/choosing-crf-436p-300kbps-crf28.png)"
" 436p / 300 kbit/s / CRF38 ![image](images/choosing-crf-436p-300kbps-"
"crf38.png)"
msgstr ""
"436p / 300 kbps / CRF28! [image](images/choosing-crf-436p-300kbps-crf28.png)"
" 436p / 300 kbit/s / CRF38! [image](images/choosing-crf-436p-300kbps-"
"crf38.png)"
#: ../../../developer/choosing-crf-value-for-encoder.md:83
msgid "Visual comparison (CRF28 left / CRF38 right)"
msgstr "Comparaison visuelle (CRF28 à gauche / CRF38 à droite)"
#: ../../../developer/choosing-crf-value-for-encoder.md:85
msgid ""
"436p / 1.5 Mbps / CRF22 ![image](images/choosing-crf-436p-1.5mbps-crf22.png)"
" 436p / 1.5 Mbit/s / CRF30 ![image](images/choosing-crf-436p-1.5mbps-"
"crf30.png)"
msgstr ""
"436p / 1,5 Mbps / CRF22! [image](images/choosing-crf-436p-1.5mbps-crf22.png)"
" 436p / 1.5 Mbit/s / CRF30! [image](images/choosing-crf-436p-1.5mbps-"
"crf30.png)"
#: ../../../developer/choosing-crf-value-for-encoder.md:92
msgid ""
"436p / 6 Mbps / CRF17 ![image](images/choosing-crf-436p-6mbps-crf17.png) "
"436p / 6 Mbit/s / CRF23 ![image](images/choosing-crf-436p-6mbps-crf23.png)"
msgstr ""
"436p / 6 Mbps / CRF17! [image](images/choosing-crf-436p-6mbps-crf17.png) "
"436p / 6 Mbit/s / CRF23! [image](images/choosing-crf-436p-6mbps-crf23.png)"
#: ../../../developer/coding-style.md:1
msgid "Coding style"
msgstr "Style de codage"
#: ../../../developer/coding-style.md:4
msgid ""
"**This page gives rules and/or guidances to all developers that want to "
"integrate some code to Jami**"
msgstr ""
"**Cette page donne des règles et/ou des conseils à tous les développeurs qui"
" veulent intégrer du code à Jami**."
#: ../../../developer/coding-style.md:7
msgid ""
"C++ format rules are defined by this clang-format file: "
"https://git.jami.net/savoirfairelinux/jami-daemon/blob/master/.clang-format"
msgstr ""
"Les règles du format C++ sont définies par ce fichier de format clang: "
"https://git.jami.net/savoirfairelinux/jami-daemon/blob/master/.clang-format"
#: ../../../developer/coding-style.md:10
msgid ""
"QML format rules are defined by the source code used to build the qmlformat "
"executable: "
"https://codebrowser.dev/qt6/qtdeclarative/tools/qmlformat/qmlformat.cpp.html"
msgstr ""
"Les règles de formatage QML sont définies par le code source utilisé pour "
"construire l'exécutable qmlformat : "
"https://codebrowser.dev/qt6/qtdeclarative/tools/qmlformat/qmlformat.cpp.html"
#: ../../../developer/coding-style.md:13
msgid ""
"All developers are recommended to format their code using the script in "
"`jami-project/scripts/format.sh`. This is done automatically (as a pre-"
"commit hook) when using `./build.py --init --qt=<path-to-qt>`."
msgstr ""
"Il est recommandé à tous les développeurs de formater leur code en utilisant"
" le script dans `jami-project/scripts/format.sh`. Ceci est fait "
"automatiquement (comme un hook pre-commit) quand on utilise `./build.py "
"--init --qt=<path-to-qt>`."
#: ../../../developer/conference-protocol.md:1
msgid "Conference protocol"
msgstr "Protocole de conférence"
#: ../../../developer/conference-protocol.md:3
msgid ""
"This document aims to describe the evolutions we will do for managing "
"conferences (audio/video). The goal is to improve the current implementation"
" which simply merges SIP calls and provide a grid view, to a view where "
"participants are listed, can be muted independently, or the video layout "
"changed (to show only one participant)"
msgstr ""
"Ce document vise à décrire les évolutions que nous allons faire pour la "
"gestion de conférences (audio/vidéo). L'objectif est d'améliorer la mise en "
"œuvre actuelle qui fusionne simplement les appels SIP et fournit une vue de "
"grille, pour une vue où les participants sont répertoriés, peuvent être "
"mutés indépendamment, ou la mise en page vidéo modifiée (pour montrer un "
"seul participant)"
#: ../../../developer/conference-protocol.md:7
msgid "Host: Is the user who mix the audio/video streams for the others"
msgstr ""
"L'hôte: est l'utilisateur qui mélange les flux audio/vidéo pour les autres"
#: ../../../developer/conference-protocol.md:8
msgid "Participant: Every user in the conference, even the host"
msgstr "Participant: chaque utilisateur de la conférence, même l'animateur"
#: ../../../developer/conference-protocol.md:10
msgid "Disclaimer"
msgstr "Déclame de responsabilité"
#: ../../../developer/conference-protocol.md:12
msgid ""
"This document only describes the first steps for now. This means the "
"identification of participants and position in the video mixer sent to all "
"participants."
msgstr ""
"Ce document ne décrit que les premières étapes pour le moment. Cela signifie"
" l'identification des participants et la position dans le mixateur vidéo "
"envoyé à tous les participants."
#: ../../../developer/conference-protocol.md:14
msgid "Possible layouts"
msgstr "Des dispositions possibles"
#: ../../../developer/conference-protocol.md:16
msgid "GRID: Every member is shown with the same height/width"
msgstr "GRID: chaque membre est affiché avec la même hauteur/largeur"
#: ../../../developer/conference-protocol.md:17
msgid ""
"ONE_BIG_WITH_SMALL: One member is zoomed and the other preview is shown"
msgstr ""
"ONE_BIG_WITH_SMALL: Un membre est zoomé et l'autre prévisualisation est "
"affichée"
#: ../../../developer/conference-protocol.md:18
msgid "ONE_BIG: One member take the full screen rendered"
msgstr "ONE_BIG: Un membre prend l'écran complet rendu"
#: ../../../developer/conference-protocol.md:20
msgid ""
"Two new methods are available to manage the conference Layout in "
"CallManager:"
msgstr ""
"Deux nouvelles méthodes sont disponibles pour gérer la configuration de la "
"conférence dans CallManager:"
#: ../../../developer/conference-protocol.md:38
#: ../../../developer/conference-protocol.md:95 ../../../developer/drt.rst:120
#: ../../../developer/swarm.md:493
msgid "Implementation"
msgstr "Mise en œuvre"
#: ../../../developer/conference-protocol.md:40
msgid ""
"The implementation is pretty straightforward. Everything is managed by "
"`conference.cpp` (to link participant to sources) and `video_mixer.cpp` (to "
"render the wanted layout)."
msgstr ""
"La mise en œuvre est assez simple. Tout est géré par `conference.cpp` (pour "
"relier le participant aux sources) et `video_mixer.cpp` (pour rendre la mise"
" en page souhaitée)."
#: ../../../developer/conference-protocol.md:43
msgid "Syncing Conferences Informations"
msgstr "Synchronisation des conférences"
#: ../../../developer/conference-protocol.md:45
msgid ""
"Note: Actually, the word participant is used for callId mixed in a "
"conference. This can lead at first to some problems for the API and must be "
"fixed in the future"
msgstr ""
"Remarque: En fait, le mot participant est utilisé pour l'appel mixé dans une"
" conférence. Cela peut conduire au début à certains problèmes pour l'API et "
"doit être corrigé à l'avenir"
#: ../../../developer/conference-protocol.md:47
msgid ""
"The goal is to notify all participants of the metadata of the rendered "
"video. This means what participant is in the conference and where the video "
"is located."
msgstr ""
"L'objectif est d'informer tous les participants des métadonnées de la vidéo "
"rendue. Cela signifie qui est le participant à la conférence et où se trouve"
" la vidéo."
#: ../../../developer/conference-protocol.md:49
msgid ""
"If a participant is itself a conference, its incoming layout info should be "
"merged when sent to other participants. Layout info must not be merged when "
"sent back to a conference."
msgstr ""
"Si un participant est lui-même une conférence, ses informations de mise en "
"page entrantes doivent être fusionnées lorsqu'elles sont envoyées à d'autres"
" participants."
#: ../../../developer/conference-protocol.md:51
msgid "Layout Info"
msgstr "Informations sur la mise en page"
#: ../../../developer/conference-protocol.md:53
msgid ""
"The Layout is stored as a VectorMapStringString for clients and internally "
"with a vector<ParticipantInfo> with the following format:"
msgstr ""
"Le Layout est stocké en tant que VectorMapStringString pour les clients et "
"en interne avec un vecteur<ParticipantInfo> avec le format suivant:"
#: ../../../developer/conference-protocol.md:67
msgid "Possible keys are:"
msgstr "Les clés possibles sont:"
#: ../../../developer/conference-protocol.md:69
msgid "uri = account's uri"
msgstr "uri = le compte de l'urie"
#: ../../../developer/conference-protocol.md:70
msgid "device = device's id"
msgstr "le dispositif = le numéro d'identification du dispositif"
#: ../../../developer/conference-protocol.md:71
msgid "media = media's id"
msgstr "médias = identité du médias"
#: ../../../developer/conference-protocol.md:72
msgid "active = if the participant is active"
msgstr "active = si le participant est actif"
#: ../../../developer/conference-protocol.md:73
msgid "x = position (x) in the video"
msgstr "x = position (x) dans la vidéo"
#: ../../../developer/conference-protocol.md:74
msgid "y = position (y) in the video"
msgstr "y = position (y) dans la vidéo"
#: ../../../developer/conference-protocol.md:75
msgid "w = size (width) in the video"
msgstr "w = taille (largeur) dans la vidéo"
#: ../../../developer/conference-protocol.md:76
msgid "h = size (height) in the video"
msgstr "h = taille (hauteur) dans la vidéo"
#: ../../../developer/conference-protocol.md:77
msgid "videoMuted = if the video is muted"
msgstr "vidéo éteinte = si la vidéo est éteinte"
#: ../../../developer/conference-protocol.md:78
msgid "audioLocalMuted = if the audio is locally muted"
msgstr "audioLocalMuted = si l'audio est localment muté"
#: ../../../developer/conference-protocol.md:79
msgid "audioModeratorMuted = if the audio is muted by moderators"
msgstr "audioModeratorMuted = si l'audio est muté par les modérateurs"
#: ../../../developer/conference-protocol.md:80
msgid "isModerator = if it's a moderator"
msgstr "estModerateur = si c'est un modérateur"
#: ../../../developer/conference-protocol.md:81
msgid "handRaised = if the hand is raised"
msgstr "mainlevée = si la main est levée"
#: ../../../developer/conference-protocol.md:82
msgid "voiceActivity = if the stream has voice activity"
msgstr "voixActivité = si le flux a une activité vocale"
#: ../../../developer/conference-protocol.md:83
msgid "recording = if the peer is recording the conference"
msgstr "enregistrement = si le paire enregistre la conférence"
#: ../../../developer/conference-protocol.md:85
msgid "New API"
msgstr "Nouveau API"
#: ../../../developer/conference-protocol.md:87
msgid ""
"A new method (in CallManager) and a new signal to respectively get current "
"conference infos and updates are available:"
msgstr ""
"Une nouvelle méthode (dans CallManager) et un nouveau signal permettant "
"respectivement d'obtenir les informations et les mises à jour actuelles de "
"la conférence sont disponibles:"
#: ../../../developer/conference-protocol.md:97
msgid ""
"The `Conference` Object (which only exists if we mix calls, this means that "
"we are the master) manages the information for the whole conference, based "
"on the LayoutInfos of each `Call` object. The getConferenceInfos will "
"retrieve info directly from this object."
msgstr ""
"L'objet `Conference` (qui n'existe que si nous mélangons les appels, ce qui "
"signifie que nous sommes le maître) gère les informations pour l'ensemble de"
" la conférence, en fonction des informations de mise en page de chaque objet"
" `Call`."
#: ../../../developer/conference-protocol.md:99
msgid ""
"So, every `Call` object now has a LayoutInfo and if updated, ask the "
"`Conference` object to updates its info."
msgstr ""
"Ainsi, chaque objet `Call` dispose désormais d'une LayoutInfo et s'il est "
"mis à jour, demandez à l'objet `Conference` de mettre à jour ses "
"informations."
#: ../../../developer/conference-protocol.md:101
msgid ""
"The master of a conference sends its info via the SIP channel as a message "
"with the following MIME type: `application/confInfo+json`"
msgstr ""
"Le maître d'une conférence envoie ses informations via le canal SIP sous "
"forme de message avec le type MIME suivant: `application/confInfo+json`"
#: ../../../developer/conference-protocol.md:104
msgid ""
"So, if a call receives some confInfo, we know that this call is a member of "
"a conference."
msgstr ""
"Donc, si un appel reçoit des informations confidentielles, nous savons que "
"cet appel est un membre d'une conférence."
#: ../../../developer/conference-protocol.md:106
msgid ""
"To summarize, `Call` manages received layouts, `Conference`-managed sent "
"layouts."
msgstr ""
"En résumé, `Call` gère les mises en page reçues, `Conférence`-géré les mises"
" en page envoyées."
#: ../../../developer/conference-protocol.md:108
msgid "Changing the state of the conference"
msgstr "Modifier l'état de la conférence"
#: ../../../developer/conference-protocol.md:110
msgid ""
"To change the state of the conference, participants needs to send orders "
"that the host will handle."
msgstr ""
"Pour changer l'état de la conférence, les participants doivent envoyer des "
"ordres que l'hôte gérera."
#: ../../../developer/conference-protocol.md:112
msgid "The protocol have the following needs:"
msgstr "Le protocole a les besoins suivants:"
#: ../../../developer/conference-protocol.md:114
msgid ""
"It should handle orders at multiple levels. In fact for a conference the is "
"3 levels to define a participant:"
msgstr "Il doit gérer les commandes à plusieurs niveaux."
#: ../../../developer/conference-protocol.md:115
msgid "The account which is the identity of the participant"
msgstr "Le compte qui constitue l'identité du participant"
#: ../../../developer/conference-protocol.md:116
msgid "Devices, because each account can join via multiple devices"
msgstr ""
"Dispositifs, car chaque compte peut se connecter via plusieurs appareils"
#: ../../../developer/conference-protocol.md:117
msgid ""
"Medias, because there can be multiple videos by devices (eg 1 camera and 1 "
"screen sharing)"
msgstr ""
"Medias, car il peut y avoir plusieurs vidéos par appareil (par exemple 1 "
"caméra et 1 partage d'écran)"
#: ../../../developer/conference-protocol.md:119
msgid ""
"To save bandwidth, clients should be able to send multiple orders at once."
msgstr ""
"Pour économiser de la bande passante, les clients devraient pouvoir envoyer "
"plusieurs commandes à la fois."
#: ../../../developer/conference-protocol.md:121
msgid "General actions"
msgstr "Actions générales"
#: ../../../developer/conference-protocol.md:123
msgid ""
"To change a layout, the moderator can send a payload with "
"\"application/confOrder+json\" as type: where **0** is a grid, **1** is one "
"user in big, others in small, **2** is one in big"
msgstr ""
"Pour modifier une mise en page, le modérateur peut envoyer une charge utile "
"avec \"application/confOrder+json\" comme type: où **0** est une grille, "
"**1** est un utilisateur en grand, d'autres en petit, **2** est un en grand"
#: ../../../developer/conference-protocol.md:126
msgid "Account's actions"
msgstr "Les actions du compte"
#: ../../../developer/conference-protocol.md:128
msgid ""
"For now, there is no action supported, however, in the future `moderator: "
"true/false` should be handled to change a moderator."
msgstr ""
"Pour l'instant, aucune action n'est soutenue, cependant, dans l'avenir "
"`modérateur: true/false ` doit être géré pour changer un modérateur."
#: ../../../developer/conference-protocol.md:130
msgid "Device's actions"
msgstr "Les actions de l'appareil"
#: ../../../developer/conference-protocol.md:132
msgid ""
"`hangup: true` to hangup a device from the conference (only moderators)"
msgstr ""
"`hangup: true` pour accrocher un appareil de la conférence (uniquement les "
"modérateurs)"
#: ../../../developer/conference-protocol.md:133
msgid ""
"`raisehand: true/false` to change the raise hand's status. Only doable by "
"the device itself, else dropped."
msgstr "`raisehand: vrai/false ` pour modifier le statut de la main levée."
#: ../../../developer/conference-protocol.md:135
msgid "Media's actions"
msgstr "Les actions des médias"
#: ../../../developer/conference-protocol.md:137
msgid ""
"`muteAudio` only doable by moderators to mute the audio of a participant"
msgstr ""
"`muteAudio` seulement possible par les modérateurs pour faire taire l'audio "
"d'un participant"
#: ../../../developer/conference-protocol.md:138
msgid "`muteVideo` not supported yet."
msgstr "`muteVideo` n'est pas encore pris en charge."
#: ../../../developer/conference-protocol.md:139
msgid "`active` to mark the media as active."
msgstr "`active` pour marquer les médias comme actifs."
#: ../../../developer/conference-protocol.md:140
msgid ""
"`voiceActivity` to indiciate a media stream's voice activity status (only "
"relevant for audio)"
msgstr ""
"`voiceActivité ` pour indiquer le statut de l'activité vocale d'un flux "
"multimédia (uniquement pertinent pour l'audio)"
#: ../../../developer/conference-protocol.md:142
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "Example"
msgstr "Exemple"
#: ../../../developer/conference-protocol.md:144
msgid "So, the `application/confOrder+json` will contains:"
msgstr "Ainsi, la demande/confOrder+json` contiendra:"
#: ../../../developer/conference-protocol.md:169
msgid ""
"Note: the type of the media should be included in conferences informations "
"and can be used for the client to improve display (e.g. do not crop screen "
"sharing)"
msgstr ""
"Note: le type de support doit être inclus dans les informations de "
"conférence et peut être utilisé pour améliorer l'affichage du client (par "
"exemple, ne pas supprimer le partage d'écran)"
#: ../../../developer/conference-protocol.md:172
msgid "Controlling moderators"
msgstr "Contrôle des modérateurs"
#: ../../../developer/conference-protocol.md:174
msgid "There is actually 3 possibilities:"
msgstr "Il y a en fait 3 possibilités:"
#: ../../../developer/conference-protocol.md:176
msgid ""
"Changing account's config to add a list of moderators (In the config.yml "
"(`defaultModerators` can contains a list of default moderators)"
msgstr ""
"Configuration du compte changeur pour ajouter une liste de modérateurs (dans"
" la config.yml (`defaultModerators` peut contenir une liste de modérateurs "
"par défaut)"
#: ../../../developer/conference-protocol.md:177
msgid ""
"If `localModeratorsEnabled` is true, all accounts of the device will be "
"moderators"
msgstr ""
"Si `localModeratorsEnabled` est vrai, tous les comptes de l'appareil seront "
"des modérateurs"
#: ../../../developer/conference-protocol.md:178
msgid ""
"If `allModeratorsEnabled` is true, anybody in the conference will be a "
"moderator"
msgstr ""
"Si `allModeratorsEnabled` est vrai, toute personne à la conférence sera un "
"modérateur"
#: ../../../developer/conference-protocol.md:183
msgid "Separate streams to allow more controls?"
msgstr "Des courants séparés pour permettre plus de contrôle?"
#: ../../../developer/conference-protocol.md:185
msgid "Notes/Comments"
msgstr "Notes/commentaires"
#: ../../../developer/conference-protocol.md:186
msgid ""
"It's likely that the protocol will evolve for future needs. I believe it's "
"best if we have a \"version\" field. The older version will be recognized if"
" this field is missing."
msgstr ""
"Il est probable que le protocole évoluera pour les besoins futurs. Je pense "
"qu'il est préférable d'avoir un champ \"version\". La version ancienne sera "
"reconnue si ce champ manque."
#: ../../../developer/connection-manager.md:1
msgid "The connection manager"
msgstr "Le gestionnaire de connexion"
#: ../../../developer/connection-manager.md:4
#: ../../../developer/file-transfer.md:49 ../../../developer/introduction.md:1
#: ../../../developer/location-sharing.md:42
msgid "Introduction"
msgstr "Introduction"
#: ../../../developer/connection-manager.md:6
msgid ""
"The connection manager is the first piece of the group chat features. This "
"class manages connections to peers and offer to the user multiplexed sockets"
" to devices they want to connect. For example, if Alice wants to be "
"connected to one of Bob's device to transfer 2 files, she will ask the "
"ConnectionManager to open 2 channels (one per file) to Bob. This will give:"
msgstr ""
"Le gestionnaire de connexion est la première partie des fonctionnalités de "
"chat de groupe. Cette classe gère les connexions avec des pairs et offre à "
"l'utilisateur des prises multiplexées à des appareils qu'il souhaite "
"connecter. Par exemple, si Alice veut être connectée à l'un des appareils de"
" Bob pour transférer 2 fichiers, elle demandera au gestionnaire de connexion"
" d'ouvrir 2 canaux (un par fichier) à Bob. Cela donnera:"
#: ../../../developer/connection-manager.md:24
msgid ""
"Behind that, the ConnectionManager will first connect to Bob's device via "
"the DHT (via ICE) and setup a TLS Socket. Then, it will ask for a channel, "
"and when the channel is ready, inform Alice via a callback. For the second "
"file, it will use the first socket and will just open a new channel (only "
"needs 2 TLS packet, so it's fast)"
msgstr ""
"Après cela, le ConnectionManager se connectera d'abord au dispositif de Bob "
"via le DHT (via ICE) et configurera une prise TLS. Ensuite, il demandera un "
"canal, et lorsque le canal sera prêt, informez Alice via un appel-retour. "
"Pour le deuxième fichier, il utilisera la première prise et ouvrira "
"simplement un nouveau canal (il ne nécessite que 2 paquets TLS, donc c'est "
"rapide)"
#: ../../../developer/connection-manager.md:26
msgid "DHT side"
msgstr "DHT côté"
#: ../../../developer/connection-manager.md:28
msgid ""
"It's the same as {doc}`calls`, see **Exchange ICE candidates**, **ICE "
"negotiation**, **Encrypt the control socket** but only in TCP."
msgstr ""
"C'est la même chose que {doc}`call`, voir **Exchange ICE candidats**, **ICE "
"négociation**, **Encrypt le socket de contrôle** mais seulement en TCP."
#: ../../../developer/connection-manager.md:30
msgid ""
"However, when a side receives a new ICE request, the callback set by ` void "
"onICERequest(onICERequestCallback&& cb);` is triggered."
msgstr ""
"Toutefois, lorsqu'une partie reçoit une nouvelle demande ICE, le retrait de "
"l'appel indiqué par ` nul onICERequest(onICERequestCallback&&& cb);` est "
"déclenché."
#: ../../../developer/connection-manager.md:32
msgid "Negotiating a new channel"
msgstr "La négociation d'une nouvelle chaîne"
#: ../../../developer/connection-manager.md:34
msgid ""
"A channel is defined by an id (unique) and a uri (not unique). For example "
"(1, 'git://*')"
msgstr "Un canal est défini par un id (unique) et un uri (non unique)."
#: ../../../developer/connection-manager.md:36
msgid ""
"When ready, the ConnectionManager considers that the channel 0 exists. This "
"channel is called the *CONTROL* channel and is used to ask for new channels."
msgstr ""
"Lorsque le ConnectionManager est prêt, il considère que le canal 0 existe. "
"Ce canal est appelé le canal *CONTROL* et est utilisé pour demander de "
"nouveaux canaux."
#: ../../../developer/connection-manager.md:38
msgid "The protocol used is pretty simple and looks like the RTP protocol:"
msgstr "Le protocole utilisé est assez simple et ressemble au protocole RTP:"
#: ../../../developer/connection-manager.md:40
msgid "16 bits are used to store the length of the body."
msgstr "16 bits sont utilisés pour stocker la longueur du corps."
#: ../../../developer/connection-manager.md:41
msgid "16 bits for the channel id (destination)"
msgstr "16 bits pour le canal id (destination)"
#: ../../../developer/connection-manager.md:42
msgid "body"
msgstr "corps"
#: ../../../developer/connection-manager.md:44
msgid "So all packets have a 32 bits len header."
msgstr "Donc tous les paquets ont un en-tête de 32 bits."
#: ../../../developer/connection-manager.md:46
msgid ""
"To ask for a new channel, the ConnectionManager will send a `ChannelRequest`"
" object (msgpack is used to serialize the struct) in the channel 0 to send "
"the id and the name of the new channel to the peer (with `isAnswer = "
"false`). The peer will call the callback given with ̀ void "
"onChannelRequest(ChannelRequestCallBack&& cb);` and will refuse or accept "
"the request. If accepted, the peer will answer with a ChannelRequest with "
"the same data (and ̀`isAnswer = true`) and then both peers callbacks will be"
" triggered to inform that the ChannelSock is usable."
msgstr ""
"Pour demander un nouveau canal, le ConnectionManager enverra un "
"`ChannelRequest` objet (msgpack est utilisé pour sérialiser le struct) dans "
"le canal 0 pour envoyer l'id et le nom du nouveau canal au paire (avec "
"`isAnswer = false`). Le paire appellera le callback donné avec ̀ void "
"surChannelRequest(ChannelRequestCallBack&&& cb);` et refusera ou acceptera "
"la demande. Si acceptée, le paire répondra avec un ChannelRequest avec les "
"mêmes données (et ̀`isAnswer = true`) et puis les deux pairs seront activés "
"pour informer que le ChannelSock est utilisable."
#: ../../../developer/connection-manager.md:48
msgid "Closing a channel"
msgstr "Fermeture d'un canal"
#: ../../../developer/connection-manager.md:50
msgid ""
"A *EOF* is transmitted for a channel if the length of the content is 0."
msgstr ""
"Une *EOF* est transmise pour un canal si la longueur du contenu est de 0."
#: ../../../developer/connection-manager.md:52
msgid "Structure of the connectionManager"
msgstr "Structure de la connexionGestionnaire"
#: ../../../developer/connection-manager.md:54
msgid "Ownership"
msgstr "Propriété"
#: ../../../developer/connection-manager.md:56
msgid ""
"A JamiAccount owns the ConnectionManager and have access to the "
"ChannelSocket objects (shared_ptr owned with the MultiplexedSocket."
msgstr ""
"Un compte Jami possède le ConnectionManager et a accès aux objets "
"ChannelSocket (shared_ptr appartenant au MultiplexedSocket."
#: ../../../developer/connection-manager.md:57
msgid "The ConnectionManager owns MultiplexedSockets and ICE objects"
msgstr "Le ConnectionManager possède des objets MultiplexedSockets et ICE"
#: ../../../developer/connection-manager.md:58
msgid ""
"MultiplexedSockets owns the TLS transport and the ChannelSocket objects"
msgstr ""
"MultiplexedSockets possède le transport TLS et les objets ChannelSocket"
#: ../../../developer/connection-manager.md:59
msgid "ChannelSocket owns the data buffers"
msgstr "ChannelSocket est propriétaire des tampons de données"
#: ../../../developer/connection-manager.md:61
msgid "Roles"
msgstr "Rôle"
#: ../../../developer/connection-manager.md:63
msgid "ConnectionManager is used to manage connections to peers."
msgstr ""
"ConnectionManager est utilisé pour gérer les connexions avec les pairs."
#: ../../../developer/connection-manager.md:64
msgid ""
"MultiplexedSockets are used to send data over the TLSSocket, read the "
"incoming packets and manage channels."
msgstr ""
"MultiplexedSockets sont utilisés pour envoyer des données sur le TLSSocket, "
"lire les paquets entrants et gérer les canaux."
#: ../../../developer/connection-manager.md:65
msgid "ChannelSockets are used by the client to interact with the other peer."
msgstr ""
"ChannelSockets est utilisé par le client pour interagir avec l'autre paire."
#: ../../../developer/connection-manager.md:67 ../../../developer/swarm.md:620
msgid "Usage"
msgstr "Utilisation"
#: ../../../developer/connection-manager.md:69
msgid ""
"Scenarios are described in the corresponding unit tests "
"(`test/unitTest/connectionManager/connectionManager.cpp`)"
msgstr ""
"Les scénarios sont décrits dans les tests unitaires correspondants "
"(`test/unitTest/connectionManager/connectionManager.cpp`)"
#: ../../../developer/contact-management.md:1
msgid "Contact management"
msgstr "Gestion des contacts"
#: ../../../developer/contact-management.md:4
msgid ""
"This section will present how to find and add a contact from the DHT to the "
"client. The usage of a name server will not be explained here. If you'd "
"like more details about that, please read {doc}`name-server-protocol`."
msgstr ""
"Cette section présentera comment trouver et ajouter un contact du DHT au "
"client. L'utilisation d'un serveur de noms ne sera pas expliquée ici. Si "
"vous souhaitez plus de détails à ce sujet, veuillez lire {doc}`name-server-"
"protocol`."
#: ../../../developer/contact-management.md:6
msgid "Presence on the network"
msgstr "Présence sur le réseau"
#: ../../../developer/contact-management.md:8
msgid "Announce the presence on the DHT"
msgstr "Annoncez la présence sur le DHT"
#: ../../../developer/contact-management.md:10
msgid ""
"The presence is pretty simple to announce on the DHT. In fact, it's just a "
"value containing the device hash (see the previous section, {doc}`account-"
"management`) on the hash corresponding to the fingerprint of the key. So, if"
" we have the account `bf5f1e21d3eb2c1246946aa49d5dcf3e5b9cb1b9` with the "
"device `62fbdff0ce86f368c7d3c2682539e5ba9e06404f`, the following defined "
"value will be sent over the DHT:"
msgstr ""
"La présence est assez simple à annoncer sur le DHT. En fait, c'est juste une"
" valeur contenant le hash du dispositif (voir la section précédente, "
"{doc}`account-management`) sur le hash correspondant à l'empreinte digitale "
"de la clé. Donc, si nous avons le compte "
"`bf5f1e21d3eb2c1246946aa49d5dcf3e5b9cb1b9` avec le dispositif "
"`62fbdff0ce86f368c7d3c2682539e5ba9e06404f`, la valeur définie suivante sera "
"envoyée sur le DHT:"
#: ../../../developer/contact-management.md:29
msgid ""
"(This value can be put with `dht_.put(h, VALUE, dht::DoneCallback{}, {}, "
"true);`, as a permanent put). If the device is announced, the device is "
"present. For now, there is no way to delete or edit a value on the DHT (this"
" will come when OpenDHT will supports ECC). So, the presence always have a "
"delay for now (mean delay: expire-time/2, so 2min30 for now)."
msgstr ""
"(Cette valeur peut être mise avec `dht_.put(h, VALUE, dht::DoneCallback{}, "
"{}, true);`, comme une mise permanente). Si l'appareil est annoncé, "
"l'appareil est présent. Pour l'instant, il n'y a aucun moyen de supprimer ou"
" de modifier une valeur sur le DHT (cela arrivera lorsque OpenDHT prendra en"
" charge ECC)."
#: ../../../developer/contact-management.md:31
msgid "Get if a contact is present"
msgstr "Appelez si un contact est présent"
#: ../../../developer/contact-management.md:33
msgid ""
"Now our presence on the network, it's time to get if somebody is present on "
"the DHT. With the previous section, it's easy to do the reverse process. To "
"know if somebody is present on the DHT (ex: "
"`bf5f1e21d3eb2c1246946aa49d5dcf3e5b9cb1b9`), we have to get value at "
"`bf5f1e21d3eb2c1246946aa49d5dcf3e5b9cb1b9` and retrieve the "
"`DeviceAnnouncement` on this hash. The related code in the ring daemon is in"
" `ringaccount.cpp`:"
msgstr ""
"Maintenant, notre présence sur le réseau, il est temps de savoir si "
"quelqu'un est présent sur le DHT. Avec la section précédente, il est facile "
"de faire le processus inverse. Pour savoir si quelqu'un est présent sur le "
"DHT (ex: `bf5f1e21d3eb2c1246946aa49d5dcf3e5b9c1b9`), nous devons obtenir la "
"valeur à `bf5f1e21d3eb2c1246946aa49d5dcf3e5b9cb1b9` et récupérer le "
"`DeviceAnnonce ` sur ce hash. Le code connexe dans le daemon ring est dans "
"`ccount.cpp`:"
#: ../../../developer/contact-management.md:66
msgid "And that's all."
msgstr "- C'est tout."
#: ../../../developer/contact-management.md:68
msgid "Client perspective"
msgstr "Perspective Client"
#: ../../../developer/contact-management.md:139
msgid ""
"Are the main APIs for clients. `subscribeBuddy` will listen on the DHT to "
"detect presence changes and `newBuddyNotification` will be sent whenever a "
"new status is detected:"
msgstr ""
"sont les principales API pour les clients. `subscribeBuddy` écoutera la DHT "
"pour détecter les changements de présence et `newBuddyNotification` sera "
"envoyé chaque fois qu'un nouveau statut est détecté :"
#: ../../../developer/contact-management.md:140
msgid ""
"The status sent to the client is now 0=offline (no device found on the DHT),"
" 1=dht_presence (at least a device is found on the DHT), 2=connected (with a"
" TCP + SIP channel, so ready to exchange data)."
msgstr ""
"Le statut envoyé au client est maintenant 0=offline (aucun appareil trouvé "
"dans la DHT), 1=dht_presence (au moins un appareil est trouvé dans la DHT), "
"2=connected (avec un canal TCP + SIP, donc prêt à échanger des données)."
#: ../../../developer/contact-management.md:141
msgid ""
"`lineStatus` will contain any custom status sent by the peer (e.g. *Lunch "
"Time!*)"
msgstr ""
"`lineStatus` contiendra tout statut personnalisé envoyé par le pair (par "
"exemple *Lunch Time!*)"
#: ../../../developer/contact-management.md:143
msgid ""
"`publish` is used for publishing a custom note (`status` is ignored for Jami"
" accounts, note will contain the custom status)."
msgstr ""
"`publish` est utilisé pour publier une note personnalisée (`status` est "
"ignoré pour les comptes Jami, la note contiendra le statut personnalisé)."
#: ../../../developer/contact-management.md:145
msgid "RFC3863 is used to send status over the SIP connection."
msgstr "RFC3863 est utilisé pour envoyer le statut sur la connexion SIP."
#: ../../../developer/contact-management.md:147
msgid "Pending request"
msgstr "Demande en attente"
#: ../../../developer/contact-management.md:149
msgid "Send a request"
msgstr "Envoyez une demande"
#: ../../../developer/contact-management.md:151
msgid "**TODO craft request**"
msgstr "** demande d'engin de TODO**"
#: ../../../developer/contact-management.md:153
msgid ""
"Finally, once the trust request is crafted, we can push the request to the "
"following hash: `InfoHash(\"inbox:\" + deviceId)`"
msgstr ""
"Enfin, une fois la demande de confiance formée, nous pouvons pousser la "
"demande vers le hash suivant: `InfoHash(\"inbox:\" + deviceId) `"
#: ../../../developer/contact-management.md:155
msgid "The following code is used in the daemon:"
msgstr "Le code suivant est utilisé dans le daemon:"
#: ../../../developer/contact-management.md:160
msgid "Receiving a request"
msgstr "Réception d'une demande"
#: ../../../developer/contact-management.md:164
msgid "(Accept/Block/Discard)"
msgstr "(Acceptation/blocage/démission)"
#: ../../../developer/contact-management.md:166
msgid "Daemon API"
msgstr "API du démon"
#: ../../../developer/contact-management.md:168
msgid ""
"All methods to follow the presence of a buddy is located in the "
"`PresenceManager` such as:"
msgstr ""
"Toutes les méthodes pour suivre la présence d'un ami se trouvent dans le "
"`PresenceManager` tels que:"
#: ../../../developer/contact-management.md:199
msgid ""
"All methods and signals used to manage trust requests and contacts are in "
"the `ConfigurationManager` such as:"
msgstr ""
"Toutes les méthodes et signaux utilisés pour gérer les demandes de confiance"
" et les contacts sont dans le `ConfigurationManager` tels que:"
#: ../../../developer/contact-management.md:291
msgid ""
"If you want some examples, these methods are used into `contactmodel.cpp` in"
" LRC."
msgstr ""
"Si vous voulez des exemples, ces méthodes sont utilisées dans "
"`contactmodel.cpp` dans LRC."
#: ../../../developer/debugging-tools.rst:2
msgid "Debugging Tools"
msgstr "Les outils de débogage"
#: ../../../developer/debugging-tools.rst:4
msgid ""
"There are several ways to debug Jami from a developer perspective, depending"
" on what you want to debug."
msgstr ""
"Il y a plusieurs façons de déboguer Jami d'un point de vue de développeur, "
"selon ce que vous voulez déboguer."
#: ../../../developer/debugging-tools.rst:7
msgid "Loggers"
msgstr "Les bûcherons"
#: ../../../developer/debugging-tools.rst:9
msgid ""
"The first way is to use runtime loggers. Starting `jami` with `-d` will "
"enable logging by the deamon (or the Troubleshoot section in the General "
"settings). Because Jami uses several libraries, we do not enable all logs by"
" default. But you can pass some environment variables to show it:"
msgstr ""
"La première façon est d'utiliser des logs de temps d'exécution. En "
"commençant `jami` avec `-d`, vous pourrez enregistrer par le démon (ou la "
"section Troubleshoot dans les paramètres généraux)."
#: ../../../developer/debugging-tools.rst:13
msgid "`SIPLOGLEVEL=5` for enabling logs from PJSIP."
msgstr "`SIPLOGLEVEL=5` pour permettre les journaux de PJSIP."
#: ../../../developer/debugging-tools.rst:14
msgid "`DHTLOGLEVEL=5` for enabling logs from OpenDHT."
msgstr "`DHTLOGLEVEL=5` pour permettre les journaux à partir d'OpenDHT."
#: ../../../developer/debugging-tools.rst:15
msgid "`AVLOGLEVEL=50` for enabling logs from ffmpeg."
msgstr "`AVLOGLEVEL=50` pour permettre les journaux à partir de ffmpeg."
#: ../../../developer/debugging-tools.rst:18
msgid "Debuggers"
msgstr "Débogageurs"
#: ../../../developer/debugging-tools.rst:20
msgid ""
"Generally your IDE has an embedded debuggger. Else, you can use `gdb` for "
"example to be able to add breakpoints, backtraces from crashes, print "
"internal structures, etc. You need to compile the project in *DEBUG* mode to"
" get debug symbols."
msgstr ""
"En général, votre IDE dispose d'un débogageur intégré. Sinon, vous pouvez "
"utiliser `gdb` par exemple pour pouvoir ajouter des points de rupture, des "
"retombées des crashs, imprimer des structures internes, etc. Vous devez "
"compiler le projet en mode *DEBUG* pour obtenir des symboles de débogage."
#: ../../../developer/debugging-tools.rst:24
msgid "Some useful commands:"
msgstr "Quelques commandes utiles:"
#: ../../../developer/debugging-tools.rst:26
msgid ""
"`b file.cpp:line` - Add a breakpoint (*file.cpp:line* can be replaced by a "
"symbol)"
msgstr ""
"`b file.cpp:line` - Ajouter un point de rupture (*file.cpp:line* peut être "
"remplacé par un symbole)"
#: ../../../developer/debugging-tools.rst:27
msgid "`t a a bt` - (thread apply all backtrace) to get all backtraces"
msgstr ""
"`t a a bt` - (fil appliquer tous les traces) pour obtenir tous les traces"
#: ../../../developer/debugging-tools.rst:28
msgid "`Ctrl + X / A` - pass in graphical view"
msgstr "`Ctrl + X / A` - passe dans la vue graphique"
#: ../../../developer/debugging-tools.rst:29
msgid "`p` - print an internal value."
msgstr "`p` - imprimer une valeur interne."
#: ../../../developer/debugging-tools.rst:32
msgid "Profilers"
msgstr "Les profils"
#: ../../../developer/debugging-tools.rst:34
msgid ""
"Debuggers are useful, but they do not show real-time memory "
"consumption/network activity/CPU usage. For this, you can use the embedded "
"profiler in your IDE (from Android Studio or Qt Creator/Visual Studio for "
"example)."
msgstr ""
"Les débogageurs sont utiles, mais ils ne montrent pas la consommation de "
"mémoire en temps réel / l'activité réseau / l'utilisation du processeur. "
"Pour cela, vous pouvez utiliser le profilé intégré dans votre EDI (à partir "
"d'Android Studio ou de Qt Creator / Visual Studio par exemple)."
#: ../../../developer/debugging-tools.rst:39
msgid "Address Sanitizer"
msgstr "Adresse désinfectant"
#: ../../../developer/debugging-tools.rst:41
msgid ""
"This can be useful to detect leaks, crashes, potential deadlocks at runtime."
" To enable this, you can compile the daemon with "
"`CXXFLAGS+=\"-fsanitize=address\"`. Other flags like `tsan` may be useful."
msgstr ""
"Cela peut être utile pour détecter des fuites, des accidents, des impasses "
"potentielles en temps d'exécution. Pour le faire, vous pouvez compiler le "
"daemon avec `CXXFLAGS+=\"-fsanitize=address\"`. D'autres drapeaux comme "
"`tsan` peuvent être utiles."
#: ../../../developer/debugging-tools.rst:45
msgid "Valgrind/Callgrind"
msgstr "Les produits de la catégorie \"Vallgrind\""
#: ../../../developer/debugging-tools.rst:47
msgid ""
"Valgrind is a tool to watch allocations, CPU usage and more and can be used "
"via: `valgrind --tool=callgrind ./jami -d`. This will make the application "
"very slow but can provide useful reports about memory allocation/performance"
" usage (**KCacheGrind** can be used to read reports)."
msgstr ""
"Valgrind est un outil permettant de surveiller les allocations, "
"l'utilisation de la CPU et plus encore et peut être utilisé via: `valgrind "
"--tool=callgrind./jami -d`. Cela rendra l'application très lente mais peut "
"fournir des rapports utiles sur l'utilisation de l'allocation de mémoire / "
"de la performance (**KCacheGrind** peut être utilisé pour lire des "
"rapports)."
#: ../../../developer/debugging-tools.rst:52
msgid "Tests"
msgstr "Tests"
#: ../../../developer/debugging-tools.rst:54
msgid ""
"Daemon has many tests and coverage enabled. If the daemon is built in static"
" (else private symbols will not be available), adding new tests can help to "
"reproduce bugs, solve bugs and avoid any regression. (cf. "
"`daemon/tests/unitTests``)"
msgstr ""
"Si le daemon est construit en statique (autrement les symboles privés ne "
"seront pas disponibles), l'ajout de nouveaux tests peut aider à reproduire "
"les bugs, à résoudre les bugs et à éviter toute régression."
#: ../../../developer/debugging-tools.rst:59
msgid "Agent"
msgstr "- Ça va?"
#: ../../../developer/debugging-tools.rst:61
msgid ""
"Tests are only using one daemon to simulate both peers. So it can be "
"difficult to test in various environments. Another possibility is to write a"
" scenario and run an agent (documentation is available in the daemon's "
"repository)."
msgstr ""
"Les tests utilisent seulement un daemon pour simuler les deux pairs. Il peut"
" donc être difficile de tester dans divers environnements."
#: ../../../developer/debugging-tools.rst:66
msgid "LTTng"
msgstr "LTTng"
#: ../../../developer/debugging-tools.rst:68
msgid ""
"Finally, tracepoints can be created and analyzed. `daemon/tools/trace` "
"provide the documentation and some examples. The advantage of LTTng is that "
"it is quicker than logs, can be triggered by system events and can be used "
"with tracepoints already present in the kernel (so that it can be used with "
"tracepoints from network interfaces)."
msgstr ""
"Enfin, des tracepoints peuvent être créés et analysés. `daemon/tools/trace` "
"fournissent la documentation et quelques exemples. L'avantage de LTTng est "
"qu'il est plus rapide que les journaux, peut être déclenché par des "
"événements du système et peut être utilisé avec des tracepoints déjà "
"présents dans le noyau (de sorte qu'il peut être utilisé avec des "
"tracepoints d'interfaces réseau)."
#: ../../../developer/delivery-status.md:1
msgid "Synchronization of delivery status"
msgstr "Synchronisation de l'état de livraison"
#: ../../../developer/delivery-status.md:3
msgid ""
"When we send a message to a conversation, the delivery status must be "
"explicit and understandable for the end user. So, Jami must offer the "
"possibility to know if the message was delivered to the other members of a "
"conversation and synchronize this status (sent and displayed) across "
"devices."
msgstr ""
"Lorsque nous envoyons un message à une conversation, l'état de livraison "
"doit être explicite et compréhensible pour l'utilisateur final. Jami doit "
"donc offrir la possibilité de savoir si le message a été transmis aux autres"
" membres d'une conversation et de synchroniser cet état (envoyé et affiché) "
"sur tous les appareils."
#: ../../../developer/delivery-status.md:5
msgid "How it works (backend)"
msgstr "Comment ça marche (backend)"
#: ../../../developer/delivery-status.md:7
msgid ""
"The status of messages is stored in the conversation layer via the variable "
"`messagesStatus (map<string, map<string, string>)` with the following "
"structure:"
msgstr ""
"Le statut des messages est stocké dans la couche de conversation via la "
"variable `messagesStatus (map<string, map<string, string>)` avec la "
"structure suivante :"
#: ../../../developer/delivery-status.md:19
msgid ""
"The `fetch` status is the commitId of the last message fetched by the "
"member. The `fetched_ts` is the timestamp of the last message fetched by the"
" member. The `read` status is the commitId of the last message read by the "
"member. The `read_ts` is the timestamp of the last message read by the "
"member."
msgstr ""
"Le statut `fetch` est le commitId du dernier message récupéré par le membre."
" Le `fetched_ts` est l'horodatage du dernier message récupéré par le membre."
" Le statut `read` est le commitId du dernier message lu par le membre. Le "
"`read_ts` est l'horodatage du dernier message lu par le membre."
#: ../../../developer/delivery-status.md:21
msgid ""
"When a member fetches a message, the `fetch` status is updated with the "
"commitId of the message and the `fetched_ts` is updated with the timestamp "
"of the message. When a member reads a message, the `read` status is updated "
"with the commitId of the message and the `read_ts` is updated with the "
"timestamp of the message. This information is synced across devices and "
"other devices will update their internal structure if the timestamp is "
"newer."
msgstr ""
"Lorsqu'un membre récupère un message, le statut `fetch` est mis à jour avec "
"le commitId du message et le `fetched_ts` est mis à jour avec l'horodatage "
"du message. Lorsqu'un membre lit un message, le statut `read` est mis à jour"
" avec le commitId du message et le `read_ts` est mis à jour avec "
"l'horodatage du message. Ces informations sont synchronisées entre les "
"appareils et les autres appareils mettront à jour leur structure interne si "
"l'horodatage est plus récent."
#: ../../../developer/delivery-status.md:23
msgid "This information is stored in `conversation_data/xxxxxxxxx/status`."
msgstr ""
#: ../../../developer/delivery-status.md:25
msgid "Client API"
msgstr "L'API du client"
#: ../../../developer/delivery-status.md:27
msgid ""
"The client should get status from the current **SwarmMessage** structure "
"when loading conversation and update the status via "
"`AccountMessageStatusChanged`. In `AccountMessageStatusChanged` the client "
"will have the commitId, peer uri and new status. So, this will correspond to"
" `message.status[uri]`."
msgstr ""
"Le client doit obtenir le statut de la structure **SwarmMessage** courante "
"lors du chargement de la conversation et mettre à jour le statut via "
"`AccountMessageStatusChanged`. Dans `AccountMessageStatusChanged` le client "
"aura le commitId, l'uri du pair et le nouveau statut. Cela correspondra donc"
" à `message.status[uri]`."
#: ../../../developer/delivery-status.md:30
msgid "SwarmMessage's status structure is:"
msgstr ""
#: ../../../developer/delivery-status.md:39
msgid ""
"Where `uri` is the peer uri and `status` is the status of the message for "
"this peer (from the `MessageStates` enum)."
msgstr ""
"Où `uri` est l'uri du pair et `status` est le statut du message pour ce pair"
" (à partir de l'enum `MessageStates`)."
#: ../../../developer/delivery-status.md:41
msgid ""
"When sending a new message, the `status` map can be empty (because no one "
"fetched). By default, if there is no fetch/read information for a message, "
"the message MUST be considered as sending. The global status of a message is"
" the maximum of the status of all members except ourselves. For example, if "
"Alice sends a message and we have:"
msgstr ""
"Lors de l'envoi d'un nouveau message, la carte `status` peut être vide "
"(parce que personne ne l'a récupéré). Par défaut, s'il n'y a pas "
"d'information de lecture/réception pour un message, le message DOIT être "
"considéré comme envoyé. L'état global d'un message est le maximum de l'état "
"de tous les membres à l'exception de nous-mêmes. Par exemple, si Alice "
"envoie un message et que nous avons :"
#: ../../../developer/delivery-status.md:48
msgid "The global status is `sent`."
msgstr ""
#: ../../../developer/delivery-status.md:50
msgid "Notes for client"
msgstr ""
#: ../../../developer/delivery-status.md:52
msgid ""
"If the client wants to show which message is the last read message for a "
"member, they must check the index when responding to "
"`AccountMessageStatusChanged`. Because this signal can emit that a previous "
"message is displayed later."
msgstr ""
"Si le client veut montrer quel est le dernier message lu pour un membre, il "
"doit vérifier l'index lorsqu'il répond à `AccountMessageStatusChanged`. En "
"effet, ce signal peut indiquer qu'un message précédent sera affiché plus "
"tard."
#: ../../../developer/delivery-status.md:53
msgid ""
"The status of a message can be used to create a detailed view of who "
"received/displayed a specific message. However, timestamps of those events "
"are not stored, because this would represent too much data."
msgstr ""
"Le statut d'un message peut être utilisé pour créer une vue détaillée de qui"
" a reçu/affiché un message spécifique. Toutefois, les horodatages de ces "
"événements ne sont pas stockés, car cela représenterait trop de données."
#: ../../../developer/design-process.md:1
msgid "Design Process"
msgstr ""
#: ../../../developer/design-process.md:6
msgid ""
"Client: The person who is paying for the feature (and can be the PO because "
"it's a R&D project)"
msgstr ""
#: ../../../developer/design-process.md:8
#: ../../../developer/file-transfer.md:59
msgid "Process"
msgstr "Processus"
#: ../../../developer/design-process.md:10
msgid "Ideas:"
msgstr ""
#: ../../../developer/design-process.md:11
msgid "The **client** come with a new Idea"
msgstr ""
#: ../../../developer/design-process.md:12
msgid "Ask for justifications:"
msgstr ""
#: ../../../developer/design-process.md:14
msgid "Who (user definitions)"
msgstr ""
#: ../../../developer/design-process.md:15
msgid "Why do we want this feature"
msgstr ""
#: ../../../developer/design-process.md:16
msgid "When do we want this feature"
msgstr ""
#: ../../../developer/design-process.md:17
msgid "Where do we want this feature (platforms)"
msgstr ""
#: ../../../developer/design-process.md:18
msgid "Priority"
msgstr ""
#: ../../../developer/design-process.md:19
msgid "Decide if we want or not this feature, Yes/No"
msgstr ""
#: ../../../developer/design-process.md:20
msgid "If yes, Brainstorming"
msgstr ""
#: ../../../developer/design-process.md:21
msgid "Should be the max of person (users/tech/**client**)"
msgstr ""
#: ../../../developer/design-process.md:22
msgid ""
"Produce a brief of the feature (User Story, Details from step 2, Notes from "
"Step 4.) => Meta ticket on GitLab"
msgstr ""
#: ../../../developer/design-process.md:23
msgid "Create UX Wireframe"
msgstr ""
#: ../../../developer/design-process.md:24
#: ../../../developer/design-process.md:27
msgid "Validation (user/technical/**client**) Yes/No"
msgstr ""
#: ../../../developer/design-process.md:25
msgid "If no, return to step 6."
msgstr ""
#: ../../../developer/design-process.md:26
msgid "If validated, POC (Adobe XD/Figma)"
msgstr ""
#: ../../../developer/design-process.md:28
msgid "If no, return to step 9."
msgstr ""
#: ../../../developer/design-process.md:29
msgid ""
"Create sub-tickets (GitLab) with design specification, resources evaluation "
"(time/resource)"
msgstr ""
#: ../../../developer/design-process.md:30
msgid "Prioritize or stop the process (too much time needed)"
msgstr ""
#: ../../../developer/design-process.md:31
msgid "Develop"
msgstr ""
#: ../../../developer/design-process.md:32
msgid "Validate implementation (Design + **client**) - YES/No"
msgstr ""
#: ../../../developer/design-process.md:33
msgid "If no return to 12."
msgstr ""
#: ../../../developer/design-process.md:34
msgid "If validated merge and release!"
msgstr ""
#: ../../../developer/drt.rst:2
msgid "Dynamic Routing Table (DRT)"
msgstr "Dynamic Routing Table (DRT)"
#: ../../../developer/drt.rst:4
msgid ""
"The DRT is a novel concept utilized in swarm technology to maintain peer-to-"
"peer (P2P) connections. In this approach, group members establish a graph of"
" nodes, each identified by a unique hash, and these nodes must be "
"interconnected."
msgstr ""
"La DRT est un nouveau concept utilisé dans la technologie Swarm pour "
"maintenir les connexions pair-à-pair (P2P). Dans cette approche, les membres"
" du groupe établissent un graphe de nœuds, chacun identifié par un hachage "
"unique, et ces nœuds doivent être interconnectés."
#: ../../../developer/drt.rst:6
msgid ""
"Therefore, we require a structural framework that accomplishes the following"
" objectives:"
msgstr ""
"Nous avons donc besoin d'un cadre structurel qui permette d'atteindre les "
"objectifs suivants :"
#: ../../../developer/drt.rst:8
msgid "Maximizes the number of connected nodes at all times."
msgstr "Maximiser les nœuds connectés à chaque fois"
#: ../../../developer/drt.rst:9
msgid "Minimizes message transmission times."
msgstr ""
#: ../../../developer/drt.rst:10
msgid "Reduces the number of links between peers."
msgstr ""
#: ../../../developer/drt.rst:11
msgid "Requires minimal computational resources."
msgstr ""
#: ../../../developer/drt.rst:13
msgid "Several solutions have been proposed to achieve these goals:"
msgstr "Plusieurs solutions ont été proposées pour atteindre ces objectifs :"
#: ../../../developer/drt.rst:15
msgid ""
"Each node is connected to the next node, resulting in only 'N' connections. "
"However, this approach is not efficient for transmitting messages since the "
"message must traverse all peers one by one."
msgstr ""
"Chaque nœud est connecté au nœud suivant, ce qui donne seulement \"N\" "
"connexions. Toutefois, cette approche n'est pas efficace pour la "
"transmission de messages, car le message doit traverser tous les pairs un "
"par un."
#: ../../../developer/drt.rst:16
msgid ""
"Every node is connected to all other nodes, leading to 'N x N' connections. "
"This configuration is effective for message transmission but demands more "
"resources. **This option will be selected for the first version.**"
msgstr ""
"Chaque nœud est connecté à tous les autres nœuds, ce qui conduit à des "
"connexions \"N x N\". Cette configuration est efficace pour la transmission "
"de messages mais demande plus de ressources. **Cette option sera "
"sélectionnée pour la première version."
#: ../../../developer/drt.rst:17
msgid ""
"An alternative solution is presented in the paper titled [*Maximizing the "
"Coverage of Roadmap Graph for Optimal Motion "
"Planning*](https://www.hindawi.com/journals/complexity/2018/9104720/), which"
" offers optimal motion planning coverage but necessitates significant "
"computational calculations."
msgstr ""
"Une autre solution est présentée dans l'article intitulé [*Maximizing the "
"Coverage of Roadmap Graph for Optimal Motion Planning*] "
"(https://www.hindawi.com/journals/complexity/2018/9104720/), qui offre une "
"couverture optimale de la planification des mouvements mais nécessite des "
"calculs importants."
#: ../../../developer/drt.rst:18
msgid ""
"Utilizing the DHT (Distributed Hash Table) algorithm for the routing table, "
"which effectively addresses all four points and is already employed by Jami "
"in their UDP implementation."
msgstr ""
"L'utilisation de l'algorithme DHT (Distributed Hash Table) pour la table de "
"routage, qui répond efficacement aux quatre points et qui est déjà utilisé "
"par Jami dans sa mise en œuvre de l'UDP."
#: ../../../developer/drt.rst:20
msgid ""
"Additionally, to optimize the number of sockets, a socket will be allocated "
"by a **ConnectionManager** to enable multiplexing sockets with a specific "
"hash. This means that if there is a need to transmit multiple files and "
"engage in a chat with someone, only one socket will be utilized."
msgstr ""
"De plus, pour optimiser le nombre de sockets, un socket sera alloué par un "
"**ConnectionManager** pour permettre le multiplexage des sockets avec un "
"hash spécifique. Cela signifie que s'il est nécessaire de transmettre "
"plusieurs fichiers et d'engager une discussion avec quelqu'un, un seul "
"socket sera utilisé."
#: ../../../developer/drt.rst:25
msgid "**Notations:**"
msgstr ""
#: ../../../developer/drt.rst:27
msgid "`n`: Node identifier"
msgstr ""
#: ../../../developer/drt.rst:28
msgid "`N`: Number of nodes in the network"
msgstr ""
#: ../../../developer/drt.rst:29
msgid "`b`: Configuration parameter"
msgstr ""
#: ../../../developer/drt.rst:31
msgid "**Terms and Concepts:**"
msgstr ""
#: ../../../developer/drt.rst:33
msgid ""
"**Mobile Node**: Some devices in the network can establish dynamic "
"connectivity, allowing them to quickly connect and disconnect to optimize "
"battery usage. Instead of maintaining a dedicated peer-to-peer socket with "
"these devices, the protocol opts to use existing sockets if available or "
"relies on push notifications to transmit information. These nodes are marked"
" with a dedicated flag in the protocol."
msgstr ""
"**Nœud mobile** : Certains appareils du réseau peuvent établir une "
"connectivité dynamique, ce qui leur permet de se connecter et de se "
"déconnecter rapidement afin d'optimiser l'utilisation de la batterie. Au "
"lieu de maintenir une socket peer-to-peer dédiée avec ces appareils, le "
"protocole choisit d'utiliser les sockets existants s'ils sont disponibles ou"
" de s'appuyer sur les notifications push pour transmettre des informations. "
"Ces nœuds sont marqués d'un drapeau dédié dans le protocole."
#: ../../../developer/drt.rst:35
msgid ""
"**Bucket**: This class is used to manipulate and store connections and to "
"manage the state of nodes (connecting, known, mobile). Known nodes are used "
"when the connection with a node goes offline."
msgstr ""
"**Bucket** : Cette classe est utilisée pour manipuler et stocker les "
"connexions et pour gérer l'état des nœuds (connectés, connus, mobiles). Les "
"nœuds connus sont utilisés lorsque la connexion avec un nœud est coupée."
#: ../../../developer/drt.rst:37
msgid ""
"**Routing Table**: It is employed to organize buckets, enabling the search "
"for nearest nodes and establishing the link between the swarm manager and "
"the DRT (Distributed Routing Table)."
msgstr ""
"**Table de routage** : Elle est utilisée pour organiser les godets, "
"permettre la recherche des nœuds les plus proches et établir le lien entre "
"le gestionnaire de l'essaim et la table de routage distribuée (DRT)."
#: ../../../developer/drt.rst:39
msgid ""
"**Swarm Manager**: This component is responsible for managing the internal "
"logic and overseeing the distribution of connections within the network."
msgstr ""
"**Gestionnaire de l'essaim** : Cette composante est chargée de gérer la "
"logique interne et de superviser la distribution des connexions au sein du "
"réseau."
#: ../../../developer/drt.rst:41
msgid ""
"**Swarm Protocol**: It is used for data exchange between peers. The "
"following types of data can be exchanged:"
msgstr ""
#: ../../../developer/drt.rst:43
msgid "Request (e.g., FIND): Query | num | nodeId"
msgstr ""
#: ../../../developer/drt.rst:44
msgid "Response (e.g., FOUND): Query | nodes | mobileNodes"
msgstr ""
#: ../../../developer/drt.rst:45
msgid "Message: Version | isMobile | Request or Response"
msgstr ""
#: ../../../developer/drt.rst:49
msgid "Algorithms comparison"
msgstr ""
#: ../../../developer/drt.rst:52
msgid "Chord"
msgstr ""
#: ../../../developer/drt.rst:54
msgid ""
"In a Chord network, each node is associated with a unique key computed using"
" either SHA-1 or MD5 hash functions. The nodes are organized into a ring in "
"increasing order, and each node maintains a routing table that stores "
"information about its nearest nodes. Each entry `i` in the routing table "
"contains nodes with keys such that :math:`hash = (n + 2i - 1) mod 2^m`, "
"where `m` represents the number of bits in the key."
msgstr ""
"Dans un réseau Chord, chaque nœud est associé à une clé unique calculée à "
"l'aide des fonctions de hachage SHA-1 ou MD5. Les nœuds sont organisés en "
"anneau par ordre croissant et chaque nœud maintient une table de routage qui"
" stocke des informations sur les nœuds les plus proches. Chaque entrée `i` "
"de la table de routage contient des nœuds avec des clés telles que "
":math:`hash = (n + 2i - 1) mod 2^m`, où `m` représente le nombre de bits "
"dans la clé."
#: ../../../developer/drt.rst:56
msgid ""
"Every node is aware of its successors and predecessors in the Chord network."
msgstr ""
"Chaque nœud connaît ses successeurs et ses prédécesseurs dans le réseau "
"Chord."
#: ../../../developer/drt.rst:58
msgid ""
"To retrieve data, a node sends a request to its immediate successor. If the "
"node possesses the required key, it responds; otherwise, it forwards the "
"request to its own successor."
msgstr ""
"Pour récupérer des données, un nœud envoie une demande à son successeur "
"immédiat. Si le nœud possède la clé requise, il répond ; sinon, il transmet "
"la demande à son propre successeur."
#: ../../../developer/drt.rst:60
msgid ""
"When adding a new node to the network, the node broadcasts messages to other"
" nodes to update their routing tables and ensure proper integration."
msgstr ""
"Lors de l'ajout d'un nouveau nœud au réseau, le nœud diffuse des messages "
"aux autres nœuds afin de mettre à jour leurs tables de routage et d'assurer "
"une intégration correcte."
#: ../../../developer/drt.rst:62
msgid ""
"If a node goes offline, it must update its routing table to reroute traffic "
"through other available nodes."
msgstr ""
#: ../../../developer/drt.rst:64
msgid "The distance between two nodes is: :math:`d(n1,n2,) = (n1-n2) mod 2b``"
msgstr ""
#: ../../../developer/drt.rst:67
msgid "The routing table size is: :math:`log{N}`"
msgstr ""
#: ../../../developer/drt.rst:70
msgid "The number of hops to get a value is: :math:`log{N}`"
msgstr ""
#: ../../../developer/drt.rst:73
msgid ""
"Sources: (Stoica, Morris, Karger, Kaashoek & Balakrishnan, 2001). (Liben-"
"Nowell, Balakrishnan & Karger, 2002)."
msgstr ""
#: ../../../developer/drt.rst:79
msgid "Pastry"
msgstr ""
#: ../../../developer/drt.rst:81
msgid ""
"In a Pastry network, each node is associated with a 128-bit identifier "
"generated from a hashing function. Pastry is commonly used with IP "
"addresses, and nodes are organized in a ring with increasing order. The "
"routing table is divided into segments, typically determined by :math:`128 /"
" 2b`, where :math:`b` is typically set to 4, and IP addresses are placed "
"within these segments."
msgstr ""
"Dans un réseau Pastry, chaque nœud est associé à un identifiant de 128 bits "
"généré à partir d'une fonction de hachage. Pastry est couramment utilisé "
"avec des adresses IP, et les nœuds sont organisés en anneau dans un ordre "
"croissant. La table de routage est divisée en segments, généralement "
"déterminés par :math:`128 / 2b`, où :math:`b` est généralement fixé à 4, et "
"les adresses IP sont placées dans ces segments."
#: ../../../developer/drt.rst:83
msgid ""
"When a message needs to be transmitted to a leaf node, it is sent directly "
"to the intended recipient. If the message is not intended for a leaf node, "
"the network attempts to locate the nearest node and forwards the data to "
"that node for further transmission."
msgstr ""
"Lorsqu'un message doit être transmis à un nœud feuille, il est envoyé "
"directement au destinataire prévu. Si le message n'est pas destiné à un nœud"
" feuille, le réseau tente de localiser le nœud le plus proche et transmet "
"les données à ce nœud pour la suite de la transmission."
#: ../../../developer/drt.rst:85
msgid "Distance is: :math:`d(n1,n2,) = (prefix(n1) - prefix(n2)) mod 2b`"
msgstr ""
"La distance est : :math:`d(n1,n2,) = (prefix(n1) - prefix(n2)) mod 2b`"
#: ../../../developer/drt.rst:88
msgid "Size of the routing table: :math:`(2b - 1)log{_2}{N}`"
msgstr "Taille de la table de routage : :math:`(2b - 1)log{_2}{N}`"
#: ../../../developer/drt.rst:91
msgid "Number of hops to get a value: :math:`log{_2}{N}`"
msgstr ""
#: ../../../developer/drt.rst:94
msgid "where b is generally 2."
msgstr ""
#: ../../../developer/drt.rst:96
msgid "Sources: Tirée de Castro, Druschel, Hu, Rowstron (2002, p.3)21"
msgstr ""
#: ../../../developer/drt.rst:100
msgid "Kademlia"
msgstr "Kademlia"
#: ../../../developer/drt.rst:102
msgid ""
"This algorithm is used by BitTorrent and Ethereum. In this scheme, each node"
" is assigned a 160-bit identifier, and nodes can be organized in a ring with"
" increasing order. Data is stored in the nearest nodes. However, the routing"
" table employs a binary tree structure with k-buckets (where k represents "
"the number of nodes in each bucket) to store information about the nearest "
"nodes."
msgstr ""
"Cet algorithme est utilisé par BitTorrent et Ethereum. Dans ce schéma, "
"chaque nœud se voit attribuer un identifiant de 160 bits, et les nœuds "
"peuvent être organisés en anneau par ordre croissant. Les données sont "
"stockées dans les nœuds les plus proches. Cependant, la table de routage "
"utilise une structure arborescente binaire avec k-buckets (où k représente "
"le nombre de nœuds dans chaque bucket) pour stocker les informations sur les"
" nœuds les plus proches."
#: ../../../developer/drt.rst:104
msgid ""
"When a node connects to the DHT (Distributed Hash Table), it attempts to "
"populate the routing table by inserting discovered nodes into appropriate "
"buckets. If a bucket becomes full, a node may be ignored if it is too "
"distant; however, if the bucket represents the nearest available, it will be"
" split into two to accommodate the new node. When a new node is added, its "
"routing table is queried to obtain information about the nearest nodes."
msgstr ""
"Lorsqu'un nœud se connecte à la DHT (Distributed Hash Table), il tente "
"d'alimenter la table de routage en insérant les nœuds découverts dans les "
"godets appropriés. Si un panier est plein, un nœud peut être ignoré s'il est"
" trop éloigné ; cependant, si le panier représente le plus proche "
"disponible, il sera divisé en deux pour accueillir le nouveau nœud. "
"Lorsqu'un nouveau nœud est ajouté, sa table de routage est interrogée pour "
"obtenir des informations sur les nœuds les plus proches."
#: ../../../developer/drt.rst:106
msgid ""
"To retrieve a specific value, a node sends a request to the nearest node "
"with the corresponding hash."
msgstr ""
"Pour récupérer une valeur spécifique, un nœud envoie une demande au nœud le "
"plus proche possédant le hachage correspondant."
#: ../../../developer/drt.rst:108
msgid "Distance is :math:`d(n1, n2,) = n1 XOR n2`"
msgstr "La distance est :math:`d(n1, n2,) = n1 XOR n2`"
#: ../../../developer/drt.rst:111
msgid "Size of the routing table: :math:`K \\times log{_2}{N}`"
msgstr "Taille de la table de routage : :math:`K \\times log{_2}{N}`"
#: ../../../developer/drt.rst:114
msgid "Number of hops: :math:`log{_2}{N}`"
msgstr "Nombre de sauts : :math:`log{_2}{N}`"
#: ../../../developer/drt.rst:117
msgid "where b is generally 1."
msgstr "où b est généralement égal à 1."
#: ../../../developer/drt.rst:122
msgid ""
"When starting Jami, every conversation initiates the creation of its routing"
" table. The initial step is to establish contact with a first node to begin "
"synchronization with other nodes. This process is known as \"bootstrapping\""
" and consists of two main parts."
msgstr ""
"Au démarrage de Jami, chaque conversation initie la création de sa table de "
"routage. L'étape initiale consiste à établir un contact avec un premier nœud"
" pour commencer la synchronisation avec d'autres nœuds. Ce processus est "
"connu sous le nom de \"bootstrapping\" et se compose de deux parties "
"principales."
#: ../../../developer/drt.rst:124
msgid ""
"The first part involves retrieving all known devices in a conversation. This"
" is accomplished by checking for known certificates in the repository or "
"verifying the presence of certain members on the DHT (Distributed Hash "
"Table). If a TCP connection already exists with any device in the "
"conversation, it will be utilized. Additionally, known nodes are injected "
"into the routing table."
msgstr ""
"La première partie consiste à retrouver tous les appareils connus dans une "
"conversation. Pour ce faire, on recherche les certificats connus dans le "
"référentiel ou on vérifie la présence de certains membres dans la DHT "
"(Distributed Hash Table). Si une connexion TCP existe déjà avec un appareil "
"de la conversation, elle sera utilisée. En outre, les nœuds connus sont "
"injectés dans la table de routage."
#: ../../../developer/drt.rst:126
msgid ""
"The routing table is subsequently updated whenever an event occurs on a "
"node."
msgstr ""
"La table de routage est ensuite mise à jour chaque fois qu'un événement se "
"produit sur un nœud."
#: ../../../developer/drt.rst:128
msgid ""
"During routing table updates, the component will attempt to establish "
"connections with new nodes if necessary. The decision to connect to new "
"nodes is determined by the following conditions: - For the nearest bucket, a"
" connection attempt is made if :math:`(maxSize(Bucket) - connected nodes - "
"connecting nodes) > 0`. - For other buckets, a connection is initiated if "
":math:`(maxSize(Bucket) - connecting nodes) > 0`."
msgstr ""
"Lors des mises à jour de la table de routage, le composant tente d'établir "
"des connexions avec de nouveaux nœuds si nécessaire. La décision de se "
"connecter à de nouveaux nœuds est déterminée par les conditions suivantes : "
"- Pour le seau le plus proche, une tentative de connexion est effectuée si "
":math:`(maxSize(Bucket) - connected nodes - connecting nodes) > 0`. - Pour "
"les autres godets, une connexion est initiée si :math:`(maxSize(Bucket) - "
"connecting nodes) > 0`."
#: ../../../developer/drt.rst:132
msgid ""
"The distinction lies in the fact that, in the case of the nearest bucket, "
"the goal is to attempt to split buckets if required while compensating for "
"disconnections in other buckets. This is essential to maintain knowledge of "
"the nearest nodes."
msgstr ""
"La distinction réside dans le fait que, dans le cas du seau le plus proche, "
"l'objectif est de tenter de diviser les seaux si nécessaire tout en "
"compensant les déconnexions dans d'autres seaux. Ceci est essentiel pour "
"maintenir la connaissance des nœuds les plus proches."
#: ../../../developer/drt.rst:134
msgid ""
"Upon connecting to a new node, a \"FIND\" request is sent to discover new "
"identifiers nearby and identify all mobile nodes. Subsequently, a \"FIND\" "
"request is sent every ten minutes to keep the routing table up to date."
msgstr ""
"Lors de la connexion à un nouveau nœud, une demande \"FIND\" est envoyée "
"pour découvrir les nouveaux identifiants à proximité et identifier tous les "
"nœuds mobiles. Par la suite, une demande \"FIND\" est envoyée toutes les dix"
" minutes pour maintenir la table de routage à jour."
#: ../../../developer/drt.rst:136
msgid ""
"The primary class responsible for this process in the codebase is "
"`SwarmManager`, and the bootstrapping phase is handled within the "
"conversation's section."
msgstr ""
"La classe principale responsable de ce processus dans la base de code est "
"`SwarmManager`, et la phase d'amorçage est gérée dans la section de la "
"conversation."
#: ../../../developer/drt.rst-1
msgid "Global architecture"
msgstr ""
#: ../../../developer/drt.rst:147
msgid "Perfomance analysis"
msgstr ""
#: ../../../developer/drt.rst:150
msgid "Tools"
msgstr ""
#: ../../../developer/drt.rst:152
msgid ""
"To validate the implementation and performance of the DRT component, we have"
" developed several tools located in `daemon/tests/unitTest/swarm`, including"
" `swarm_spread`, `bootstrap`, and more."
msgstr ""
"Pour valider l'implémentation et les performances du composant DRT, nous "
"avons développé plusieurs outils situés dans `daemon/tests/unitTest/swarm`, "
"y compris `swarm_spread`, `bootstrap`, et plus encore."
#: ../../../developer/drt.rst:154
msgid "To interpret the results, we utilize the following tools:"
msgstr ""
#: ../../../developer/drt.rst:156
msgid "`gcov` for test coverage analysis."
msgstr ""
#: ../../../developer/drt.rst:157
msgid "`ASan` to check for memory leaks and heap overflows."
msgstr ""
#: ../../../developer/drt.rst:158
msgid "`gdb` for debugging internal structures."
msgstr ""
#: ../../../developer/drt.rst:160
msgid ""
"While the major focus is on unit tests, for performance analysis, we rely on"
" `swarm_spread` to assess various aspects, including:"
msgstr ""
#: ../../../developer/drt.rst:162
msgid "The number of hops required for message transmission."
msgstr ""
#: ../../../developer/drt.rst:163
msgid "The number of messages received per node."
msgstr ""
#: ../../../developer/drt.rst:164
msgid "Determining the maximum and minimum messages received by each node."
msgstr ""
#: ../../../developer/drt.rst:165
msgid "Calculating the iterations needed to transmit a message to all nodes."
msgstr ""
#: ../../../developer/drt.rst:166
msgid "Measuring message reception times."
msgstr ""
#: ../../../developer/drt.rst:169
msgid "Results"
msgstr ""
#: ../../../developer/drt.rst-1
msgid "Number of iterations to send a message"
msgstr ""
#: ../../../developer/drt.rst-1
msgid "Routing table size"
msgstr ""
#: ../../../developer/drt.rst:181
msgid "Future work"
msgstr ""
#: ../../../developer/drt.rst:183
msgid ""
"Dynamic bucket size limit to get different bucket size depending on how "
"large is the routing table"
msgstr ""
#: ../../../developer/drt.rst:184
msgid "Declining some connections to speed-up the transmission a bit"
msgstr ""
#: ../../../developer/feature-requests.md:1
msgid "Feature requests"
msgstr "Demande de fonctionnalités"
#: ../../../developer/feature-requests.md:4
msgid ""
"This page exists to classify feature requests per users' feedback, to avoid "
"leaving tickets open for years. Under construction, will sort the tickets."
msgstr ""
"Cette page existe pour classer les demandes de fonctionnalités par feedback "
"des utilisateurs, pour éviter de laisser les billets ouverts pendant des "
"années."
#: ../../../developer/feature-requests.md:8
msgid "SFL"
msgstr "SFL"
#: ../../../developer/feature-requests.md:10
msgid ""
"{daemon-issue}`Implement pipewire <13> to support screen sharing on Wayland`"
" -> Contact #Jami (Adrien, Sébastien, etc.) / hard / In progress"
msgstr ""
"{daemon-issue}`Implementer le câble de tuyau <13> pour soutenir le partage "
"d'écran sur Wayland` -> Contacter #Jami (Adrien, Sébastien, etc.) / hard / "
"En cours"
#: ../../../developer/feature-requests.md:12
msgid "Connectivity -> Contact #Jami (Sébastien) / medium:"
msgstr "Connectivité -> Contact #Jami (Sébastien) / média:"
#: ../../../developer/feature-requests.md:13
msgid "TURN ipv6 support"
msgstr "Support pour le système de conversion de l'IPv6"
#: ../../../developer/feature-requests.md:14
msgid "connection ipv6 only<->ipv4 only"
msgstr "connexion ipv6 seulement<->ipv4 seulement"
#: ../../../developer/feature-requests.md:15
msgid "SIP:"
msgstr "SIP:"
#: ../../../developer/feature-requests.md:16
msgid "Fix IP to IP -> Contact #Jami (Adrien, Sébastien) / easy"
msgstr "Fixer IP à IP -> Contacter #Jami (Adrien, Sébastien) / facile"
#: ../../../developer/feature-requests.md:17
msgid "Add unit-tests / probably easy"
msgstr "Ajouter des tests unitaires / probablement facile"
#: ../../../developer/feature-requests.md:18
msgid ""
"Search in system contacts ({client-gnome-issue}`1191`, {client-gnome-"
"issue}`829`, etc.) -> Contact #Jami (Adrien, Sébastien, Andreas, etc.) / "
"easy but long"
msgstr ""
"Recherche dans les contacts du système ({client-gnome-issue}`1191`, {client-"
"gnome-issue}`829`, etc.) -> Contact #Jami (Adrien, Sébastien, Andreas, etc.)"
" / facile mais long"
#: ../../../developer/feature-requests.md:21
msgid "Crypto: (Contact #Jami - Adrien)"
msgstr "Crypto: (Contact #Jami - Adrien)"
#: ../../../developer/feature-requests.md:22
msgid "Update media RTP ciphers for ffmpeg / probably easy"
msgstr "Mettre à jour les chiffres RTP pour ffmpeg / probablement facile"
#: ../../../developer/feature-requests.md:23
msgid "Support ECC (instead RSA) for Jami accounts / hard but short"
msgstr ""
"Soutenir le CEC (au lieu de l' RSA) pour les comptes Jami / dur mais court"
#: ../../../developer/feature-requests.md:24
msgid "Remove usages of SHA1 (ids + git) / hard"
msgstr "Supprimer les utilisations de SHA1 (ids + git) / dur"
#: ../../../developer/feature-requests.md:25
msgid "Media -> Contact #Jami (Adrien, Andreas, etc.)"
msgstr "Les médias -> Contactez #Jami (Adrien, Andreas, etc.)"
#: ../../../developer/feature-requests.md:26
msgid "{daemon-issue}`POC for AV1 support <27>` / probably hard"
msgstr "{daemon-issue}`POC pour le support AV1 <27>` / probablement difficile"
#: ../../../developer/feature-requests.md:27
msgid "Investigate audio quality (contact #Jami, medium difficulty)"
msgstr "Enquêter sur la qualité audio (contact #Jami, difficulté moyenne)"
#: ../../../developer/feature-requests.md:28
msgid "Plugins ideas: (Contact #Jami - Aline)"
msgstr "Idées de plugins: (Contact #Jami - Aline)"
#: ../../../developer/feature-requests.md:29
msgid "{plugins-issue}`Payment plug-in <27>`"
msgstr "{plugins-issue}`Plug-in de paiement <27>`"
#: ../../../developer/feature-requests.md:30
msgid "A chat-GPT plugin"
msgstr "Un plugin de chat-GPT"
#: ../../../developer/feature-requests.md:31
msgid "Add new transports (e.g. QUIC?)"
msgstr "Ajouter de nouveaux transports (par exemple QUIC?)"
#: ../../../developer/feature-requests.md:32
msgid "Add libtorrent support?"
msgstr "Ajouter un support libtorant?"
#: ../../../developer/feature-requests.md:33
msgid ""
"Public page/personal blog available through Jami (Contact #Jami / medium "
"difficulty & long term project)"
msgstr ""
"Page publique/blog personnel disponible via Jami (Contact #Jami / difficulté"
" moyenne et projet à long terme)"
#: ../../../developer/feature-requests.md:35
msgid "Qt:"
msgstr "Qt:"
#: ../../../developer/feature-requests.md:36
msgid ""
"{client-qt-issue}`Add support for peer discovery<868>` (contact #Jami - "
"easy)"
msgstr ""
"{client-qt-issue}` Ajouter une prise en charge pour la découverte par les "
"pairs<868>` (contact #Jami - facile)"
#: ../../../developer/feature-requests.md:37
msgid ""
"Emoji as a native component to avoid depending on qt-webengine for this (not"
" available on macOS) (e.g. https://github.com/jnodev/QMLemoji)"
msgstr ""
"Emoji comme composant natif pour éviter de dépendre de qt-webengine pour "
"cela (non disponible sur macOS) (par exemple "
"https://github.com/jnodev/QMLemoji)"
#: ../../../developer/feature-requests.md:39
msgid ""
"Categorized conversations (like favorites, groups, etc) (to discuss with "
"#Jami)"
msgstr ""
"Conversations classées (comme les favoris, les groupes, etc.) (à discuter "
"avec #Jami)"
#: ../../../developer/feature-requests.md:40
msgid "jami-web:"
msgstr "- Je suis en train de faire une vidéo."
#: ../../../developer/feature-requests.md:41
msgid ""
"Design architecture to support calls between jami-web and desktop versions "
"-> Contact #Jami (Adrien, Sébastien) / hard"
msgstr ""
"Architecture de conception pour prendre en charge les appels entre les "
"versions jami-web et de bureau -> Contactez #Jami (Adrien, Sébastien) / hard"
#: ../../../developer/feature-requests.md:44
msgid ""
"Help for the Roadmap 2023: "
"https://git.jami.net/groups/savoirfairelinux/-/epics/48"
msgstr ""
"Aide à la feuille de route 2023: "
"https://git.jami.net/groups/savoirfairelinux/-/epics/48"
#: ../../../developer/feature-requests.md:46
msgid "Some other ideas from tickets:"
msgstr "Quelques autres idées de billets:"
#: ../../../developer/feature-requests.md:48
msgid "Planned/In progress"
msgstr "Planifié/en cours"
#: ../../../developer/feature-requests.md:50
msgid ""
"Improve Jami on Yocto (some codecs problems/lag on i.MX 6) -> Contact Rennes"
msgstr ""
"Améliorer Jami sur Yocto (certains problèmes de codecs/délais sur i.MX 6) ->"
" Contacter Rennes"
#: ../../../developer/feature-requests.md:52
msgid ""
"[Qt/QML Improve client](https://git.jami.net/savoirfairelinux/jami-client-"
"qt/-/issues) -> Contact #Jami (Andreas)"
msgstr ""
"[Qt/QML Improve client](https://git.jami.net/savoirfairelinux/jami-client-"
"qt/-/issues) -> Contacter #Jami (Andreas)"
#: ../../../developer/feature-requests.md:54
msgid "Redo emoji-picker with native component"
msgstr "Redo émoji-pick avec composant natif"
#: ../../../developer/feature-requests.md:55
msgid "Implement designs from Charlotte"
msgstr "Des conceptions de mise en œuvre de Charlotte"
#: ../../../developer/feature-requests.md:56
msgid "Help for swarms (Sébastien)"
msgstr "Aide aux essaims (Sébastien)"
#: ../../../developer/feature-requests.md:57
msgid ""
"{gerrit-project}`jami-web`; because installing an app can be boring. Joining"
" a conference via a link can be cool. For now, nobody is working on it."
msgstr ""
"{gerrit-projet}`jami-web`; parce que l'installation d'une application peut "
"être ennuyeuse. Joindre une conférence via un lien peut être cool. Pour "
"l'instant, personne ne travaille dessus."
#: ../../../developer/feature-requests.md:61
msgid "Wanted but not planned"
msgstr "Vouloir mais pas prévu"
#: ../../../developer/feature-requests.md:63
#: ../../../developer/feature-requests.md:93
msgid "?"
msgstr "- Je suis désolé."
#: ../../../developer/feature-requests.md:65
msgid ""
"Can be implemented, contributions welcome (or will take months/years to "
"come)"
msgstr ""
"Peut être mis en œuvre, les contributions sont bienvenues (ou prendront des "
"mois/années à venir)"
#: ../../../developer/feature-requests.md:67
msgid ""
"{project-issue}`add possibility to show \"reachable at the following times\""
" (contact details) <1261>`"
msgstr ""
"{projet-issue}`ajouter la possibilité de montrer \"accessible aux heures "
"suivantes\" (détails de contact) <1261>`"
#: ../../../developer/feature-requests.md:69
msgid ""
"{project-issue}`Preferences per contact (allow calls, file transfer, custom "
"ringtone) <1280>`"
msgstr ""
"{projet-issue}`Préférences par contact (autoriser les appels, le transfert "
"de fichiers, son de sonnerie personnalisé) <1280>`"
#: ../../../developer/feature-requests.md:71
msgid ""
"{project-issue}`Ability to create polls (ideally a plugin with swarm) "
"<1254>`"
msgstr ""
"{projet-issue}`Capacité à créer des sondages (idéalement un plugin avec un "
"essaim) <1254>`"
#: ../../../developer/feature-requests.md:73
msgid "{project-issue}`Support for Panic buttons <623>`"
msgstr "{projet-issue}`Support pour les boutons de panique <623>"
#: ../../../developer/feature-requests.md:74
msgid "Matrix bridge"
msgstr "Le pont de la matrice"
#: ../../../developer/feature-requests.md:75
msgid ""
"Full TOR support or other alternatives such as lokinet ({project-"
"issue}`922`, {project-issue}`622`, {project-issue}`495`), {project-"
"issue}`i2p <630>`"
msgstr ""
"Soutenir pleinement le TOR ou d'autres alternatives telles que lokinet "
"({projet-issue}`922`, {projet-issue}`622`, {projet-issue}`495`), {projet-"
"issue}`i2p <630>`"
#: ../../../developer/feature-requests.md:78
msgid "{project-issue}`Bluetooth support <774>`"
msgstr "{projet-issue}`Support Bluetooth <774>"
#: ../../../developer/feature-requests.md:79
msgid "{project-issue}`Secret-based turn server <886>`"
msgstr "{projet-issue}`Secret-based tour serveur <886>`"
#: ../../../developer/feature-requests.md:80
msgid "{client-android-issue}`Ability to compress files before sending <720>`"
msgstr ""
"{client-android-issue}`Capacité de compresser des fichiers avant d'envoyer "
"<720>`"
#: ../../../developer/feature-requests.md:82
msgid "Ability to trim recorded clips before sending"
msgstr "Capacité de couper les clips enregistrés avant l'envoi"
#: ../../../developer/feature-requests.md:83
msgid "{client-gnome-issue}`Spell checking support <1169>`"
msgstr "{client-gnome-issue}`Spell checking support <1169>`"
#: ../../../developer/feature-requests.md:84
msgid "{project-issue}`Echo bot to test audio <392>`"
msgstr "{projet-issue}`Echo bot pour tester l'audio <392>`"
#: ../../../developer/feature-requests.md:85
msgid ""
"{project-issue}`Handle click on jami:uri system wide (missing "
"macOS/Android/iOS) <653>`"
msgstr ""
"{projet-issue}`Cliquez manuellement sur jami:uri système large (manque "
"macOS/Android/iOS) <653>`"
#: ../../../developer/feature-requests.md:86
msgid ""
"{project-issue}`Initial audio mode <1288>` (need to wait for group chat)"
msgstr ""
"{projet-issue}`Mode audio initial <1288>` (ne doit attendre le chat de "
"groupe)"
#: ../../../developer/feature-requests.md:88
msgid "{project-issue}`Feature Request: Volume Slider <1524>`"
msgstr "{projet-issue}`File requête: Volume Slider <1524>`"
#: ../../../developer/feature-requests.md:89
msgid "{client-qt-issue}`Portable version for Windows <170>`"
msgstr "{client-qt-issue}`Version portable pour Windows <170>`"
#: ../../../developer/feature-requests.md:91
msgid "Depends on mass changes"
msgstr "En fonction des changements de masse"
#: ../../../developer/feature-requests.md:95
#: ../../../developer/release-process.md:0
#: ../../../developer/release-process.md:59
msgid "Packaging"
msgstr "Emballage"
#: ../../../developer/feature-requests.md:97
msgid "{client-gnome-issue}`FreeBSD support <1272>`"
msgstr "{client-gnome-issue}`FreeBSD support <1272>"
#: ../../../developer/feature-requests.md:99
msgid "Others"
msgstr "Autres"
#: ../../../developer/feature-requests.md:101
msgid "{project-issue}`Collaborative editor <1010>`"
msgstr "Éditeur collaboratif"
#: ../../../developer/feature-requests.md:102
msgid "{project-issue}`A thunderbird plugin <516>`"
msgstr "Un plug-in pour le tonnerre"
#: ../../../developer/feature-requests.md:103
msgid "{project-issue}`OpenAlias <928>`"
msgstr "{projet-issue}`Ouvrez les liens <928>"
#: ../../../developer/feature-requests.md:104
msgid "{project-issue}`CMIS integration <455>`"
msgstr "{projet-issue}`intégration du SCCM <455>`"
#: ../../../developer/feature-requests.md:105
msgid "{project-issue}`Sound safety <441>`"
msgstr "{projet-issue}`Sécurité sonore <441>"
#: ../../../developer/feature-requests.md:106
msgid ""
"{client-gnome-issue}`Ability to see multiple chats at the same time <909>`"
msgstr ""
"{client-gnome-issue}`Capacité de voir plusieurs chats en même temps <909>`"
#: ../../../developer/feature-requests.md:107
msgid "{client-gnome-issue}`Vocoder option <957>`"
msgstr "{client-gnome-issue}`Vocoder option <957>`"
#: ../../../developer/feature-requests.md:108
msgid "{project-issue}`SOCKS5 support <430>`"
msgstr "{projet-issue}`SOCKS5 soutien <430>"
#: ../../../developer/feature-requests.md:109
msgid "{project-issue}`Cardbook integration <383>`"
msgstr "{projet-émission}`Integration du livre de cartes <383>`"
#: ../../../developer/feature-requests.md:110
msgid "{project-issue}`Multiple instances running <629>`"
msgstr "{projet-issue}`Plusieurs instances en cours d'exécution <629>`"
#: ../../../developer/feature-requests.md:111
msgid "{daemon-issue}`Whiteboard <181>`"
msgstr "Le tableau blanc"
#: ../../../developer/feature-requests.md:112
msgid "{client-android-issue}`Camera zoom <979#note_29386>`"
msgstr "{client-android-issue}`Camera zoom <979#note_29386>`"
#: ../../../developer/feature-requests.md:113
msgid "{client-qt-issue}`Emoji reaction in calls <497>`"
msgstr "{client-qt-issue}` Réaction émoji dans les appels <497>`"
#: ../../../developer/feature-requests.md:114
msgid "{client-android-issue}`Conversation's background <710>`"
msgstr "{client-android-issue}`Conversation de fond <710>`"
#: ../../../developer/feature-requests.md:115
msgid "{project-issue}`[Desktop] Option to have a Window per Chat <633>`"
msgstr "{projet-issue}`[Desktop] Option d'avoir une fenêtre par chat <633>`"
#: ../../../developer/feature-requests.md:116
msgid "{project-issue}`Multiple text selection <1096>`"
msgstr "{projet-issue}`Sélection de texte multiple <1096>`"
#: ../../../developer/feature-requests.md:117
msgid "{project-issue}`In-app sticker pack creation <1317>`"
msgstr "Création de colis d'autocollants en application"
#: ../../../developer/feature-requests.md:118
msgid "{project-issue}`Re-order messages <1357>`"
msgstr "{projet-issue}`Récommander les messages <1357>`"
#: ../../../developer/feature-requests.md:119
msgid "{daemon-issue}`Remote control <349>`"
msgstr "Le contrôle à distance"
#: ../../../developer/feature-requests.md:120
msgid ""
"{client-android-issue}`Locked messages (feature that can be enabled to hide "
"messages until they are clicked upon) <1146>`"
msgstr ""
"{client-android-issue}`Messages verrouillés (fonctionnalité qui peut être "
"activée pour cacher les messages jusqu'à ce qu'ils soient cliqués) <1146>`"
#: ../../../developer/feature-requests.md:121
msgid ""
"{client-qt-issue}`selecting one or multiple messages and delete them just "
"for the user doing so <1188>`"
msgstr ""
#: ../../../developer/feature-requests.md:122
msgid ""
"{client-qt-issue}`Drag and drop files from chatview and send to other "
"contacts <485>`"
msgstr ""
#: ../../../developer/file-transfer.md:1 ../../../developer/swarm.md:397
#: ../../../developer/swarm.md:667
msgid "File transfer"
msgstr "Transfert de fichiers"
#: ../../../developer/file-transfer.md:4
msgid "**THIS PAGE IS DEPRECATED: READ {ref}`developer/swarm:File transfer`**"
msgstr ""
"**CE PASSE EST DEPRÉCÉTée: LIRE {ref}` développeur/groupe:transfert de "
"fichiers`**"
#: ../../../developer/file-transfer.md:7
#: ../../../developer/location-sharing.md:4
msgid "How to use it?"
msgstr "Comment l'utiliser?"
#: ../../../developer/file-transfer.md:10
#: ../../../developer/release-process.md:111
msgid "Gnome"
msgstr "Gnome"
#: ../../../developer/file-transfer.md:12
msgid ""
"For sending a file on gnome, in a conversation you need to click to the send"
" file icon at the bottom right of the conversation:"
msgstr ""
"Pour envoyer un fichier sur gnome, dans une conversation, vous devez cliquer"
" sur l'icône envoyer un fichier en bas à droite de la conversation:"
#: ../../../developer/file-transfer.md:15
msgid ""
"![Gnome_send_file](https://git.jami.net/savoirfairelinux/jami-"
"project/uploads/e7571789effe8641f5ff4117e47f89dd/Gnome_send_file.png)"
msgstr ""
"- [Gnome_send_file] (https://git.jami.net/savoirfairelinux/jami-"
"projet/uploads/e7571789effe8641f5ff4117e47f89dd/Gnome_send_file.png)"
#: ../../../developer/file-transfer.md:15
msgid "Gnome_send_file"
msgstr "Fichier de renvoi"
#: ../../../developer/file-transfer.md:17
msgid ""
"Then you will see your image as soon as the transfer is finished (and show "
"images is activated)"
msgstr ""
"Vous verrez ensuite votre image dès que le transfert sera terminé (et les "
"images affichées seront activées)"
#: ../../../developer/file-transfer.md:20
msgid ""
"![Gnome_image](https://git.jami.net/savoirfairelinux/jami-"
"project/uploads/cc03387d134a9aa71c6deb60ccf53ed8/Gnome_image.png)"
msgstr ""
"Il est également possible de faire des recherches sur les différents types "
"de produits."
#: ../../../developer/file-transfer.md:20
msgid "Gnome_image"
msgstr "Gnome_image"
#: ../../../developer/file-transfer.md:22
msgid ""
"On the contrary if you receive a file (and if it's not a picture &lt; 20 "
"Mb), you will have to accept the transfer:"
msgstr ""
"Au contraire, si vous recevez un fichier (et si ce n'est pas une image &lt; "
"20 Mb), vous devrez accepter le transfert:"
#: ../../../developer/file-transfer.md:25
msgid ""
"![Gnome_accept](https://git.jami.net/savoirfairelinux/jami-"
"project/uploads/29dd852e062e7bcbcb654e4e7e3f8e47/Gnome_accept.png)"
msgstr "Je suis en train de faire une demande de règlement."
#: ../../../developer/file-transfer.md:25
msgid "Gnome_accept"
msgstr "Gnome_accept"
#: ../../../developer/file-transfer.md:27
msgid ""
"And then the file will be sent. You have the possibility to cancel in a "
"middle of a transfer."
msgstr ""
"Et puis le dossier sera envoyé, vous avez la possibilité d'annuler au milieu"
" d'un transfert."
#: ../../../developer/file-transfer.md:30
msgid ""
"![Gnome_ongoing](https://git.jami.net/savoirfairelinux/jami-"
"project/uploads/92f319f8a88f75c388020d999f607bdc/Gnome_ongoing.png)"
msgstr ""
"Le projet de loi sur les droits de l'homme (JRC) est une loi sur les droits "
"de l'homme."
#: ../../../developer/file-transfer.md:30
msgid "Gnome_ongoing"
msgstr "Gnome en cours"
#: ../../../developer/file-transfer.md:32
msgid "Android"
msgstr "Android"
#: ../../../developer/file-transfer.md:34
msgid ""
"When you are talking to somebody on Android, you have the possibility to "
"send a picture on your device or take a photo with these buttons:"
msgstr ""
"Lorsque vous parlez à quelqu'un sur Android, vous avez la possibilité "
"d'envoyer une photo sur votre appareil ou de prendre une photo avec ces "
"boutons:"
#: ../../../developer/file-transfer.md:37
msgid ""
"![Android_file_buttons](https://git.jami.net/savoirfairelinux/jami-"
"project/uploads/d68472b2c7bfcc616b0c674c9c7a8fed/Android_file_buttons.png)"
msgstr "Je suis en train de faire une vidéo de mon blog."
#: ../../../developer/file-transfer.md:37
msgid "Android_file_buttons"
msgstr "Bouton de fichier Android"
#: ../../../developer/file-transfer.md:39
msgid ""
"Note: when you send a file, the other has to accept it. At this moment you "
"will see 'awaiting peer':"
msgstr "Remarque: lorsque vous envoyez un fichier, l'autre doit l'accepter."
#: ../../../developer/file-transfer.md:42
msgid ""
"![Android_awaiting_peer](https://git.jami.net/savoirfairelinux/jami-"
"project/uploads/56f0316c945ca243448668ae9091b1de/Android_awaiting_peer.png)"
msgstr "Je suis en train de faire une vidéo de mon blog."
#: ../../../developer/file-transfer.md:42
msgid "Android_awaiting_peer"
msgstr "Android_attendant_peer"
#: ../../../developer/file-transfer.md:44
#: ../../../developer/location-sharing.md:39
msgid "How it works? (technical)"
msgstr "Comment ça marche?"
#: ../../../developer/file-transfer.md:47
msgid "How it works"
msgstr "Comment ça marche"
#: ../../../developer/file-transfer.md:51
msgid ""
"Jami is a distributed application and has to work without any internet "
"connectivity. So, file transfer too! Basically, we use the same method to "
"perform file transfer and calls, but in TCP. To summarize how it works, we "
"can imagine a situation where Alice (A) wants to transfer a file to Bob (B)."
msgstr ""
"Jami est une application distribuée et doit fonctionner sans connectivité "
"Internet. Donc, le transfert de fichiers aussi! fondamentalement, nous "
"utilisons la même méthode pour effectuer le transfert de fichiers et les "
"appels, mais en TCP. Pour résumer comment cela fonctionne, nous pouvons "
"imaginer une situation où Alice (A) veut transférer un fichier à Bob (B)."
#: ../../../developer/file-transfer.md:53
msgid ""
"First, Alice will request a connection to Bob. To do that, Jami is using ICE"
" (RFC 6544), a protocol used to negotiate links between peers. Alice will "
"send, into an encrypted packet via the DHT the ip of its device. So, when "
"Bob receives the ips of Alice, they will be able to negotiate a transport "
"where Bob will be able to send packets to Alice. The negotiation can be "
"successful, but if it fails, a TURN server will be used (the one configured "
"into the settings) to perform the transfer. If the negotiation succeeds, Bob"
" will send its ips to Alice to perform the negotiation in the other "
"direction. Note that the link is still not secure, so Bob will send the ips "
"through the DHT in an encrypted message. If the second negotiation fails, "
"the TURN will be used as a fallback."
msgstr ""
"Premièrement, Alice demandera une connexion à Bob. Pour ce faire, Jami "
"utilise ICE (RFC 6544), un protocole utilisé pour négocier des liens entre "
"pairs. Alice enverra, dans un paquet crypté via le DHT, l'IP de son "
"appareil. Ainsi, lorsque Bob recevra les ips d'Alice, ils seront en mesure "
"de négocier un transport où Bob sera en mesure d'envoyer des paquets à "
"Alice. La négociation peut être réussie, mais si elle échoue, un serveur "
"TURN (celui configuré dans les paramètres) sera utilisé pour effectuer le "
"transfert. Si la négociation réussit, Bob enverra ses ips à Alice pour "
"effectuer la négociation dans l'autre direction. Notez que le lien n'est "
"toujours pas envoyé, donc Bob enverra les ips via le DHT dans un message "
"crypté. Si la deuxième négociation échoue, le TURN sera utilisé comme une "
"rétroaction."
#: ../../../developer/file-transfer.md:55
msgid ""
"Now that the bidirectionnal TCP link is here, the next step will be to "
"negotiate a TLS 1.3 (generally a (TLS1.3)-(DHE-FFDHE8192)-(RSA-PSS-RSAE-"
"SHA384)-(AES-256-GCM) when I write these lines) between Alice an Bob, then "
"Alice will start to transfer the file."
msgstr ""
"Maintenant que le lien TCP bidirectionnel est ici, la prochaine étape sera "
"de négocier un TLS 1.3 (généralement un (TLS1.3)-DHE-FFDHE8192)-RSA-PSS-"
"RSAE-SHA384)-AES-256-GCM) entre Alice et Bob, puis Alice commencera à "
"transférer le fichier."
#: ../../../developer/file-transfer.md:57
msgid ""
"The first part will be a small header to describe the content of the file. "
"Then, after Bob accepts the transfer, the full file will be transmitted."
msgstr ""
"La première partie sera une petite en-tête pour décrire le contenu du "
"fichier."
#: ../../../developer/file-transfer.md:61
msgid "Sending a file"
msgstr "Envoyer un dossier"
#: ../../../developer/file-transfer.md:63
msgid "The following method is used:"
msgstr "La méthode suivante est utilisée:"
#: ../../../developer/file-transfer.md:65
msgid ""
"1\\. A client will call `DataTransferFacade::sendFile()`. "
"`DataTransferFacade` is the class corresponding to the API exposed for the "
"clients. It is used to manage a view of the file transfers (the "
"corresponding classes are `DataTransfer`, `IncomingFileTransfer`, "
"`OutgoingFileTransfer` and `SubOutgoingFileTransfer`). This method will ask "
"the linked `JamiAccount` to request a connection."
msgstr ""
"1\\. Un client appellera `DataTransferFacade::sendFile() `. "
"`DataTransferFacade` est la classe correspondant à l'API exposée pour les "
"clients. Il est utilisé pour gérer une vue des transferts de fichiers (les "
"classes correspondantes sont `DataTransfer`, `IncomingFileTransfer`, "
"`OutgoingFileTransfer` et `SubOutgoingFileTransfer`). Cette méthode "
"demandera au `JamiAccount` lié de demander une connexion."
#: ../../../developer/file-transfer.md:67
msgid ""
"![Diagram: DataTransfer class diagram]images/file-transfer-datatransfer-"
"class-diagram.png)"
msgstr ""
"[Diagramme: diagramme de classe de transfert de données] images/file-"
"transfer-data-transfer-class-diagram.png)"
#: ../../../developer/file-transfer.md:69
msgid ""
"2\\. The method `DhtPeerConnector: requestConnection()` is triggered and "
"creates a connection between all connected devices of the peer (found on the"
" DHT). `DhtPeerConnector` is used to manage the main event loop which manage"
" connections. When a device is found, the *event loop* will create a "
"`ClientConnector` (which manage the connection for one device) and launch "
"the `process()` method."
msgstr ""
"2\\. La méthode `DhtPeerConnector: requestConnection() ` est activée et crée"
" une connexion entre tous les appareils connectés du pair (trouvés sur le "
"DHT). `DhtPeerConnector` est utilisé pour gérer la boucle d'événements "
"principaux qui gèrent les connexions."
#: ../../../developer/file-transfer.md:71
msgid ""
"3\\. This method is used to initialize the ICE transport and put a "
"*PeerConnectionMsg* (which contains the SDP message, see below) on the DHT "
"and waits for a response (`DhtPeerConnector::Impl::onResponseMsg`)."
msgstr ""
"3\\. Cette méthode est utilisée pour initialiser le transport ICE et mettre "
"un *PeerConnectionMsg* (qui contient le message SDP, voir ci-dessous) sur le"
" DHT et attendre une réponse (`DhtPeerConnector::Impl::onResponseMsg`)."
#: ../../../developer/file-transfer.md:73
msgid ""
"4\\. Then a response is received from the DHT, which contains public "
"addresses of the peer device. We can now negotiate a TLS link (directly via "
"ICE, or via TURN as a fallback). This `TlsSocketEndpoint` is given to the "
"`PeerConnection` object as an output and the transfer can start."
msgstr ""
"4\\. Ensuite, une réponse est reçue du DHT, qui contient des adresses "
"publiques du périphérique de pair. Nous pouvons maintenant négocier un lien "
"TLS (directement via ICE, ou via TURN comme une rétroaction). Ce "
"`TlsSocketEndpoint` est donné à l'objet `PeerConnection` comme une sortie et"
" le transfert peut commencer."
#: ../../../developer/file-transfer.md:75
msgid ""
"5.\\ When the TLS socket is ready, the callback "
"`DataTransferFacade::Impl::onConnectionRequestReply` is called, and a "
"`OutgoingFileTransfer` is linked to the `PeerConnection` as an input. This "
"`OutgoingFileTransfer` contains a list of `SubOutgoingFileTransfer` (one per"
" device) where each sub transfer is a transfer to one device. We do that to "
"be able to furnish the most optimistic view of the transfer (if a contact as"
" 3 devices, where the contact cancel the transfer on one device, but "
"accepted the transfer on the two others, the most advanced transfer will be "
"shown)."
msgstr ""
"5.\\ Lorsque la prise TLS est prête, l'appel de retour "
"`DataTransferFacade::Impl::onConnectionRequestReply` est appelé, et un "
"`OutgoingFileTransfer` est lié au `PeerConnection` comme entrée. Ce "
"`OutgoingFileTransfer` contient une liste de `SubOutgoingFileTransfer` (un "
"par appareil) où chaque sous-transfer est un transfert vers un appareil. "
"Nous faisons cela pour pouvoir fournir la vue la plus optimiste du transfert"
" (si un contact comme 3 appareils, où le contact annule le transfert sur un "
"appareil, mais accepte le transfert sur les deux autres, le transfert le "
"plus avancé sera affiché)."
#: ../../../developer/file-transfer.md:77
msgid ""
"6\\. The `SubOutgoingFileTransfer` will first transfer the header of the "
"file, wait the peer acceptance (A \"GO\\n\" message on the socket) and then "
"will send the file."
msgstr ""
"6\\. Le `SubOutgoingFileTransfer` transfère d'abord l'en-tête du fichier, "
"attend l'acceptation par les pairs (un message \"GO\\n\" sur la prise) et "
"envoie ensuite le fichier."
#: ../../../developer/file-transfer.md:79
msgid ""
"7\\. If a cancel is received from the peer or the client or if the file "
"transfer finish, the connection will be closed via a `CANCEL` message on the"
" `DhtPeerConnector::eventLoop()` and the resources will be released."
msgstr ""
"7\\. Si une annulation est reçue du peer ou du client ou si le transfert de "
"fichier est terminé, la connexion sera fermée via un message `CANCEL` sur le"
" `DhtPeerConnector::eventLoop() ` et les ressources seront libérées."
#: ../../../developer/file-transfer.md:81
msgid ""
"![TLSsocketEndpoint](images/file-transfer-tlssocketendpoint-diagram.png)"
msgstr ""
"- [TLSsocketEndpoint] [images/transfert de fichier-tlssocketendpoint-"
"diagramme.png)"
#: ../../../developer/file-transfer.md:81
msgid "TLSsocketEndpoint"
msgstr "TLSsocketEndpoint"
#: ../../../developer/file-transfer.md:83
msgid "Receiving a file"
msgstr "Réception d'un dossier"
#: ../../../developer/file-transfer.md:86
msgid ""
"The same structure is used to receive files, but the method changes a bit:"
msgstr ""
"La même structure est utilisée pour recevoir des fichiers, mais la méthode "
"change un peu:"
#: ../../../developer/file-transfer.md:88
msgid ""
"The `JamiAccount` class is used to receives messages from the DHT, because "
"the first thing received will be the DHT request."
msgstr ""
"La classe `JamiAccount` est utilisée pour recevoir des messages du DHT, car "
"la première chose reçue sera la demande DHT."
#: ../../../developer/file-transfer.md:89
msgid ""
"Then, this message is given to `DhtPeerConnector: onRequestMessage()` "
"through the eventLoop."
msgstr ""
"Ensuite, ce message est transmis à `DhtPeerConnector: onRequestMessage() ` "
"via l'événementLoop."
#: ../../../developer/file-transfer.md:90
msgid ""
"The `DhtPeerConnector::Impl::answerToRequest` will try to connect to the "
"TURN server (if not connected) and initialize the ICE transport. This method"
" open 2 control connections to a TURN server (one to authorize IPv4 peers, "
"another one for IPv6 peers, due to **RFC 6156**) if it's not already open "
"and permit Peer public addresses to connect. Then, if the SDP received "
"doesn't contains ICE candidates, will use the TURN and craft the SDP answer "
"to wait for the peer. If the SDP contains ICE candidates, the method will "
"try to negotiate the link (or fallback on the TURN) and then answer the SDP "
"(with ICE candidates or not)."
msgstr ""
"Le `DhtPeerConnector::Impl::answerToRequest` tentera de se connecter au "
"serveur TURN (si ce n'est pas connecté) et d'initialiser le transport ICE. "
"Cette méthode ouvre 2 connexions de contrôle à un serveur TURN (une pour "
"autoriser les pairs IPv4, une autre pour les pairs IPv6, en raison de **RFC "
"6156**) si elle n'est pas déjà ouverte et permet aux adresses publiques de "
"pairs de se connecter."
#: ../../../developer/file-transfer.md:91
msgid ""
"Once the links are ready, like the sender, a TLS link is negotiated and "
"given to the `PeerConnection` given to the `IncomingFileTransfer` as an "
"input. The headers of the file will come and the client is now able to "
"accept or cancel the transfer."
msgstr ""
"Une fois que les liens sont prêts, comme l'expéditeur, un lien TLS est "
"négocié et donné à la `PeerConnection` donné à la `IncomingFileTransfer` "
"comme entrée."
#: ../../../developer/file-transfer.md:93
msgid "Re-ask for a previous file transfer"
msgstr "Re- demande pour un transfert de fichier précédent"
#: ../../../developer/file-transfer.md:95
msgid ""
"As specified in {ref}`developer/swarm:Other mime types`, the data-transfer "
"interactions are now synced and stored into conversations. So, a device can "
"easily detects if a file was downloaded or not. If not, it can asks all "
"members in the conversation to transmits the file again."
msgstr ""
"Comme spécifié dans {ref}`developer/swarm:Other mime types`, les "
"interactions de transfert de données sont désormais synchronisées et "
"stockées dans des conversations. Ainsi, un appareil peut facilement détecter"
" si un fichier a été téléchargé ou non."
#: ../../../developer/file-transfer.md:97
msgid ""
"To do this, the device will send a json with the mime-type: "
"`application/data-transfer-request+json` containing `conversation` (the "
"conversation's id), `interaction` (related interaction), `deviceId` the "
"device receiving the file."
msgstr ""
"Pour ce faire, l'appareil enverra un json avec le type mime: "
"`application/data-transfer-request+json` contenant `conversation` (id de la "
"conversation), `interaction` (interaction liée), `deviceId` l'appareil "
"recevant le fichier."
#: ../../../developer/file-transfer.md:99
msgid ""
"The sender now checks if the device is a device from the announced peer and "
"that the device is a member of the conversation, and can sends the file via "
"a classic file transfer."
msgstr ""
"L'expéditeur vérifie maintenant si l'appareil est un appareil de l'annonceur"
" et que l'appareil est un membre de la conversation, et peut envoyer le "
"fichier via un transfert de fichier classique."
#: ../../../developer/file-transfer.md:101
msgid ""
"The receiver can now accepts the first incoming transfer, download the file "
"and verify that the sha3sum is correct."
msgstr ""
"Le récepteur peut maintenant accepter le premier transfert entrant, "
"télécharger le fichier et vérifier que la somme sha3 est correcte."
#: ../../../developer/file-transfer.md:103
msgid "Schema"
msgstr "Schéma"
#: ../../../developer/file-transfer.md:105
msgid ""
"![Diagram: main schema diagram](images/file-transfer-main-schema-"
"diagram.png)"
msgstr "[Diagramme: schéma principal]"
#: ../../../developer/file-transfer.md:105
msgid "Diagram: main schema diagram"
msgstr "Diagramme: schéma principal"
#: ../../../developer/file-transfer.md:107
msgid "SDP sent over the DHT"
msgstr "SDP envoyé par le DHT"
#: ../../../developer/file-transfer.md:123
msgid ""
"Where `0d04b932` is the ufrag and `7c33834e7cf944bf0e367b47` the password of"
" the ICE session. `2130706431` and `1694498815` are the priority of the "
"candidates. `192.168.0.126 42751 typ host tcptype passive` is a passive host"
" candidate and `1694498815 X.X.X.X 42751 typ srflx tcptype passive` a "
"passive host reflecting the public ip (mapped via UPnP for example)."
msgstr ""
"Où `0d04b932` est l'ufrag et `7c33834e7cf944bf0e367b47` le mot de passe de "
"la session ICE. `2130706431` et `1694498815` sont la priorité des candidats."
" `192.168.0.126 42751 type hôte tcptype passif` est un candidat hôte passif "
"et `1694498815 X.X.X.X 42751 type srflx tcptype passif` un hôte passif "
"reflétant l'IP public (mappé par exemple via UPnP)."
#: ../../../developer/file-transfer.md:125
msgid "PJSIP related patches."
msgstr "Les correctifs liés au PJSIP."
#: ../../../developer/file-transfer.md:127
msgid "3 patches will be included into the PJSIP project:"
msgstr "3 correctifs seront inclus dans le projet PJSIP:"
#: ../../../developer/file-transfer.md:129
msgid ""
"RFC 6062, used to perform TURN over TCP (merged upstream: pjproject - "
"fa6616c43c7e19797084f4e02a67d1fb6fd99473)"
msgstr ""
"RFC 6062, utilisé pour effectuer le TURN sur TCP (fusé en amont: pjproject -"
" fa6616c43c7e19797084f4e02a67d1fb6fd99473)"
#: ../../../developer/file-transfer.md:130
msgid "RFC 6544, used to perform ICE over TCP"
msgstr "RFC 6544, utilisé pour effectuer des ICE sur TCP"
#: ../../../developer/file-transfer.md:131
msgid "A fix for pj_activesock"
msgstr "Une correction pour pj_activesock"
#: ../../../developer/file-transfer.md:133
msgid "Note that the stack for the file transfer is:"
msgstr "Notez que la pile pour le transfert de fichiers est:"
#: ../../../developer/file-transfer.md:145
msgid "Multi devices"
msgstr "Des appareils multiples"
#: ../../../developer/file-transfer.md:147
msgid ""
"A RING user can link its account to several devices. So, we need to "
"implement the transfer when a user send a file to a contact who have "
"multiple devices linked to this account."
msgstr ""
"Un utilisateur RING peut lier son compte à plusieurs appareils. Donc, nous "
"devons mettre en œuvre le transfert lorsqu'un utilisateur envoie un fichier "
"à un contact qui a plusieurs appareils liés à ce compte."
#: ../../../developer/file-transfer.md:151
msgid "First approach"
msgstr "Première approche"
#: ../../../developer/file-transfer.md:153
msgid ""
"The first approach was to send a request through the DHT to all devices and "
"the first devices which answers get the file to transfer. This is bad for "
"your contact because they will not know which device will receives will get "
"the transfer."
msgstr ""
"La première approche consistait à envoyer une demande via le DHT à tous les "
"appareils et les premiers appareils qui répondent obtiennent le fichier à "
"transférer."
#: ../../../developer/file-transfer.md:158
msgid "Current approach"
msgstr "Approche actuelle"
#: ../../../developer/file-transfer.md:160
msgid ""
"Now, we still send a request to all devices. The difference is that all "
"devices will have the notification for receiving a file and can "
"accept/refuse the transfer. The major part of the code for that is in "
"*data\\_transfer.cpp*."
msgstr ""
"Maintenant, nous envoyons toujours une demande à tous les appareils. La "
"différence est que tous les appareils auront la notification de recevoir un "
"fichier et peuvent accepter/rejeter le transfert. La plupart du code pour "
"cela est dans *data\\_transfer.cpp*."
#: ../../../developer/file-transfer.md:165
msgid ""
"Now (since <https://gerrit-ring.savoirfairelinux.com/#/c/9327/>), when a "
"user send a file, it will request a *PeerConnection* with all peer devices. "
"And for all connections, we attach a new input stream to have the ability to"
" accept/refuse/cancel each transfer separately."
msgstr ""
"Maintenant (puisque <https://gerrit-ring.savoirfairelinux.com/#/c/9327/>), "
"lorsqu'un utilisateur envoie un fichier, il demandera une *PeerConnection* "
"avec tous les appareils de pair."
#: ../../../developer/file-transfer.md:170
msgid ""
"In *data\\_transfer.cpp* we define the *OptimisticMetaOutgoingInfo* class "
"which represent the optimistic view to show to the client. It's optimistic "
"because if a contact accept a transfer on one device and refuse on others, "
"this class will show the ongoing file transfer. And it will only show an "
"error if all devices refuse the transfer."
msgstr ""
"Dans *data\\_transfer.cpp* nous définissons la classe "
"*OptimisticMetaOutgoingInfo* qui représente la vue optimiste à montrer au "
"client. C'est optimiste parce que si un contact accepte un transfert sur un "
"appareil et refuse sur d'autres, cette classe affichera le transfert de "
"fichier en cours. Et il ne montrera une erreur que si tous les appareils "
"refusent le transfert."
#: ../../../developer/file-transfer.md:176
msgid ""
"This class is linked to *SubOutgoingFileTransfer* which represent the state "
"of a transfer with one device. Clients will have the ability to show a sub "
"transfer instead the optimistic later (see TODO list)."
msgstr ""
"Cette classe est liée à *SubOutgoingFileTransfer* qui représentent l'état "
"d'un transfert avec un seul appareil. Les clients auront la possibilité "
"d'afficher un transfert sous-optimisé plus tard (voir liste TODO)."
#: ../../../developer/file-transfer.md:180
msgid "Using another TURN server"
msgstr "Utilisation d' un autre serveur TURN"
#: ../../../developer/file-transfer.md:182
msgid ""
"Actually the default TURN server is *turn.ring.cx*. But you can host your "
"own TURN server. For example by running a "
"[coturn](https://github.com/coturn/coturn) server."
msgstr ""
"En fait, le serveur par défaut de TURN est *turn.ring.cx*. Mais vous pouvez "
"héberger votre propre serveur de TURN. Par exemple en exécutant un serveur "
"[coturn] ((https://github.com/coturn/coturn)."
#: ../../../developer/file-transfer.md:186
msgid "`sudo turnserver -a -v -n -u user:password -r \"realm\"`"
msgstr "`sudo tourne-serveur -a -v -n -u utilisateur: mot de passe -r \"realm\""
#: ../../../developer/file-transfer.md:188
msgid ""
"Then, you can configure the TURN server in the advanced settings of RING."
msgstr ""
"Ensuite, vous pouvez configurer le serveur TURN dans les paramètres avancés "
"de RING."
#: ../../../developer/file-transfer.md:191
msgid ""
"Note: this needs some technical knowledges. Moreover, the TURN server should"
" see the same ip address of your node as the destination node or the peer "
"connection will fail (because the authorization will be incorrect)"
msgstr ""
"Remarque: cela nécessite des connaissances techniques. En outre, le serveur "
"TURN devrait voir la même adresse IP de votre nœud que le nœud de "
"destination ou la connexion partagée échouera (car l'autorisation sera "
"incorrecte)"
#: ../../../developer/file-transfer.md:199
msgid ""
"For now, if a file transfer fails when ongoing, the sender can not resume "
"the transfer and must relaunch the whole transfer. In the future, there will"
" be a retry button for resuming the transfer."
msgstr ""
"Pour l'instant, si un transfert de fichier échoue pendant la procédure, "
"l'expéditeur ne peut pas reprendre le transfert et doit relancer l'ensemble "
"du transfert."
#: ../../../developer/file-transfer.md:203
msgid ""
"Finally, because Jami do not support text conferences (just video "
"conferences, where there is one master merging slaves SIP calls), there is "
"no real file transfer in conferences. For now, when you are in a conference "
"on the gnome client for example: A master, B and C slave. B will be able to "
"send a file to A the master (C same) A will be able to send a file to B or "
"to C (just have to select the correct conversation)."
msgstr ""
"Enfin, comme Jami ne prend pas en charge les conférences textuelles "
"(seulement les conférences vidéo, où il y a un maître qui fusionne les "
"appels SIP des esclaves), il n'y a pas de véritable transfert de fichiers "
"dans les conférences. Pour l'instant, lorsque vous êtes dans une conférence "
"sur le client gnome par exemple : A maître, B et C esclaves. B pourra "
"envoyer un fichier à A le maître (C de même) A pourra envoyer un fichier à B"
" ou à C (il suffit de sélectionner la bonne conversation)."
#: ../../../developer/file-transfer.md:210
msgid "TODO List"
msgstr "Liste de TODO"
#: ../../../developer/file-transfer.md:212
msgid "Add unit-tests (https://gerrit-ring.savoirfairelinux.com/\\#/c/9365/)"
msgstr ""
"Ajout de tests unitaires (https://gerrit-"
"ring.savoirfairelinux.com/\\#/c/9365/)"
#: ../../../developer/file-transfer.md:213
msgid "Show subtransfers status for outgoing files"
msgstr "Afficher l'état des sous-transférences pour les fichiers sortants"
#: ../../../developer/file-transfer.md:214
msgid "Offset resume (for failed transfer)"
msgstr "Résumé de l'offre (pour transfert raté)"
#: ../../../developer/important-rfcs.md:1
msgid "Important RFCs"
msgstr "RFCs importants"
#: ../../../developer/important-rfcs.md:4
msgid "SIP"
msgstr "SIP"
#: ../../../developer/important-rfcs.md:6
msgid "Reference: <http://tools.ietf.org/html/rfc3261>"
msgstr "Référence: <http://tools.ietf.org/html/rfc3261>"
#: ../../../developer/important-rfcs.md:8
#: ../../../developer/important-rfcs.md:35
#: ../../../developer/important-rfcs.md:44
msgid "Valuable updates and extensions:"
msgstr "Des mises à jour et des extensions précieuses:"
#: ../../../developer/important-rfcs.md:10
msgid "SIP Re-INVITE: <http://tools.ietf.org/html/rfc6141>"
msgstr "SIP RÉ-INVITE: <http://tools.ietf.org/html/rfc6141>"
#: ../../../developer/important-rfcs.md:12
msgid "ICE"
msgstr "ICE"
#: ../../../developer/important-rfcs.md:14
msgid "Reference: <http://tools.ietf.org/html/rfc5245>"
msgstr ""
"Les résultats de l'enquête ont été obtenus en fonction des résultats "
"obtenus."
#: ../../../developer/important-rfcs.md:16
msgid "ICE TCP"
msgstr "ICE TCP"
#: ../../../developer/important-rfcs.md:18
msgid "Reference: <http://tools.ietf.org/html/rfc6544>"
msgstr ""
#: ../../../developer/important-rfcs.md:20
msgid "SDP"
msgstr "SDP"
#: ../../../developer/important-rfcs.md:22
msgid "Reference: <http://tools.ietf.org/html/rfc4566>"
msgstr "Référence: <http://tools.ietf.org/html/rfc4566>"
#: ../../../developer/important-rfcs.md:24
msgid ""
"How to use SDP: <http://tools.ietf.org/html/rfc3264> Valuable updates and "
"extensions:"
msgstr ""
"Comment utiliser SDP: <http://tools.ietf.org/html/rfc3264> Valuables mises à"
" jour et extensions:"
#: ../../../developer/important-rfcs.md:27
msgid "SDP and IPv6: <http://tools.ietf.org/html/rfc6157>"
msgstr "SDP et IPv6: <http://tools.ietf.org/html/rfc6157>"
#: ../../../developer/important-rfcs.md:28
msgid "SDP for SRTP: <http://tools.ietf.org/html/rfc4568>"
msgstr "SDP pour le SRTP: <http://tools.ietf.org/html/rfc4568>"
#: ../../../developer/important-rfcs.md:31
msgid "RTP"
msgstr "RTP"
#: ../../../developer/important-rfcs.md:33
msgid "Reference: <http://tools.ietf.org/html/rfc3550>"
msgstr "Référence: <http://tools.ietf.org/html/rfc3550>"
#: ../../../developer/important-rfcs.md:37
msgid "RTP and RTCP on same port: <http://tools.ietf.org/html/rfc5761>"
msgstr "RTP et RTCP sur le même port: <http://tools.ietf.org/html/rfc5761>"
#: ../../../developer/important-rfcs.md:40
msgid "SRTP"
msgstr "RRSP"
#: ../../../developer/important-rfcs.md:42
msgid "Reference: <http://tools.ietf.org/html/rfc3711>"
msgstr "Référence: <http://tools.ietf.org/html/rfc3711>"
#: ../../../developer/important-rfcs.md:46
msgid ""
"DTLS for SRTP: <https://tools.ietf.org/html/rfc5763> et "
"<http://tools.ietf.org/html/rfc5764>"
msgstr ""
"DTLS pour SRTP: <https://tools.ietf.org/html/rfc5763> et "
"<http://tools.ietf.org/html/rfc5764>"
#: ../../../developer/important-rfcs.md:47
msgid "AES-192 and AES-256: <https://tools.ietf.org/html/rfc6188>"
msgstr "AES-192 et AES-256: <https://tools.ietf.org/html/rfc6188>"
#: ../../../developer/important-rfcs.md:48
msgid "AES-GCM: <https://tools.ietf.org/html/rfc7714>"
msgstr ""
"Les données de référence sont fournies par le service de l'information."
#: ../../../developer/improving-quality-of-jami.md:1
msgid "Improving the quality of Jami"
msgstr "Amélioration de la qualité de Jami"
#: ../../../developer/improving-quality-of-jami.md:4
msgid "Unit-tests"
msgstr "Tests unitaires"
#: ../../../developer/improving-quality-of-jami.md:6
msgid ""
"It is harder to make unit-test on Jami project because of the race "
"conditions on multi-level dependance."
msgstr ""
"Il est plus difficile de faire un test unitaire sur le projet Jami en raison"
" des conditions de course sur la dépendance à plusieurs niveaux."
#: ../../../developer/improving-quality-of-jami.md:8
msgid ""
"There is about 30 unit-tests and 26% coverage. Due to Jami high demand to "
"give new functionalities to user quickly, they are not maintained by the "
"developers or by a QA dept."
msgstr ""
"Il y a environ 30 tests unitaires et une couverture de 26%. En raison de la "
"forte demande de Jami pour donner de nouvelles fonctionnalités à "
"l'utilisateur rapidement, elles ne sont pas maintenues par les développeurs "
"ou par un département de QA."
#: ../../../developer/improving-quality-of-jami.md:10
msgid ""
"We use lcov for the coverage, you can find the lcovs configuration in the "
"daemons Makefile.am. Also, the coverage can be found at "
"https://docs.jami.net/coverage/"
msgstr ""
"Nous utilisons lcov pour la couverture, vous pouvez trouver la configuration"
" de lcovs dans le daemons Makefile.am."
#: ../../../developer/improving-quality-of-jami.md:12
msgid ""
"A system needs to be implemented to start convincing the team to make a "
"unit-test for new code before merging"
msgstr ""
"Un système doit être mis en place pour commencer à convaincre l'équipe de "
"faire un test unitaire pour un nouveau code avant de fusionner"
#: ../../../developer/improving-quality-of-jami.md:14
msgid ""
"You can launch them by doing make check in the daemon folder or separately"
" in the unit-test folder with gdb: gdb ut_media_encoder"
msgstr ""
"Vous pouvez les lancer en faisant make check dans le dossier daemon ou "
"séparément dans le dossier test unitaire avec gdb: gdb ut_media_encoder"
#: ../../../developer/improving-quality-of-jami.md:16
msgid ""
"The environment needs to be set with --disable-shared during the "
"./configure command"
msgstr ""
"L'environnement doit être réglé avec --disable-shared pendant la "
"commande./configurer"
#: ../../../developer/improving-quality-of-jami.md:18
msgid "Framework Tests"
msgstr "Tests de cadre"
#: ../../../developer/improving-quality-of-jami.md:20
msgid ""
"You can find framework tests in the daemons Makefile.am and lunch it with "
"make integration. This calls jami_test.py script in the tools/dringctrl "
"folder. It uses dringctrl.py and controller.py which let you control Jami "
"through bash."
msgstr ""
"Vous pouvez trouver des tests de framework dans le daemon Makefile.am et le "
"déjeuner avec make integration. Cela appelle le script jami_test.py dans le "
"dossier outils/dringctrl. Il utilise dringctrl.py et controller.py qui vous "
"permettent de contrôler Jami via bash."
#: ../../../developer/improving-quality-of-jami.md:22
msgid ""
"This makes a series of calls to assure jamis opendht network is stable."
msgstr ""
"Cela fait une série d'appels pour s'assurer que le réseau ouvert de Jami' "
"est stable."
#: ../../../developer/improving-quality-of-jami.md:24
msgid ""
"Other framework tests need to be implemented in the future to tests Jamis "
"functionalities as a whole."
msgstr ""
"D'autres tests-cadres doivent être mis en œuvre à l'avenir pour tester les "
"fonctionnalités de Jami dans leur ensemble."
#: ../../../developer/improving-quality-of-jami.md:26
msgid "Integration tests"
msgstr "Tests d'intégration"
#: ../../../developer/improving-quality-of-jami.md:28
msgid ""
"Each commit goes through integration tests in dockers on the build machines "
"you can find the details at: jenkins.jami.net"
msgstr ""
"Chaque commande passe par des tests d'intégration dans les dockers des "
"machines de construction. Vous pouvez trouver les détails à: "
"jenkins.jami.net"
#: ../../../developer/improving-quality-of-jami.md:30
msgid ""
"Code-review is made by a fellow developer, sometimes the code is reviewed by"
" the same developer, this should be avoided to emphasize Linus law. The "
"Jenkins verified label is sometimes discarded and replaced by +1 from a "
"developer, this should also be avoided."
msgstr ""
"Le code-révision est effectuée par un développeur collègue, parfois le code "
"est révisé par le même développeur, cela doit être évité pour mettre "
"l'accent sur la loi Linus."
#: ../../../developer/improving-quality-of-jami.md:32
msgid ""
"Sonarqube lets Jenkins build Jami and verify linting. You can find filters "
"and results at: sonar- jami.savoirfairelinux.net Sonar uses clang-tidy as a "
"preprocessor linting compilator, you can find clangs filters in .clang-tidy"
" file in the daemon folder."
msgstr ""
"Sonarqube permet à Jenkins de construire Jami et de vérifier le linting. "
"Vous pouvez trouver des filtres et des résultats à: sonar- "
"jami.savoirfairelinux.net Sonar utilise clang-tidy comme un préprocesseur de"
" linting compilateur, vous pouvez trouver des filtres clangs dans le "
"fichier.clang-tidy dans le dossier daemon."
#: ../../../developer/improving-quality-of-jami.md:34
msgid ""
"On sflvault sonarqube can be found at service m#2637 and admin logins at "
"service s#7169"
msgstr ""
"Sur sflvault sonarqube peut être trouvé au service m#2637 et aux connexions "
"d'administration au service s#7169"
#: ../../../developer/improving-quality-of-jami.md:36
msgid "Doc and feedback:"
msgstr "Doc et les commentaires:"
#: ../../../developer/improving-quality-of-jami.md:38
msgid "You can find all the documentation on docs.jami.net"
msgstr "Vous pouvez trouver toute la documentation sur docs.jami.net"
#: ../../../developer/improving-quality-of-jami.md:40
msgid "Issues are made by developers or users on git.jami.net"
msgstr ""
"Les problèmes sont posés par les développeurs ou les utilisateurs sur "
"git.jami.net"
#: ../../../developer/improving-quality-of-jami.md:42
msgid "Monitoring"
msgstr "Surveillance"
#: ../../../developer/improving-quality-of-jami.md:44
msgid ""
"A script is called every 30 minutes on a virtual machine jami-"
"monitorpeervm-01. You can find it on sflvault service s#7209 and is calling "
"an other client viratual jami- monitorpeer-02 (service s#7224). A series of "
"calls is being made and it returns the failure rate. You can find all the "
"details at https://wiki.savoirfairelinux.com/wiki/Jami-"
"monitorpeervm-01.mtl.sfl."
msgstr ""
"Un script est appelé toutes les 30 minutes sur une machine virtuelle jami-"
"monitorpeervm-01. Vous pouvez le trouver sur le service s#7209 et appelle un"
" autre client virtuel jami-monitorpeer-02 (service s#7224). Une série "
"d'appels est faite et il renvoie le taux d'échec. Vous pouvez trouver tous "
"les détails à https://wiki.savoirfairelinux.com/wiki/Jami-"
"monitorpeervm-01.mt.sfl."
#: ../../../developer/improving-quality-of-jami.md:46
msgid ""
"If needed, the manual command is ./script.sh peer "
"031acbb73f2a3385b2babc7161f13325be103431"
msgstr ""
"Si nécessaire, la commande manuelle est./script.sh peer "
"031acbb73f2a3385b2babc7161f13325be103431"
#: ../../../developer/improving-quality-of-jami.md:48
msgid ""
"It traces a real time point by point graph on "
"https://monitoring.savoirfairelinux.com/grafana/dashboard/script/dyndash.js?host=jami-"
"monitorpeervm-01.mtl.sfl&service=Check%20JamiCall&panelId=1&fullscreen&orgId=1"
msgstr ""
"Il suit un graphique de point par point en temps réel sur "
"https://monitoring.savoirfairelinux.com/grafana/dashboard/script/dyndash.js?host=jami-"
"monitorpeervm-01.mtl.sfl&service=Check%20JamiCall&panelId=1&fullscreen&orgId=1"
#: ../../../developer/improving-quality-of-jami.md:50
msgid "Smoke tests"
msgstr "Tests de fumée"
#: ../../../developer/improving-quality-of-jami.md:52
msgid "Before each releases every clients MUST past a list of scenarios."
msgstr ""
"Avant de sortir, chaque client doit passer par une liste de scénarios."
#: ../../../developer/improving-quality-of-jami.md:54
msgid "Scenarios are described here: [Jami smoke tests](jami-smoke-tests.ods)"
msgstr "Les scénarios sont décrits ici: [test de fumée de Jami]"
#: ../../../developer/improving-quality-of-jami.md:57
msgid ""
"They are reviewed by QA dpt. before sending it to the developers if needed."
msgstr ""
"Ils sont examinés par QA dpt. avant de l'envoyer aux développeurs si "
"nécessaire."
#: ../../../developer/improving-quality-of-jami.md:59
msgid ""
"If a release contains a network commit that has been merged, the QA dept. "
"Should be able to automate the different connectivity tests (as descibed "
"below in Calls configurations)"
msgstr ""
"Si une version contient un commande réseau qui a été fusionné, le "
"département d'AQ doit être en mesure d'automatiser les différents tests de "
"connectivité (comme décrit ci-dessous dans les configurations Appels)"
#: ../../../developer/improving-quality-of-jami.md:61
msgid "Calls configurations."
msgstr "Il appelle les configurations."
#: ../../../developer/improving-quality-of-jami.md:63
msgid "This is the list of network configurations that need to be tested:"
msgstr "Voici la liste des configurations de réseau à tester:"
#: ../../../developer/improving-quality-of-jami.md:65
msgid ""
"(IPv4 | IPv6) + (TURN | !TURN) + (STUN | !STUN) + (UPnP | !UPnP) for both "
"sides."
msgstr ""
"(IPv4! IPv6) + (TURN!! TURN) + (STUN!! STUN) + (UPnP!! UPnP) pour les deux "
"côtés."
#: ../../../developer/improving-quality-of-jami.md:67
msgid ""
"If both sides are IPv4 only without TURN/STUN/UPnP, the call should be only "
"local."
msgstr ""
"Si les deux parties sont IPv4 uniquement sans TURN/STUN/UPnP, l'appel doit "
"être local."
#: ../../../developer/improving-quality-of-jami.md:69
msgid "Special note: FDroid"
msgstr "Note spéciale: FDroid"
#: ../../../developer/improving-quality-of-jami.md:71
msgid ""
"The script to generate MR is in the client-android repo "
"(fdroidMergeRequest.sh)"
msgstr ""
"Le script pour générer MR est dans le repo client-android "
"(fdroidMergeRequest.sh)"
#: ../../../developer/improving-quality-of-jami.md:73
msgid "What needs to be done"
msgstr "Ce qui doit être fait"
#: ../../../developer/improving-quality-of-jami.md:75
msgid "Push coverage closer to 60%"
msgstr "Poussez la couverture à 60%"
#: ../../../developer/improving-quality-of-jami.md:77
msgid ""
"Establish a system within the team to assure maintenance and creation of "
"unit-tests."
msgstr ""
"Établir un système au sein de l'équipe pour assurer la maintenance et la "
"création de tests unitaires."
#: ../../../developer/improving-quality-of-jami.md:79
msgid ""
"Each major functionality should be tested as whole by adding a framework "
"test (i.e. making sure a message was received, the call was ended well on "
"both side, etc...)"
msgstr ""
"Chaque fonctionnalité majeure doit être testée dans son ensemble en ajoutant"
" un test cadre (c'est-à-dire en s'assurant que le message a été reçu, que "
"l'appel a été terminé bien des deux côtés, etc...)"
#: ../../../developer/improving-quality-of-jami.md:81
msgid ""
"Each new functionality should be tested on each platform before merging it "
"to reduce regression"
msgstr ""
"Chaque nouvelle fonctionnalité doit être testée sur chaque plateforme avant "
"de la fusionner pour réduire la régression."
#: ../../../developer/improving-quality-of-jami.md:83
msgid "Integrate sonarqube on each client"
msgstr "Intégrer sonarqube sur chaque client"
#: ../../../developer/improving-quality-of-jami.md:85
msgid "Automate the testing of Jamis behavior on network compatibility"
msgstr ""
"Automatiser le test du comportement de Jami sur la compatibilité réseau"
#: ../../../developer/improving-quality-of-jami.md:87
msgid "Make a make_ring.py script adaptable to windows also"
msgstr "Faites un script make_ring.py adapté aux fenêtres aussi"
#: ../../../developer/index.rst:3
msgid "Developer manual"
msgstr "Manuel de développement"
#: ../../../developer/index.rst:5
msgid ""
"The Jami developer manual is a reference for Jami developers and "
"contributors, documenting the various aspects of hacking on and developing "
"Jami, including in-depth explanations of how Jami is designed and how its "
"various parts work together."
msgstr ""
"Le manuel de développement de Jami est une référence pour les développeurs "
"et les contributeurs de Jami, documentant les différents aspects du piratage"
" et du développement de Jami, y compris des explications approfondies sur la"
" façon dont Jami est conçu et comment ses différentes parties fonctionnent "
"ensemble."
#: ../../../developer/introduction.md:4
msgid ""
"Greetings! In the developer manual of Jami, you will learn about how Jami "
"works from the high level, to the low, with some examples."
msgstr ""
"Dans le manuel de développement de Jami, vous apprendrez comment Jami "
"fonctionne du haut au bas, avec quelques exemples."
#: ../../../developer/introduction.md:7
msgid "Table of contents"
msgstr "Tableau des contenus"
#: ../../../developer/introduction.md:9
msgid "{doc}`apis-of-jami`"
msgstr "Je suis un peu dégoûté."
#: ../../../developer/introduction.md:10
msgid "Basic features"
msgstr "Caractéristiques de base"
#: ../../../developer/introduction.md:11
msgid "{doc}`account-management`"
msgstr "{doc}`administration comptable"
#: ../../../developer/introduction.md:12
msgid "{doc}`contact-management`"
msgstr "{doc}`contact-management"
#: ../../../developer/introduction.md:13
msgid "{doc}`swarm`"
msgstr "Je suis un homme."
#: ../../../developer/introduction.md:14
msgid "{doc}`calls`"
msgstr "Je vous appelle"
#: ../../../developer/introduction.md:15
msgid "{doc}`file-transfer` (deprecated; see {doc}`swarm`)"
msgstr "{doc}`file-transfer` (déprécié; voir {doc}`swarm`)"
#: ../../../developer/introduction.md:16
msgid "{doc}`message-displayed-status`"
msgstr "{doc}`message-affiché-status"
#: ../../../developer/introduction.md:18
msgid "Advanced features"
msgstr "Fonctionnalités avancées"
#: ../../../developer/introduction.md:19
msgid "Manage audio/videos"
msgstr "Gérer les enregistrements audio/vidéo"
#: ../../../developer/introduction.md:20
msgid "Call recording"
msgstr "Enregistrement d'appel"
#: ../../../developer/introduction.md:21
msgid ""
"[The push notifications "
"system](https://github.com/savoirfairelinux/opendht/wiki/Push-notifications-"
"support)"
msgstr ""
"[Le système de notifications de "
"poussée]https://github.com/savoirfairelinux/opendht/wiki/Push-notifications-"
"support)"
#: ../../../developer/introduction.md:22
msgid "What is a DHTProxy"
msgstr "Qu' est un DHTProxy"
#: ../../../developer/introduction.md:23
msgid "Supporting SIP"
msgstr "Appui à l'IPS"
#: ../../../developer/introduction.md:24
msgid "{doc}`setting-up-your-own-turn-server`"
msgstr "{doc}`setting-up-your-own-turn-server`"
#: ../../../developer/introduction.md:25
msgid "{doc}`synchronizing-profiles`"
msgstr "{doc}`synchronisation-profiles"
#: ../../../developer/introduction.md:27
msgid "{doc}`../contribute`"
msgstr "{doc}`../contribution`"
#: ../../../developer/introduction.md:28
msgid "{doc}`Build instructions <../build/building>`"
msgstr "{doc}`Instructions de construction <../construction/construction>"
#: ../../../developer/introduction.md:29
msgid "{doc}`submitting-your-first-patch`"
msgstr "{doc}` soumettre-votre premier-parch `"
#: ../../../developer/introduction.md:30
msgid "{doc}`feature-requests`"
msgstr "{doc}`demandes de caractéristiques"
#: ../../../developer/introduction.md:32
msgid "Group chats in details"
msgstr "Des discussions de groupe détaillées"
#: ../../../developer/introduction.md:33 ../../../developer/introduction.md:42
msgid "Description"
msgstr "Description"
#: ../../../developer/introduction.md:34
msgid "{doc}`connection-manager`"
msgstr "Le directeur de la connexion"
#: ../../../developer/introduction.md:35
msgid "DRT"
msgstr "RDC"
#: ../../../developer/introduction.md:36
msgid "{doc}`calls-in-swarm`"
msgstr "{doc}`appels-en-groupes"
#: ../../../developer/introduction.md:38
msgid "Drafts"
msgstr "Les projets"
#: ../../../developer/introduction.md:39
msgid "{doc}`conference-protocol`"
msgstr "{doc}`conférence-protocole"
#: ../../../developer/introduction.md:40
msgid "{doc}`synchronization-protocol`"
msgstr "{doc}` synchronisation-protocol"
#: ../../../developer/introduction.md:44
msgid ""
"If you are reading this, chances are you'd either like to contribute to one "
"of Jami's components/projects, or to implement your own client. There are "
"three main layers in this project:"
msgstr ""
"Si vous lisez ceci, il est probable que vous souhaitiez contribuer à l'un "
"des composants/projets de Jami, ou mettre en œuvre votre propre client."
#: ../../../developer/introduction.md:48
msgid ""
"[OpenDHT](https://opendht.net), used for the p2p communication. You can "
"interact with this library like any C++ library, or using the Python "
"wrapper, or via its [REST "
"API](https://github.com/savoirfairelinux/opendht/wiki/REST-API)."
msgstr ""
"[OpenDHT](https://opendht.net), utilisé pour la communication p2p. Vous "
"pouvez interagir avec cette bibliothèque comme n'importe quelle bibliothèque"
" C ++, ou en utilisant l'enveloppe Python, ou via son [REST API] "
"((https://github.com/savoirfairelinux/opendht/wiki/REST-API)."
#: ../../../developer/introduction.md:53
msgid ""
"The daemon, which is the main part. It's the part which does all the logic "
"for Jami and interacts with OpenDHT, pjsip, FFmpeg, and the other libraries,"
" and implements the whole protocol. If you'd like to do create a new Jami "
"client, we recommend implementing it on top of this daemon, using one of its"
" many APIs (REST, DBus, libwrap, or JNI)."
msgstr ""
"Le daemon, qui est la partie principale. C'est la partie qui fait toute la "
"logique pour Jami et interagit avec OpenDHT, pjsip, FFmpeg, et les autres "
"bibliothèques, et implémentent tout le protocole. Si vous voulez créer un "
"nouveau client Jami, nous vous recommandons de le mettre en œuvre en plus de"
" ce daemon, en utilisant l'une de ses nombreuses API (REST, DBus, libwrap, "
"ou JNI)."
#: ../../../developer/introduction.md:60
msgid "The client part, which is basically the *frontend*."
msgstr "La partie client, qui est essentiellement le frontend."
#: ../../../developer/introduction.md:62
msgid ""
"The developer manual of Jami will explain the different features from all of"
" these layers."
msgstr ""
"Le manuel de développement de Jami expliquera les différentes "
"caractéristiques de toutes ces couches."
#: ../../../developer/jami-identifiers.md:1
msgid "Jami identifiers"
msgstr "Identifiants Jami"
#: ../../../developer/jami-identifiers.md:4
msgid ""
"There are many identifiers in Jami. We need to unify the naming of these "
"identifiers between all implementations. This page reference various kind of"
" identifiers used in Jami with relevant examples."
msgstr ""
"Il y a beaucoup d'identifiants dans Jami. Nous devons unifier le nom de ces "
"identifiants entre toutes les implémentations. Cette page fait référence à "
"différents types d'identifiants utilisés dans Jami avec des exemples "
"pertinents."
#: ../../../developer/jami-identifiers.md:8
msgid ""
"**Jami Infohash** or **Jami public key fingerprint** : a public key "
"fingerprint such as `3d1112ab2bb089370c0744a44bbbb0786418d40b`"
msgstr ""
"**Jami Infohash** ou **Jami Key Public Fingerprint**: une empreinte digitale"
" à clé publique telle que `3d1112ab2bb089370c0744a44bb0786418d40b`"
#: ../../../developer/jami-identifiers.md:10
msgid ""
"**Registered name** : a username associated to a Jami Infohash on the "
"blockchain such as `jeandupont`"
msgstr ""
"**Nom enregistré**: un nom d'utilisateur associé à un Jami Infohash sur la "
"blockchain tel que `jeandupont`"
#: ../../../developer/jami-identifiers.md:12
msgid ""
"**URI** : a Jami or SIP URI such as "
"`jami:3d1112ab2bb089370c0744a44bbbb0786418d40b` or `jami:jeandupont` or "
"`<sip:nnnnn@host:5060>`. Must be compliant with "
"[rfc3986](https://tools.ietf.org/html/rfc3986). If it's a SIP URI, it must "
"be compliant with "
"[rfc3261#19.1](https://tools.ietf.org/html/rfc3261#section-19.1)."
msgstr ""
"**URI**: un URI Jami ou SIP tel que "
"`jami:3d1112ab2bb089370c0744a44bb0786418d40b` ou `jami:jeandupont` ou "
"`<sip:nnnnn@host:5060>`. Il doit être conforme à "
"[rfc3986]https://tools.ietf.org/html/rfc3986). S'il s'agit d'un URI SIP, il "
"doit être conforme à "
"[rfc3261#19.1](https://tools.ietf.org/html/rfc3261#section-19.1)."
#: ../../../developer/jami-identifiers.md:15
msgid ""
"**Canonical URI** : `jami:3d1112ab2bb089370c0744a44bbbb0786418d40b` or "
"`sip:nnnnn@host:5060`. The most simplified form of the URI. Registered name "
"must be resolved, doesn't include <> brackets or display name. Prefixed with"
" the scheme (`jami:` or `sip:` or `sips:`)."
msgstr ""
"**URI canonique**: `jami:3d1112ab2bb089370c0744a44bb0786418d40b` ou "
"`sip:nnnnn@host:5060`. La forme la plus simplifiée de l'URI. Le nom "
"enregistré doit être résolu, ne comprend pas de parenthèses ou de nom "
"d'affichage. Préfixé avec le schéma (`jami:` ou `sip:` ou `sips:`)."
#: ../../../developer/jami-identifiers.md:16
msgid ""
"**User ID**: registered name (preferred) or public key fingerprint. User-"
"facing identifier for an account public key."
msgstr ""
"**Identification utilisateur**: nom enregistré (privé) ou empreinte digitale"
" de clé publique. Identificateur d'utilisateur d'une clé publique de compte."
#: ../../../developer/jami-identifiers.md:17
msgid ""
"**Display name** or **Profile name** : an editable user-defined profile name"
" such as `Jean Dupont`."
msgstr ""
"**Nom d'affichage** ou **Nom de profil**: un nom de profil éditable défini "
"par l'utilisateur tel que `Jean Dupont`."
#: ../../../developer/jami-identifiers.md:20
msgid "When displaying a contact:"
msgstr "Lors de l'affichage d'un contact:"
#: ../../../developer/jami-identifiers.md:28
msgid "If Display name is empty, User ID is shown instead"
msgstr ""
"Si le nom de l'affichage est vide, l'identifiant d'utilisateur est affiché à"
" la place"
#: ../../../developer/jami-identifiers.md:29
msgid "If both lines have the same content, only the first line is displayed"
msgstr ""
"Si les deux lignes ont le même contenu, seule la première ligne est affichée"
#: ../../../developer/jami-identifiers.md:31
msgid ""
"If no photo is available and a registered name (ring) or display name (sip) "
"is available, the first letter of this name can be used to generate a "
"placeholder. Otherwise a generic placeholder is used."
msgstr ""
"Si aucune photo n'est disponible et qu'un nom enregistré (anneau) ou un nom "
"d'affichage (sip) est disponible, la première lettre de ce nom peut être "
"utilisée pour générer un placeholder."
#: ../../../developer/jami-identifiers.md:32
msgid ""
"If no photo is available, a placeholder with an Canonical URI-specific "
"background color can be used:"
msgstr ""
"Si aucune photo n'est disponible, un placeholder avec une couleur de fond "
"spécifique à l'URI canonique peut être utilisé:"
#: ../../../developer/jami-identifiers.md:57
msgid ""
"Color values are from the material palette: https://material.io/tools/color"
msgstr ""
"Les valeurs de couleur sont tirées de la palette de matériaux: "
"https://material.io/tools/color"
#: ../../../developer/jami-identifiers.md:60
msgid "![références_couleurs_jami](images/jami-reference-colours.png)"
msgstr "- Je suis en train de faire une demande de règlement."
#: ../../../developer/jami-identifiers.md:60
msgid "références_couleurs_jami"
msgstr "références_couleurs_jami"
#: ../../../developer/location-sharing.md:1
msgid "Location Sharing on QT Client"
msgstr "Partage de localisation sur le client QT"
#: ../../../developer/location-sharing.md:7
msgid "Trivial use"
msgstr "Utilisation triviale"
#: ../../../developer/location-sharing.md:9
msgid ""
"In a conversation, the user can click on the location icon to display a map."
" If `Location Services` is enabled on the device, the user's position will "
"be shown on the map, along with the locations of all other members who are "
"sharing their location (from all conversations of the selected account). The"
" user can toggle location sharing on and off by clicking the location "
"sharing buttons. By default, the user's location is shared for 15 minutes, "
"but this setting can be modified in the app's settings."
msgstr ""
"Dans une conversation, l'utilisateur peut cliquer sur l'icône de "
"localisation pour afficher une carte. Si `Location Services` est activé sur "
"l'appareil, la position de l'utilisateur sera affichée sur la carte, ainsi "
"que les localisations de tous les autres membres qui partagent leur "
"localisation (de toutes les conversations du compte sélectionné). "
"L'utilisateur peut activer et désactiver le partage de localisation en "
"cliquant sur les boutons de partage de localisation. Par défaut, "
"l'emplacement de l'utilisateur est partagé pendant 15 minutes, mais ce "
"paramètre peut être modifié dans les paramètres de l'application."
#: ../../../developer/location-sharing.md:11
msgid ""
"When a user is sharing their location in a conversation, a red location icon"
" will appear on the conversation icon. If the user receives a location from "
"another member, an orange location icon will be displayed on all "
"conversations in which the member is present."
msgstr ""
"Lorsqu'un utilisateur partage son emplacement dans une conversation, une "
"icône de localisation rouge apparaît sur l'icône de conversation. Si "
"l'utilisateur reçoit un emplacement d'un autre membre, une icône de "
"localisation orange apparaît sur toutes les conversations dans lesquelles le"
" membre est présent."
#: ../../../developer/location-sharing.md:13
msgid ""
"The user can interact with the map by recentering, zooming in and out, "
"moving it, and closing it. The map can also be pinned or unpinned. When the "
"map is unpinned, it can be repinned if the user is in the right account. "
"This feature allows the user to keep the map visible while continuing to use"
" Jami."
msgstr ""
"L'utilisateur peut interagir avec la carte en récentrisant, en zoomant, en "
"la déplaçant et en la fermant. La carte peut également être coincée ou "
"dépignée. Lorsque la carte est dépignée, elle peut être repignée si "
"l'utilisateur est dans le bon compte. Cette fonctionnalité permet à "
"l'utilisateur de garder la carte visible tout en continuant à utiliser Jami."
#: ../../../developer/location-sharing.md:15
msgid "Advanced use"
msgstr "Utilisation avancée"
#: ../../../developer/location-sharing.md:17
msgid "Multi-sharing"
msgstr "Partage multi-partition"
#: ../../../developer/location-sharing.md:19
msgid "scenario"
msgstr "scénario"
#: ../../../developer/location-sharing.md:21
msgid ""
"The user is already sharing location with conversation A and conversation B."
msgstr ""
"L'utilisateur partage déjà l'emplacement avec la conversation A et la "
"conversation B."
#: ../../../developer/location-sharing.md:23
msgid "Feature"
msgstr "Caractéristiques"
#: ../../../developer/location-sharing.md:25
msgid ""
"If the user switches to conversation C, the map is still visible and the "
"user has two options"
msgstr ""
"Si l'utilisateur passe à la conversation C, la carte est toujours visible et"
" l'utilisateur a deux options"
#: ../../../developer/location-sharing.md:27
msgid ""
"Click on the location sharing button to also share location with the members"
" of conversation C."
msgstr ""
"Cliquez sur le bouton partage de localisation pour partager également "
"l'emplacement avec les membres de la conversation C."
#: ../../../developer/location-sharing.md:28
msgid ""
"Click the location sharing end button. This will bring up a pop-up that "
"allows the user to either turn off location sharing entirely or only stop "
"sharing their location with the members of conversation C."
msgstr ""
"Cliquez sur le bouton de fin partage de localisation. Cela fera apparaître "
"une fenêtre contextuelle qui permet à l'utilisateur de désactiver "
"complètement le partage de localisation ou de ne partager son emplacement "
"qu'avec les membres de la conversation C."
#: ../../../developer/location-sharing.md:30
msgid "Pinned window"
msgstr "Vitrine en pinceau"
#: ../../../developer/location-sharing.md:32
msgid ""
"If the window is unpinned, the user will not be able to click on the "
"location sharing button because the window is no longer connected to a "
"conversation. To start sharing location with new people, the user must re-"
"pin the window. Note that unpinning the window does not affect any ongoing "
"location sharing. Additionally, clicking on the location sharing end button "
"while the window is unpinned will stop all current location sharing and no "
"pop-up will appear to allow the user to select a specific conversation to "
"stop sharing with."
msgstr ""
"Si la fenêtre est dépinte, l'utilisateur ne pourra pas cliquer sur le bouton"
" de partage de localisation car la fenêtre n'est plus connectée à une "
"conversation. Pour commencer à partager l'emplacement avec de nouvelles "
"personnes, l'utilisateur doit re-pinser la fenêtre. Notez que le dépôt de la"
" fenêtre n'affecte pas le partage de localisation en cours. En outre, en "
"cliquant sur le bouton de fin de partage de localisation pendant que la "
"fenêtre est dépinte, tout partage de localisation actuel sera arrêté et "
"aucune fenêtre contextuelle ne apparaîtra pour permettre à l'utilisateur de "
"sélectionner une conversation spécifique avec laquelle il ne pourra plus "
"partager."
#: ../../../developer/location-sharing.md:34
msgid "Multi accounts"
msgstr "Comptes multiples"
#: ../../../developer/location-sharing.md:36
msgid ""
"Each account has its own unique map. If the user unpins the map while on "
"account A, then switches to account B and unpins the map, two maps will be "
"visible. The maps for accounts A and B display positions shared with those "
"accounts, respectively, and are completely separate from each other"
msgstr ""
"Chaque compte a sa propre carte unique. Si l'utilisateur dépinte la carte "
"alors qu'il est sur le compte A, puis passe au compte B et dépinte la carte,"
" deux cartes seront visibles. Les cartes pour les comptes A et B affichent "
"les positions partagées avec ces comptes, respectivement, et sont "
"complètement séparées les unes des autres"
#: ../../../developer/location-sharing.md:44
msgid "This feature is divided into three parts:"
msgstr "Cette caractéristique est divisée en trois parties:"
#: ../../../developer/location-sharing.md:46
msgid "Sending one's position"
msgstr "Envoyer sa position"
#: ../../../developer/location-sharing.md:47
#: ../../../developer/location-sharing.md:78
msgid "Receiving a position"
msgstr "Recevoir un poste"
#: ../../../developer/location-sharing.md:48
#: ../../../developer/location-sharing.md:89
msgid "Displaying a position"
msgstr "Affichage d'une position"
#: ../../../developer/location-sharing.md:50
msgid ""
"To determine the location, [Qt "
"Positioning](https://doc.qt.io/qt-6/qtpositioning-index.html) API is used. "
"Once the position is determined, it is sent as a message on the DHT and is "
"transmitted to the client. The received position is then displayed using the"
" [OpenLayers](https://openlayers.org/) JavaScript library."
msgstr ""
"Pour déterminer l'emplacement, [Qt Positioning] "
"(https://doc.qt.io/qt-6/qtpositioning-index.html) API est utilisé. Une fois "
"la position déterminée, elle est envoyée comme un message sur le DHT et est "
"transmise au client. La position reçue est ensuite affichée à l'aide de la "
"bibliothèque JavaScript [OpenLayers] (https://openlayers.org/)."
#: ../../../developer/location-sharing.md:53
msgid "Sending a position"
msgstr "Envoi d'une position"
#: ../../../developer/location-sharing.md:55
msgid ""
"As soon as a map is opened, the `Positioning` class takes care of retrieving"
" the current position using the `QGeoPositionInfoSource` class of the "
"`QtPositioning` module. The position is then converted to JSON format and is"
" transmitted to the `positionManager`. This class coordinates the entire "
"position sharing process. The position is then shared through the "
"`sendPosition()` function. It is shared:"
msgstr ""
"Dès qu'une carte est ouverte, la classe `Positioning` prend soin de "
"récupérer la position actuelle en utilisant la classe "
"`QGeoPositionInfoSource` du module `QtPositioning`. La position est ensuite "
"convertie au format JSON et est transmise au `positionManager`. Cette classe"
" coordonne l'ensemble du processus de partage de position. La position est "
"ensuite partagée via la fonction `sendPosition() `. Elle est partagée:"
#: ../../../developer/location-sharing.md:61
msgid ""
"Locally through the `localPositionReceived` signal so that the user can see "
"their own position"
msgstr ""
"Localisé par le signal `localPositionReceived` afin que l'utilisateur puisse"
" voir sa propre position"
#: ../../../developer/location-sharing.md:63
msgid ""
"On the DHT to all conversations in the `positionShareConvIds_` list. This "
"list contains the keys of all conversations that the user wants to share "
"their position with. From this key, the URIs of all participants are "
"obtained and a position message is sent to each participant."
msgstr ""
"Sur le DHT, toutes les conversations dans la liste `positionShareConvIds_`. "
"Cette liste contient les clés de toutes les conversations avec lesquelles "
"l'utilisateur souhaite partager sa position."
#: ../../../developer/location-sharing.md:65
msgid "The JSON format of a position is as follows:"
msgstr "Le format JSON d'une position est le suivant:"
#: ../../../developer/location-sharing.md:67
msgid "Type (position or stop message)"
msgstr "Type (message de position ou d'arrêt)"
#: ../../../developer/location-sharing.md:68
msgid "Latitude"
msgstr "La latitude"
#: ../../../developer/location-sharing.md:69
msgid "Longitude"
msgstr "Longitude"
#: ../../../developer/location-sharing.md:70
msgid "Time (unused by the QtClient)"
msgstr "Temps (non utilisé par le QtClient)"
#: ../../../developer/location-sharing.md:72
msgid ""
"An example of data: "
"`{\\\"lat\\\":45.51616583988481,\\\"long\\\":-73.620693,\\\"time\\\":1671658862000,\\\"type\\\":\\\"Position\\\"}`"
msgstr ""
"Un exemple de données: "
"`{\\\"lat\\\":45.51616583988481,\\\"long\\\":-73.620693,\\\"time\\\":1671658862000,\\\"type\\\":\\\"Position\\\"}`"
#: ../../../developer/location-sharing.md:74
msgid ""
"When sending the position to the daemon, the author's URI is also "
"transmitted."
msgstr ""
"Lorsque l'on envoie la position au daemon, l'URI de l'auteur est également "
"transmis."
#: ../../../developer/location-sharing.md:76
msgid ""
"When the user stops sharing their position with a conversation, the "
"conversation's ID is simply removed from the `positionShareConvIds_` list. A"
" \"stop\" message is also sent to each participant."
msgstr ""
"Lorsque l'utilisateur cesse de partager sa position avec une conversation, "
"l'ID de la conversation est simplement supprimé de la liste "
"`positionShareConvIds_`. Un message \"stop\" est également envoyé à chaque "
"participant."
#: ../../../developer/location-sharing.md:80
msgid ""
"When a position is received, it triggers the 'onPositionReceived()' slot. "
"Whether it is a local position from the `QtPositioning` module or a position"
" from another contact. At the `positionManager` level, the "
"`objectListSharingUris_` list stores all of the client's positions. The "
"position is either:"
msgstr ""
"Lorsqu'une position est reçue, elle déclenche la fente "
"\"onPositionReceived() \". Qu'il s'agisse d'une position locale du module "
"`QtPositioning` ou d'une position d'un autre contact. Au niveau "
"`positionManager`, la liste `objectListSharingUris_` stocke toutes les "
"positions du client. La position est soit:"
#: ../../../developer/location-sharing.md:83
msgid "Added (the URI is not present in the list)"
msgstr "Ajout (l'IRU n'est pas présent dans la liste)"
#: ../../../developer/location-sharing.md:84
msgid "Updated (the URI is already present in the list)"
msgstr "Mise à jour (l'URI est déjà présent dans la liste)"
#: ../../../developer/location-sharing.md:85
msgid "Deleted (type = \"Stop\")"
msgstr "Supprimé (type = \"Stop\")"
#: ../../../developer/location-sharing.md:87
msgid ""
"The position is stored in the list in the form of an object of type "
"`positionObject`. This type allows for a watchdog for each position. If the "
"position is not updated within a certain time frame, it is removed from the "
"list."
msgstr ""
"La position est stockée dans la liste sous la forme d'un objet de type "
"`positionObject`. Ce type permet d'avoir un chien de surveillance pour "
"chaque position. Si la position n'est pas mise à jour dans un certain laps "
"de temps, elle est supprimée de la liste."
#: ../../../developer/location-sharing.md:91
msgid ""
"When a position is received (slot `onPositionReceived()` triggered), the "
"position is transmitted to Qml which in turn sends the information to the "
"[OpenLayers](https://openlayers.org/) JavaScript library. The Qt `WebEngine`"
" module allows for the bridge between the library's web technology and Qml. "
"Each position is represented by a layer added to the map. The "
"`newPosition()` function adds a new layer, the `updatePosition()` function "
"updates the coordinates of the layer, and the `removePosition()` function "
"removes the layer."
msgstr ""
"Lorsqu'une position est reçue (slot `onPositionReceived() ` déclenchée), la "
"position est transmise à Qml qui envoie à son tour les informations à la "
"bibliothèque JavaScript [https://openlayers.org/]. Le module Qt `WebEngine` "
"permet de créer un pont entre la technologie Web de la bibliothèque et Qml. "
"Chaque position est représentée par une couche ajoutée à la carte."
#: ../../../developer/message-displayed-status.md:1
msgid "Message displayed status"
msgstr "L'état de l'affichage du message"
#: ../../../developer/message-displayed-status.md:4
msgid ""
"Every client generally must be able to show what peer read what message and "
"get how many unread messages there is."
msgstr ""
"Chaque client doit généralement être capable de montrer quel message a été "
"lu par un autre et de savoir combien de messages n'ont pas été lus."
#: ../../../developer/message-displayed-status.md:6
msgid "For this, the daemon provides some APIs:"
msgstr "Pour cela, le démon fournit quelques API:"
#: ../../../developer/message-displayed-status.md:8
msgid "Set a message displayed"
msgstr "Définir un message affiché"
#: ../../../developer/message-displayed-status.md:10
msgid "The Configuration manager provides:"
msgstr "Le gestionnaire de configuration fournit:"
#: ../../../developer/message-displayed-status.md:46
msgid ""
"to set a message as displayed. Should be done when the interaction is shown "
"and the conversation selected."
msgstr ""
"Il doit être effectué lorsque l'interaction est affichée et que la "
"conversation est sélectionnée."
#: ../../../developer/message-displayed-status.md:48
msgid ""
"This sends a SIP messages to connected peers with the following format:"
msgstr ""
"Cela envoie un message SIP aux pairs connectés avec le format suivant:"
#: ../../../developer/message-displayed-status.md:66
msgid ""
"Then the peer will know this via `onMessageDisplayed` and emit a signal to "
"the client (`libjami::ConfigurationSignal::AccountMessageStatusChanged` with"
" status 3 (`libjami::Account::MessageStates::DISPLAYED`))"
msgstr ""
"Ensuite, le paire le saura via `onMessageDisplayed` et émettra un signal au "
"client (`libjami::ConfigurationSignal::AccountMessageStatusChanged` avec le "
"statut 3 (`libjami::Account::MessageStates::DISPLAYED`))"
#: ../../../developer/message-displayed-status.md:68
msgid "Get unread messages"
msgstr "Recevoir des messages non lus"
#: ../../../developer/message-displayed-status.md:70
msgid ""
"By knowing the lastDisplayedMessage for our account, we can use this "
"informations and `ConfigrationManager::countInteractionsSince` which count "
"interaction since last message to a given message (typically last displayed "
"interaction)"
msgstr ""
"En connaissant le dernier message affiché pour notre compte, nous pouvons "
"utiliser ces informations et `ConfigrationManager::countInteractionsSince` "
"qui comptent l'interaction depuis le dernier message jusqu'à un message "
"donné (habituellement l'interaction affichée la dernière fois)"
#: ../../../developer/message-displayed-status.md:72
msgid ""
"To get last displayed message for a member, in "
"`Configuration::getConversationMembers` each member will have the last "
"displayed interaction available via `memberInfo[\"lastDisplayed\"]`"
msgstr ""
"Pour obtenir le dernier message affiché pour un membre, dans "
"`Configuration::getConversationMembers` chaque membre aura la dernière "
"interaction affichée disponible via `memberInfo[\"lastDisplayed\"]`"
#: ../../../developer/message-displayed-status.md:74
msgid "How this information is stored"
msgstr "Comment ces informations sont stockées"
#: ../../../developer/message-displayed-status.md:76
msgid ""
"In `src/jamidht/conversation.cpp` each conversation store the last displayed"
" messages in a map<string, string> (uri, interactionId) and this structure "
"is serialized in "
"`fileutils::get_data_dir()/getAccountID()/conversation_data/repository_->id()/lastDisplayed`"
msgstr ""
"Dans `src/jamidht/conversation.cpp` chaque conversation stocke les derniers "
"messages affichés dans une carte<string, string> (uri, interactionId) et "
"cette structure est sérialisée dans "
"`fileutils::get_data_dir()/getAccountID()/conversation_data/repository_->id()/lastDisplayed`"
#: ../../../developer/name-server-protocol.md:1
msgid "Name Server protocol"
msgstr "Nom du protocole serveur"
#: ../../../developer/name-server-protocol.md:4
msgid ""
"The protocol used by Jami to query and register a name is based on an HTTP "
"[REST](https://en.wikipedia.org/wiki/Representational_state_transfer) API "
"answering requests with JSON documents and regular HTTP status codes."
msgstr ""
"Le protocole utilisé par Jami pour demander et enregistrer un nom est basé "
"sur une API HTTP [REST] "
"(https://en.wikipedia.org/wiki/Representational_state_transfer) répondant "
"aux demandes avec des documents JSON et des codes d'état HTTP réguliers."
#: ../../../developer/name-server-protocol.md:10
msgid ""
"The public nameserver is hosted at `ns.jami.net` and uses a blockchain as "
"its backend. Another implementation could use any other database or "
"directory service making the nameserver protocol reusable."
msgstr ""
"Le serveur de noms public est hébergé à `ns.jami.net` et utilise une "
"blockchain comme backend. Une autre mise en œuvre pourrait utiliser tout "
"autre service de base de données ou de répertoire rendant le protocole de "
"serveur de noms réutilisable."
#: ../../../developer/name-server-protocol.md:14
msgid ""
"If you run your own nameserver, looking up a username in the form of "
"`username@example.com` will look up the name `username` with the nameserver "
"at `example.com`. (There is no need to add `@ns.jami.net` to use the "
"default nameserver.)"
msgstr ""
"Si vous exécutez votre propre serveur de noms, en recherchant un nom "
"d'utilisateur sous la forme de `username@example.com`, vous chercherez le "
"nom `username` avec le serveur de noms à `example.com`. (Il n'est pas "
"nécessaire d'ajouter `@ns.jami.net` pour utiliser le serveur de noms par "
"défaut.)"
#: ../../../developer/name-server-protocol.md:19
msgid "Rules on name formatting"
msgstr "Règles relatives au formatage des noms"
#: ../../../developer/name-server-protocol.md:22
msgid ""
"Usernames are checked by a regex to ensure some rules about their format:"
msgstr ""
"Les noms d'utilisateur sont vérifiés par un régex pour s'assurer que "
"certaines règles concernant leur format:"
#: ../../../developer/name-server-protocol.md:25
msgid "Length must be between 3 and 32 characters"
msgstr "La longueur doit être comprise entre 3 et 32 caractères"
#: ../../../developer/name-server-protocol.md:26
msgid ""
"Those characters must be alphanumerical with dashes `-` being also accepted."
msgstr ""
#: ../../../developer/name-server-protocol.md:29
msgid "Querying a name"
msgstr "Je cherche un nom"
#: ../../../developer/name-server-protocol.md:32
msgid ""
"This is the main service provided by a name server. It enables getting the "
"Jami ID corresponding to a username."
msgstr ""
"C'est le service principal fourni par un serveur de noms. Il permet "
"d'obtenir l'identifiant Jami correspondant à un nom d'utilisateur."
#: ../../../developer/name-server-protocol.md:35
#: ../../../developer/name-server-protocol.md:83
#: ../../../developer/name-server-protocol.md:131
msgid "Request"
msgstr "Demande de réception"
#: ../../../developer/name-server-protocol.md:37
msgid ""
"A request for the name `foobar` is a `GET` request with `/name/`*`foobar`* "
"as the URI."
msgstr ""
"Une demande de nom `foobar` est une demande `GET` avec `/nom/`*`foobar`* "
"comme URI."
#: ../../../developer/name-server-protocol.md:40
#: ../../../developer/name-server-protocol.md:89
#: ../../../developer/name-server-protocol.md:150
msgid "Response (Success)"
msgstr "Réponse (succès)"
#: ../../../developer/name-server-protocol.md:42
msgid ""
"If the name is found, a response with status code `200` `OK` must be sent to"
" the client with a `Content-type` field set as `application/json`."
msgstr ""
"Si le nom est trouvé, une réponse avec le code de statut `200` `OK` doit "
"être envoyée au client avec un champ `Content-type` définie comme "
"`application/json`."
#: ../../../developer/name-server-protocol.md:46
msgid ""
"The body is a JSON documents with 2 string attributes : `name` and `addr`. "
"`name` is equal to the one requested and `addr` is an hexadecimal "
"representation of the Jami ID prefixed with `0x`."
msgstr ""
"Le corps est un document JSON avec 2 attributs de chaîne: `name` et `addr`. "
"`name` est égal à celui demandé et `addr` est une représentation "
"hexadecimale de l'ID Jami préfiché avec `0x`."
#: ../../../developer/name-server-protocol.md:50
#: ../../../developer/name-server-protocol.md:98
msgid "In our example, the JSON answer would be:"
msgstr "Dans notre exemple, la réponse JSON serait:"
#: ../../../developer/name-server-protocol.md:59
#: ../../../developer/name-server-protocol.md:106
msgid "Response (Not found)"
msgstr "Réponse (non trouvée)"
#: ../../../developer/name-server-protocol.md:61
msgid ""
"If the name is not found, a response with status code `404` `Not` `Found` "
"must be sent to the client with a `Content-type` field set as "
"`application/json`."
msgstr ""
"Si le nom n'est pas trouvé, une réponse avec le code de statut `404` `Not` "
"`Found` doit être envoyée au client avec un champ `Content-type` définie "
"comme `application/json`."
#: ../../../developer/name-server-protocol.md:65
#: ../../../developer/name-server-protocol.md:112
msgid ""
"The body is a JSON documents with 1 string attribute : `error`. This "
"attribute is filled with an error message that explains the error (and could"
" be displayed in the client in the future)."
msgstr ""
"Le corps est un document JSON avec un attribut de chaîne : `error`. Cet "
"attribut est rempli d'un message d'erreur qui explique l'erreur (et pourrait"
" être affiché dans le client à l'avenir)."
#: ../../../developer/name-server-protocol.md:69
#: ../../../developer/name-server-protocol.md:116
msgid "On the reference implementation, the returned document is:"
msgstr ""
"En ce qui concerne la mise en œuvre de référence, le document retourné est "
"le suivant:"
#: ../../../developer/name-server-protocol.md:77
msgid "Querying an address"
msgstr "Recherche d'une adresse"
#: ../../../developer/name-server-protocol.md:80
msgid ""
"This service is a reverse lookup. You query for an address and a username "
"is returned if one is registered on the name server."
msgstr ""
"Ce service est une recherche inverse. Vous demandez une adresse et un nom "
"d'utilisateur est retourné si l'un est enregistré sur le serveur de noms."
#: ../../../developer/name-server-protocol.md:85
msgid ""
"A request for the ID `jami:29347542eb07159f316577e1ae16243d152f6b7b` is a "
"`GET` request with `/addr/`*`29347542eb07159f316577e1ae16243d152f6b7b`* as "
"the URI."
msgstr ""
"Une demande d'identification `jami:29347542eb07159f316577e1ae16243d152f6b7b`"
" est une demande `GET` avec "
"`/addr/`*29347542eb07159f316577e1ae16243d152f6b7b`* comme l'URI."
#: ../../../developer/name-server-protocol.md:91
msgid ""
"If the address corresponds to a username, a response with status code `200` "
"`OK` must be sent to the client with a `Content-type` field set as "
"`application/json`."
msgstr ""
"Si l'adresse correspond à un nom d'utilisateur, une réponse avec le code de "
"statut `200` `OK` doit être envoyée au client avec un champ `Content-type` "
"définie comme `application/json`."
#: ../../../developer/name-server-protocol.md:95
msgid ""
"The body is a JSON documents with 1 string attribute : `name`. The value of"
" this field is the name registered to this address"
msgstr ""
"Le corps est un document JSON avec un attribut de chaîne : `name`. La valeur"
" de ce champ est le nom enregistré à cette adresse"
#: ../../../developer/name-server-protocol.md:108
msgid ""
"If the address is not found, a response with status code `404` `Not` `Found`"
" must be sent to the client with a `Content-type` field set as "
"`application/json`."
msgstr ""
"Si l'adresse n'est pas trouvée, une réponse avec le code de statut `404` "
"`Not` `Found` doit être envoyée au client avec un champ `Content-type` "
"définie comme `application/json`."
#: ../../../developer/name-server-protocol.md:124
msgid "Registering a name"
msgstr "Enregistrement d'un nom"
#: ../../../developer/name-server-protocol.md:127
msgid ""
"This part of the protocol is used to register a new name/address pair. It is"
" used on the main public registry but may be optional in a custom "
"implementation."
msgstr ""
"Cette partie du protocole est utilisée pour enregistrer une nouvelle paire "
"de nom/adresse."
#: ../../../developer/name-server-protocol.md:133
msgid ""
"A request for registering the name `foobar` is a `POST` request with "
"`/name/`*`foobar`* as the URI. The header attribute `Content-type` must be "
"set to `application/json`."
msgstr ""
"Une demande d'enregistrement du nom `foobar` est une demande `POST` avec "
"`/name/`*`foobar`* comme URI. L'attribut d'en-tête `Content-type` doit être "
"réglé sur `application/json`."
#: ../../../developer/name-server-protocol.md:137
msgid ""
"The body of the request is a JSON document with 2 string attributes: `addr` "
"and `owner`. `addr` contains the Jami ID prefixed with `0x` and `owner` is "
"the name to be registered."
msgstr ""
"Le corps de la demande est un document JSON avec 2 attributs de chaîne: "
"`addr` et `owner`. `addr` contient l'ID Jami préfiché avec `0x` et `owner` "
"est le nom à enregistrer."
#: ../../../developer/name-server-protocol.md:141
msgid "An example for `foobar` could be:"
msgstr "Un exemple de `foobar` pourrait être:"
#: ../../../developer/name-server-protocol.md:152
msgid ""
"If the name/address pair is successfully registered, a response with status "
"code `200` `OK` must be sent to the client with a `Content-type` field set "
"as `application/json`."
msgstr ""
"Si la paire nom/adresse est enregistrée avec succès, une réponse avec le "
"code de statut `200` `OK` doit être envoyée au client avec un champ "
"`Content-type` définie comme `application/json`."
#: ../../../developer/name-server-protocol.md:156
msgid ""
"The body contain a JSON document with 1 boolean attribute `success` set to "
"`true`."
msgstr ""
"Le corps contient un document JSON avec 1 attribut booléen `success` définie"
" à `true`."
#: ../../../developer/name-server-protocol.md:159
msgid "As an example:"
msgstr "À titre d'exemple:"
#: ../../../developer/name-server-protocol.md:167
msgid ""
"Further attempts to query the name or the address should then be successful."
msgstr ""
"Les tentatives ultérieures de recherche du nom ou de l'adresse devraient "
"alors réussir."
#: ../../../developer/name-server-protocol.md:170
msgid "Response (Bad request)"
msgstr "Réponse (mauvaise demande)"
#: ../../../developer/name-server-protocol.md:172
msgid ""
"If the registration cannot be achieved because of an error in the request "
"(formatting, missing attribute, etc.), a response with status code `400` "
"`Bad` `Request` must be sent to the client with a `Content-type` field set "
"as `application/json`."
msgstr ""
"Si l'enregistrement ne peut être réalisé en raison d'une erreur dans la "
"demande (formatation, défaut d'attribut, etc.), une réponse avec le code de "
"statut `400` `Bad` `Request` doit être envoyée au client avec un champ "
"`Content-type` défini comme `application/json`."
#: ../../../developer/name-server-protocol.md:177
msgid ""
"The body is a JSON documents with 2 attributes: `success` which is a boolean"
" and `error` which is a string. `success` is set to `false` and `error` is "
"filled with an error message that explains the error (and could be displayed"
" in the client in the future)."
msgstr ""
"Le corps est un document JSON avec 2 attributs: `success` qui est un booléen"
" et `error` qui est une chaîne. `success` est réglé sur `false` et `error` "
"est rempli d'un message d'erreur qui explique l'erreur (et pourrait être "
"affiché dans le client à l'avenir)."
#: ../../../developer/name-server-protocol.md:182
msgid "For an invalid formatting of the username, the body could be:"
msgstr ""
"Pour une mise en forme non valide du nom d'utilisateur, le corps peut être:"
#: ../../../developer/name-server-protocol.md:191
msgid "Response (Forbidden)"
msgstr "Réponse (interdite)"
#: ../../../developer/name-server-protocol.md:193
msgid ""
"If the registration cannot be achieved because the name is already taken, a "
"response with status code `403` `Forbidden` must be sent to the client with "
"a `Content-type` field set as `application/json`."
msgstr ""
"Si l'enregistrement ne peut pas être réalisé parce que le nom est déjà pris,"
" une réponse avec le code de statut `403` `Forbidden` doit être envoyée au "
"client avec un champ `Content-type` définie comme `application/json`."
#: ../../../developer/name-server-protocol.md:197
msgid ""
"The body is a JSON documents with 3 attributes: `success` which is a boolean"
" set to `false`, `name` and `addr` which are both strings replicated from "
"the original request."
msgstr ""
"Le corps est un document JSON avec 3 attributs: `success` qui est un "
"ensemble booléen de `false`, `name` et `addr` qui sont toutes deux des "
"chaînes reproduites à partir de la demande originale."
#: ../../../developer/name-server-protocol.md:201
msgid ""
"Registering `foobar`, with it being already registered, would lead to the "
"following response:"
msgstr ""
"L'enregistrement de `foobar`, étant déjà enregistré, conduirait à la réponse"
" suivante:"
#: ../../../developer/name-server-protocol.md:212
msgid "Some links"
msgstr "Quelques liens"
#: ../../../developer/name-server-protocol.md:215
msgid ""
"{gitlab-project}`jami-nameservice`: reference NodeJS implementation used by "
"`ns.jami.net` and querying an Ethereum node."
msgstr ""
"{gitlab-projet}`jami-nameservice`: référence NodeJS mise en œuvre utilisée "
"par `ns.jami.net` et la requête d'un nœud Ethereum."
#: ../../../developer/protocol.md:1 ../../../developer/swarm.md:401
msgid "Protocol"
msgstr "Protocole"
#: ../../../developer/protocol.md:4
msgid "Jami account creation"
msgstr ""
#: ../../../developer/protocol.md:7
msgid ""
"A **Jami account** is defined by an **RSA key pair** with a key length of at"
" least 4096 bits."
msgstr ""
#: ../../../developer/protocol.md:10
msgid ""
"The standard x509 160-bits fingerprint of the account public key is called "
"the **RingID**."
msgstr ""
"L'empreinte digitale standard x509 160 bits de la clé publique du compte est"
" appelée **RingID**."
#: ../../../developer/protocol.md:13
msgid ""
"The account public key is used as the subject of an x509 certificate that "
"must be valid, have the Certificate Authority flag set, and can be self-"
"signed. This certificate is called the **Jami account certificate**."
msgstr ""
"La clé publique du compte est utilisée comme objet d'un certificat x509 qui "
"doit être valide, avoir le drapeau de l'autorité de certification défini et "
"être autosuffisant. Ce certificat est appelé **certificat de compte Jami**."
#: ../../../developer/protocol.md:18
msgid ""
"The subject UID field of the account certificate must be the hexadecimal "
"form of the public key fingerprint. The issuer UID field must be the "
"hexadecimal form of the issuer public key fingerprint."
msgstr ""
"Le champ UID sujet du certificat de compte doit être la forme hexadecimale "
"de l'empreinte digitale de la clé publique."
#: ../../../developer/protocol.md:22
msgid "Persisting the account"
msgstr "Persistant compte"
#: ../../../developer/protocol.md:24
msgid ""
"Persisting a Jami account private key and certificate is implementation "
"defined."
msgstr ""
#: ../../../developer/protocol.md:27
msgid ""
"Access to a saved Jami account private key must be authenticated and "
"authorized. Authentication and authorization method to access the account "
"private key is implementation defined."
msgstr ""
#: ../../../developer/protocol.md:31
msgid "Adding a device to a Jami account"
msgstr ""
#: ../../../developer/protocol.md:33
msgid "*See [RFC 5280](https://tools.ietf.org/html/rfc5280)*"
msgstr "*Voir [RFC 5280]*https://tools.ietf.org/html/rfc5280)*"
#: ../../../developer/protocol.md:35
msgid ""
"A **device** is defined by an RSA key pair with a key length of at least "
"4096 bits."
msgstr ""
"Un **appareil** est défini par une paire de clés RSA d'une longueur de clé "
"d'au moins 4096 bits."
#: ../../../developer/protocol.md:38
msgid ""
"A **device certificate** is defined as an x509 certificate whose subject is "
"a device public key, signed with an account private key. The certificate "
"MUST be valid. The issuer UID field MUST be the hexadecimal form of the "
"account public key fingerprint."
msgstr ""
"Un certificat d'appareil** est défini comme un certificat x509 dont le sujet"
" est une clé publique de l'appareil, signée avec une clé privée du compte. "
"Le certificat DOIT être valide. Le champ UID de l'émetteur DOIT être la "
"forme hexadecimale de l'empreinte digitale de la clé publique du compte."
#: ../../../developer/protocol.md:43
msgid ""
"Persisting a device private key and certificate is implementation defined. "
"Access to a saved device private key should be authenticated. Authentication"
" method to access the device private key is implementation defined."
msgstr ""
"La définition de la mise en œuvre est définie pour maintenir une clé privée "
"et un certificat de périphérique. L'accès à une clé privée de périphérique "
"enregistrée doit être authentifié."
#: ../../../developer/protocol.md:48
msgid "Removing a device from a Jami account"
msgstr ""
#: ../../../developer/protocol.md:50
msgid ""
"A device can be \"removed\" from a Jami account through revocation of the "
"device certificate. Revoked device certificates are added to one or more "
"standard x509 Certificate Revocation List (CRL). CRLs for revoked device "
"must be valid and signed with the corresponding CA key, which is the Jami "
"account private key."
msgstr ""
"Un appareil peut être \"retiré\" d'un compte Jami par la révocation du "
"certificat de l'appareil. Les certificats révoqués sont ajoutés à une ou "
"plusieurs listes de révocation de certificats (CRL) x509 standard. Les LCR "
"pour les dispositifs révoqués doivent être valides et signées avec la clé de"
" l'autorité de certification correspondante, qui est la clé privée du compte"
" de Jami."
#: ../../../developer/protocol.md:56
msgid "Account transmission format"
msgstr "Format de transmission du compte"
#: ../../../developer/protocol.md:58
msgid ""
"The **account archive format** defines how to serialize an account private "
"key for transmission, for instance to sign a new device certificate."
msgstr ""
"Le format d'archives de compte définit comment sérialiser une clé privée de "
"compte pour transmission, par exemple pour signer un certificat de nouvel "
"appareil."
#: ../../../developer/protocol.md:62
msgid ""
"The account archive is an encrypted JSON object with the following "
"structure:"
msgstr ""
"L'archivage du compte est un objet JSON crypté avec la structure suivante:"
#: ../../../developer/protocol.md:73
msgid ""
"The JSON object can contain additional implementation-defined key-value "
"pairs. Implementation-defined key names shouldn't start with \"ring\"."
msgstr ""
"L'objet JSON peut contenir des paires de valeurs de clés définis par "
"l'implémentation."
#: ../../../developer/protocol.md:76
msgid "The string JSON object is encrypted using a key defined as :"
msgstr "L' objet JSON de chaîne est crypté à l'aide d' une clé définie comme:"
#: ../../../developer/protocol.md:83
msgid ""
"Where PIN is a random 32bits number in hexadecimal form, \"+\" is string "
"concatenation, timestamp is the current UNIX timestamp divided by 1200 (20 "
"minutes) and password is a user-chosen password."
msgstr ""
"Lorsque le PIN est un numéro aléatoire de 32 bits sous forme hexadecimale, "
"\"+\" est la concatenation de chaîne, le timestamp est le timestamp actuel "
"UNIX divisé par 1200 (20 minutes) et le mot de passe est un mot de passe "
"choisi par l'utilisateur."
#: ../../../developer/protocol.md:87
msgid ""
"The PIN should be shown to the user to be copied manually on the new "
"physical device along with the password."
msgstr ""
"Le code PIN doit être montré à l'utilisateur pour être copié manuellement "
"sur le nouveau dispositif physique avec le mot de passe."
#: ../../../developer/protocol.md:90
msgid "Contacting another account"
msgstr "Contacter un autre compte"
#: ../../../developer/protocol.md:93
msgid "ICE descriptor exchange over OpenDHT"
msgstr "Échange de descripteurs ICE contre OpenDHT"
#: ../../../developer/protocol.md:95
msgid "**Listening for incoming calls**"
msgstr "**Écoute des appels entrants**"
#: ../../../developer/protocol.md:97
msgid ""
"A device listens for incoming call by performing a listen OpenDHT operation "
"on"
msgstr ""
"Un appareil écoute pour l'appel entrant en effectuant une opération OpenDHT "
"écoute sur"
#: ../../../developer/protocol.md:100
msgid "`h(\"callto\"+deviceID)`"
msgstr "`h(\"appel\"+appareil ID) `"
#: ../../../developer/protocol.md:102
msgid ""
"where h is SHA1, \"+\" is the string concatenation and deviceID is the "
"hexadecimal form of the deviceID."
msgstr ""
"où h est SHA1, \"+\" est la concatenation de chaîne et deviceID est la forme"
" hexadecimale de l'ID du dispositif."
#: ../../../developer/protocol.md:105
msgid ""
"Received OpenDHT values that are not encrypted or not properly signed must "
"be dropped. The value must be encrypted with the called device public key "
"and signed with the calling device private key according to OpenDHT "
"specifications."
msgstr ""
"Les valeurs OpenDHT reçues qui ne sont pas cryptées ou qui ne sont pas "
"correctement signées doivent être abandonnées. La valeur doit être cryptée "
"avec la clé publique du dispositif appelé et signée avec la clé privée du "
"dispositif d'appel conformément aux spécifications OpenDHT."
#: ../../../developer/protocol.md:110
msgid "**Sending the Initial Offer**"
msgstr "**Envoi de l'offre initiale**"
#: ../../../developer/protocol.md:112
msgid "*See [RFC 5245](https://tools.ietf.org/html/rfc5245)*"
msgstr "*Voir [RFC 5245]*"
#: ../../../developer/protocol.md:114
msgid ""
"RFC 5245 defines ICE (Interactive Connectivity Establishment), a protocol "
"for NAT traversal."
msgstr ""
"RFC 5245 définit ICE (Establishment Interactive Connectivity), un protocole "
"de traversée NAT."
#: ../../../developer/protocol.md:117
#: ../../../developer/technical-overview.md:173
msgid ""
"ICE is used in Jami to establish a peer-to-peer communication between two "
"devices."
msgstr ""
"ICE est utilisé à Jami pour établir une communication entre deux appareils."
#: ../../../developer/protocol.md:120
msgid ""
"The calling device gathers candidates and build an Initial Offer according "
"to the ICE specifications and starts the ICE negotiation process."
msgstr ""
"L'appareil d'appel rassemble les candidats et crée une offre initiale "
"conformément aux spécifications de l'ICE et commence le processus de "
"négociation de l'ICE."
#: ../../../developer/protocol.md:124
msgid ""
"The calling device puts the encrypted ICE offer (the Initial Offer) on the "
"DHT at h(\"callto\"+deviceID) where deviceID is the hexadecimal form of the "
"called deviceID."
msgstr ""
"L'appelant met l'offre ICE cryptée (l'offre initiale) sur le DHT à "
"h(\"callto\"+deviceID) où l'ID du dispositif est la forme hexadecimale de "
"l'ID du dispositif appelé."
#: ../../../developer/protocol.md:128
msgid "**ICE serialization format**"
msgstr "** Format de sérialisation de l'ICE**"
#: ../../../developer/protocol.md:130
msgid ""
"ICE messages exchanged between peers during a call setup use following "
"format. An ICE message is a chunk of binary data, following "
"[msgpack](http://msgpack.org/) data format."
msgstr ""
"Les messages ICE échangés entre les pairs lors d'une configuration d'appel "
"utilisent le format suivant."
#: ../../../developer/protocol.md:134
msgid ""
"This protocol is a compound of msgpack values, successively packed in this "
"order:"
msgstr ""
"Ce protocole est un composé de valeurs msgpack, successivement emballées "
"dans cet ordre:"
#: ../../../developer/protocol.md:138
msgid ""
"an integer giving the version of ICE message format protocol used for the "
"rest of the data. Current defined protocol version is **1**."
msgstr ""
"un nombre entier donnant la version du protocole de format de message ICE "
"utilisé pour le reste des données."
#: ../../../developer/protocol.md:139
msgid ""
"a 2-elements array of strings of the ICE local session ufrag and the ICE "
"local session password"
msgstr ""
"un ensemble de chaînes de 2 éléments de la session locale ICE ufrag et le "
"mot de passe de la session locale ICE"
#: ../../../developer/protocol.md:140
msgid "an integer giving the number of components in the ICE session"
msgstr "un nombre entier indiquant le nombre de composants de la session ICE"
#: ../../../developer/protocol.md:141
msgid ""
"an array of string, of the previous number entries, where each string "
"describe the ICE candidate, formated as an \"a=\" line (without the \"a=\" "
"header) described in [rfc5245, section "
"4.3](https://tools.ietf.org/html/rfc5245#page-26)"
msgstr ""
"une série de chaînes, des entrées numériques précédentes, où chaque chaîne "
"décrit le candidat ICE, formatée en ligne \"a=\" (sans l'en-tête \"a=\") "
"décrit dans [rfc5245, section "
"4.3](https://tools.ietf.org/html/rfc5245#page-26)"
#: ../../../developer/protocol.md:143
msgid "**Sending the Answer**"
msgstr "**Envoyer la réponse**"
#: ../../../developer/protocol.md:145
msgid ""
"Upon reception of the encrypted and signed Initial ICE Offer (through the "
"listen operation), a called device should perform authorization checks of "
"the calling device, identified as the Initial Offer signer. Authorization "
"rules are implementation defined, but a typical implementation would "
"authorize known or trusted contacts."
msgstr ""
"Lors de la réception de l'offre initiale ICE cryptée et signée (par "
"l'intermédiaire de l'opération écouter), un appareil appelé doit effectuer "
"des vérifications d'autorisation du appareil d'appel, identifiée comme le "
"signataire de l'offre initiale."
#: ../../../developer/protocol.md:151
#: ../../../developer/technical-overview.md:232
msgid ""
"If the calling device is not authorized or if for any implementation defined"
" reason the called device refuses the incoming connection request, the "
"called device must ignore the Initial Offer and may log the event."
msgstr ""
"Si le dispositif d'appel n'est pas autorisé ou si, pour une raison définie "
"de mise en œuvre, le dispositif appelé refuse la demande de connexion "
"entrante, le dispositif appelé doit ignorer l'offre initiale et peut "
"enregistrer l'événement."
#: ../../../developer/protocol.md:156
#: ../../../developer/technical-overview.md:236
msgid ""
"If the called device authorizes the caller and wish to accept the connection"
" it must build an ICE answer, start the ICE negotiation process and send the"
" encrypted and signed ICE answer at the same DHT key."
msgstr ""
"Si le dispositif appelé autorise l'appelant et souhaite accepter la "
"connexion, il doit construire une réponse ICE, démarrer le processus de "
"négociation ICE et envoyer la réponse ICE cryptée et signée à la même clé "
"DHT."
#: ../../../developer/protocol.md:161
#: ../../../developer/technical-overview.md:241
msgid "DTLS negotiation"
msgstr "Les négociations sur le DTLS"
#: ../../../developer/protocol.md:163
msgid ""
"Once a peer-to-peer communication channel has been established, the called "
"device listens on it for incoming DTLS connections (acting as a DTLS server)"
" while the caller initiates an outgoing DTLS connection (acting as a DTLS "
"client)."
msgstr ""
"Une fois qu'un canal de communication peer-to-peer a été établi, l'appelant "
"écoute sur lui pour les connexions DTLS entrant (agissant comme un serveur "
"DTLS) tandis que l'appelant initie une connexion DTLS sortante (agissant "
"comme un client DTLS)."
#: ../../../developer/protocol.md:168
msgid ""
"The DTLS communication must be RFC6347 compliant "
"([1](https://tools.ietf.org/html/rfc6347))."
msgstr ""
"La communication DTLS doit être conforme à la RFC6347 "
"([1](https://tools.ietf.org/html/rfc6347))."
#: ../../../developer/protocol.md:171
msgid ""
"Peers must only support PFS cypher suites. The set of supported cypher "
"suites is implementation defined but should include at least ECDHE-AES-GCM "
"(TODO: specify the exact suites recommended to support)."
msgstr ""
"Les pairs ne doivent prendre en charge que les suites de cyphère PFS. "
"L'ensemble des suites de cyphère prises en charge est défini en application "
"mais doit inclure au moins ECDHE-AES-GCM (TODO: spécifier les suites "
"recommandées pour prendre en charge)."
#: ../../../developer/protocol.md:175
msgid ""
"During the DTLS handshake, both peers must provide their respective device "
"certificate chain and must authenticate the other peer, checking that its "
"public key is the same used during the DHT ICE exchange."
msgstr ""
"Lors de la poignée de main DTLS, les deux pairs doivent fournir leur chaîne "
"de certificats de périphérique respectif et doivent authentifier l'autre "
"paire, en vérifiant que sa clé publique est la même utilisée lors de "
"l'échange DHT ICE."
#: ../../../developer/protocol.md:179
msgid "SIP call"
msgstr "Appel SIP"
#: ../../../developer/protocol.md:181
msgid "*See [Important\\_RFC](Important_RFC \"wikilink\")*"
msgstr "*Voir [Important\\_RFC]"
#: ../../../developer/protocol.md:183
msgid ""
"Once an encrypted and authenticated peer-to-peer communication channel is "
"available, the SIP protocol [2](https://tools.ietf.org/html/rfc3261) must be"
" used to place a call and send messages. The caller might send a SIP INVITE "
"as soon as the DTLS channel is established."
msgstr ""
"Une fois qu'un canal de communication peer-to-peer crypté et authentifié est"
" disponible, le protocole SIP [2](https://tools.ietf.org/html/rfc3261) doit "
"être utilisé pour passer un appel et envoyer des messages. L'appelant peut "
"envoyer une SIP INVITE dès que le canal DTLS est établi."
#: ../../../developer/protocol.md:188
#: ../../../developer/technical-overview.md:277
msgid "The SIP implementation must support ICE and SRTP."
msgstr "La mise en œuvre du PIS doit soutenir le CEI et le SRTP."
#: ../../../developer/protocol.md:190
#: ../../../developer/technical-overview.md:278
msgid ""
"Supported codecs are implementation defined, but Jami clients should support"
" the Opus audio coded and the H264 video codec."
msgstr ""
"Les codecs pris en charge sont définis par la mise en œuvre, mais les "
"clients Jami doivent prendre en charge le codec audio Opus et le codec vidéo"
" H264."
#: ../../../developer/protocol.md:193
#: ../../../developer/technical-overview.md:280
msgid ""
"SRTP must be used when negotiating media with SIP, using a new random key "
"for each media and each negotiation. ICE should be used when negotiating "
"media with SIP."
msgstr ""
"Le SRTP doit être utilisé lors de la négociation des médias avec le SIP, en "
"utilisant une nouvelle clé aléatoire pour chaque média et chaque "
"négociation."
#: ../../../developer/protocol.md:197
msgid "Cryptographic primitives"
msgstr "Primitives cryptographiques"
#: ../../../developer/protocol.md:200
msgid "Password stretching"
msgstr "Détails de mot de passe"
#: ../../../developer/protocol.md:202
msgid ""
"*See [Argon2 specifications](https://github.com/P-H-C/phc-winner-"
"argon2/blob/master/argon2-specs.pdf)*"
msgstr ""
"*Voir [spécifications de l'argon2]https://github.com/P-H-C/phc-winner-"
"argon2/blob/master/argon2-specs.pdf) *"
#: ../../../developer/protocol.md:205
msgid ""
"Passwords are stretched using argon2i using t\\_cost = 16, m\\_cost = 2\\^16"
" (64 MiB), mono-threaded, to generate a 512 bits hash."
msgstr ""
"Les mots de passe sont étendus à l'aide d'argon2i en utilisant t\\_cost = "
"16, m\\_cost = 2\\^16 (64 MiB), mono-threaded, pour générer un hash de 512 "
"bits."
#: ../../../developer/protocol.md:208
msgid ""
"The result is then hashed again using SHA{1, 256, 512} depending on the "
"requested key size."
msgstr ""
"Le résultat est ensuite haché à nouveau en utilisant SHA{1, 256, 512} selon "
"la taille de clé demandée."
#: ../../../developer/protocol.md:211
msgid "Encryption"
msgstr "Le chiffrement"
#: ../../../developer/protocol.md:213
msgid "Using a provided key (128, 192 or 256 bits)"
msgstr "Utilisation d'une clé fournie (128, 192 ou 256 bits)"
#: ../../../developer/protocol.md:215
msgid ""
"Encryption uses standard AES-GCM as implemented by Nettle using a random IV "
"for each encryption."
msgstr ""
"Le chiffrement utilise la norme AES-GCM mise en œuvre par Nettle en "
"utilisant un IV aléatoire pour chaque chiffrement."
#: ../../../developer/protocol.md:218
msgid "Using a text password"
msgstr "Utilisation d' un mot de passe texte"
#: ../../../developer/protocol.md:220
msgid ""
"The password is stretched to generate a 256 bits key and a random salt of "
"128 bits."
msgstr ""
"Le mot de passe est étendu pour générer une clé de 256 bits et un sel "
"aléatoire de 128 bits."
#: ../../../developer/protocol.md:223
msgid ""
"The input data is encrypted using AES-GCM (see above) and the salt is "
"appended at the beginning of the resulting cypher-text."
msgstr ""
"Les données d'entrée sont cryptées à l'aide de l'AES-GCM (voir ci-dessus) et"
" le sel est ajouté au début du texte chiffré qui en résulte."
#: ../../../developer/protocol.md:226
msgid "During a call"
msgstr "Lors d'une visite"
#: ../../../developer/protocol.md:228
msgid ""
"Audio/video data are exchanged using encrypted RTP channels between peers."
msgstr ""
"Les données audio/vidéo sont échangées par des canaux RTP cryptés entre "
"pairs."
#: ../../../developer/protocol.md:231
msgid ""
"The protocol is a classic SRTP, with following supported crypto suites:"
msgstr ""
"Le protocole est un SRTP classique, avec les suites cryptographiques "
"suivantes prises en charge:"
#: ../../../developer/protocol.md:233
msgid "Jami account force AES\\_CM\\_128\\_HMAC\\_SHA1\\_80"
msgstr ""
#: ../../../developer/protocol.md:234
msgid "SIP can use AES\\_CM\\_128\\_HMAC\\_SHA1\\_80 or AES\\_CM\\_128\\_HMAC\\_SHA1\\_32"
msgstr "SIP peut utiliser AES\\_CM\\_128\\_HMAC\\_SHA1\\_80 ou AES\\_CM\\_128\\_HMAC\\_SHA1\\_32"
#: ../../../developer/protocol.md:237
msgid ""
"The master key and salt is a random number, different for each call. On "
"call's master key is constant during the full live of a call."
msgstr ""
"La clé principale et le sel sont un numéro aléatoire, différent pour chaque "
"appel."
#: ../../../developer/protocol.md:240
msgid ""
"The keys are exchanged using SDES method: keys are written into the SIP SDP "
"messages during the SIP INVITE negotiation. When SDES is used, Ring forces "
"the underlaying transport to be secure (encrypted) to not disclose these "
"keys. Jami supports DTLS natively for SIP and Ring accounts for such. The "
"call cannot be done if this condition is not fulfilled."
msgstr ""
"Les clés sont échangées à l'aide de la méthode SDES : les clés sont écrites "
"dans les messages SIP SDP pendant la négociation SIP INVITE. Lorsque SDES "
"est utilisé, Ring oblige le transport sous-jacent à être sécurisé (crypté) "
"pour ne pas divulguer ces clés. Jami prend en charge DTLS de manière native "
"pour SIP et Ring en tient compte. L'appel ne peut être effectué si cette "
"condition n'est pas remplie."
#: ../../../developer/qt-qml-coding-style.md:1
msgid "Qt and QML coding style"
msgstr "Style de codage Qt et QML"
#: ../../../developer/qt-qml-coding-style.md:4
msgid "Qt/c++"
msgstr "Qt/c++"
#: ../../../developer/qt-qml-coding-style.md:5
msgid "Signal and slot naming"
msgstr "Nom de signal et de fente"
#: ../../../developer/qt-qml-coding-style.md:6
msgid ""
"Both signals and slots should use camelCase. A signal should use the simple "
"past tense or past participle of some verb, likely prefixed by a short "
"subject. A corresponding slot should be the signal prefixed with the word "
"\"on\" and not the word \"slot\". Here are some examples:"
msgstr ""
"Les signaux et les fentes doivent utiliser camelCase. Un signal doit "
"utiliser le simple passé passé ou le participle passé d'un verbe, "
"probablement préfixé par un sujet court."
#: ../../../developer/qt-qml-coding-style.md:29
#: ../../../developer/qt-qml-testing-tools.md:4
#: ../../../developer/qt-qml-testing-tools.md:105
msgid "QML"
msgstr "L'équipement"
#: ../../../developer/qt-qml-coding-style.md:30
msgid "Code formatting"
msgstr "Formattement du code"
#: ../../../developer/qt-qml-coding-style.md:31
msgid ""
"The Qt 5.15.0 version of qmlformat has some issues dealing with comment "
"sections and currently does not discriminate against max columns, so we will"
" continue to format using these guidelines for now. The following is a "
"comprehensive sample component, adapted from https://doc.qt.io/qt-5/qml-"
"codingconventions.html, that attempts to illustrate the ideally formatted "
"component."
msgstr ""
"La version Qt 5.15.0 du format qml a quelques problèmes concernant les "
"sections de commentaires et ne fait actuellement pas de discrimination "
"contre les colonnes max, nous continuerons donc à formater en utilisant ces "
"lignes directrices pour l'instant. Voici un composant échantillon complet, "
"adapté de https://doc.qt.io/qt-5/qml-codingconventions.html, qui tente "
"d'illustrer le composant idéalement formaté."
#: ../../../developer/qt-qml-testing-tools.md:1
msgid "Qt and QML testing tools"
msgstr "outils de test Qt et QML"
#: ../../../developer/qt-qml-testing-tools.md:6
msgid ""
"qml_tests launch all the tests related to the interface. The daemon and "
"libclient SHOULD be trusted in this part, we do not want to test scenarios "
"related to connectivity. Ideally, we should work on fake data to avoid "
"depending on network events. This may be difficult sometimes and some tools "
"may be missed because tests in this part are a work in progress. Here are "
"some tools/principles to be able to quickly write tests."
msgstr ""
"qml_tests lance tous les tests liés à l'interface. Le démon et libclient "
"DEVRAIENT être fiables dans cette partie, nous ne voulons pas tester des "
"scénarios liés à la connectivité. Idéalement, nous devrions travailler sur "
"des données fictives pour éviter de dépendre d'événements réseau. Cela peut "
"être difficile parfois et certains outils peuvent être manqués parce que les"
" tests dans cette partie sont un travail en cours. Voici quelques "
"outils/principes pour pouvoir écrire rapidement des tests."
#: ../../../developer/qt-qml-testing-tools.md:8
msgid "Mocking Data"
msgstr ""
#: ../../../developer/qt-qml-testing-tools.md:10
msgid ""
"Let's say I want to test the UI for an AccountComboBox depending on a list "
"of accounts. Instead of creating accounts, we should create a fake list. The"
" easy way to do this is to serialize/unserialize a real AccountComboBox "
"model. First, we need to get a serialized model:"
msgstr ""
"Supposons que je veuille tester l'interface utilisateur d'une "
"AccountComboBox en fonction d'une liste de comptes. Au lieu de créer des "
"comptes, nous devrions créer une fausse liste. La façon la plus simple de le"
" faire est de sérialiser/désérialiser un vrai modèle AccountComboBox. Tout "
"d'abord, nous devons obtenir un modèle sérialisé :"
#: ../../../developer/qt-qml-testing-tools.md:44
msgid ""
"`saveModel()` will print the serialized structure whenever the developer "
"will click on the combobox. Here's the result:"
msgstr ""
"`saveModel()` imprimera la structure sérialisée chaque fois que le "
"développeur cliquera sur le combobox. Voici le résultat :"
#: ../../../developer/qt-qml-testing-tools.md:50
msgid ""
"Now, the developper can easily use it in a test. The best way is to add this"
" data in a variable or a separated js file (cf https://doc.qt.io/qt-6/qtqml-"
"documents-networktransparency.html). And use it in a test e.g.:"
msgstr ""
"Maintenant, le développeur peut facilement l'utiliser dans un test. La "
"meilleure façon est d'ajouter ces données dans une variable ou un fichier js"
" séparé (cf https://doc.qt.io/qt-6/qtqml-documents-"
"networktransparency.html). Et de l'utiliser dans un test, par exemple :"
#: ../../../developer/qt-qml-testing-tools.md:77
msgid "C++"
msgstr "C++"
#: ../../../developer/qt-qml-testing-tools.md:79
msgid "Google Test"
msgstr "Teste de Google"
#: ../../../developer/qt-qml-testing-tools.md:80
msgid "Google's c++ test framework."
msgstr "Le cadre de test de c++ de Google."
#: ../../../developer/qt-qml-testing-tools.md:82
#: ../../../developer/qt-qml-testing-tools.md:109
msgid "Installation"
msgstr "Installation"
#: ../../../developer/qt-qml-testing-tools.md:83
msgid "Ubuntu / Debian: `apt install googletest libgtest-dev`"
msgstr "Ubuntu / Debian: `apt installer le test libgtest-dev`"
#: ../../../developer/qt-qml-testing-tools.md:86
#: ../../../developer/qt-qml-testing-tools.md:112
msgid "Example main.cpp"
msgstr "Exemple main.cpp"
#: ../../../developer/qt-qml-testing-tools.md:107
msgid "QtQuickTest"
msgstr "QtQuickTest"
#: ../../../developer/qt-qml-testing-tools.md:110
msgid "Ubuntu / Debian: `apt install qml-module-qqtest libqt5quicktest5`"
msgstr "Ubuntu / Debian: `apt installer qml-module-qqtest libqt5quicktest5`"
#: ../../../developer/release-process.md:1
msgid "Release process"
msgstr "Processus de libération"
#: ../../../developer/release-process.md:4
msgid ""
"Each Jami sub-project has its own repository, build process, integration "
"cycle and so on. More over the **Jami architecture is split into two "
"independent modules**: LibRing *(daemon)* and clients."
msgstr ""
"Chaque sous-projet Jami a son propre référentiel, son propre processus de "
"construction, son propre cycle d'intégration, etc. En outre, l'architecture "
"**Jami est divisée en deux modules indépendants** : LibRing *(daemon)* et "
"clients."
#: ../../../developer/release-process.md:8
msgid ""
"Having a unique revision is not a solution in this situation. The retained "
"idea is having a global \"state\" and **various updates per module**."
msgstr "Une révision unique n'est pas une solution dans cette situation."
#: ../../../developer/release-process.md:12
msgid ""
"For consistency, **each Jami module has to follow the same process** as "
"described in following points. But not all modules have to be modified in "
"same time."
msgstr ""
"Par souci de cohérence, **chaque module Jami doit suivre le même "
"processus**, comme décrit dans les points suivants. Mais tous les modules ne"
" doivent pas être modifiés en même temps."
#: ../../../developer/release-process.md:18
msgid "**PROCESS FLOW:**"
msgstr "**FLOU DE PROCESS:**"
#: ../../../developer/release-process.md:0
msgid "1"
msgstr "1"
#: ../../../developer/release-process.md:0
msgid "2"
msgstr "2 - Le système de détection"
#: ../../../developer/release-process.md:0
msgid "3"
msgstr "3 Les États membres"
#: ../../../developer/release-process.md:0
msgid "4"
msgstr "4 Les États membres"
#: ../../../developer/release-process.md:0
msgid "5"
msgstr "5 Les États membres"
#: ../../../developer/release-process.md:0
msgid "6"
msgstr "6"
#: ../../../developer/release-process.md:0
#: ../../../developer/release-process.md:26
msgid "Redmine Ticket"
msgstr "Le billet de Redmine"
#: ../../../developer/release-process.md:0
#: ../../../developer/release-process.md:33
msgid "Repository Preparation"
msgstr "Préparation du référentiel"
#: ../../../developer/release-process.md:0
#: ../../../developer/release-process.md:38
msgid "Testing"
msgstr "Tests"
#: ../../../developer/release-process.md:0
#: ../../../developer/release-process.md:54
msgid "Push tags"
msgstr "Les étiquettes de poussée"
#: ../../../developer/release-process.md:0
#: ../../../developer/release-process.md:178
msgid "Advertisement"
msgstr "La publicité"
#: ../../../developer/release-process.md:29
msgid ""
"Create a new Task on redmine attached to the release story, for the right "
"sub-module. Set the title to \"Release Major.Minor.Micro\", with the "
"appropriate version number."
msgstr ""
"Créez une nouvelle tâche sur redmine jointe à l'histoire de sortie, pour le "
"sous-module droit."
#: ../../../developer/release-process.md:36
msgid "**This section was outdated and removed**"
msgstr "**Cette section a été supprimée**"
#: ../../../developer/release-process.md:41
msgid "Remove any existing Jami installations from your machine."
msgstr ""
#: ../../../developer/release-process.md:42
msgid ""
"Start with clean git tree by running `git clean -d -f -x` from the top level"
" directory of the project."
msgstr ""
"Commencez par l'arbre de git propre en exécutant `git clean -d -f -x` dans "
"le répertoire de niveau supérieur du projet."
#: ../../../developer/release-process.md:44
msgid "Build and install the daemon and client, see How\\\\\\_to\\\\\\_build"
msgstr ""
"Construire et installer le daemon et le client, voir Comment construire"
#: ../../../developer/release-process.md:45
msgid ""
"Run the test suite in daemon and client, on different distributions and "
"machines."
msgstr ""
"Exécutez la suite de test en daemon et client, sur différentes distributions"
" et machines."
#: ../../../developer/release-process.md:47
msgid "Run manual tests"
msgstr "Exécuter des tests manuels"
#: ../../../developer/release-process.md:48
msgid "Try registering and using different accounts."
msgstr "Essayez de vous inscrire et d'utiliser différents comptes."
#: ../../../developer/release-process.md:49
msgid ""
"Try making calls between Jami and other free softphones (Ekiga, Linphone), "
"as well as hardware VoIP phones."
msgstr ""
#: ../../../developer/release-process.md:51
msgid ""
"To catch uninitialized values being used, memory leaks, invalid frees, etc. "
"run `valgrind --track-origins=yes --db-attach=yes ./bin/dring`"
msgstr ""
"Pour capturer les valeurs non initiales utilisées, les fuites de mémoire, "
"les frees invalides, etc."
#: ../../../developer/release-process.md:57
msgid "`git push --tags`"
msgstr "`git pousser --tags`"
#: ../../../developer/release-process.md:68
#: ../../../developer/release-process.md:119
msgid "RPM"
msgstr "RPM"
#: ../../../developer/release-process.md:84
#: ../../../developer/release-process.md:137
msgid "DEB"
msgstr "DEB"
#: ../../../developer/release-process.md:98
#: ../../../developer/release-process.md:162
msgid "Release"
msgstr "Résolution"
#: ../../../developer/release-process.md:100
#: ../../../developer/release-process.md:165
msgid ""
"You just have to launch release script. This script launch build, download "
"and update files and repositories..."
msgstr "Il suffit de lancer le script de lancement."
#: ../../../developer/release-process.md:121
msgid "vim ring-daemon.spec"
msgstr "Vim ring-daemon.spec"
#: ../../../developer/release-process.md:181
msgid ""
"When the packaging is finished, test that they are installable. Then "
"announce the release"
msgstr "Lorsque l'emballage est terminé, vérifiez qu'il est installable."
#: ../../../developer/release-process.md:184
msgid "on the official website <https://ring.cx>"
msgstr "sur le site officiel <https://ring.cx>"
#: ../../../developer/release-process.md:185
msgid "on Twitter <https://twitter.com/JoinTheRing>"
msgstr "sur Twitter <https://twitter.com/JoinTheRing>"
#: ../../../developer/release-process.md:186
msgid ""
"by email to ring@lists.savoirfairelinux.net with the subject line: \"Ring "
"Major.Minor.Patch released\""
msgstr ""
"par courriel à ring@lists.savoirfairelinux.net avec la ligne d'objet: \"Ring"
" Major.Minor.Patch released\""
#: ../../../developer/setting-up-your-own-turn-server.md:1
msgid "Setting up your own TURN server"
msgstr "Configurer votre propre serveur TURN"
#: ../../../developer/setting-up-your-own-turn-server.md:4
msgid ""
"Jami can be configured to use TURN or STUN servers ([RFC "
"5766](https://tools.ietf.org/html/rfc5766)) to establish a connection "
"between two peers."
msgstr ""
"Jami peut être configuré pour utiliser des serveurs TURN ou STUN ([RFC "
"5766](https://tools.ietf.org/html/rfc5766)) pour établir une connexion entre"
" deux pairs."
#: ../../../developer/setting-up-your-own-turn-server.md:8
msgid ""
"The default TURN server is \"turn.jami.net\", with username \"ring\", "
"password \"ring\", and realm \"ring\"."
msgstr ""
"Le serveur par défaut de TURN est \"turn.jami.net\", avec le nom "
"d'utilisateur \"ring\", le mot de passe \"ring\" et le royaume \"ring\"."
#: ../../../developer/setting-up-your-own-turn-server.md:11
msgid ""
"In this guide, we will setup a [coturn](https://github.com/coturn/coturn) "
"server. There are other TURN/STUN server implementations available under a "
"free license, such as [TurnServer](http://turnserver.sourceforge.net/) and "
"[Restund](http://www.creytiv.com/restund.html)."
msgstr ""
"Dans ce guide, nous allons configurer un serveur "
"[coturn]https://github.com/coturn/coturn). Il existe d'autres mises en œuvre"
" de serveurs TURN/STUN disponibles sous une licence gratuite, telles que "
"[TurnServer]http://turnserver.sourceforge.net/) et "
"[Restund](http://www.creytiv.com/restund.html)."
#: ../../../developer/setting-up-your-own-turn-server.md:17
msgid "Installing"
msgstr "Installation"
#: ../../../developer/setting-up-your-own-turn-server.md:19
msgid ""
"COTURN is available in most Linux distributions. On Debian, install it with "
"the following command:"
msgstr ""
"COTURN est disponible dans la plupart des distributions Linux. Sur Debian, "
"installez-le avec la commande suivante:"
#: ../../../developer/setting-up-your-own-turn-server.md:25
msgid "Configuring"
msgstr "Configuration"
#: ../../../developer/setting-up-your-own-turn-server.md:27
msgid "Here is a basic `turnserver.conf` file:"
msgstr "Voici un fichier de base `turnserver.conf`:"
#: ../../../developer/setting-up-your-own-turn-server.md:38
msgid ""
"This also will function as a STUN server. The STUN server does not require a"
" username and password (STUN uses very little bandwidth)."
msgstr ""
"Ce serveur ne nécessite pas de nom d'utilisateur et de mot de passe (le "
"serveur STUN utilise très peu de bande passante)."
#: ../../../developer/setting-up-your-own-turn-server.md:41
msgid "Creating users on your TURN server"
msgstr "Créer des utilisateurs sur votre serveur TURN"
#: ../../../developer/setting-up-your-own-turn-server.md:43
msgid ""
"To create users on your TURN server, use the `turnadmin` binary (this might "
"require superuser permissions)."
msgstr ""
"Pour créer des utilisateurs sur votre serveur TURN, utilisez le `turnadmin` "
"binaire (cela peut nécessiter des autorisations de superutilisateur)."
#: ../../../developer/setting-up-your-own-turn-server.md:50
msgid "Launching the TURN server"
msgstr "Lancement du serveur TURN"
#: ../../../developer/setting-up-your-own-turn-server.md:56
msgid "Configuring Jami to authenticate with the TURN server"
msgstr "Configurer Jami pour authentifier avec le serveur TURN"
#: ../../../developer/setting-up-your-own-turn-server.md:58
msgid ""
"You can configure Jami to use your TURN server from the advanced section of "
"your account settings:"
msgstr ""
"Vous pouvez configurer Jami pour utiliser votre serveur TURN à partir de la "
"section avancée de vos paramètres de compte:"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "Field"
msgstr "champ"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "Value"
msgstr "La valeur"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "**server url**"
msgstr "**url du serveur**"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "host and port of your server"
msgstr "l'hôte et le port de votre serveur"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "0.0.0.0:10000"
msgstr "Les produits de la production de l'équipement"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "**username**"
msgstr "Nom d'utilisateur"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "username"
msgstr "nom d'utilisateur"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "bob"
msgstr "Bob est"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "**password**"
msgstr "** mot de passe**"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "password"
msgstr "mot de passe"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "secretpassword"
msgstr "mot de passe secret"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "**realm**"
msgstr "Le royaume"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "realm"
msgstr "le royaume"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "sfl"
msgstr "Sfl"
#: ../../../developer/submitting-your-first-patch.md:1
msgid "Submitting your first patch"
msgstr "Vous soumettez votre premier patch"
#: ../../../developer/submitting-your-first-patch.md:4
msgid "Setting up git and ssh"
msgstr "Configuration de git et ssh"
#: ../../../developer/submitting-your-first-patch.md:6
msgid "(**to work smoothly with Gerrit.**)"
msgstr "(** pour travailler sans heurts avec Gerrit.**)"
#: ../../../developer/submitting-your-first-patch.md:9
msgid "first see:"
msgstr "voir en premier lieu:"
#: ../../../developer/submitting-your-first-patch.md:11
msgid ""
"{ref}`Creating a gerrit review <developer/working-with-gerrit:To Create the "
"Review>`"
msgstr ""
"{ref}` Créer un examen de la révision <développeur/travailler avec la "
"révision: Pour créer le examen>`"
#: ../../../developer/submitting-your-first-patch.md:13
msgid "SSH setup"
msgstr "Installation SSH"
#: ../../../developer/submitting-your-first-patch.md:15
msgid "https://review.jami.net/Documentation/user-upload.html#ssh"
msgstr ""
"Les données de l'utilisateur sont fournies par le service de téléchargement."
#: ../../../developer/submitting-your-first-patch.md:17
msgid "Generate a personal dedicated public / private key set."
msgstr ""
"Générer un ensemble de clés privées et publiques personnelles dédiées."
#: ../../../developer/submitting-your-first-patch.md:22
msgid ""
"Your identification has been saved in `jami_gerrit_review_rsa`. Your public "
"key has been saved in `jami_gerrit_review_rsa.pub.`"
msgstr ""
"Votre identifiant a été enregistré dans `jami_gerrit_review_rsa`. Votre clé "
"publique a été enregistrée dans `jami_gerrit_review_rsa.pub.`"
#: ../../../developer/submitting-your-first-patch.md:25
msgid "Tell gerrit your public key"
msgstr "Dites à Gerrit votre clé publique"
#: ../../../developer/submitting-your-first-patch.md:26
msgid ""
"Login to [gerrit](https://review.jami.net) via your Gitlab account (Sign-"
"in=>OAuth Gitlab)"
msgstr ""
"Connectez-vous à [gerrit](https://review.jami.net) via votre compte Gitlab "
"(Sign-in=>OAuth Gitlab)"
#: ../../../developer/submitting-your-first-patch.md:27
msgid ""
"Follow the ssh key instructions found from (your) user options "
"[settings](https://review.jami.net/settings/)"
msgstr ""
"Suivez les instructions de la clé ssh trouvées dans les options utilisateur "
"[paramètres]https://review.jami.net/settings/)"
#: ../../../developer/submitting-your-first-patch.md:29
msgid "Set up your local ssh (via `ssh-add` or in `~/.ssh/config`)"
msgstr "Configurez votre ssh local (via `ssh-add` ou en `~/.ssh/config`)"
#: ../../../developer/submitting-your-first-patch.md:30
msgid ""
"Test all of the above (ssh on the service or just try to clone a repo on "
"gerrit via ssh)"
msgstr ""
"Testez tous les éléments ci-dessus (ssh sur le service ou essayez simplement"
" de cloner un repo sur gerrit via ssh)"
#: ../../../developer/submitting-your-first-patch.md:33
msgid "Your Repository"
msgstr "Votre référentiel"
#: ../../../developer/submitting-your-first-patch.md:35
msgid ""
"This *assumes* you have moved any existing project clone out of the way."
msgstr "Cela * suppose* que vous avez déplacé tout clone de projet existant."
#: ../../../developer/submitting-your-first-patch.md:37
msgid ""
"Clone a (fresh) copy of the project. `git clone "
"ssh://USERNAME@review.jami.net:29420/PROJECT_NAME_GOES_HERE.git`; e.g. `git "
"clone ssh://foo@review.jami.net:29420/jami-project.git`."
msgstr ""
"Cloner une copie (fraîche) du projet. `git cloner "
"ssh://USERNAME@review.jami.net:29420/PROJECT_NAME_GOES_HERE.git`; par "
"exemple `git cloner ssh://foo@review.jami.net:29420/jami-project.git`."
#: ../../../developer/submitting-your-first-patch.md:38
msgid "Configure this clones local .git/config (optional)"
msgstr "Configurer ce clone local.git/config (optionnel)"
#: ../../../developer/submitting-your-first-patch.md:39
msgid "Generate commit Change-Ids aka: commit-msg hook script"
msgstr "Générer des commit Change-Ids ou: commit-msg script"
#: ../../../developer/submitting-your-first-patch.md:42
msgid "A shell script, to be installed to .git/hooks/commit-msg."
msgstr "Un script shell, à installer sur.git/hooks/commit-msg."
#: ../../../developer/submitting-your-first-patch.md:45
msgid ""
"The script creates a unique Change_Id:hash for each commit made from your "
"repository."
msgstr ""
"Le script crée un change_id:hash unique pour chaque commande effectuée à "
"partir de votre répertoire."
#: ../../../developer/submitting-your-first-patch.md:48
msgid ""
"The first time you attempt a _push_ to review `git push origin "
"HEAD:refs/for/master`, gerrit will notice a lack of Change-Id."
msgstr ""
"La première fois que vous essayez de faire un _push_ pour revoir `git source"
" de poussée HEAD:refs/for/master`, gerrit remarquera un manque de Change-Id."
#: ../../../developer/submitting-your-first-patch.md:51
msgid ""
"Gerrit will also present a secure copy (scp) string. Use *that* to download "
"a copy of .git/hooks/commit-msg."
msgstr ""
"Gerrit présentera également une chaîne de copie sécurisée (scp). Utilisez "
"*that* pour télécharger une copie de.git/hooks/commit-msg."
#: ../../../developer/submitting-your-first-patch.md:55
msgid "References"
msgstr "Références"
#: ../../../developer/submitting-your-first-patch.md:58
msgid ""
"[Some Gritty Details](https://review.jami.net/Documentation/user-"
"upload.html#_gritty_details)"
msgstr "[Détails de la grille]"
#: ../../../developer/submitting-your-first-patch.md:62
msgid "Original author: *Peter Gossner*"
msgstr "Autrice originale: Peter Gossner"
#: ../../../developer/swarm.md:1
msgid "Swarm"
msgstr "Les éclats"
#: ../../../developer/swarm.md:3
msgid "Synospis"
msgstr "Synospis"
#: ../../../developer/swarm.md:5
msgid ""
"The goal of this document is to describe how group chats (a.k.a. **swarm "
"chat**) will be implemented in Jami."
msgstr ""
"L'objectif de ce document est de décrire comment les discussions de groupe "
"(a.k.a. **swarm chat**) seront mises en œuvre à Jami."
#: ../../../developer/swarm.md:7
msgid ""
"A *swarm* is a group able to discuss without any central authority in a "
"resilient way. Indeed, if two person doesn't have any connectivity with the "
"rest of the group (ie Internet outage) but they can contact each other (in a"
" LAN for example or in a subnetwork), they will be able to send messages to "
"each other and then, will be able to sync with the rest of the group when "
"it's possible."
msgstr ""
"Un *swarm* est un groupe capable de discuter sans aucune autorité centrale "
"de manière résiliente. En effet, si deux personnes n'ont aucune connectivité"
" avec le reste du groupe (c'est-à-dire une panne d'Internet) mais peuvent se"
" contacter (dans un réseau local par exemple ou dans un sous-réseau), elles "
"seront en mesure d'envoyer des messages les unes aux autres et ensuite, "
"seront en mesure de synchroniser avec le reste du groupe lorsque cela est "
"possible."
#: ../../../developer/swarm.md:9
msgid "So, the *swarm* is defined by:"
msgstr "Donc, le *swarm* est défini par:"
#: ../../../developer/swarm.md:10
msgid "Ability to split and merge following the connectivity."
msgstr "Capacité de séparation et de fusion à la suite de la connectivité."
#: ../../../developer/swarm.md:11
msgid ""
"Syncing of the history. Anyone must be able to send a message to the whole "
"group."
msgstr "Tout le monde doit pouvoir envoyer un message à tout le groupe."
#: ../../../developer/swarm.md:12
msgid "No central authority. Can not rely on any server."
msgstr "Aucune autorité centrale, aucun serveur."
#: ../../../developer/swarm.md:13
msgid ""
"Non-repudiation. Devices must be able to verify old messages' validity and "
"to replay the whole history."
msgstr ""
"Les appareils doivent être capables de vérifier la validité des messages "
"anciens et de reproduire l'historique."
#: ../../../developer/swarm.md:14
msgid "PFS on the transport. Storage is managed by the device."
msgstr "Le stockage est géré par l'appareil."
#: ../../../developer/swarm.md:16
msgid ""
"The main idea is to get a synchronized Merkle tree with the participants."
msgstr ""
"L'idée principale est d'obtenir un arbre de Merkle synchronisé avec les "
"participants."
#: ../../../developer/swarm.md:18
msgid "We identified four modes for swarm chat that we want to implement:"
msgstr ""
"Nous avons identifié quatre modes de chat en essaim que nous voulons mettre "
"en œuvre:"
#: ../../../developer/swarm.md:19
msgid ""
"**ONE_TO_ONE**, basically the case we have today when you discuss to a "
"friend"
msgstr ""
"**UN_TO_ONE**, c'est le cas de notre époque quand on discute avec un ami"
#: ../../../developer/swarm.md:20
msgid ""
"**ADMIN_INVITES_ONLY** generally a class where the teacher can invite "
"people, but not students"
msgstr ""
"**ADMIN_INVITES_ONLY** généralement une classe où l'enseignant peut inviter "
"des personnes, mais pas des étudiants"
#: ../../../developer/swarm.md:21
msgid "**INVITES_ONLY** a private group of friends"
msgstr "**INVITES_ONLY** un groupe privé d'amis"
#: ../../../developer/swarm.md:22
msgid "**PUBLIC** basically an opened forum"
msgstr "**Public** est essentiellement un forum ouvert"
#: ../../../developer/swarm.md:24
msgid "Scenarios"
msgstr "Scenarios"
#: ../../../developer/swarm.md:26
msgid "Create a Swarm"
msgstr "Créer une masse"
#: ../../../developer/swarm.md:28
msgid "*Bob wants to create a new swarm*"
msgstr "Bob veut créer un nouvel essaim"
#: ../../../developer/swarm.md:30
msgid "Bob creates a local git repository."
msgstr "Bob crée un référentiel de données."
#: ../../../developer/swarm.md:31
msgid "Then, he creates an initial signed commit with the following:"
msgstr ""
"Il crée ensuite un premier engagement signé avec les éléments suivants:"
#: ../../../developer/swarm.md:32
msgid "His public key in `/admins`"
msgstr "Sa clé publique en `/admins `"
#: ../../../developer/swarm.md:33
msgid "His device certificate in ̀ /devices`"
msgstr "Son certificat de dispositif en ̀ /devices `"
#: ../../../developer/swarm.md:34
msgid "His CRL in ̀ /crls`"
msgstr "Son RRC est en ̀ /crls`"
#: ../../../developer/swarm.md:35
msgid "The hash of the first commit becomes the **ID** of the conversation"
msgstr "Le hash du premier comit devient l'ID de la conversation."
#: ../../../developer/swarm.md:36
msgid ""
"Bob announces to his other devices that he creates a new conversation. This "
"is done via an invite to join the swarm sent through the DHT to other "
"devices linked to that account."
msgstr ""
"Bob annonce à ses autres appareils qu'il crée une nouvelle conversation, ce "
"qui se fait par une invitation à rejoindre l'envahisseur envoyé par le DHT à"
" d'autres appareils liés à ce compte."
#: ../../../developer/swarm.md:38
msgid "Adding someone"
msgstr "Ajouter quelqu'un"
#: ../../../developer/swarm.md:40
msgid "*Alice adds Bob*"
msgstr "Alice ajoute Bob"
#: ../../../developer/swarm.md:42
msgid "Alice adds Bob to the repo:"
msgstr "Alice ajoute Bob au référentiel:"
#: ../../../developer/swarm.md:43
msgid "Adds the invited URI in `/invited`"
msgstr "Ajout de l'URI invité en `/invited`"
#: ../../../developer/swarm.md:44
msgid "Adds the CRL into `/crls`"
msgstr "Ajout de la RLC à `/crls`"
#: ../../../developer/swarm.md:45
msgid "Alice sends a request on the DHT"
msgstr "Alice envoie une demande sur le DHT"
#: ../../../developer/swarm.md:47
msgid "Receiving an invite"
msgstr "Recevoir une invitation"
#: ../../../developer/swarm.md:49
msgid "*Alice gets the invite to join the previously create swarm*"
msgstr "Alice est invitée à rejoindre le swarm créé précédemment"
#: ../../../developer/swarm.md:51
msgid ""
"She accepts the invite (if decline, do nothing, it will just stay into "
"invited and Alice will never receive any message)"
msgstr ""
"Elle accepte l'invitation (si elle refuse, ne fait rien, elle restera dans "
"l'invité et Alice ne recevra jamais de message)"
#: ../../../developer/swarm.md:52
msgid "A peer-to-peer connection between Alice and Bob is done."
msgstr "Une connexion entre Alice et Bob est terminée."
#: ../../../developer/swarm.md:53
msgid ""
"Alice pull the git repo of Bob. **WARNING this means that messages need a "
"connection, not from the DHT like today**"
msgstr ""
"Alice tire le repo de Bob. ** AVERTISSEMENT Cela signifie que les messages "
"ont besoin d'une connexion, pas du DHT comme aujourd'hui**"
#: ../../../developer/swarm.md:54
msgid "Alice validates commits from Bob"
msgstr "Alice valide les engagements de Bob"
#: ../../../developer/swarm.md:55
msgid ""
"To validate that Alice is a member, she removes the invite from `/invited` "
"directory, then adds her certificate into the `/members` directory"
msgstr ""
"Pour valider que Alice est membre, elle supprime l'invitation du répertoire "
"`/invited`, puis ajoute son certificat dans le répertoire `/members`"
#: ../../../developer/swarm.md:56
msgid ""
"Once all commits validated and on her device, other members of the group are"
" discovered by Alice. with these peers, she will construct the **DRT** "
"(explained below) with Bob as a bootstrap."
msgstr ""
"Une fois tous les engagements validés et sur son appareil, les autres "
"membres du groupe sont découverts par Alice. Avec ces pairs, elle construira"
" le **DRT** (expliqué ci-dessous) avec Bob comme une bande de démarrage."
#: ../../../developer/swarm.md:58
msgid "Sending a message"
msgstr "Envoyer un message"
#: ../../../developer/swarm.md:60
msgid "*Alice sends a message*"
msgstr "Alice envoie un message"
#: ../../../developer/swarm.md:62
msgid ""
"Sending a message is pretty simple. Alice writes a commit-message in the "
"following format:"
msgstr ""
"Envoyer un message est assez simple. Alice écrit un message de commande dans"
" le format suivant:"
#: ../../../developer/swarm.md:64
msgid "**TODO format unclear**"
msgstr "**Format TODO non clair**"
#: ../../../developer/swarm.md:66
msgid ""
"and adds her device and CRL to the repository if missing (others must be "
"able to verify the commit). Merge conflicts are avoided because we are "
"mostly based on commit messages, not files (unless CRLS + certificates but "
"they are located). then she announces the new commit via the **DRT** with a "
"service message (explained later) and pings the DHT for mobile devices (they"
" must receive a push notification)."
msgstr ""
"Elle ajoute son appareil et son CRL au référentiel si elles manquent "
"(d'autres doivent être en mesure de vérifier le commit). Les conflits de "
"fusion sont évités parce que nous sommes principalement basés sur des "
"messages de commit, pas sur des fichiers (sauf si des certificats CRLS + "
"mais ils sont localisés)."
#: ../../../developer/swarm.md:68
msgid ""
"For pinging other devices, the sender sends to other members a SIP message "
"with mimetype = \"application/im-gitmessage-id\" containing a JSON with the "
"\"deviceId\" which sends the message, the \"id\" of the conversation "
"related, and the \"commit\""
msgstr ""
"Pour pinger d'autres appareils, l'expéditeur envoie aux autres membres un "
"message SIP avec mimetype = \"application/im-gitmessage-id\" contenant un "
"JSON avec le \"deviceId\" qui envoie le message, le \"id\" de la "
"conversation liée et le \"commit\""
#: ../../../developer/swarm.md:70
msgid "Receiving a message"
msgstr "Reçoit un message"
#: ../../../developer/swarm.md:72
msgid "*Bob receives the message from Alice*"
msgstr "Bob reçoit le message d'Alice"
#: ../../../developer/swarm.md:74
msgid "*Bob* do a git pull on *Alice*"
msgstr "Bob fait un coup sur Alice"
#: ../../../developer/swarm.md:75
msgid "Commits MUST be verified via a hook"
msgstr "Les engagements doivent être vérifiés par un crochet"
#: ../../../developer/swarm.md:76
msgid ""
"If all commits are valid, commits are stored and displayed. Then *Bob* "
"announces the message via the DRT for other devices."
msgstr ""
"Si tous les comités sont valides, les comités sont stockés et affichés."
#: ../../../developer/swarm.md:77
msgid ""
"If all commits are not valid, pull is canceled. *Alice* must reestablish her"
" state to a correct state. **TODO process*"
msgstr ""
"Si tous les comités ne sont pas valides, pull est annulé. *Alice* doit "
"rétablir son état à un état correct. *Processus TODO*"
#: ../../../developer/swarm.md:79
msgid "Validating a commit"
msgstr "Validation d'un engagement"
#: ../../../developer/swarm.md:81
msgid ""
"To avoid users pushing some unwanted commits (with conflicts, false "
"messages, etc), this is how each commit (from the oldest to the newest one) "
"MUST be validated before merging a remote branch:"
msgstr ""
"Pour éviter que les utilisateurs ne poussent certains commissions "
"indésirables (avec des conflits, de faux messages, etc.), voici comment "
"chaque commande (de la plus ancienne à la plus récente) DOIT être validée "
"avant de fusionner une branche distante:"
#: ../../../developer/swarm.md:83
msgid ""
"Note: if the validation fails, the fetch is ignored and we do not merge the "
"branch (and remove the data), and the user should be notified Note2: If a "
"fetch is too big, it's not done (**TODO**)"
msgstr ""
"Remarque: si la validation échoue, le tirage est ignoré et nous ne "
"fusionnons pas la branche (et supprimer les données), et l'utilisateur doit "
"être averti Remarque2: Si un tirage est trop grand, il n'est pas fait (** "
"TODO**)"
#: ../../../developer/swarm.md:86
msgid ""
"For each commits, check that the device that tries to send the commit is "
"authorized at this moment and that the certificates are present (in /devices"
" for the device, and in /members or /admins for the issuer)."
msgstr ""
"Pour chaque engagement, vérifiez que le dispositif qui tente d'envoyer le "
"engagement est autorisé à ce moment-là et que les certificats sont présents "
"(dans les appareils du dispositif et dans les membres ou administrateurs de "
"l'émetteur)."
#: ../../../developer/swarm.md:87
msgid ""
"3 cases. The commit has 2 parents, so it's a merge, nothing more to validate"
" here"
msgstr ""
"Le comité a 2 parents, donc c'est une fusion, rien de plus à valider ici"
#: ../../../developer/swarm.md:88
msgid "The commit has 0 parents, it's the initial commit:"
msgstr "Le compromis a 0 parents, c'est le compromis initial:"
#: ../../../developer/swarm.md:89
msgid "Check that admin cert is added"
msgstr "Vérifiez que le certificat d'administration a été ajouté"
#: ../../../developer/swarm.md:90
msgid "Check that device cert is added"
msgstr "Vérifiez que le certificat de l'appareil est ajouté"
#: ../../../developer/swarm.md:91
msgid "Check CRLs added"
msgstr "L'ajout des LCR de vérification"
#: ../../../developer/swarm.md:92
msgid "Check that no other file is added"
msgstr "Vérifiez qu' aucun autre fichier n' est ajouté"
#: ../../../developer/swarm.md:93
msgid "The commit has 1 parent, commit message is a JSON with a type:"
msgstr "Le comit a 1 parent, le message comit est un JSON avec un type:"
#: ../../../developer/swarm.md:94
msgid "If text (or other mime-type that doesn't change files)"
msgstr "Si le texte (ou autre type de mime qui ne change pas de fichiers)"
#: ../../../developer/swarm.md:95
msgid "Check signature from certificate in the repo"
msgstr "Contrôle de la signature du certificat dans le repo"
#: ../../../developer/swarm.md:96
msgid "Check that no weird file is added outside device cert nor removed"
msgstr ""
"Vérifiez qu' aucun fichier étrange n' est ajouté en dehors du certificat de "
"périphérique ni supprimé"
#: ../../../developer/swarm.md:97
msgid "If vote"
msgstr "Si vous votez"
#: ../../../developer/swarm.md:98
msgid "Check that voteType is supported (ban, unban)"
msgstr ""
"Vérifiez que voteType est pris en charge (interdiction, déinterdiction)"
#: ../../../developer/swarm.md:99
msgid "Check that vote is for the user that signs the commit"
msgstr "Vérifiez que le vote est pour l'utilisateur qui signe le compromis"
#: ../../../developer/swarm.md:100
msgid "Check that vote is from an admin and device present & not banned"
msgstr ""
"Vérifiez que le vote est d' un administrateur et un appareil présent & non "
"interdit"
#: ../../../developer/swarm.md:101 ../../../developer/swarm.md:106
#: ../../../developer/swarm.md:113 ../../../developer/swarm.md:119
msgid "Check that no weird file is added nor removed"
msgstr "Vérifiez qu' aucun fichier étrange n' est ajouté ou supprimé"
#: ../../../developer/swarm.md:102
msgid "If member"
msgstr "Si le membre"
#: ../../../developer/swarm.md:103
msgid "If adds"
msgstr "Si ajoutée"
#: ../../../developer/swarm.md:104 ../../../developer/swarm.md:110
msgid "Check that the commit is correctly signed"
msgstr "Vérifiez que le contrat est correctement signé"
#: ../../../developer/swarm.md:105
msgid "Check that certificate is added in /invited"
msgstr "Vérifiez que le certificat est ajouté dans / invité"
#: ../../../developer/swarm.md:107
msgid "If ONE_TO_ONE, check that we only have one admin, one member"
msgstr ""
"Si ONE_TO_ONE, vérifiez que nous n'avons qu'un seul administrateur, un seul "
"membre"
#: ../../../developer/swarm.md:108
msgid "If ADMIN_INVITES_ONLY, check that invite is from an admin"
msgstr ""
"Si ADMIN_INVITES_ONLY, vérifiez que l'invitation est d'un administrateur"
#: ../../../developer/swarm.md:109
msgid "If joins"
msgstr "Si elle est jointe"
#: ../../../developer/swarm.md:111
msgid "Check that device is added"
msgstr "Vérifiez que le dispositif est ajouté"
#: ../../../developer/swarm.md:112
msgid "Check that invitation is moved to members"
msgstr "Vérifiez que l'invitation est transférée aux membres"
#: ../../../developer/swarm.md:114
msgid "If banned"
msgstr "Si c'est interdit"
#: ../../../developer/swarm.md:115
msgid "Check that vote is valid"
msgstr "Vérifiez que le vote est valide"
#: ../../../developer/swarm.md:116
msgid "Check that the user is ban via an admin"
msgstr "Vérifiez que l'utilisateur est interdit via un administrateur"
#: ../../../developer/swarm.md:117
msgid "Check that member or device certificate is moved to banned/"
msgstr ""
"Vérifiez que le certificat de membre ou de dispositif est déplacé vers "
"interdit/"
#: ../../../developer/swarm.md:118
msgid "Check that only files related to the vote are removed"
msgstr "Vérifiez que seuls les fichiers liés au vote sont supprimés"
#: ../../../developer/swarm.md:120
msgid ""
"else fail. Notify the user that they may be with an old version or that peer"
" tried to submit unwanted commits"
msgstr ""
"notifier à l'utilisateur qu'il peut être avec une ancienne version ou que le"
" paire a essayé de soumettre des commissions indésirables"
#: ../../../developer/swarm.md:123
msgid "Ban a device"
msgstr "Interdiction d'un appareil"
#: ../../../developer/swarm.md:125
msgid "*Alice, Bob, Carla, Denys are in a swarm. Alice bans Denys*"
msgstr "Alice, Bob, Carla, Denys sont dans un essaim."
#: ../../../developer/swarm.md:127
msgid ""
"This is one of the most difficult scenarios in our context. Without central "
"authority we can not trust:"
msgstr "C'est l'un des scénarios les plus difficiles de notre contexte."
#: ../../../developer/swarm.md:129
msgid "Timestamps of generated commits"
msgstr "Temps de l'engagement généré"
#: ../../../developer/swarm.md:130
msgid ""
"Conflicts with banned devices. If multiple admin devices are present and if "
"Alice can speak with Bob but not Denys and Carla; Carla can speak with "
"Denys; Denys bans Alice, Alice bans Denys, what will be the state when the 4"
" members will merge the conversations."
msgstr ""
"Si plusieurs appareils d'administration sont présents et si Alice peut "
"parler à Bob mais pas à Denys et Carla; Carla peut parler à Denys; Denys "
"interdit Alice, Alice interdit Denys, quel sera l'état lorsque les 4 membres"
" fusionneront les conversations."
#: ../../../developer/swarm.md:131
msgid ""
"A device can be compromised, stolen or its certificate can expire. We should"
" be able to ban a device and avoid that it lies about its expiration or send"
" messages in the past (by changing its certificate or the timestamp of its "
"commit)."
msgstr ""
"Un appareil peut être compromis, volé ou son certificat peut expirer. Nous "
"devrions pouvoir interdire un appareil et éviter qu'il mente sur son "
"expiration ou envoie des messages dans le passé (en modifiant son certificat"
" ou le timestamp de son engagement)."
#: ../../../developer/swarm.md:133
msgid ""
"Similar systems (with distributed group systems) are not so much, but these "
"are some examples:"
msgstr ""
"Les systèmes similaires (avec des systèmes de groupe distribués) ne sont pas"
" si nombreux, mais voici quelques exemples:"
#: ../../../developer/swarm.md:135
msgid ""
"[mpOTR doesn't define how to ban "
"someone](https://www.cypherpunks.ca/~iang/pubs/mpotr.pdf)"
msgstr "[mpOTR ne définit pas comment interdire quelqu'un]"
#: ../../../developer/swarm.md:136
msgid ""
"Signal, without any central server for group chat (EDIT: they recently "
"change that point), doesn't give the ability to ban someone from a group."
msgstr ""
"Signal, sans serveur central pour le chat de groupe (EDIT: ils ont récemment"
" changé ce point), ne donne pas la possibilité d'interdire quelqu'un d'un "
"groupe."
#: ../../../developer/swarm.md:138
msgid ""
"This voting system needs a human action to ban someone or must be based on "
"the CRLs info from the repository (because we can not trust external CRLs)"
msgstr ""
"Ce système de vote a besoin d'une action humaine pour interdire quelqu'un ou"
" doit être basé sur les informations des RLC du référentiel (car nous ne "
"pouvons pas faire confiance aux RLC externes)"
#: ../../../developer/swarm.md:140
msgid "Remove a device from a conversation"
msgstr "Retirez un appareil d'une conversation"
#: ../../../developer/swarm.md:142
msgid ""
"This is the only part that MUST have a consensus to avoid conversation's "
"split, like if two members kick each other from the conversation, what will "
"see the third one?"
msgstr ""
"C'est la seule partie où il faut un consensus pour éviter la fracture de la "
"conversation, comme si deux membres se tirent dessus, que verra le "
"troisième?"
#: ../../../developer/swarm.md:144
msgid ""
"This is needed to detect revoked devices, or simply avoid getting unwanted "
"people present in a public room. The process is pretty similar between a "
"member and a device:"
msgstr ""
"Ceci est nécessaire pour détecter les appareils révoqués, ou tout simplement"
" pour éviter de faire venir des personnes indésirables dans une salle "
"publique."
#: ../../../developer/swarm.md:146
msgid "*Alice removes Bob*"
msgstr "Alice enlève Bob"
#: ../../../developer/swarm.md:148
msgid "Note: Alice MUST be admins to vote"
msgstr "Note: Alice doit être administrateur pour voter"
#: ../../../developer/swarm.md:150
msgid ""
"First, she votes for banning Bob. To do that, she creates the file in "
"/votes/ban/members/uri_bob/uri_alice (members can be replaced by devices for"
" a device, or invited for invites or admins for admins) and commits"
msgstr ""
"Pour ce faire, elle crée le fichier dans "
"/votes/ban/membres/uri_bob/uri_alice (les membres peuvent être remplacés par"
" des appareils pour un appareil, ou invités à des invitations ou des "
"administrateurs pour les administrateurs) et s'engage à"
#: ../../../developer/swarm.md:151 ../../../developer/swarm.md:157
msgid ""
"Then she checks if the vote is resolved. This means that >50% of the admins "
"agree to ban Bob (if she is alone, it's sure it's more than 50%)."
msgstr ""
"Elle vérifie ensuite si le vote est résolu. Cela signifie que > 50% des "
"administrateurs sont d'accord pour interdire Bob (si elle est seule, c'est "
"certainement plus de 50%)."
#: ../../../developer/swarm.md:152
msgid ""
"If the vote is resolved, files into /votes/ban can be removed, all files for"
" Bob in /members, /admins, /invited, /CRLs, /devices can be removed (or only"
" in /devices if it's a device that is banned) and Bob's certificate can be "
"placed into /banned/members/bob_uri.crt (or /banned/devices/uri.crt if a "
"device is banned) and committed to the repo"
msgstr ""
"Si le vote est résolu, les fichiers dans /votes/ban peuvent être supprimés, "
"tous les fichiers pour Bob dans /membres, /admins, /invités, /CRLs, "
"/appareils peuvent être supprimés (ou seulement dans /appareils si c'est un "
"appareil qui est interdit) et le certificat de Bob peut être placé dans "
"/banned/membres/bob_uri.crt (ou /banned/devices/uri.crt si un appareil est "
"interdit) et engagé à la repo"
#: ../../../developer/swarm.md:153
msgid "Then, Alice informs other users (outside Bob)"
msgstr "Alice informe ensuite les autres utilisateurs (à l'exception de Bob)"
#: ../../../developer/swarm.md:155
msgid "*Alice (admin) re-adds Bob (banned member)"
msgstr "*Alice (administrateur) ajoute à nouveau Bob (membre interdit)"
#: ../../../developer/swarm.md:156
msgid ""
"Fir she votes for unbanning Bob. To do that, she creates the file in "
"/votes/unban/members/uri_bob/uri_alice (members can be replaced by devices "
"for a device, or invited for invites or admins for admins) and commits"
msgstr ""
"Pour ce faire, elle crée le fichier dans "
"/votes/unban/membres/uri_bob/uri_alice (les membres peuvent être remplacés "
"par des appareils pour un appareil, ou invités à des invitations ou des "
"administrateurs pour les administrateurs) et s'engage à"
#: ../../../developer/swarm.md:158
msgid ""
"If the vote is resolved, files into /votes/unban can be removed, all files "
"for Bob in /members, /admins, /invited, /CRLs, can be re-added (or only in "
"/devices if it's a device that is unbanned) and committed to the repo"
msgstr ""
"Si le vote est résolu, les fichiers dans /votes/unban peuvent être "
"supprimés, tous les fichiers pour Bob dans /membres, /admins, /invités, "
"/CRLs, peuvent être ajoutés à nouveau (ou seulement dans /appareils si c'est"
" un appareil qui est non interdit) et engagés dans le repo"
#: ../../../developer/swarm.md:160
msgid "Remove a conversation"
msgstr "Retirez une conversation"
#: ../../../developer/swarm.md:162
msgid ""
"Save in convInfos removed=time::now() (like removeContact saves in contacts)"
" that the conversation is removed and sync with other user's devices"
msgstr ""
"Enregistrer dans convInfos removed=time::now() (comme enleverContact "
"enregistre dans les contacts) que la conversation est supprimée et "
"synchronisée avec les appareils d'autres utilisateurs"
#: ../../../developer/swarm.md:163
msgid "Now, if a new commit is received for this conversation it's ignored"
msgstr ""
"Si on reçoit un nouveau commentaire pour cette conversation, on l'ignore."
#: ../../../developer/swarm.md:164
msgid ""
"Now, if Jami startup and the repo is still present, the conversation is not "
"announced to clients"
msgstr ""
"Si Jami est en activité et que le repo est toujours présent, la conversation"
" n'est pas annoncée aux clients."
#: ../../../developer/swarm.md:165
msgid ""
"Two cases: a. If no other member in the conversation we can immediately "
"remove the repository b. If still other members, commit that we leave the "
"conversation, and now wait that at least another device sync this message. "
"This avoids the fact that other members will still detect the user as a "
"valid member and still sends new message notifications."
msgstr ""
"Deux cas: a. Si aucun autre membre de la conversation ne nous est possible "
"de supprimer immédiatement le référentiel b. Si d'autres membres restent, "
"engagez-vous à quitter la conversation, et maintenant attendez que au moins "
"un autre appareil synchronise ce message. Cela évite le fait que d'autres "
"membres détecteront toujours l'utilisateur comme un membre valide et envoie "
"encore de nouvelles notifications de message."
#: ../../../developer/swarm.md:168
msgid ""
"When we are sure that someone is synched, remove erased=time::now() and sync"
" with other user's devices"
msgstr ""
"Lorsque nous sommes sûrs que quelqu'un est synchronisé, supprimer "
"effacé=time::now() et synchroniser avec les appareils d'autres utilisateurs"
#: ../../../developer/swarm.md:169
msgid ""
"All devices owned by the user can now erase the repository and related files"
msgstr ""
"Tous les appareils appartenant à l'utilisateur peuvent désormais effacer le "
"référentiel et les fichiers connexes"
#: ../../../developer/swarm.md:171
msgid "How to specify a mode"
msgstr "Comment spécifier un mode"
#: ../../../developer/swarm.md:173
msgid ""
"Modes can not be changed through time. Or it's another conversation. So, "
"this data is stored in the initial commit message. The commit message will "
"be the following:"
msgstr ""
"Les modes ne peuvent pas être modifiés au fil du temps. Ou c'est une autre "
"conversation. Donc, ces données sont stockées dans le message de commande "
"initial."
#: ../../../developer/swarm.md:184
msgid ""
"For now, \"mode\" accepts values 0 (ONE_TO_ONE), 1 (ADMIN_INVITES_ONLY), 2 "
"(INVITES_ONLY), 3 (PUBLIC)"
msgstr ""
"Pour l'instant, le \"mode\" accepte des valeurs 0 (ONE_TO_ONE), 1 "
"(ADMIN_INVITES_ONLY), 2 (INVITES_ONLY), 3 (PUBLIC)"
#: ../../../developer/swarm.md:186
msgid "Processus for 1:1 swarms"
msgstr "Processus pour les essaims 1:1"
#: ../../../developer/swarm.md:188
msgid ""
"The goal here is to keep the old API (addContact/removeContact, "
"sendTrustRequest/acceptTrustRequest/discardTrustRequest) to generate swarm "
"with a peer and its contact. This still implies some changes that we cannot "
"ignore:"
msgstr ""
"L'objectif ici est de conserver l'ancienne API (addContact/removeContact, "
"sendTrustRequest/acceptTrustRequest/discardTrustRequest) pour générer un "
"essaim avec un paire et son contact."
#: ../../../developer/swarm.md:190
msgid ""
"The process is still the same, an account can add a contact via addContact, "
"then send a TrustRequest via the DHT. But two changes are necessary:"
msgstr ""
"Le processus est toujours le même, un compte peut ajouter un contact via "
"addContact, puis envoyer une demande de confiance via le DHT. Mais deux "
"changements sont nécessaires:"
#: ../../../developer/swarm.md:191
msgid ""
"The TrustRequest embeds a \"conversationId\" to inform the peer what "
"conversation to clone when accepting the request"
msgstr ""
"La demande de confiance intègre un \"conversationId\" pour informer le paire"
" de quelle conversation cloner lors de l'acceptation de la demande"
#: ../../../developer/swarm.md:192
msgid ""
"TrustRequest are retried when contact come backs online. It's not the case "
"today (as we don't want to generate a new TrustRequest if the peer discard "
"the first). So, if an account receives a trust request, it will be "
"automatically ignored if the request with a related conversation is declined"
" (as convRequests are synched)"
msgstr ""
"TrustRequest est retesté lorsque le contact revient en ligne. Ce n'est pas "
"le cas aujourd'hui (car nous ne voulons pas générer une nouvelle "
"TrustRequest si le pair rejette la première)."
#: ../../../developer/swarm.md:194
msgid ""
"Then, when a contact accepts the request, a period of sync is necessary, "
"because the contact now needs to clone the conversation."
msgstr ""
"Ensuite, lorsqu'un contact accepte la demande, une période de "
"synchronisation est nécessaire, car le contact doit maintenant cloner la "
"conversation."
#: ../../../developer/swarm.md:196
msgid ""
"removeContact() will remove the contact and related 1:1 conversations (with "
"the same process as \"Remove a conversation\"). The only note here is that "
"if we ban a contact, we don't wait for sync, we just remove all related "
"files."
msgstr ""
"RemoveContact() supprimera le contact et les conversations 1:1 connexes "
"(avec le même processus que \"Remove a conversation\"). La seule note ici "
"est que si nous interdisons un contact, nous n'attendons pas la "
"synchronisation, nous supprimons simplement tous les fichiers connexes."
#: ../../../developer/swarm.md:198
msgid "Tricky scenarios"
msgstr "Des scénarios difficiles"
#: ../../../developer/swarm.md:200
msgid ""
"There are some cases where two conversations can be created. This is at "
"least two of those scenarios:"
msgstr "Il y a des cas où deux conversations peuvent être créées."
#: ../../../developer/swarm.md:202 ../../../developer/swarm.md:205
msgid "Alice adds Bob"
msgstr "Alice ajoute Bob"
#: ../../../developer/swarm.md:203
msgid "Bob accepts"
msgstr "Bob accepte"
#: ../../../developer/swarm.md:204
msgid "Alice removes Bob"
msgstr "Alice enlève Bob"
#: ../../../developer/swarm.md:207
msgid "or"
msgstr "ou"
#: ../../../developer/swarm.md:209
msgid ""
"1, Alice adds Bob & Bob adds Alice at the same time, but both are not "
"connected together"
msgstr ""
"1, Alice ajoute Bob et Bob ajoute Alice en même temps, mais les deux ne sont"
" pas connectés ensemble"
#: ../../../developer/swarm.md:211
msgid ""
"In this case, two conversations are generated. We don't want to remove "
"messages from users or choose one conversation here. So, sometimes two 1:1 "
"swarm between the same members will be shown. It will generate some bugs "
"during the transition time (as we don't want to break API, the inferred "
"conversation will be one of the two shown conversations, but for now it's "
"\"ok-ish\", will be fixed when clients will fully handle conversationId for "
"all APIs (calls, file transfer, etc))."
msgstr ""
"Dans ce cas, deux conversations sont générées. Nous ne voulons pas supprimer"
" les messages des utilisateurs ou choisir une conversation ici. Donc, "
"parfois deux essaim 1:1 entre les mêmes membres seront montrés. Cela "
"générera quelques bugs pendant le temps de transition (comme nous ne voulons"
" pas casser l'API, la conversation déduite sera l'une des deux conversations"
" montrées, mais pour l'instant c'est \"ok-ish\", sera corrigé lorsque les "
"clients géreront pleinement la conversationId pour toutes les API (appels, "
"transfert de fichiers, etc.)."
#: ../../../developer/swarm.md:213
msgid "Note while syncing"
msgstr "Note lors de la synchronisation"
#: ../../../developer/swarm.md:215
msgid ""
"After accepting a conversation's request, there is a time the daemon needs "
"to retrieve the distant repository. During this time, clients MUST show a "
"syncing view to give informations to the user. Note, while syncing:"
msgstr ""
"Après avoir accepté la demande d'une conversation, il y a un moment où le "
"daemon doit récupérer le référentiel distant. Pendant ce temps, les clients "
"DOIVENT afficher une vue de synchronisation pour donner des informations à "
"l'utilisateur."
#: ../../../developer/swarm.md:218
msgid ""
"ConfigurationManager::getConversations() will return the conversation's id "
"even while syncing"
msgstr ""
"ConfigurationManager::getConversations() renvoie l'id de la conversation "
"même pendant la synchronisation"
#: ../../../developer/swarm.md:219
msgid ""
"ConfigurationManager::conversationInfos() will return {{\"syncing\": "
"\"true\"}} if syncing."
msgstr ""
"ConfigurationManager::conversationInfos() renvoie {{\"synchronisation\": "
"\"true\"}} si la synchronisation est effectuée."
#: ../../../developer/swarm.md:220
msgid ""
"ConfigurationManager::getConversationMembers() will return a map of two URIs"
" (the current account and the peer who sent the request)"
msgstr ""
"ConfigurationManager::getConversationMembres() renvoie une carte de deux URI"
" (le compte courant et le paire qui a envoyé la demande)"
#: ../../../developer/swarm.md:222
msgid "Conversations requests specification"
msgstr "Les discussions demandent des spécifications"
#: ../../../developer/swarm.md:224
msgid ""
"Conversations requests are represented by a **Map<String, String>** with the"
" following keys:"
msgstr ""
"Les demandes de conversation sont représentées par une **Map<String, "
"String>** avec les touches suivantes:"
#: ../../../developer/swarm.md:226
msgid "id: the conversation id"
msgstr "id: le numéro de conversation"
#: ../../../developer/swarm.md:227
msgid "from: uri of the sender"
msgstr "de: uri de l'expéditeur"
#: ../../../developer/swarm.md:228
msgid "received: timestamp"
msgstr "reçu: timestamp"
#: ../../../developer/swarm.md:229
msgid "title: (optional) name for the conversation"
msgstr "titre: nom (optionnel) de la conversation"
#: ../../../developer/swarm.md:230
msgid "description: (optional)"
msgstr "Description: (facultatif)"
#: ../../../developer/swarm.md:231
msgid "avatar: (optional)"
msgstr "Avatar: (optionnel)"
#: ../../../developer/swarm.md:233
msgid "Conversation's profile synchronization"
msgstr "Synchronisation du profil de la conversation"
#: ../../../developer/swarm.md:235
msgid ""
"To be identifiable, a conversation generally needs some metadata, like a "
"title (eg: Jami), a description (eg: some links, what is the project, etc), "
"and an image (the logo of the project). Those metadata are optional but "
"shared across all members, so need to be synced and incorporated in the "
"requests."
msgstr ""
"Pour être identifiable, une conversation a généralement besoin de certaines "
"métadonnées, comme un titre (par exemple: Jami), une description (par "
"exemple: quelques liens, quel est le projet, etc.), et une image (le logo du"
" projet). Ces métadonnées sont facultatives mais partagées entre tous les "
"membres, il faut donc les synchroniser et les intégrer dans les demandes."
#: ../../../developer/swarm.md:237
msgid "Storage in the repository"
msgstr "Conservation dans le référentiel"
#: ../../../developer/swarm.md:239
msgid ""
"The profile of the conversation is stored in a classic vCard file at the "
"root (`/profile.vcf`) like:"
msgstr ""
"Le profil de la conversation est stocké dans un fichier vCard classique à la"
" racine (`/profile.vcf`) comme:"
#: ../../../developer/swarm.md:249
msgid "Synchronization"
msgstr "Synchronisation"
#: ../../../developer/swarm.md:251
msgid ""
"To update the vCard, a user with enough permissions (by default: =ADMIN) "
"needs to edit `/profile.vcf`. and will commit the file with the mimetype "
"`application/update-profile`. The new message is sent via the same mechanism"
" and all peers will receive the **MessageReceived** signal from the daemon. "
"The branch is dropped if the commit contains other files or too big or if "
"done by a non-authorized member (by default: <ADMIN)."
msgstr ""
"Pour mettre à jour la vCard, un utilisateur avec suffisamment "
"d'autorisations (par défaut: =ADMIN) doit modifier `/profil.vcf`. et "
"engagera le fichier avec le mimetype `application/update-profile`. Le "
"nouveau message est envoyé via le même mécanisme et tous les pairs recevront"
" le signal **MessageReceived** du daemon. La branche est abandonnée si le "
"commit contient d'autres fichiers ou trop gros ou si fait par un membre non "
"autorisé (par défaut: <ADMIN)."
#: ../../../developer/swarm.md:253
msgid "Last Displayed"
msgstr "Dernière mise en valeur"
#: ../../../developer/swarm.md:255
msgid ""
"In the synchronized data, each devices sends to other devices the state of "
"the conversations. In this state, the last displayed is sent. However, "
"because each device can have its own state for each conversation, and "
"probably without the same last commit at some point, there is several "
"scenarios to take into account:"
msgstr ""
"Dans les données synchronisées, chaque appareil envoie aux autres appareils "
"l'état des conversations. Dans cet état, l'état affiché est envoyé. "
"Cependant, comme chaque appareil peut avoir son propre état pour chaque "
"conversation, et sans probablement le même dernier engagement à un moment "
"donné, il existe plusieurs scénarios à prendre en compte:"
#: ../../../developer/swarm.md:257
msgid "5 scenarios are supported:"
msgstr "5 scénarios sont pris en charge:"
#: ../../../developer/swarm.md:258
msgid ""
"if the last displayed sent by other devices is the same as the current one, "
"there is nothing to do."
msgstr ""
"si la dernière affichage envoyé par d'autres appareils est la même que celle"
" actuelle, il n'y a rien à faire."
#: ../../../developer/swarm.md:259
msgid ""
"if there is no last displayed for the current device, the remote displayed "
"message is used."
msgstr ""
"si le dernier message n'est pas affiché pour le dispositif actuel, le "
"message affiché à distance est utilisé."
#: ../../../developer/swarm.md:260
msgid ""
"if the remote last displayed is not present in the repo, it means that the "
"commit will be fetched later, so cache the result"
msgstr ""
"si la télécommande dernière affichée n'est pas présente dans la repo, cela "
"signifie que le comit sera récupéré plus tard, donc cache le résultat"
#: ../../../developer/swarm.md:261
msgid ""
"if the remote is already fetched, we check that the local last displayed is "
"before in the history to replace it"
msgstr ""
"si la télécommande est déjà récupérée, nous vérifions que la dernière "
"localisation affichée est précédente dans l'histoire pour la remplacer"
#: ../../../developer/swarm.md:262
msgid ""
"Finally if a message is announced from the same author, it means that we "
"need to update the last displayed."
msgstr ""
"Enfin, si un message est annoncé par le même auteur, cela signifie que nous "
"devons mettre à jour le dernier message affiché."
#: ../../../developer/swarm.md:264
msgid "Preferences"
msgstr "Préférences"
#: ../../../developer/swarm.md:266
msgid ""
"Every conversation has attached preferences set by the user. Those "
"preferences are synced across user's devices. This can be the color of the "
"conversation, if the user wants to ignore notifications, file transfer size "
"limit, etc. For now, the recognized keys are:"
msgstr ""
"Chaque conversation a des préférences fixées par l'utilisateur. Ces "
"préférences sont synchronisées sur les appareils de l'utilisateur."
#: ../../../developer/swarm.md:268
msgid "\"color\" - the color of the conversation (#RRGGBB format)"
msgstr ""
#: ../../../developer/swarm.md:269
msgid ""
"\"ignoreNotifications\" - to ignore notifications for new messages in this "
"conversation"
msgstr ""
"\"ignorer les notifications\" - pour ignorer les notifications de nouveaux "
"messages dans cette conversation"
#: ../../../developer/swarm.md:270
msgid "\"symbol\" - to define a default emoji."
msgstr "\"symbole\" - pour définir un emoji par défaut."
#: ../../../developer/swarm.md:272
msgid ""
"Those preferences are stored in a packet MapStringString, stored in "
"`accountDir/conversation_data/conversationId/preferences` and only sent "
"across devices of the same user via SyncMsg."
msgstr ""
"Ces préférences sont stockées dans un paquet MapStringString, stockées dans "
"`accountDir/conversation_data/conversationId/preférences` et uniquement "
"envoyées sur les appareils du même utilisateur via SyncMsg."
#: ../../../developer/swarm.md:274
msgid "The API to interact with the preferences are:"
msgstr "L'API pour interagir avec les préférences est:"
#: ../../../developer/swarm.md:294
msgid "Merge conflicts management"
msgstr "Gestion des conflits de fusion"
#: ../../../developer/swarm.md:296
msgid ""
"Because two admins can change the description at the same time, a merge "
"conflict can occur on `profile.vcf`. In this case, the commit with the "
"higher hash (eg ffffff > 000000) will be chosen."
msgstr ""
"Parce que deux administrateurs peuvent modifier la description en même "
"temps, un conflit de fusion peut survenir sur `profile.vcf`. Dans ce cas, le"
" commit avec le hash plus élevé (par exemple ffffff > 000000) sera choisi."
#: ../../../developer/swarm.md:298
msgid "APIs"
msgstr "Les API"
#: ../../../developer/swarm.md:300
msgid "The user got 2 methods to get and set conversation's metadatas:"
msgstr ""
"L'utilisateur a 2 méthodes pour obtenir et définir les métadonnées de la "
"conversation:"
#: ../../../developer/swarm.md:326
msgid "where `infos` is a `map<str, str>` with the following keys:"
msgstr "où `infos` est une `map<str, str>` avec les touches suivantes:"
#: ../../../developer/swarm.md:328
msgid "mode: READ-ONLY"
msgstr "Mode: uniquement en lecture"
#: ../../../developer/swarm.md:329
msgid "title"
msgstr "titre"
#: ../../../developer/swarm.md:330
msgid "description"
msgstr "détail"
#: ../../../developer/swarm.md:331
msgid "avatar"
msgstr "avatar"
#: ../../../developer/swarm.md:333
msgid "Re-import an account (link/export)"
msgstr "Récupération de l'importation d'un compte (lien/exportation)"
#: ../../../developer/swarm.md:335
msgid ""
"The archive MUST contain conversationId to be able to retrieve conversations"
" on new commits after a re-import (because there is no invite at this "
"point). If a commit comes for a conversation not present there are two "
"possibilities:"
msgstr ""
"L'archivage DOIT contenir conversationId pour pouvoir récupérer les "
"conversations sur de nouveaux comités après une réimportation (parce qu'il "
"n'y a pas d'invitation à ce stade)."
#: ../../../developer/swarm.md:337
msgid ""
"The conversationId is there, in this case, the daemon is able to re-clone "
"this conversation"
msgstr ""
"La conversation est là, dans ce cas, le démon est capable de cloner cette "
"conversation"
#: ../../../developer/swarm.md:338
msgid ""
"The conversationId is missing, so the daemon asks (via a message "
"`{{\"application/invite\", conversationId}}`) a new invite that the user "
"needs to (re)accepts"
msgstr ""
"La conversationId est manquante, donc le daemon demande (via un message "
"`{{\"application/invite\", conversationId}}`) une nouvelle invitation que "
"l'utilisateur doit (re) accepter"
#: ../../../developer/swarm.md:340
msgid ""
"Note, a conversation can only be retrieved if a contact or another device is"
" there, else it will be lost. There is no magic."
msgstr ""
"Remarquez, une conversation ne peut être récupérée que si un contact ou un "
"autre appareil est là, sinon elle sera perdue."
#: ../../../developer/swarm.md:342
msgid "Used protocols"
msgstr "Protocoles utilisés"
#: ../../../developer/swarm.md:344
msgid "Git"
msgstr "Je suis là."
#: ../../../developer/swarm.md:346
msgid "Why this choice"
msgstr "Pourquoi ce choix?"
#: ../../../developer/swarm.md:348
msgid ""
"Each conversation will be a git repository. This choice is motivated by:"
msgstr "Chaque conversation sera un référentiel de données."
#: ../../../developer/swarm.md:350
msgid ""
"We need to sync and order messages. The Merkle Tree is the perfect structure"
" to do that and can be linearized by merging branches. Moreover, because "
"it's massively used by Git, it's easy to sync between devices."
msgstr ""
"Nous devons synchroniser et commander les messages. L'arbre de Merkle est la"
" structure parfaite pour cela et peut être linéaire en fusionnant des "
"branches. En outre, parce qu'il est largement utilisé par Git, il est facile"
" de synchroniser entre les appareils."
#: ../../../developer/swarm.md:351
msgid "Distributed by nature. Massively used. Lots of backends and pluggable."
msgstr ""
"Distribué par la nature, largement utilisé, beaucoup de backends et "
"pluggable."
#: ../../../developer/swarm.md:352
msgid "Can verify commits via hooks and massively used crypto"
msgstr ""
"Peut vérifier les engagements via des crochets et des cryptos largement "
"utilisés"
#: ../../../developer/swarm.md:353
msgid "Can be stored in a database if necessary"
msgstr "Peut être stockée dans une base de données si nécessaire"
#: ../../../developer/swarm.md:354
msgid "Conflicts are avoided by using commit messages, not files."
msgstr ""
"Les conflits sont évités en utilisant des messages de mise en œuvre, pas des"
" fichiers."
#: ../../../developer/swarm.md:356
msgid "What we have to validate"
msgstr "Ce que nous devons valider"
#: ../../../developer/swarm.md:358
msgid "Performance? `git.lock` can be low"
msgstr "Les performances peuvent être faibles."
#: ../../../developer/swarm.md:359
msgid "Hooks in libgit2"
msgstr "Crocs dans libgit2"
#: ../../../developer/swarm.md:360
msgid "Multiple pulls at the same time?"
msgstr "Plusieurs tirages en même temps?"
#: ../../../developer/swarm.md:362
msgid "Limits"
msgstr "Limits"
#: ../../../developer/swarm.md:364
msgid ""
"History can not be deleted. To delete a conversation, the device has to "
"leave the conversation and create another one."
msgstr ""
"Pour supprimer une conversation, l'appareil doit quitter la conversation et "
"en créer une autre."
#: ../../../developer/swarm.md:366
msgid ""
"However, non-permanent messages (like messages readable only for some "
"minutes) can be sent via a special message via the DRT (like Typing or Read"
" notifications)."
msgstr ""
"Cependant, les messages non permanents (comme les messages lisibles "
"seulement pendant quelques minutes) peuvent être envoyés par un message "
"spécial via le DRT (comme les notifications de typage ou de lecture)."
#: ../../../developer/swarm.md:368
msgid "Structure"
msgstr "La structure"
#: ../../../developer/swarm.md:399
msgid ""
"Swarm massively changes file transfer. Now, all the history is syncing, "
"allowing all devices in the conversation to easily retrieve old files. This "
"changes allow us to move from a logic where the sender pushed the file on "
"other devices, via trying to connect to their devices (This was bad because "
"not really resistant to connections changes/failures and needed a manual "
"retry) to a logic where the sender allow other devices to download. "
"Moreover, any device having the file can be the host for other devices, "
"allowing to retrieve files even if the sender is not there."
msgstr ""
"Swarm modifie massivement le transfert de fichiers. Maintenant, toute "
"l'historique est synchronisée, permettant à tous les appareils de la "
"conversation de récupérer facilement des fichiers anciens. Ces changements "
"nous permettent de passer d'une logique où l'expéditeur a poussé le fichier "
"sur d'autres appareils, en essayant de se connecter à leurs appareils "
"(c'était mauvais car il n'était pas vraiment résistant aux changements de "
"connexion / défaillances et avait besoin d'une nouvelle tentative manuelle) "
"à une logique où l'expéditeur permet aux autres appareils de télécharger."
#: ../../../developer/swarm.md:403
msgid ""
"The sender adds a new commit in the conversation with the following format:"
msgstr ""
"L'expéditeur ajoute un nouveau commette à la conversation avec le format "
"suivant:"
#: ../../../developer/swarm.md:413
msgid ""
"and creates a link in "
"`${data_path}/conversation_data/${conversation_id}/${file_id}` where "
"`file_id=${commitid}_${value[\"tid\"]}.${extension}`"
msgstr ""
"et crée un lien dans "
"`${data_path}/conversation_data/${conversation_id}/${file_id}` où "
"`file_id=${commitid}_${value[\"tide\"]}.${extension}`"
#: ../../../developer/swarm.md:415
msgid ""
"Then, the receiver can now download the files by contacting the devices "
"hosting the file by opening a channel with `name=\"data-transfer://\" + "
"conversationId + \"/\" + currentDeviceId() + \"/\" + fileId` and store the "
"info that the file is waiting in "
"`${data_path}/conversation_data/${conversation_id}/waiting`"
msgstr ""
"Ensuite, le récepteur peut maintenant télécharger les fichiers en contactant"
" les appareils hébergeant le fichier en ouvrant un canal avec `name=\"data-"
"transfer://\" + conversationId + \"/\" + currentDeviceId() + \"/\" + fileId`"
" et stocker les informations que le fichier attend dans "
"`${data_path}/conversation_data/${conversation_id}/waiting`"
#: ../../../developer/swarm.md:417
msgid ""
"The device receiving the connection will accepts the channel by verifying if"
" the file can be sent (if sha3sum is correct and if file exists). The "
"receiver will keep the first opened channel, close the others and write into"
" a file (with the same path as the sender: "
"`${data_path}/conversation_data/${conversation_id}/${file_id}`) all incoming"
" data."
msgstr ""
"Le périphérique recevant la connexion acceptera le canal en vérifiant si le "
"fichier peut être envoyé (si sha3sum est correct et si le fichier existe). "
"Le récepteur conservera le premier canal ouvert, fermera les autres et "
"écrira dans un fichier (avec le même chemin que l'expéditeur: "
"`${data_path}/conversation_data/${conversation_id}/${file_id}`) toutes les "
"données entrant."
#: ../../../developer/swarm.md:419
msgid ""
"When the transfer is finished or the channel closed, the sha3sum is verified"
" to validate that the file is correct (else it's deleted). If valid, the "
"file will be removed from the waiting."
msgstr ""
"Lorsque le transfert est terminé ou que le canal est fermé, le sha3sum est "
"vérifié pour valider que le fichier est correct (ou il est supprimé)."
#: ../../../developer/swarm.md:421
msgid ""
"In case of failure, when a device of the conversation will be back online, "
"we will ask for all waiting files by the same way."
msgstr ""
"En cas d'échec, lorsque l'appareil de la conversation sera redémarré, nous "
"demanderons tous les fichiers d'attente de la même manière."
#: ../../../developer/swarm.md:423
msgid "Call in swarm"
msgstr "Appelle le swarm"
#: ../../../developer/swarm.md:425
msgid "TODO: nameserver part"
msgstr "TODO: partie du serveur de noms"
#: ../../../developer/swarm.md:427
msgid "Idea"
msgstr "Idée"
#: ../../../developer/swarm.md:429
msgid ""
"A swarm conversation can have multiple rendez-vous. A rendez-vous is defined"
" by the following uri:"
msgstr "Une conversation en essaim peut avoir plusieurs rendez-vous."
#: ../../../developer/swarm.md:431
msgid ""
"\"accountUri/deviceId/conversationId/confId\" where accountUri/deviceId "
"describes the host."
msgstr ""
"\"accountUri/deviceId/conversationId/confId\" où accountUri/deviceId décrit "
"l'hôte."
#: ../../../developer/swarm.md:433
msgid "The host can be determined via two ways:"
msgstr "L'hôte peut être déterminé de deux façons:"
#: ../../../developer/swarm.md:435
msgid ""
"In the swarm metadatas. Where it's stored like the title/desc/avatar of the "
"room"
msgstr ""
"Dans le métadonnées en essaim, où elles sont stockées comme le "
"titre/desc/avatar de la pièce."
#: ../../../developer/swarm.md:436
msgid "Or the initial caller."
msgstr "Ou le premier appelant."
#: ../../../developer/swarm.md:438
msgid ""
"When starting a call, the host will add a new commit to the swarm, with the "
"URI to join (accountUri/deviceId/conversationId/confId). This will be valid "
"till the end of the call (announced by a commit with the duration to show)"
msgstr ""
"Lors du démarrage d'un appel, l'hôte ajoutera un nouveau engagement au "
"swarm, avec l'URI à rejoindre (accountUri/deviceId/conversationId/confId)."
#: ../../../developer/swarm.md:441
msgid ""
"So every part will receive the infos that a call has started and will be "
"able to join it by calling it."
msgstr ""
"Ainsi, chaque partie recevra l'information qu'un appel a commencé et pourra "
"y rejoindre en l'appelant."
#: ../../../developer/swarm.md:443
msgid "Attacks?"
msgstr "Des attaques?"
#: ../../../developer/swarm.md:445
msgid "Avoid git bombs"
msgstr "Évitez les bombes de git"
#: ../../../developer/swarm.md:447
msgid "Notes"
msgstr "Notes"
#: ../../../developer/swarm.md:449
msgid ""
"The timestamp of a commit can be trusted because it's editable. Only the "
"user's timestamp can be trusted."
msgstr ""
"Le timestamp d'un commit peut être fiable car il est éditable. Seul le "
"timestamp de l'utilisateur peut être fiable."
#: ../../../developer/swarm.md:451
msgid "TLS"
msgstr "TLS"
#: ../../../developer/swarm.md:453
msgid ""
"Git operations, control messages, files, and other things will use a p2p TLS"
" v1.3 link with only ciphers which guaranty PFS. So each key is renegotiated"
" for each new connexion."
msgstr ""
"Les opérations Git, les messages de contrôle, les fichiers et autres choses "
"utiliseront un lien TLS v1.3 p2p avec seulement des chiffres qui "
"garantissent le PFS."
#: ../../../developer/swarm.md:455
msgid "DHT (udp)"
msgstr "DHT (udp)"
#: ../../../developer/swarm.md:457
msgid ""
"Used to send messages for mobiles (to trigger push notifications) and to "
"initiate TCP connexions."
msgstr ""
"Utilisé pour envoyer des messages pour les mobiles (pour déclencher des "
"notifications push) et pour initier des connexions TCP."
#: ../../../developer/swarm.md:459
msgid "Network activity"
msgstr "Activité du réseau"
#: ../../../developer/swarm.md:461
msgid "Process to invite someone"
msgstr "Processus d'invitation"
#: ../../../developer/swarm.md:463
msgid "Alice wants to invite Bob:"
msgstr "Alice veut inviter Bob:"
#: ../../../developer/swarm.md:465
msgid "Alice adds bob to a conversation"
msgstr "Alice ajoute Bob à une conversation"
#: ../../../developer/swarm.md:466
msgid ""
"Alice generates an invite: { \"application/invite+json\" : { "
"\"conversationId\": \"$id\", \"members\": [{...}] }}"
msgstr ""
#: ../../../developer/swarm.md:470
msgid ""
"Two possibilities for sending the message a. If not connected, via the DHT"
" b. Else, Alice sends on the SIP channel"
msgstr ""
"Deux possibilités pour envoyer le message a. Si pas connecté, via le DHT b. "
"Autrement, Alice envoie sur le canal SIP"
#: ../../../developer/swarm.md:473
msgid ""
"Two possibilities for Bob a. Receives the invite, a signal is emitted for "
"the client b. Not connected, so will never receive the request cause Alice "
"must not know if Bob just ignored or blocked Alice. The only way is to "
"regenerate a new invite via a new message (cf. next scenario)"
msgstr ""
"Deux possibilités pour Bob a. Reçoit l'invitation, un signal est émis pour "
"le client b. Non connecté, donc ne recevra jamais la demande car Alice ne "
"doit pas savoir si Bob a simplement ignoré ou bloqué Alice."
#: ../../../developer/swarm.md:477
msgid "Process to send a message to someone"
msgstr "Processus pour envoyer un message à quelqu'un"
#: ../../../developer/swarm.md:479
msgid "Alice wants to send a message to Bob:"
msgstr "Alice veut envoyer un message à Bob:"
#: ../../../developer/swarm.md:481
msgid "Alice adds a message in the repo, giving an ID"
msgstr "Alice ajoute un message dans le repo, donnant une pièce d'identité"
#: ../../../developer/swarm.md:482
msgid "Alice gets a message received (from herself) if successful"
msgstr "Alice reçoit un message reçu (de lui-même) si elle réussit"
#: ../../../developer/swarm.md:483
msgid ""
"Two possibilities, alice and bob are connected, or not. In both case a "
"message is crafted: { \"application/im-gitmessage-id\" : "
"\"{\"id\":\"$convId\", \"commit\":\"$commitId\", \"deviceId\": "
"\"$alice_device_hash\"}\"}. a. If not connected, via the DHT b. Else, "
"Alice sends on the SIP channel"
msgstr ""
"Dans les deux cas, un message est créé: { \"application/im-gitmessage-id\" :"
" \"{\"id\":\"$convId\", \"commit\":\"$commitId\", \"deviceId\": "
"\"$alice_device_hash\"}\"}. a. Si elle n'est pas connectée, via le DHT b. "
"Autrement, Alice envoie sur le canal SIP"
#: ../../../developer/swarm.md:486
msgid ""
"Four possibilities for Bob: a. Bob is not connected to Alice, so if he "
"trusts Alice, ask for a new connection and go to b. b. If connected, fetch "
"from Alice and announce new messages c. Bob doesn't know that conversation."
" Ask through the DHT to get an invite first to be able to accept that "
"conversation ({\"application/invite\", conversationId}) d. Bob is "
"disconnected (no network, or just closed). He will not receive the new "
"message but will try to sync when the next connection will occur"
msgstr ""
"4 possibilités pour Bob: a. Bob n'est pas connecté à Alice, alors s'il fait "
"confiance à Alice, demandez une nouvelle connexion et allez à b. b. Si "
"connecté, appelez Alice et annoncez de nouveaux messages c. Bob ne connaît "
"pas cette conversation. Demandez à travers le DHT d'obtenir une invitation "
"d'abord pour être en mesure d'accepter cette conversation "
"({\"application/invitation\", conversationId}) d. Bob est déconnecté (aucun "
"réseau, ou juste fermé). Il ne recevra pas le nouveau message mais tentera "
"de synchroniser lorsque la connexion suivante se produira"
#: ../../../developer/swarm.md:495
msgid "![Diagram: swarm chat classes](images/swarm-chat-classes-diagram.jpg)"
msgstr "! [Diagramme: cours de chat en essaim]"
#: ../../../developer/swarm.md:495
msgid "Diagram: swarm chat classes"
msgstr "Diagramme: cours de chat en essaim"
#: ../../../developer/swarm.md:497
msgid "Supported messages"
msgstr ""
#: ../../../developer/swarm.md:499
msgid "Initial message"
msgstr ""
#: ../../../developer/swarm.md:509
msgid "Represents the first commit of a repository and contains the mode:"
msgstr ""
#: ../../../developer/swarm.md:514
msgid "and `invited` if mode = 0."
msgstr ""
#: ../../../developer/swarm.md:516
msgid "Text message"
msgstr ""
#: ../../../developer/swarm.md:526
msgid "Or for an edition:"
msgstr ""
#: ../../../developer/swarm.md:538
msgid "Show the end of a call (duration in milliseconds):"
msgstr ""
#: ../../../developer/swarm.md:547
msgid "Or for hosting a call in a group (when it starts)"
msgstr ""
#: ../../../developer/swarm.md:558
msgid ""
"A second commit with the same JSON + `duration` is added at the end of the "
"call when hosted."
msgstr ""
#: ../../../developer/swarm.md:560
msgid "Add a file"
msgstr ""
#: ../../../developer/swarm.md:572
msgid "`totalSize` is in bits,"
msgstr ""
#: ../../../developer/swarm.md:574
msgid "Updating profile"
msgstr ""
#: ../../../developer/swarm.md:582
msgid "Member event"
msgstr ""
#: ../../../developer/swarm.md:592
msgid ""
"When a member is invited, join or leave or is kicked from a conversation"
msgstr ""
#: ../../../developer/swarm.md:594
msgid "Vote event"
msgstr ""
#: ../../../developer/swarm.md:596
msgid ""
"Generated by administrators to add a vote for kicking or un-kicking someone."
msgstr ""
#: ../../../developer/swarm.md:608
msgid "**!! OLD DRAFT !!**"
msgstr "**!! Le vieux projet!!**"
#: ../../../developer/swarm.md:610
msgid ""
"Note: Following notes are not organized yet. Just some line of thoughts."
msgstr "Remarque: Les notes suivantes ne sont pas encore organisées."
#: ../../../developer/swarm.md:612
msgid "Crypto improvements."
msgstr "Des améliorations de la cryptographie."
#: ../../../developer/swarm.md:614
msgid ""
"For a serious group chat feature, we also need serious crypto. With the "
"current design, if a certificate is stolen as the previous DHT values of a "
"conversation, the conversation can be decrypted. Maybe we need to go to "
"something like **Double ratchet**."
msgstr ""
"Pour une fonctionnalité de chat de groupe sérieuse, nous avons également "
"besoin de crypto sérieuse. Avec la conception actuelle, si un certificat est"
" volé comme les valeurs DHT précédentes d'une conversation, la conversation "
"peut être décryptée. Peut-être que nous devons aller à quelque chose comme "
"** Double ratchet**."
#: ../../../developer/swarm.md:616
msgid ""
"Note: a lib might exist to implement group conversations. TODO, investigate."
msgstr ""
"Remarque: il pourrait y avoir une lib pour mettre en œuvre des conversations"
" de groupe."
#: ../../../developer/swarm.md:618
msgid "Needs ECC support in OpenDHT"
msgstr "Il a besoin d'un soutien ECC dans OpenDHT"
#: ../../../developer/swarm.md:622
msgid "Add Roles?"
msgstr "Ajouter des rôles?"
#: ../../../developer/swarm.md:624
msgid "There is two major use case for group chats:"
msgstr ""
"Il existe deux cas d'utilisation principaux pour les discussions de groupe:"
#: ../../../developer/swarm.md:626
msgid ""
"Something like a Mattermost in a company, with private channels, and some "
"roles (admin/spectator/bot/etc) or for educations (where only a few are "
"active)."
msgstr ""
"Quelque chose comme un Mattermost dans une entreprise, avec des canaux "
"privés, et certains rôles (admin/spectateur/bot/etc) ou pour l'éducation (où"
" seulement quelques-uns sont actifs)."
#: ../../../developer/swarm.md:627
msgid "Horizontal conversations like a conversation between friends."
msgstr "Des conversations horizontales comme une conversation entre amis."
#: ../../../developer/swarm.md:629
msgid "Jami will be for which one?"
msgstr ""
#: ../../../developer/swarm.md:631
msgid "Implementation idea"
msgstr "Idée de mise en œuvre"
#: ../../../developer/swarm.md:633
msgid ""
"A certificate for a group that sign user with a flag for a role. Adding or "
"revoking can also be done."
msgstr ""
"Un certificat pour un groupe qui signe un utilisateur avec un drapeau pour "
"un rôle."
#: ../../../developer/swarm.md:635
msgid "Join a conversation"
msgstr "Joignez-vous à une conversation"
#: ../../../developer/swarm.md:637
msgid "Only via a direct invite"
msgstr "Uniquement par invitation directe"
#: ../../../developer/swarm.md:638
msgid "Via a link/QR Code/whatever"
msgstr "Par un lien/code QR/tout ce qui est"
#: ../../../developer/swarm.md:639
msgid "Via a room name? (a **hash** on the DHT)"
msgstr "Par le nom de la chambre?"
#: ../../../developer/swarm.md:641
msgid "What we need"
msgstr "Ce dont nous avons besoin"
#: ../../../developer/swarm.md:643
msgid ""
"Confidentiality: members outside of the group chat should not be able to "
"read messages in the group"
msgstr ""
"Confidentialité: les membres en dehors du chat de groupe ne devraient pas "
"pouvoir lire les messages dans le groupe"
#: ../../../developer/swarm.md:644
msgid ""
"Forward secrecy: if any key from the group is compromised, previous messages"
" should remain confidential (as much as possible)"
msgstr ""
"Confidentialité: si une clé du groupe est compromise, les messages "
"précédents doivent rester confidentiels (le plus possible)"
#: ../../../developer/swarm.md:646
msgid "Message ordering: There is a need to have messages in the right order"
msgstr "Ordonnage des messages: Il faut avoir les messages dans le bon ordre"
#: ../../../developer/swarm.md:647
msgid ""
"Synchronization: There is also a need to be sure to have all messages at "
"soon as possible."
msgstr ""
"Synchronisation: Il faut aussi s'assurer que tous les messages sont "
"disponibles le plus rapidement possible."
#: ../../../developer/swarm.md:648
msgid ""
"Persistence: Actually, a message on the DHT lives only 10 minutes. Because "
"it's the best timing calculated for this kind of DHT. To persist data, the "
"node must re-put the value on the DHT every 10 minutes. Another way to do "
"when the node is offline is to let nodes re-put the data. But, if after 10 "
"minutes, 8 nodes are still here, they will do 64 requests (and it's "
"exponential). The current way to avoid spamming for that is queried. This "
"will still do 64 requests but limit the max redundancy to 8 nodes."
msgstr ""
"Persistance: En fait, un message sur le DHT ne dure que 10 minutes. Parce "
"que c'est le meilleur moment calculé pour ce type de DHT. Pour persister les"
" données, le nœud doit réinsérer la valeur du DHT toutes les 10 minutes. Une"
" autre façon de le faire lorsque le nœud est hors ligne est de laisser les "
"nœuds réinsérer les données. Mais, si après 10 minutes, 8 nœuds sont "
"toujours là, ils feront 64 demandes (et c'est exponentiel). La façon "
"actuelle d'éviter le spam pour cela est interroge. Cela fera toujours 64 "
"demandes mais limitera la redondance maximale à 8 nœuds."
#: ../../../developer/swarm.md:650
msgid "Other distributed ways"
msgstr "Autres voies distribuées"
#: ../../../developer/swarm.md:652
msgid "IPFS: Need some investigation"
msgstr "Il faut faire des recherches."
#: ../../../developer/swarm.md:653
msgid "BitMessage: Need some investigation"
msgstr "J'ai besoin d'une enquête."
#: ../../../developer/swarm.md:654
msgid "Maidsafe: Need some investigation"
msgstr "Il faut enquêter."
#: ../../../developer/swarm.md:656
msgid "Based on current work we have"
msgstr "En fonction des travaux actuels que nous avons"
#: ../../../developer/swarm.md:658
msgid ""
"Group chat can be based on the same work we already have for multi-devices "
"(but here, with a group certificate). Problems to solve:"
msgstr ""
"Le chat de groupe peut être basé sur le même travail que celui que nous "
"avons déjà pour les multiples appareils (mais ici, avec un certificat de "
"groupe)."
#: ../../../developer/swarm.md:660
msgid ""
"History sync. This needs to move the database from the client into the "
"daemon."
msgstr "Il faut déplacer la base de données du client vers le daemon."
#: ../../../developer/swarm.md:661
msgid ""
"If nobody is connected, the synchronization can not be done, and the person "
"will never see the conversation"
msgstr ""
"Si personne n'est connecté, la synchronisation ne peut pas être faite, et la"
" personne ne verra jamais la conversation"
#: ../../../developer/swarm.md:663
msgid "Another dedicated DHT"
msgstr "Un autre DHT dédié"
#: ../../../developer/swarm.md:665
msgid "Like a DHT with a superuser. (Not convinced)"
msgstr "Comme un DHT avec un superutilisateur."
#: ../../../developer/swarm.md:669
msgid ""
"Currently, the file transfer algorithm is based on a TURN connection (See "
"{doc}`file-transfer`). In the case of a big group, this will be bad. We "
"first need a p2p implement for the file transfer. Implement the RFC for p2p "
"transfer."
msgstr ""
"Actuellement, l'algorithme de transfert de fichiers est basé sur une "
"connexion TURN (voir {doc}`file-transfer`). Dans le cas d'un grand groupe, "
"cela ne sera pas bon. Nous avons d'abord besoin d'un implement p2p pour le "
"transfert de fichiers."
#: ../../../developer/swarm.md:671
msgid ""
"Other problem: currently there is no implementation for TCP support for ICE "
"in PJSIP. This is mandatory for this point (in pjsip or homemade)"
msgstr ""
"Autre problème: actuellement, il n'existe pas de mise en œuvre de "
"l'assistance TCP pour ICE dans PJSIP."
#: ../../../developer/swarm.md:673
msgid "Resources"
msgstr "Les ressources"
#: ../../../developer/swarm.md:675
msgid "https://eprint.iacr.org/2017/666.pdf"
msgstr ""
"Les résultats de l'enquête ont été publiés sur le site Web de l'Union "
"européenne."
#: ../../../developer/swarm.md:676
msgid ""
"Robust distributed synchronization of networked linear systems with "
"intermittent information (Sean Phillips and Ricardo G.Sanfelice)"
msgstr ""
"Synchronisation répartie robuste des systèmes linéaires en réseau avec des "
"informations intermittentes (Sean Phillips et Ricardo G. Sanfelice)"
#: ../../../developer/synchronization-protocol.md:1
msgid "Synchronization protocol"
msgstr "Protocole de synchronisation"
#: ../../../developer/synchronization-protocol.md:4
msgid ""
"The swarm chat provides new possibilities for every device. Now, it's "
"possible to sync history between devices by sharing the related repository. "
"Devices sync needs to be redefined to follow those changes."
msgstr ""
"Le chat en essaim offre de nouvelles possibilités pour chaque appareil. "
"Maintenant, il est possible de synchroniser l'historique entre les appareils"
" en partageant le référentiel connexe."
#: ../../../developer/synchronization-protocol.md:6
msgid ""
"A lot of scenarios are defined in the {doc}`Swarm design document <swarm>`, "
"however, this doesn't imply for syncing conversations between devices for "
"the same user. Some new scenarios must be written."
msgstr ""
"Beaucoup de scénarios sont définis dans le document de conception de "
"{doc}`Swarm <swarm>`, cependant, cela ne signifie pas que les conversations "
"entre les appareils pour le même utilisateur doivent être synchronisées."
#: ../../../developer/synchronization-protocol.md:8
msgid "Old method"
msgstr "La méthode ancienne"
#: ../../../developer/synchronization-protocol.md:10
msgid ""
"Device sync were done via the DHT. Because every value MUST NOT exceed 64k, "
"conversations were not sent in device sync, nor member profiles, because "
"it's too heavy. This is a problem and MUST be improved."
msgstr ""
"La synchronisation des appareils a été effectuée via le DHT. Parce que "
"chaque valeur NE DOIT PAS dépasser 64k, les conversations n'ont pas été "
"envoyées dans la synchronisation des appareils, ni les profils des membres, "
"parce que c'est trop lourd. C'est un problème et DOIT être amélioré."
#: ../../../developer/synchronization-protocol.md:12
msgid ""
"In the old method, the daemon is listening on \"inbox:DEVICE_ID\" for "
"DeviceSync values which contains the contact list to sync (cf. "
"`AccountManager::startSync()`);"
msgstr ""
"Dans l'ancienne méthode, le démone écoute sur \"inbox:DEVICE_ID\" pour les "
"valeurs DeviceSync qui contient la liste de contacts à synchroniser (cf. "
"`AccountManager::startSync() `);"
#: ../../../developer/synchronization-protocol.md:14
msgid ""
"**NOTE:** The current **DeviceSync** value present on the **DHT** is "
"deprecated with this draft."
msgstr ""
"**NOTE:** La valeur actuelle **DeviceSync** présente sur le **DHT** est "
"dépassée avec ce projet."
#: ../../../developer/synchronization-protocol.md:16
msgid "New method"
msgstr "Nouvelle méthode"
#: ../../../developer/synchronization-protocol.md:18
msgid ""
"Since Jami has the {doc}`ConnectionManager <connection-manager>`, using p2p "
"socket is possible to perform sync quickly with big values (cause the socket"
" is not limited in data)"
msgstr ""
"Comme Jami dispose du {doc}`ConnectionManager <connection-manager>`, en "
"utilisant la prise p2p, il est possible d'effectuer rapidement la "
"synchronisation avec de grandes valeurs (car la prise n'est pas limitée en "
"données)"
#: ../../../developer/synchronization-protocol.md:20
msgid "Now, this is the scenario used to sync:"
msgstr "Voici le scénario utilisé pour synchroniser:"
#: ../../../developer/synchronization-protocol.md:22
msgid ""
"When the device (*A*) goes online, it announces its presence via a "
"DeviceAnnouncement like the OldMethod"
msgstr ""
"Lorsque l'appareil (*A*) est mis en ligne, il annonce sa présence via un "
"avis d'appareil comme le OldMethod"
#: ../../../developer/synchronization-protocol.md:23
msgid ""
"Other devices (*!A*) will detect that announce and will ask this device "
"through the **ConnectionManager** to open a new channel named "
"\"sync://DEVICE_ID_A\". (Note: A will get announcement from other devices, "
"so it will asks for sync channels too)."
msgstr ""
"D'autres appareils (*!A*) détecteront cette annonce et demanderont à cet "
"appareil par l'intermédiaire du **ConnectionManager** d'ouvrir un nouveau "
"canal nommé \"sync://DEVICE_ID_A\". (Remarque: A recevra des annonces "
"d'autres appareils, il demandera donc aussi des canaux de synchronisation)."
#: ../../../developer/synchronization-protocol.md:24
msgid ""
"As soon as this channel is opened, the device which is asking this channel "
"will send a **DeviceSync** (cf. next part) value containing its known "
"conversations and contacts."
msgstr ""
"Dès que ce canal est ouvert, le dispositif qui demande ce canal envoie une "
"valeur **DeviceSync** (cf. partie suivante) contenant ses conversations et "
"contacts connus."
#: ../../../developer/synchronization-protocol.md:25
msgid "*A* will check the **DeviceSync** value and:"
msgstr "*A* vérifiera la valeur de **DeviceSync** et:"
#: ../../../developer/synchronization-protocol.md:26
msgid "Remove contacts if it detects removed contacts"
msgstr "Supprimer les contacts si elle détecte les contacts supprimés"
#: ../../../developer/synchronization-protocol.md:27
msgid "Add contacts if it detects added contacts"
msgstr "Ajouter des contacts si elle détecte des contacts ajoutés"
#: ../../../developer/synchronization-protocol.md:28
msgid "Remove conversations if it detects removed conversations"
msgstr ""
"Supprimer les conversations si elle détecte les conversations supprimées"
#: ../../../developer/synchronization-protocol.md:29
msgid "Add conversations if it detects added conversations"
msgstr "Ajouter des conversations si elle détecte des conversations ajoutées"
#: ../../../developer/synchronization-protocol.md:30
msgid ""
"Remove conversation's requests if request is accepted (now in "
"conversations)/declined"
msgstr ""
"Supprimer les demandes de conversation si la demande est acceptée "
"(maintenant en conversation) / refusée"
#: ../../../developer/synchronization-protocol.md:31
msgid "Add conversation's requests if detected"
msgstr "Ajoutez les demandes de conversation si elles sont détectées"
#: ../../../developer/synchronization-protocol.md:33
msgid ""
"Note: If *A* detects new conversations, it will asks the device which "
"announced that conversation to clone the repository through a git channel "
"(so like described in {doc}`Swarm chat design <swarm>`)"
msgstr ""
"Remarque: Si *A* détecte de nouvelles conversations, il demandera au "
"dispositif qui a annoncé cette conversation de cloner le référentiel via un "
"canal git (comme décrit dans {doc}`Swarm chat design <swarm>`)"
#: ../../../developer/synchronization-protocol.md:35
msgid "Device Sync"
msgstr "Synchronisation de l'appareil"
#: ../../../developer/synchronization-protocol.md:37
msgid "This value is a JSON containing:"
msgstr "Cette valeur est une JSON contenant:"
#: ../../../developer/synchronization-protocol.md:54
msgid "User stories"
msgstr "Commentaires des utilisateurs"
#: ../../../developer/synchronization-protocol.md:56
msgid "Sync when adding device"
msgstr "Synchronisation lors de l'ajout d'un dispositif"
#: ../../../developer/synchronization-protocol.md:58
#: ../../../developer/synchronization-protocol.md:65
#: ../../../developer/synchronization-protocol.md:73
msgid "Alice creates a conversation"
msgstr "Alice crée une conversation"
#: ../../../developer/synchronization-protocol.md:59
#: ../../../developer/synchronization-protocol.md:66
msgid "(Optional) Alice add some messages"
msgstr "Alice ajoute quelques messages"
#: ../../../developer/synchronization-protocol.md:60
msgid "Alice adds another device"
msgstr "Alice ajoute un autre appareil"
#: ../../../developer/synchronization-protocol.md:61
#: ../../../developer/synchronization-protocol.md:68
msgid ""
"The other device should receives and sync the conversation previously "
"created"
msgstr ""
"L'autre appareil doit recevoir et synchroniser la conversation créée "
"précédemment"
#: ../../../developer/synchronization-protocol.md:63
msgid "Sync when connect a device"
msgstr "Synchroniser lors de la connexion d' un appareil"
#: ../../../developer/synchronization-protocol.md:67
msgid "Alice connects another device"
msgstr "Alice connecte un autre appareil"
#: ../../../developer/synchronization-protocol.md:70
msgid "Sync between multiple devices"
msgstr "Synchronisation entre plusieurs appareils"
#: ../../../developer/synchronization-protocol.md:72
msgid "Alice got 2 devices"
msgstr "Alice a deux appareils."
#: ../../../developer/synchronization-protocol.md:74
msgid ""
"The other device should receives and sync the conversation created on one of"
" the devices"
msgstr ""
"L'autre appareil doit recevoir et synchroniser la conversation créée sur "
"l'un des appareils"
#: ../../../developer/synchronization-protocol.md:76
msgid "Sync for detecting new requests"
msgstr "Synchronisation pour détecter de nouvelles demandes"
#: ../../../developer/synchronization-protocol.md:78
msgid "Alice receives a conversation's request"
msgstr "Alice reçoit une demande de conversation"
#: ../../../developer/synchronization-protocol.md:79
msgid "Alice add a new device"
msgstr "Alice ajoute un nouveau dispositif"
#: ../../../developer/synchronization-protocol.md:80
msgid "The other device should retrieve the requests from device A"
msgstr "L'autre appareil doit récupérer les demandes du dispositif A"
#: ../../../developer/synchronization-protocol.md:82
msgid "Sync for accepted requests"
msgstr "Synchronisation des demandes acceptées"
#: ../../../developer/synchronization-protocol.md:84
#: ../../../developer/synchronization-protocol.md:90
msgid "Alice has 2 devices"
msgstr "Alice a deux appareils."
#: ../../../developer/synchronization-protocol.md:85
msgid "Alice accepts a conversation's request"
msgstr "Alice accepte la demande d'une conversation"
#: ../../../developer/synchronization-protocol.md:86
msgid "The other device should detect the accepted request"
msgstr "L'autre appareil doit détecter la demande acceptée"
#: ../../../developer/synchronization-protocol.md:88
msgid "Sync for decline requests"
msgstr "Synchronisation des demandes de refus"
#: ../../../developer/synchronization-protocol.md:91
msgid "Alice declines a conversation's request"
msgstr "Alice refuse la demande de conversation"
#: ../../../developer/synchronization-protocol.md:92
msgid "The other device should detect the declined request"
msgstr "L'autre appareil doit détecter la demande refusée"
#: ../../../developer/synchronization-protocol.md:94
msgid "Current implementation"
msgstr "Mise en œuvre actuelle"
#: ../../../developer/synchronization-protocol.md:96
msgid "{gerrit}`15584` implements this page"
msgstr "{gerrit}`15584` met en œuvre cette page"
#: ../../../developer/synchronizing-profiles.md:1
msgid "Profile synchronization"
msgstr "Synchronisation de profil"
#: ../../../developer/synchronizing-profiles.md:3
msgid ""
"There is two types of profiles. The one for the current account, and the "
"ones from contacts. As this vcard contains infos, such as the avatar and the"
" display name, it should be synced as soon as possible. But, it must be sent"
" only when needed, to avoid un-necessary data transmissions. The format used"
" to store the profiles is a [vCard](https://en.wikipedia.org/wiki/VCard) "
"(https://datatracker.ietf.org/doc/html/rfc6350)"
msgstr ""
"Il existe deux types de profils. Celui pour le compte courant et celui des "
"contacts. Comme cette carte v contient des informations, telles que l'avatar"
" et le nom de l'affichage, elle doit être synchronisée dès que possible. "
"Mais, elle doit être envoyée uniquement lorsque nécessaire, pour éviter les "
"transmissions de données inutiles. Le format utilisé pour stocker les "
"profils est une [vCard] (https://en.wikipedia.org/wiki/VCard) "
"(https://datatracker.ietf.org/doc/html/rfc6350)"
#: ../../../developer/synchronizing-profiles.md:5
msgid "Where are stored profiles?"
msgstr "Où sont stockés les profils?"
#: ../../../developer/synchronizing-profiles.md:7
msgid "Self"
msgstr "Autonomie"
#: ../../../developer/synchronizing-profiles.md:9
msgid ""
"It's in `${idPath_}/profile.vcf` e.g.: "
"`.local/share/jami/xxxxxx/profile.vcf` on GNU/Linux."
msgstr ""
"Il est dans `${idPath_}/profil.vcf` par exemple: "
"`.local/share/jami/xxxxxx/profil.vcf` sur GNU/Linux."
#: ../../../developer/synchronizing-profiles.md:11
msgid "Contacts"
msgstr "Contacts"
#: ../../../developer/synchronizing-profiles.md:13
msgid ""
"Because this logic is still managed per client, it depends on the client. "
"However, on Desktop, this is unified and stored into: "
"`${idPath_}/profiles/${base64(uri)}.vcf`"
msgstr ""
"Cette logique est toujours gérée par client, elle dépend du client. "
"Cependant, sur Desktop, elle est unifiée et stockée dans: "
"`${idPath_}/profiles/${base64(uri)}.vcf`"
#: ../../../developer/synchronizing-profiles.md:16
msgid "When a profile is sent"
msgstr "Lorsqu'un profil est envoyé"
#: ../../../developer/synchronizing-profiles.md:21
msgid ""
"At the beginning of a call, generally client sends the vCard. However, this "
"method should be removed in favor of the other located in the daemon."
msgstr ""
"Au début d'un appel, le client envoie généralement la vCard. Cependant, "
"cette méthode doit être supprimée en faveur de l'autre situé dans le daemon."
#: ../../../developer/synchronizing-profiles.md:23
msgid "Send to contact's devices"
msgstr "Envoyer aux appareils de contact"
#: ../../../developer/synchronizing-profiles.md:25
msgid ""
"When connecting to a new devices, a SIP or a sync channel is done. When this"
" channel is ready, we check if we need to send the profile. To do this, the "
"hash of the profile is compared to the one in the cache "
"(`${cacheDir}/${accId}/vcard/sha3` like `~/.cache/jami/xxxxx/vcard/sha3`on "
"GNU/Linux), and the file `${cacheDir}/${accId}/vcard/deviceId` is checked). "
"cf. `JamiAccount::needToSendProfile()`. If not present, the profile of the "
"account is sent. Typically, the name of the channel will be \"vcard://xxx\" "
"where the issuer is the one sending the profile."
msgstr ""
"Lors de la connexion à un nouveau périphérique, un canal de synchronisation "
"ou un canal de synchronisation est effectué. Lorsque ce canal est prêt, nous"
" vérifions si nous devons envoyer le profil. Pour ce faire, le hachage du "
"profil est comparé à celui du cache (`${cacheDir}/${accId}/vcard/sha3` comme"
" `~/.cache/jami/xxxxx/vcard/sha3`on GNU/Linux), et le fichier "
"`${cacheDir}/${accId}/vcard/deviceId` est vérifié."
#: ../../../developer/synchronizing-profiles.md:27
msgid "Multidevices"
msgstr "Les appareils à multiples"
#: ../../../developer/synchronizing-profiles.md:29
msgid ""
"If the profile is sent and the device is from the same account, "
"conversations are checked and we send profiles of all members. The channel "
"name will be \"${conversationId}/profile/${memberUri}.vcf\". Behavior tested"
" in `daemon/test/unitTest/syncHistory/syncHistory.cpp`"
msgstr ""
"Si le profil est envoyé et que l'appareil provient du même compte, les "
"conversations sont vérifiées et nous envoyons les profils de tous les "
"membres. Le nom du canal sera \"${conversationId}/profil/${memberUri}.vcf\"."
" Le comportement testé dans "
"`daemon/test/unitTest/syncHistory/syncHistory.cpp`"
#: ../../../developer/technical-overview.md:1
msgid "Technical overview"
msgstr "Vue générale technique"
#: ../../../developer/technical-overview.md:4
msgid "Concepts"
msgstr "Concepts"
#: ../../../developer/technical-overview.md:7
msgid "Jami Account"
msgstr "Compte de Jami"
#: ../../../developer/technical-overview.md:9
msgid ""
"A **Jami account** is defined by a cryptographic Jami Identity based of "
"**RSA asymmetric key-pair** and managed with **x.509 certificates** as "
"defined by *[RFC 5280](https://tools.ietf.org/html/rfc5280)*."
msgstr ""
"Un compte **Jami** est défini par une identité cryptographique Jami basée "
"sur un paire de clés asymétriques **RSA** et géré avec des certificats "
"**x.509** tels que définis par *[RFC "
"5280](https://tools.ietf.org/html/rfc5280)*."
#: ../../../developer/technical-overview.md:13
msgid ""
"Jami uses the **gnutls** library to generate and manage RSA keys and "
"certificates."
msgstr ""
"Jami utilise la bibliothèque de GNUTLS pour générer et gérer les clés et "
"certificats RSA."
#: ../../../developer/technical-overview.md:16
msgid "Jami certificate"
msgstr "Certificat de Jami"
#: ../../../developer/technical-overview.md:18
msgid "This represents the identify of a Jami user."
msgstr "Ceci représente l'identité d'un utilisateur Jami."
#: ../../../developer/technical-overview.md:19
msgid "Generated at account creation"
msgstr "Généré lors de la création de compte"
#: ../../../developer/technical-overview.md:20
msgid "Contains the Jami account public key."
msgstr "Il contient la clé publique du compte Jami."
#: ../../../developer/technical-overview.md:21
msgid ""
"The SHA-1 fingerprint (160-bits) of this public certificate is the "
"**JamiId**."
msgstr ""
"L'empreinte digitale SHA-1 (160 bits) de ce certificat public est le "
"**JamiId**."
#: ../../../developer/technical-overview.md:23
msgid "Signed by a CA (from an organization or self-signed)."
msgstr "Signataire d'un CA (d'une organisation ou autogénéré)."
#: ../../../developer/technical-overview.md:24
msgid "The subject UID field must be the hexadecimal form of the JamiId."
msgstr "Le champ UID sujet doit être la forme hexadecimale du JamiId."
#: ../../../developer/technical-overview.md:25
msgid ""
"The issuer UID field must be the hexadecimal form of the issuer public key "
"fingerprint (CA)."
msgstr ""
"Le champ UID de l'émetteur doit être la forme hexadecimale de l'empreinte "
"digitale de la clé publique de l'émetteur (CA)."
#: ../../../developer/technical-overview.md:27
msgid "Random RSA key-pair of at least 4096-bits long."
msgstr "Couple de clés RSA aléatoires d'au moins 4096 bits de long."
#: ../../../developer/technical-overview.md:29
msgid "Device certificate"
msgstr "Certificat de l'appareil"
#: ../../../developer/technical-overview.md:31
msgid "This is the identity of one specific device used to run Jami."
msgstr "C'est l'identité d'un appareil spécifique utilisé pour diriger Jami."
#: ../../../developer/technical-overview.md:32
msgid "One per device."
msgstr "Un par appareil."
#: ../../../developer/technical-overview.md:33
msgid "Random and 4096-bits long."
msgstr "Random et de 4096 bits de long."
#: ../../../developer/technical-overview.md:34
msgid "The SHA-1 fingerprint of the public key becomes the **DeviceId**."
msgstr ""
"L'empreinte digitale SHA-1 de la clé publique devient le **DeviceId**."
#: ../../../developer/technical-overview.md:35
msgid "Must be signed by the private key that created the Jami certificate."
msgstr "Il doit être signé par la clé privée qui a créé le certificat Jami."
#: ../../../developer/technical-overview.md:36
msgid "The subject UID field must be the hexadecimal form of the DeviceId."
msgstr "Le champ UID sujet doit être la forme hexadecimale du DispositifID."
#: ../../../developer/technical-overview.md:37
msgid ""
"The issuer UID field must be the hexadecimal form of the issuer public key "
"fingerprint (JamiId)."
msgstr ""
"Le champ UID de l'émetteur doit être la forme hexadecimale de l'empreinte "
"digitale de la clé publique de l'émetteur (JamiId)."
#: ../../../developer/technical-overview.md:40
msgid "Usages"
msgstr "Utilisations"
#: ../../../developer/technical-overview.md:42
msgid "The JamiId:"
msgstr "Le Jamilid:"
#: ../../../developer/technical-overview.md:43
msgid ""
"It's the DHT key where the list of account devices are published and where "
"all devices listen to synchronize on account changes (i.e. adding or revoke "
"a device)."
msgstr ""
"C'est la clé DHT où la liste des appareils de compte est publiée et où tous "
"les appareils écoutent pour synchroniser les changements de compte (c'est-à-"
"dire ajouter ou révoquer un appareil)."
#: ../../../developer/technical-overview.md:46
msgid ""
"The Jami certificate RSA keys are used as long-term keys to "
"sign/encrypt/decrypt messages sent over the DHT:"
msgstr ""
"Les clés RSA du certificat Jami sont utilisées comme clés à long terme pour "
"signer/encrypter/déchiffrer les messages envoyés par le DHT:"
#: ../../../developer/technical-overview.md:48
msgid ""
"private key to sign-off and decrypt incoming messages and device "
"certificates."
msgstr ""
"clé privée pour signer et déchiffrer les messages entrants et les "
"certificats de l'appareil."
#: ../../../developer/technical-overview.md:50
msgid ""
"public key to encrypt messages (this is done by the message issuer using the"
" receiver public key)."
msgstr ""
"clé publique pour crypter les messages (ce qui est fait par l'émetteur du "
"message en utilisant la clé publique du destinataire)."
#: ../../../developer/technical-overview.md:52
msgid ""
"A device can be \"removed\" from a Jami account through revocation of the "
"device certificate:"
msgstr ""
"Un dispositif peut être \"enlevé\" d'un compte Jami par révocation du "
"certificat de dispositif:"
#: ../../../developer/technical-overview.md:54
msgid ""
"Revoked device certificates are added to one or more standard x509 "
"Certificate Revocation List (CRL)."
msgstr ""
"Les certificats de dispositifs révoqués sont ajoutés à une ou plusieurs "
"listes de révocation de certificats x509 standard (CRL)."
#: ../../../developer/technical-overview.md:56
msgid ""
"CRLs for revoked device must be valid and signed with the corresponding CA "
"key, which is the Jami account private key."
msgstr ""
"Les LRC du dispositif révoqué doivent être valables et signées avec la clé "
"CA correspondante, qui est la clé privée du compte Jami."
#: ../../../developer/technical-overview.md:59
msgid "Long-term Storage"
msgstr "Conservation à long terme"
#: ../../../developer/technical-overview.md:61
msgid "Why storing data?"
msgstr "Pourquoi stocker des données?"
#: ../../../developer/technical-overview.md:65
msgid ""
"Jami needs to load certificates and key-pairs each time the application is "
"started."
msgstr ""
"Jami doit charger des certificats et des paires de clés chaque fois que "
"l'application est lancée."
#: ../../../developer/technical-overview.md:67
msgid ""
"When Jami creates a new device, these information are also needed, shared "
"from another trusted device in a secure way."
msgstr ""
"Quand Jami crée un nouvel appareil, ces informations sont également "
"nécessaires, partagées à partir d'un autre appareil fiable de manière "
"sécurisée."
#: ../../../developer/technical-overview.md:69
msgid ""
"All platforms doesn't provide secure way to store data, Jami supports this "
"fact by encrypting data stored outside the memory (i.e. on a file-system) "
"using a user defined password during the account creation."
msgstr ""
"Toutes les plateformes ne fournissent pas un moyen sécurisé de stocker des "
"données, Jami prend en charge ce fait en cryptant les données stockées en "
"dehors de la mémoire (c'est-à-dire sur un système de fichiers) en utilisant "
"un mot de passe défini par l'utilisateur lors de la création du compte."
#: ../../../developer/technical-overview.md:76
msgid "These files are stored on user device (see below for details):"
msgstr ""
"Ces fichiers sont stockés sur l'appareil utilisateur (voir ci-dessous pour "
"plus de détails):"
#: ../../../developer/technical-overview.md:77
msgid "a compressed and encrypted archive with private account data."
msgstr ""
"une archive comprimée et cryptée contenant des données de compte privé."
#: ../../../developer/technical-overview.md:78
msgid "the public certificates chain as a CRT file"
msgstr "la chaîne de certificats publics en tant que fichier CRT"
#: ../../../developer/technical-overview.md:79
msgid "the device private key."
msgstr "la clé privée du dispositif."
#: ../../../developer/technical-overview.md:81
msgid "Jami archive (export.gz)"
msgstr "L'archivage de Jami (export.gz)"
#: ../../../developer/technical-overview.md:83
msgid "Contains private account data."
msgstr "Contient des données de compte privé."
#: ../../../developer/technical-overview.md:84
msgid ""
"Currently transmitted over the DHT network when device is created or "
"revoked."
msgstr ""
"Transmis actuellement sur le réseau DHT lorsque le dispositif est créé ou "
"révoqué."
#: ../../../developer/technical-overview.md:86
msgid "It's a JSON compressed and encrypted file."
msgstr "C'est un fichier JSON comprimé et crypté."
#: ../../../developer/technical-overview.md:90
msgid "The current format is (could change at any time):"
msgstr "Le format actuel est (peut changer à tout moment):"
#: ../../../developer/technical-overview.md:103
msgid "The JSON byte-stream is compressed using \\*gzip\\* algorithm."
msgstr "Le flux de octets JSON est comprimé à l'aide de l'algorithme \\*gzip\\*."
#: ../../../developer/technical-overview.md:107
msgid ""
"Then the gzip-stream is encrypted using AES-GCM-256 symmetric cipher with a "
"256-bits key."
msgstr ""
"Ensuite, le gzip-stream est crypté en utilisant le chiffrement symétrique "
"AES-GCM-256 avec une clé de 256 bits."
#: ../../../developer/technical-overview.md:109
msgid ""
"This key is derived from the user provided password, a PIN and a timestamp, "
"using [Argon2](https://github.com/P-H-C/phc-winner-argon2) (a password "
"stretching and normalizer) as follow:"
msgstr ""
"Cette clé est dérivée du mot de passe fourni par l'utilisateur, d'un code "
"PIN et d'un timestamp, en utilisant [Argon2](https://github.com/P-H-C/phc-"
"winner-argon2) (un étirement de mot de passe et normalisateur) comme suit:"
#: ../../../developer/technical-overview.md:124
msgid ""
"The PIN should be shown to the user to be copied manually on the new "
"physical device along with the password to finish the device creation "
"process."
msgstr ""
"Le code PIN doit être montré à l'utilisateur pour être copié manuellement "
"sur le nouvel appareil physique ainsi que le mot de passe pour terminer le "
"processus de création de l'appareil."
#: ../../../developer/technical-overview.md:127
msgid ""
"NOTE: when exporting a file on the DHT or anywhere else, the daemon update "
"the archive first, to write latest contacts. This is the reason why the "
"password is needed when exporting (it's not just a copy of the archive "
"somewhere else)"
msgstr ""
"NOTE: lors de l'exportation d'un fichier sur le DHT ou ailleurs, le démon "
"met d'abord à jour l'archivage, pour écrire les derniers contacts. C'est la "
"raison pour laquelle le mot de passe est nécessaire lors de l'exportation "
"(il ne s'agit pas seulement d'une copie de l'archivage ailleurs)"
#: ../../../developer/technical-overview.md:129
msgid "Jami device certificate chain (ring\\_device.crt)"
msgstr "Chaîne de certificats de dispositifs Jami (ring\\_device.crt)"
#: ../../../developer/technical-overview.md:131
#: ../../../developer/technical-overview.md:137
msgid "PEM format"
msgstr "Format PEM"
#: ../../../developer/technical-overview.md:132
msgid ""
"Includes the Device certificate and parent certificates (Jami device "
"certificate and parents)"
msgstr ""
"Inclut le certificat de dispositif et les certificats de parent (certificat "
"de dispositif Jami et les certificats de parent)"
#: ../../../developer/technical-overview.md:135
msgid "Device private key (ring\\_device.key)"
msgstr "clé privée de l'appareil (ring\\_device.key)"
#: ../../../developer/technical-overview.md:138
msgid "not encrypted, we let the device file-system protect this file"
msgstr ""
"pas crypté, nous laissons le système de fichiers de l'appareil protéger ce "
"fichier"
#: ../../../developer/technical-overview.md:140
msgid "The DHT network"
msgstr "Le réseau DHT"
#: ../../../developer/technical-overview.md:142
msgid ""
"Dedicated [ Jami distributed network](Ring_distributed_network \"wikilink\")"
" page."
msgstr "Page dédiée [réseau distribué Jami] ((réseau \"wikilink\")"
#: ../../../developer/technical-overview.md:145
msgid "Contact Request"
msgstr "Demande de contact"
#: ../../../developer/technical-overview.md:147
msgid "Deprecated in favor of \"Conversation requests\""
msgstr ""
#: ../../../developer/technical-overview.md:149
msgid "Conversation request"
msgstr ""
#: ../../../developer/technical-overview.md:151
msgid "Max 64k (a DHT value)"
msgstr ""
#: ../../../developer/technical-overview.md:152
msgid "Contains a conversation Id"
msgstr ""
#: ../../../developer/technical-overview.md:153
msgid "Contains the sender URI"
msgstr ""
#: ../../../developer/technical-overview.md:154
msgid "Can contains optional metadatas (avatar/profile)"
msgstr ""
#: ../../../developer/technical-overview.md:156
msgid "Instant Message"
msgstr "Un message instantané"
#: ../../../developer/technical-overview.md:158
msgid "Mostly used to initiate connections with ICE candidates"
msgstr ""
#: ../../../developer/technical-overview.md:159
msgid "Can transmit some SIP messages, however SIP channel is preferred"
msgstr ""
#: ../../../developer/technical-overview.md:160
msgid ""
"SIP messages can be read status, location sharing, messages notifications."
msgstr ""
#: ../../../developer/technical-overview.md:162
msgid "Outgoing and Incoming calls"
msgstr "Appels sortants et entrants"
#: ../../../developer/technical-overview.md:164
msgid ""
"Contactable addresses (i.e. IP addresses) of the user are given to peer "
"only:"
msgstr ""
"Les adresses de contact (c.-à-d. adresses IP) de l'utilisateur sont données "
"uniquement à des pairs:"
#: ../../../developer/technical-overview.md:166
msgid "When we call a peer (outgoing call)."
msgstr "Quand nous appelons un compagnon,"
#: ../../../developer/technical-overview.md:167
msgid "When a **trusted** peer is calling (incoming call)."
msgstr "Quand un collègue de confiance appelle (appel entrant)."
#: ../../../developer/technical-overview.md:168
msgid ""
"All combination forms of how a specific device can be contacted is "
"summarized by a ICE message:"
msgstr ""
"Toutes les formes combinées de la façon dont un dispositif spécifique peut "
"être contacté sont résumées par un message ICE:"
#: ../../../developer/technical-overview.md:170
msgid ""
"*[RFC 5245](https://tools.ietf.org/html/rfc5245)* defines ICE (Interactive "
"Connectivity Establishment), a protocol for NAT traversal."
msgstr ""
"*[RFC 5245](https://tools.ietf.org/html/rfc5245)* définit ICE (Interactive "
"Connectivity Establishment), un protocole de traversée NAT."
#: ../../../developer/technical-overview.md:176
msgid "Making an outgoing call"
msgstr "En faisant une visite"
#: ../../../developer/technical-overview.md:178
msgid ""
"The calling device gathers candidates and build an **Initial Offer** "
"according to the ICE specifications."
msgstr ""
"Le dispositif d'appel recueille les candidats et crée une **Offre initiale**"
" selon les spécifications de la CEI."
#: ../../../developer/technical-overview.md:180
msgid ""
"The calling device puts the encrypted ICE offer (the *Initial Offer*) on the"
" DHT at: `h(\"`[`callto:\"+DeviceID`](callto:%22+DeviceID)`)` where *h* is "
"SHA1, *+* is the string concatenation, *DeviceID* is in hexadecimal form."
msgstr ""
"Le dispositif d'appel met l'offre ICE cryptée (l'offre initiale*) sur le DHT"
" à: `h(\"`[callto:\"+DeviceID`](callto:%22+DeviceID)`)` où *h* est SHA1, *+*"
" est la concaténation de chaîne, *DeviceID* est en forme hexadecimale."
#: ../../../developer/technical-overview.md:185
msgid ""
"The calling device waits on the peer answer, with its own ICE candidates "
"lists."
msgstr ""
"L'appareil d'appel attend la réponse de ses pairs, avec sa propre liste de "
"candidats ICE."
#: ../../../developer/technical-overview.md:187
msgid ""
"At peer answer reception, the calling device starts the ICE negotiation."
msgstr ""
"À la réception de la réponse par les pairs, l'appareil d'appel commence la "
"négociation ICE."
#: ../../../developer/technical-overview.md:189
msgid ""
"If the negotiation succeed, the process continues on a client-side DTLS "
"session establishment over the created ICE socket (see below)."
msgstr ""
"Si la négociation réussit, le processus se poursuit sur un établissement de "
"session DTLS du côté client sur la prise ICE créée (voir ci-dessous)."
#: ../../../developer/technical-overview.md:192
msgid "Listening for incoming calls"
msgstr "Écoute des appels entrants"
#: ../../../developer/technical-overview.md:194
msgid ""
"A device listens for incoming calls by performing a listen OpenDHT operation"
" on `h(\"`[`callto:\"+DeviceID`](callto:%22+DeviceID)`)` where *h* is SHA1, "
"*+* is the string concatenation and *DeviceID* is in hexadecimal form."
msgstr ""
"Un appareil écoute les appels entrants en effectuant une opération OpenDHT "
"d'écoute sur `h(\"`[`callto:\"+DeviceID`](callto:%22+DeviceID)`)` où *h* est"
" SHA1, *+* est la concaténation de chaîne et *DeviceID* est en forme "
"hexadecimale."
#: ../../../developer/technical-overview.md:198
msgid ""
"At ICE *Initial Offer* reception, the called device **must** do a security "
"validation of the peer (see below)."
msgstr ""
"À la réception ICE *Offer initial*, l'appareil appelé ** doit** effectuer "
"une validation de sécurité de la paire (voir ci-dessous)."
#: ../../../developer/technical-overview.md:200
msgid ""
"If the security validation succeed, the called device starts the ICE "
"negotiation."
msgstr ""
"Si la validation de sécurité réussit, l'appareil appelé démarre la "
"négociation ICE."
#: ../../../developer/technical-overview.md:202
msgid ""
"If the negotiation succeed, the process continues on a server-side DTLS "
"session establishment over the created ICE socket (see below)."
msgstr ""
"Si la négociation réussit, le processus se poursuit sur un établissement de "
"session DTLS côté serveur sur la prise ICE créée (voir ci-dessous)."
#: ../../../developer/technical-overview.md:205
msgid ""
"*Note: OpenDHT drops values that are not properly encrypted or signed, as "
"specified by OpenDHT protocol.*"
msgstr ""
"*Note: OpenDHT supprime les valeurs qui ne sont pas correctement cryptées ou"
" signées, comme spécifié par le protocole OpenDHT.*"
#: ../../../developer/technical-overview.md:208
msgid "ICE serialization format"
msgstr "Format de sérialisation ICE"
#: ../../../developer/technical-overview.md:210
msgid ""
"ICE messages exchanged between peers during a call set up use following "
"format."
msgstr ""
"Les messages ICE échangés entre les pairs lors d'un appel configuré "
"utilisent le format suivant."
#: ../../../developer/technical-overview.md:212
msgid ""
"An ICE message is a chunk of binary data, following "
"[msgpack](http://msgpack.org/) data format."
msgstr ""
"Un message ICE est une pièce de données binaires, suivant le format de "
"données [msgpack]"
#: ../../../developer/technical-overview.md:222
msgid "**Current defined protocol is 1**:"
msgstr "**Le protocole défini en cours est 1**:"
#: ../../../developer/technical-overview.md:224
msgid "Security Validation of the Peer"
msgstr "Validation de la sécurité par les pairs"
#: ../../../developer/technical-overview.md:226
msgid ""
"Upon reception of the encrypted and signed Initial ICE Offer (through the "
"listen operation), a called device should perform authorization checks of "
"the calling device, identified as the Initial Offer signer."
msgstr ""
"Lorsqu'un appareil appelé reçoit l'offre initiale ICE cryptée et signée (par"
" l'intermédiaire de l'opération écouter), il doit effectuer des "
"vérifications d'autorisation de l'appelant, identifiée comme le signataire "
"de l'offre initiale."
#: ../../../developer/technical-overview.md:230
msgid ""
"Authorization rules are implementation defined, but a typical implementation"
" would authorize known or trusted contacts."
msgstr ""
"Les règles d'autorisation sont définies en termes d'exécution, mais une mise"
" en œuvre typique autorise les contacts connus ou de confiance."
#: ../../../developer/technical-overview.md:243
msgid ""
"Once a peer-to-peer communication channel has been established by ICE "
"protocol, the called device starts a server-side DTLS session on the ICE "
"socket, while the caller starts a client-side DTLS session on the other side"
" of the ICE socket."
msgstr ""
"Une fois qu'un canal de communication peer-to-peer a été établi par le "
"protocole ICE, l'appelé commence une session DTLS côté serveur sur la prise "
"ICE, tandis que l'appelant commence une session DTLS côté client de l'autre "
"côté de la prise ICE."
#: ../../../developer/technical-overview.md:247
msgid ""
"The DTLS communication is [RFC6347](https://tools.ietf.org/html/rfc6347) "
"compliant using gnutls library."
msgstr ""
"La communication DTLS est [RFC6347](https://tools.ietf.org/html/rfc6347) "
"conforme à l'aide de la bibliothèque gnutls."
#: ../../../developer/technical-overview.md:250
msgid ""
"To prevent peer certificates to be displayed in plain-text for the call "
"anonymity, the session handshake is done twice:"
msgstr ""
"Pour éviter que les certificats de pairs ne soient affichés en texte clair "
"pour l'anonymat de l'appel, la poignée de main de session est effectuée deux"
" fois:"
#: ../../../developer/technical-overview.md:253
msgid ""
"A first handshake in **anonymous mode** to create a secure but anonymous "
"transport."
msgstr ""
"Une première poignée de main en mode anonyme pour créer un transport "
"sécurisé mais anonyme."
#: ../../../developer/technical-overview.md:255
msgid ""
"A second handshake in **certificate mode**, over the first one, to prove the"
" identity of peers."
msgstr ""
"Une deuxième poignée de main en mode certificat, par rapport à la première, "
"pour prouver l'identité des pairs."
#: ../../../developer/technical-overview.md:258
msgid "Only PFS cipher suites are supported:"
msgstr "Seules les suites de chiffrement PFS sont prises en charge:"
#: ../../../developer/technical-overview.md:259
msgid ""
"The set of supported cipher suites is implementation defined but should "
"include at least ECDHE-AES-GCM."
msgstr ""
"L'ensemble des suites de chiffrement prises en charge est une mise en œuvre "
"définie mais doit inclure au moins ECDHE-AES-GCM."
#: ../../../developer/technical-overview.md:261
msgid "The actual cipher suites (in gnutls form) is:"
msgstr "Les suites de chiffrement réelles (en forme de gnucles) sont:"
#: ../../../developer/technical-overview.md:262
msgid ""
"anonymous step: `SECURE192:-KX-ALL:+ANON-ECDH:+ANON-DH:+SECURE192:-VERS-TLS-"
"ALL:+VERS-DTLS-ALL:-RSA:%SERVER_PRECEDENCE:%SAFE_RENEGOTIATION`"
msgstr ""
"Pas anonyme: `SECURE192:-KX-ALL:+ANON-ECDH:+ANON-DH:+SECURE192:-VERS-TLS-"
"ALL:+VERS-DTLS-ALL:-RSA:%SERVER_PRÉCEDENCE:%SAFE_RENEGOTION`"
#: ../../../developer/technical-overview.md:264
msgid ""
"certificate step: `SECURE192:-VERS-TLS-ALL:+VERS-DTLS-"
"ALL:-RSA:%SERVER_PRECEDENCE:%SAFE_RENEGOTIATION`"
msgstr ""
"étape de certification: `SECURE192:-VERS-TLS-ALL: +VERS-DTLS-"
"ALL:-RSA:%SERVER_PRÉCEDENCE:%SAFE_RENEGOTIATION"
#: ../../../developer/technical-overview.md:267
msgid "SIP signaling"
msgstr "Signalisation SIP"
#: ../../../developer/technical-overview.md:269
msgid ""
"Used over the DTLS session to signaling the call (vcard, media negotiation, "
"hangup, instant messaging, ...)"
msgstr ""
"Utilisé sur la session DTLS pour signaler l'appel (vcard, négociation "
"médiatique, accrochage, messagerie instantanée,...)"
#: ../../../developer/technical-overview.md:271
msgid ""
"Once an encrypted and authenticated peer-to-peer communication channel is "
"available, the [SIP protocol](https://tools.ietf.org/html/rfc3261) must be "
"used to place a call and send messages."
msgstr ""
"Une fois qu'un canal de communication peer-to-peer crypté et authentifié est"
" disponible, le [prototype SIP](https://tools.ietf.org/html/rfc3261) doit "
"être utilisé pour passer un appel et envoyer des messages."
#: ../../../developer/technical-overview.md:275
msgid ""
"The caller might send a SIP INVITE as soon as the DTLS channel is "
"established."
msgstr ""
"L'appelant peut envoyer une SIP INVITE dès que le canal DTLS est établi."
#: ../../../developer/technical-overview.md:284
msgid "Presence"
msgstr "Présence"
#: ../../../developer/technical-overview.md:286
msgid "Sent on the DHT"
msgstr ""
#: ../../../developer/technical-overview.md:287
msgid "DeviceAnnouncement (contains device hash + public key)"
msgstr ""
#: ../../../developer/technical-overview.md:290
msgid "Security / Privacy"
msgstr "Sécurité / confidentialité"
#: ../../../developer/technical-overview.md:292
msgid ""
"Jami provides perfect forward secrecy for calls and in call text messages "
"with different Eliptic Curve Diffie-Hellman key negociation at every call. "
"For out of call messaging single RSA-4096 is used. The cryptography library "
"used is GNUTLS"
msgstr ""
"Jami fournit un parfait secret pour les appels et dans les messages texte "
"d'appel avec différentes négociations de clés Eliptic Curve Diffie-Hellman à"
" chaque appel. Pour les messages hors appel, un seul RSA-4096 est utilisé."
#: ../../../developer/technical-overview.md:297
msgid "More informations:"
msgstr "Pour plus d'informations:"
#: ../../../developer/technical-overview.md:299
msgid ""
"[Technical overview](technical/Technical-overview) of concepts and protocols"
" inside Jami"
msgstr ""
"[Voir technique] [Voir technique/technique] des concepts et des protocoles "
"au sein de Jami"
#: ../../../developer/working-with-gerrit.md:1
msgid "Working with Gerrit"
msgstr "Travailler avec Gerrit"
#: ../../../developer/working-with-gerrit.md:4
msgid "Account Setup"
msgstr "Configuration du compte"
#: ../../../developer/working-with-gerrit.md:6
msgid "Gerrit server: <https://review.jami.net>"
msgstr "Serveur Gerrit: <https://review.jami.net>"
#: ../../../developer/working-with-gerrit.md:7
msgid ""
"User documentation: <https://review.jami.net/Documentation/intro-user.html>"
msgstr ""
"Documentation de l'utilisateur: "
"<https://review.jami.net/Documentation/intro-user.html>"
#: ../../../developer/working-with-gerrit.md:8
msgid "Jami projects on Gerrit: <https://review.jami.net/admin/repos/>"
msgstr "Les projets Jami sur Gerrit: <https://review.jami.net/admin/repos/>"
#: ../../../developer/working-with-gerrit.md:10
msgid "Sign-in with your google or github account or git.jami.net account"
msgstr "Connectez-vous avec votre compte google ou github ou git.jami.net"
#: ../../../developer/working-with-gerrit.md:11
msgid ""
"You'll also need to [upload an SSH "
"key](https://review.jami.net/settings/#SSHKeys) to be able to commit changes"
" for review."
msgstr ""
"Vous devrez également [ télécharger une clé "
"SSH]https://review.jami.net/settings/#SSHKeys) pour pouvoir effectuer des "
"modifications pour examen."
#: ../../../developer/working-with-gerrit.md:12
msgid "Don't forget to select a username."
msgstr "N'oubliez pas de sélectionner un nom d'utilisateur."
#: ../../../developer/working-with-gerrit.md:13
msgid ""
"Finally, the email address specified in your git config must match one the "
"email address registered with your Gerrit account."
msgstr ""
"Enfin, l'adresse e-mail spécifiée dans votre configuration git doit "
"correspondre à l'adresse e-mail enregistrée avec votre compte Gerrit."
#: ../../../developer/working-with-gerrit.md:15
msgid ""
"*Note for Savoir-faire Linux employees: please continue to use your "
"@savoirfairelinux.com email address.*"
msgstr ""
"*Note pour les employés de Savoir-faire Linux: veuillez continuer à utiliser"
" votre adresse e-mail @savoirfairelinux.com.*"
#: ../../../developer/working-with-gerrit.md:17
msgid "To Know your Git Config"
msgstr "Pour connaître votre configuration Git"
#: ../../../developer/working-with-gerrit.md:19
msgid "`git config --list`"
msgstr "`git config --list"
#: ../../../developer/working-with-gerrit.md:21
msgid "To Test your SSH Access"
msgstr "Pour tester votre accès SSH"
#: ../../../developer/working-with-gerrit.md:23
msgid ""
"To check that your SSH access is properly setup, run the following command:"
msgstr ""
"Pour vérifier que votre accès SSH est correctement configuré, exécutez la "
"commande suivante:"
#: ../../../developer/working-with-gerrit.md:25
msgid "`ssh -p 29420 <username>@review.jami.net`"
msgstr "`ssh -p 29420 <nom d'utilisateur>@review.jami.net`"
#: ../../../developer/working-with-gerrit.md:27
msgid ""
"<username> is your Gerrit username, that you should have set during the "
"account creation. If not, you can do that here."
msgstr ""
"<username> est votre nom d'utilisateur Gerrit, que vous auriez dû définir "
"lors de la création du compte."
#: ../../../developer/working-with-gerrit.md:44
msgid "Git Configuration"
msgstr "Configuration de la mise en page"
#: ../../../developer/working-with-gerrit.md:46
msgid "Gerrit is the official git repository."
msgstr "Gerrit est le référentiel officiel de git."
#: ../../../developer/working-with-gerrit.md:48
msgid "To update the configuration"
msgstr "Pour mettre à jour la configuration"
#: ../../../developer/working-with-gerrit.md:50
msgid ""
"You must update your remote information to use now the Gerrit repository. To"
" do that, update your origin url:"
msgstr ""
"Vous devez mettre à jour vos informations à distance pour utiliser "
"maintenant le référentiel Gerrit. Pour cela, mettez à jour votre URL "
"d'origine:"
#: ../../../developer/working-with-gerrit.md:52
msgid ""
"`git remote set-url origin "
"ssh://<username>@review.jami.net:29420/<project_name>`"
msgstr ""
"`git fichier url à distance "
"ssh://<username>@review.jami.net:29420/<projet_name>`"
#: ../../../developer/working-with-gerrit.md:54
msgid "Replace `<project_name>` by the correct project (example: jami-daemon)"
msgstr ""
"Remplacez `<projet_name>` par le projet correct (exemple: jami-daemon)"
#: ../../../developer/working-with-gerrit.md:56
msgid "Or clone the existing repository if you want to start fresh."
msgstr "Ou cloner le référentiel existant si vous voulez recommencer."
#: ../../../developer/working-with-gerrit.md:58
msgid "To Push by Default in refs/for/master"
msgstr "Pour pousser par défaut dans les références/pour/maître"
#: ../../../developer/working-with-gerrit.md:60
msgid ""
"You can configure git to automatically create a review when a change is "
"pushed."
msgstr ""
"Vous pouvez configurer git pour créer automatiquement une revue lorsque vous"
" appuyez sur un changement."
#: ../../../developer/working-with-gerrit.md:62
msgid "`git config remote.origin.push HEAD:refs/for/master`"
msgstr ""
"`git configurer le télécommandeur. origine. poussée Tête:refs/for/master`"
#: ../../../developer/working-with-gerrit.md:64
msgid "To Create the Review"
msgstr "Pour créer le révision"
#: ../../../developer/working-with-gerrit.md:66
msgid ""
"When pushing to this magic branch, a review will automatically be created on"
" Gerrit."
msgstr ""
"Quand vous arrivez à cette branche magique, une revue sera automatiquement "
"créée sur Gerrit."
#: ../../../developer/working-with-gerrit.md:68
msgid "`git push origin HEAD:refs/for/master`"
msgstr "`git source de poussée Tête:refs/for/master"
#: ../../../developer/working-with-gerrit.md:70
msgid ""
"If you configured the default to refs/for/master as described above, simply"
msgstr ""
"Si vous avez configuré la configuration par défaut à refs/for/master comme "
"décrit ci-dessus, vous pouvez simplement"
#: ../../../developer/working-with-gerrit.md:72
msgid "`git push`"
msgstr "Je suis en train de me faire pousser."
#: ../../../developer/working-with-gerrit.md:74
msgid ""
"If HEAD currently points to the branch with the commits you'd like to push. "
"Ideally, you should work in a feature/bug branch for the issue at hand. Then"
" you can do:"
msgstr ""
"Si HEAD pointe actuellement vers la branche avec les commits que vous "
"souhaitez pousser. Idéalement, vous devriez travailler dans une branche "
"fonctionnalité / bug pour le problème en question."
#: ../../../developer/working-with-gerrit.md:76
msgid "`git push origin <bugfix_branchname>:refs/for/master`"
msgstr "`git source de mise en place <bugfix_branchname>:refs/for/master`"
#: ../../../developer/working-with-gerrit.md:78
msgid ""
"If this is the first time you've pushed, you will be prompted to install a "
"post-commit Hook to insert a Change-ID in your commit message. Gerrit needs "
"this to track patchsets and will reject pushes until you install it. Simply "
"copy paste the command to install the hook as instructed by Gerrit, and "
"amend your commits."
msgstr ""
"Si c'est la première fois que vous appuyez, vous serez invité à installer un"
" crochet post-commit pour insérer un Change-ID dans votre message de "
"commande. Gerrit a besoin de cela pour suivre les patchets et rejettera les "
"pousses jusqu'à ce que vous l'installez."
#: ../../../developer/working-with-gerrit.md:80
msgid "To Push a Private patch"
msgstr "Pour pousser un patch privé"
#: ../../../developer/working-with-gerrit.md:82
msgid ""
"You can push a work in progress (a.k.a draft) by pushing to "
"refs/for/master%private"
msgstr ""
"Vous pouvez pousser un travail en cours (a.k.a. projet) en poussant à "
"réfs/for/master%private"
#: ../../../developer/working-with-gerrit.md:84
msgid ""
"For instance, you may want a \"private\" remote to push to; open "
"<project_dir>/.git/config and add:"
msgstr ""
"Par exemple, vous pouvez utiliser une télécommande \"privée\" pour appuyer "
"sur; ouvrir <project_dir>/.git/config et ajouter:"
#: ../../../developer/working-with-gerrit.md:93
msgid "Then:"
msgstr "Alors:"
#: ../../../developer/working-with-gerrit.md:95
msgid "`git push private`"
msgstr "`git pousser privé `"
#: ../../../developer/working-with-gerrit.md:97
msgid ""
"Private work the same way as patchsets, except they are not visible to "
"others by default and don't trigger any Jenkins builds. A draft can then be "
"shared or published."
msgstr ""
"Les travaux privés sont similaires aux patchets, mais ils ne sont pas "
"visibles par défaut et ne déclenchent pas de constructions Jenkins."