10059 lines
388 KiB
Plaintext
10059 lines
388 KiB
Plaintext
# 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 ""
|
||
""
|
||
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  1080p / 300 kbit/s / CRF38 "
|
||
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  1080p / 1.5 Mbit/s / CRF30 "
|
||
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  "
|
||
"1080p / 6 Mbit/s / CRF23 "
|
||
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 "
|
||
" 720p / 300 kbit/s / CRF38  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 "
|
||
" 720p / 1.5 Mbit/s / CRF30 (Test with reduced CRF) "
|
||
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  "
|
||
"720p / 6 Mbit/s / CRF23 "
|
||
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 "
|
||
" 436p / 300 kbit/s / CRF38 "
|
||
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 "
|
||
" 436p / 1.5 Mbit/s / CRF30 "
|
||
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  "
|
||
"436p / 6 Mbit/s / CRF23 "
|
||
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 ""
|
||
""
|
||
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 ""
|
||
""
|
||
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 < 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 < "
|
||
"20 Mb), vous devrez accepter le transfert:"
|
||
|
||
#: ../../../developer/file-transfer.md:25
|
||
msgid ""
|
||
""
|
||
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 ""
|
||
""
|
||
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 ""
|
||
""
|
||
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 ""
|
||
""
|
||
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 ""
|
||
""
|
||
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 ""
|
||
""
|
||
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 lcov’s configuration in the "
|
||
"daemon’s 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 daemon’s 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 jami’s 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 Jami’s "
|
||
"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 clang’s 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 Jami’s 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 ""
|
||
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 ""
|
||
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."
|