blob: 9884967ec5f50eee2c614d9878d7131199575d9c [file] [log] [blame]
# 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:
# michelangelo.marchesi2 <michelangelo.marchesi@gmail.com>, 2022
# Alessandro Balducci, 2022
# liberi liberi <trfex.mtqx8@slmail.me>, 2023
# savoirfairelinux <support@savoirfairelinux.com>, 2023
# Pierluca D'Oro <pierluca.doro@gmail.com>, 2023
#
#, 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-04-23 02:52+0000\n"
"PO-Revision-Date: 2022-09-14 17:48+0000\n"
"Last-Translator: Pierluca D'Oro <pierluca.doro@gmail.com>, 2023\n"
"Language-Team: Italian (https://app.transifex.com/savoirfairelinux/teams/49466/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: ../../../developer/account-management.md:1
msgid "Account management"
msgstr "Gestione dei conti"
#: ../../../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 ""
#: ../../../developer/account-management.md:6
msgid "Create a new account"
msgstr "Crea un nuovo account"
#: ../../../developer/account-management.md:8
#: ../../../developer/account-management.md:89 ../../../developer/calls.md:8
msgid "Daemon side"
msgstr "Daemon lato"
#: ../../../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 "In 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 ""
"I dettagli possono essere ottenuti dal metodo `getAccountTemplate(type) ` "
"con `type=RING` o `type=SIP`. Ad esempio, questo è il seguente codice "
"utilizzato in 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 ""
"Quando viene aggiunto un nuovo account, viene emesso il segnale "
"`accountChanged`. Il cliente deve aggiornare la sua struttura interna dopo "
"questo segnale con altri metodi in ConfigurationManager."
#: ../../../developer/account-management.md:64
#: ../../../developer/account-management.md:110
msgid "Core"
msgstr "Coriere"
#: ../../../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 logica principale per creare un nuovo account si trova in "
"`src/ringdht/ringaccount.cpp`, in `RingAccount::createAccount`"
#: ../../../developer/account-management.md:68
msgid "How it works, from scratch"
msgstr "Come funziona, da zero"
#: ../../../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 ""
#: ../../../developer/account-management.md:72
msgid ""
"The private key `ringAccountKey` and certificate chain `ringAccountCert` "
"(base64 encoded)"
msgstr ""
"La chiave privata `ringAccountKey` e la catena di certificati "
"`ringAccountCert` (codificata base 64)"
#: ../../../developer/account-management.md:73
msgid "Generated CA key (for self-signed certificates) `ringCAKey`"
msgstr "Generato CA key (per certificati autosignati) `ringCAKey`"
#: ../../../developer/account-management.md:74
msgid "Revocated devices `ringAccountCRL`"
msgstr "Dispositivi revocati `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 ""
#: ../../../developer/account-management.md:76
msgid "The contacts"
msgstr "I contatti"
#: ../../../developer/account-management.md:77
msgid "The account settings"
msgstr "Impostazioni del conto"
#: ../../../developer/account-management.md:79
msgid "So let's generate it!"
msgstr "Quindi, generateli!"
#: ../../../developer/account-management.md:81
#: ../../../developer/contact-management.md:162
msgid "**TODO**"
msgstr "** TODO**"
#: ../../../developer/account-management.md:84
msgid "Delete the account"
msgstr "Elimina l' account"
#: ../../../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 ""
#: ../../../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 ""
"Quando l'account viene eliminato, viene emesso il segnale `accountChanged`. "
"Il client deve aggiornare la sua struttura interna dopo questo segnale con "
"altri metodi in 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 logica principale per creare un nuovo account si trova in "
"`src/manager.cpp`, in `Manager::removeAccount`. Elimina i file degli account"
" e aggiorna la configurazione (`dring.yml`)."
#: ../../../developer/account-management.md:114
msgid "Update the details of an account"
msgstr ""
#: ../../../developer/account-management.md:135
msgid ""
"The map can contains a partial update and `accountDetailsChanged` will be "
"emitted on success. `getAccountDetails`"
msgstr ""
#: ../../../developer/account-management.md:137
msgid "Add a device"
msgstr ""
#: ../../../developer/account-management.md:139
msgid "There is two possibilities to add a device."
msgstr ""
#: ../../../developer/account-management.md:141
msgid "Backup archive (Then import from backup)"
msgstr ""
#: ../../../developer/account-management.md:166
msgid "Export on DHT"
msgstr ""
#: ../../../developer/account-management.md:188
msgid "Then `exportOnRingEnded` is emitted."
msgstr ""
#: ../../../developer/account-management.md:190
msgid "Revoke device"
msgstr "Revoca dispositivo"
#: ../../../developer/apis-of-jami.md:1
msgid "The APIs of Jami"
msgstr "Le API di 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 documentazione relativa all'API di OpenDHT è "
"[qui]https://github.com/savoirfairelinux/opendht/wiki/API-Overview) e non "
"sarà dettagliata nella parte seguente."
#: ../../../developer/apis-of-jami.md:8
msgid "Daemon"
msgstr "Daemon"
#: ../../../developer/apis-of-jami.md:10
msgid "The managers"
msgstr "I dirigenti"
#: ../../../developer/apis-of-jami.md:12
msgid ""
"The API of the daemon is decomposed between 5 Managers + 1 Instance file:"
msgstr "L'API del daemon è decomposta tra 5 Manager + 1 File di istanza:"
#: ../../../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'interfaccia **CallManager** è utilizzata per gestire le azioni connesse a "
"chiamate e conferenze. Poiché il daemon Jami supporta più chiamate in "
"entrata/uscita, tutte le azioni che coinvolgono una chiamata specifica "
"devono affrontare il metodo tramite un callID unico."
#: ../../../developer/apis-of-jami.md:14
msgid ""
"The **ConfigurationManager** used to handle the configuration stuff: "
"accounts settings, user preferences, ..."
msgstr ""
"Il **ConfigurationManager** è utilizzato per gestire le cose di "
"configurazione: impostazioni di account, preferenze dell'utente,..."
#: ../../../developer/apis-of-jami.md:15
msgid "The **PresenceManager** is used to track the presence of contacts"
msgstr ""
"Il **PresenceManager** viene utilizzato per tracciare la presenza di "
"contatti"
#: ../../../developer/apis-of-jami.md:16
msgid "The **VideoManager** used to manage video devices and renderers"
msgstr ""
"Il **VideoManager** utilizzato per gestire dispositivi video e renderer"
#: ../../../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'istanza ** viene utilizzata per contare il numero di clienti "
"effettivamente registrati nel core. Quando inizializzate il vostro client, è"
" necessario registrarlo contro il core utilizzando questa interfaccia."
#: ../../../developer/apis-of-jami.md:19
msgid "DBUS"
msgstr "Dbuss"
#: ../../../developer/apis-of-jami.md:21
msgid ""
"All the documentation and code for the dbus API is located in `jami-"
"daemon/bin/dbus`."
msgstr ""
"Tutte le documentazioni e il codice dell'API dbus si trovano in `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 ""
"Se si utilizza linux, è possibile utilizzare `d-feet` quando il daemon è in "
"esecuzione per manipolare l'API (o con qualsiasi altro strumento)."
#: ../../../developer/apis-of-jami.md:25
msgid "The LRC project uses this API (and use libwrap on windows and mac os)."
msgstr ""
"Il progetto LRC utilizza questa API (e usa libwrap su Windows e 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 ""
"Tutte le documentazioni e il codice dell'API JNI si trovano in `jami-"
"daemon/bin/jni`."
#: ../../../developer/apis-of-jami.md:31
msgid "node js"
msgstr "nodo 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 ""
"Tutta la documentazione e il codice per l'API Node JS si trovano in `jami-"
"daemon/bin/nodejs`. Questa API non è utilizzata in alcun progetto conosciuto"
" e forse non è aggiornata."
#: ../../../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 ""
"Tutte le documentazioni e il codice per l'API REST si trovano in `jami-"
"daemon/bin/restcpp`. Questa API non è utilizzata in alcun progetto "
"conosciuto e forse non è aggiornata."
#: ../../../developer/apis-of-jami.md:39
msgid "Python wrapper"
msgstr "Involucro Python"
#: ../../../developer/apis-of-jami.md:41
msgid ""
"A Python wrapper is available in `jami-daemon/tools/jamictrl`. This wrapper "
"uses DBus."
msgstr ""
"Un involucro Python è disponibile in `jami-daemon/tools/jamictrl`. Questo "
"involucro utilizza DBus."
#: ../../../developer/banned-contacts.md:1
msgid "Banned contacts"
msgstr "Contatti vietati"
#: ../../../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 ""
#: ../../../developer/banned-contacts.md:7
msgid "Introducing scenario"
msgstr "Scenario di introduzione"
#: ../../../developer/banned-contacts.md:10
msgid "Let's explain banned contacts with a simple scenario:"
msgstr "Spieghiamo i contatti vietati con uno scenario semplice:"
#: ../../../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 ""
#: ../../../developer/banned-contacts.md:20
msgid "**So, what does it mean ?**"
msgstr "Allora, cosa significa?"
#: ../../../developer/banned-contacts.md:22
msgid "In the daemon"
msgstr "Nel demone"
#: ../../../developer/banned-contacts.md:25
msgid "Jessica *won't be notified that she was banned by Alice*."
msgstr "Jessica non sarà avvisata che Alice l'ha bandita."
#: ../../../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 ""
"Come un contatto *divieto* di Alice, Jessica *non sarà più autorizzata a "
"contattarla in alcun modo. messaggi di testo, chiamate vocali o video non "
"saranno riconosciute o risposte in alcun modo. Alice non sarà nemmeno "
"consapevole che Jessica ha cercato di contattarla."
#: ../../../developer/banned-contacts.md:32
msgid "Banned contacts are synched across linked devices like other contacts."
msgstr ""
"I contatti vietati vengono sincronizzati tra i dispositivi collegati come "
"altri contatti."
#: ../../../developer/banned-contacts.md:34
msgid "In Jami clients (recommended implementation)"
msgstr "In Jami clienti (implementazione raccomandata)"
#: ../../../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 ""
"Finché Jessica è un contatto vietato, la conversazione con Jessica non "
"appare nella lista delle conversazioni. La storia della conversazione, "
"tuttavia, non viene eliminata. Jessica appare nell'account di Alice nella "
"lista dei contatti vietati. Alice potrebbe anche trovare / aprire la "
"conversazione eseguendo una ricerca esatta per il nome utente di Jessica."
#: ../../../developer/banned-contacts.md:43
msgid ""
"Alice can un-ban Jessica from the conversation or the banned contact list."
msgstr ""
"Alice puo' togliere Jessica dalla conversazione o dalla lista dei contatti "
"vietati."
#: ../../../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 ""
"Il risultato della ricerca e la conversazione indicano che Jessica ha un "
"status di interdizione."
#: ../../../developer/banned-contacts.md:50
msgid ""
"Alice can still delete the conversation history using a *Delete History* "
"button."
msgstr ""
"Alice può ancora eliminare la cronologia della conversazione usando il "
"pulsante *Rimuovere la cronologia*."
#: ../../../developer/calls.md:1 ../../../developer/swarm.md:536
#: ../../../developer/synchronizing-profiles.md:19
msgid "Calls"
msgstr "Chiamate"
#: ../../../developer/calls.md:4
msgid ""
"**NOTE: this page detail the principle for Jami accounts. For SIP accounts, "
"the SIP protocol is used.**"
msgstr "**NOTA: questa pagina descrive il principio per gli account Jami."
#: ../../../developer/calls.md:6
msgid "Let's do a call in Jami!"
msgstr "Facciamo una chiamata a 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 ""
"Quando si crea una chiamata tra due colleghi, Jami utilizza principalmente "
"protocolli noti come ICE, SIP o TLS. Tuttavia, per farlo distribuire, il "
"processo di creazione di una chiamata è un po' diverso."
#: ../../../developer/calls.md:12
msgid ""
"Search the contact presence on the DHT (for more details, see {doc}`contact-"
"management`)"
msgstr ""
"Cerca la presenza di contatti sul DHT (per maggiori dettagli, vedere "
"{doc}`contatt-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 ""
"Una volta trovato il contatto, inviare una richiesta di chiamata, "
"annunciando i candidati noti (l'ip di ciascuna interfaccia di rete + "
"indirizzi di relay (TURN) + indirizzi riflessivi (UPnP, quelli pubblici)."
#: ../../../developer/calls.md:14
msgid ""
"Wait for the response of the contact (they will respond their known "
"addresses)."
msgstr ""
"Aspetta la risposta del contatto (risponderanno ai loro indirizzi noti)."
#: ../../../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 ""
"Negoziare il socket tramite ICE. In realtà, vengono negoziate due sessioni "
"ICE. Una (preferita) in TCP, una in UDP (come fallback)."
#: ../../../developer/calls.md:16
msgid "Then, the socket is encrypted in TLS (if TCP) or DTLS (if UDP)."
msgstr "Quindi, il socket è crittografato in TLS (se TCP) o DTLS (se 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 ""
"Il contatto può ora accettare o rifiutare la chiamata. Quando accettano, "
"viene negoziato un trasporto ICE (UDP solo per ora) per creare 4 nuove prese"
" per i media (2 per audio, 2 per video)."
#: ../../../developer/calls.md:18
msgid "The call is now alive!"
msgstr "La chiamata è ora viva!"
#: ../../../developer/calls.md:20
msgid "Exchange ICE candidates"
msgstr "Candidati di scambio 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 ""
"Tutto inizia davvero in `jamiaccount.cpp` "
"(`JamiAccount::startOutgoingCall`). Una volta che entrambi gli oggetti ICE "
"sono pronti e quando il contatto è trovato tramite il DHT, viene elaborata "
"la richiesta di chiamata per il contatto. Questa richiesta contiene tutte le"
" informazioni necessarie per la sessione remota ICE definita da:"
#: ../../../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 ""
"dove `callvid` è un numero casuale utilizzato per identificare la chiamata e"
" il blob contiene due messaggi ICE concatenati (`IceTransport::packIceMsg` "
"in `ice_transport.cpp`) contenenti la password della sessione, i candidati "
"*ufrag* e ICE.) come:"
#: ../../../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 ""
"e viene inviato tramite il DHT in un messaggio crittografato per il "
"dispositivo a `hash(call:xxxxxx) ` dove `xxxxxx` è l'id del dispositivo. Il "
"peer risponderà nello stesso luogo (ma crittografato per il dispositivo "
"mittente) il proprio `dht::IceCandidates`. Vedere "
"`JamiAccount::replyToIncomingIceMsg` per ulteriori dettagli."
#: ../../../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 sessione ICE è creata da entrambe le parti quando hanno tutti i candidati"
" (per il mittente, quindi, quando viene ricevuta la risposta dal contatto)."
#: ../../../developer/calls.md:52
msgid "ICE negotiation"
msgstr "Negoziazione del CEI"
#: ../../../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 ""
"Le chiamate in attesa sono gestite da `JamiAccount::handlePendingCallList() "
"`, che prima aspettano che la negoziazione TCP finisca (e se non riesce, "
"aspetta quella UDP). Il codice per la negoziazione ICE è principalmente "
"gestito da [pjproject]https://github.com/pjsip/pjproject) ma per Jami, la "
"parte interessante si trova in `ice_transport.cpp`. Inoltre, aggiungiamo "
"alcuni patch importanti / funzionalità in cima a *pjproject* non fuse a "
"monte per ora (ad esempio, ICE su TCP). Questi patch sono presenti in "
"`contrib/src/pjproject`."
#: ../../../developer/calls.md:56
msgid "Encrypt the control socket"
msgstr "Crittografare la presa di controllo"
#: ../../../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 ""
"Una volta che la presa è creata e gestita da un'istanza **IceTransport**, "
"viene quindi avvolta in un **SipTransport** corrispondente a un "
"*TlsIceTransport*. Il codice principale è situato in "
"`JamiAccount::handlePendingCall() ` e l'avvolta viene fatta in "
"`SipTransportBroker::getTlsIceTransport`. Infine, la nostra sessione è "
"gestita da **TlsSession** in `daemon/src/security/tls_session.cpp` e "
"utilizza la libreria 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 ""
"Quindi, il socket di controllo sarà un TLS (1.3 se la tua versione e la tua "
"versione di peer gnutls lo supportano) se viene negoziato un socket TCP. Se "
"invece viene negoziato un socket UDP (a causa di restrizioni/problemi del "
"firewall nella negoziazione/etc), il socket utilizzerà DTLS (anche gestito "
"dalle stesse parti)."
#: ../../../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 presa di controllo viene utilizzata per trasmettere pacchetti SIP, come "
"inviti, messaggi personalizzati (Jami invia la VCard del tuo profilo su "
"questa presa all'inizio della chiamata, o la rotazione della fotocamera), "
"messaggi di testo."
#: ../../../developer/calls.md:64
msgid "Related articles:"
msgstr "Articolo correlato:"
#: ../../../developer/calls.md:66
msgid "https://jami.net/improved-video-rotation-support/"
msgstr ""
"Il programma di programmazione di video-rotation-support è stato sviluppato "
"in modo che il programma di programmazione di video-rotation-support sia "
"disponibile in modo efficace."
#: ../../../developer/calls.md:67
msgid "https://jami.net/peer-to-peer-file-sharing-support-in-jami/"
msgstr ""
"Il programma di ricerca è stato sviluppato in modo da consentire ai "
"cittadini di sviluppare un'esperienza di lavoro."
#: ../../../developer/calls.md:69
msgid "Media sockets"
msgstr "Sottotitoli multimediali"
#: ../../../developer/calls.md:71
msgid ""
"Media sockets are SRTP sockets where the key is negotiated through the TLS "
"Session previously created. **TODO**"
msgstr ""
"Le socket media sono socket SRTP in cui la chiave viene negoziata attraverso"
" la sessione TLS precedentemente creata. ** TODO**"
#: ../../../developer/calls.md:74 ../../../developer/drt.rst:140
msgid "Architecture"
msgstr "Architettura"
#: ../../../developer/calls.md:76
msgid "**TOOD**"
msgstr "- E' un'altra cosa."
#: ../../../developer/calls.md:79
msgid "Multi-stream"
msgstr "Codice di trasmissione"
#: ../../../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 ""
"Dal momento che la versione 13.3.0 di Daemon è completamente supportata, la "
"funzione multi-stream consente agli utenti di condividere più video durante "
"una chiamata allo stesso tempo."
#: ../../../developer/calls.md:86
msgid "pjsip"
msgstr "Pjsip"
#: ../../../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 prima parte è quella di negoziare abbastanza stream di media. In realtà, "
"ogni stream di media utilizza 2 socket UDP. Consideramo tre scenari:"
#: ../../../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 ""
"Se è l'ospite di una conferenza che vuole aggiungere i media, non c'è nulla "
"di più da negoziare, perché abbiamo già mescolato i video in un solo flusso."
" Quindi, aggiungiamo i nuovi media direttamente al video-mixer senza "
"negoziati."
#: ../../../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 ""
"Se siamo in 1: 1, per ora, poiché non ci sono informazioni di conferenza, "
"multi-stream non è supportato."
#: ../../../developer/calls.md:99
msgid "Else, 2 new sockets are negotiated for new media."
msgstr "Altrimenti, due nuovi socket sono negoziati per nuovi media."
#: ../../../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 ""
"Per rendere pjsip in grado di generare più socket per ogni sessione ICE, "
"`PJ_ICE_COMP_BITS` è stato modificato a `5` (che corrisponde a `2^5`, quindi"
" 32 flussi)."
#: ../../../developer/calls.md:105
msgid "Deprecate switchInput, support requestMediaChange"
msgstr "Deprecate switchInput, richiesta di supportoMediaChange"
#: ../../../developer/calls.md:107
msgid ""
"In the daemon, the old API `switchInput` is now **DEPRECATED**; same for "
"`switchSecondaryInput`:"
msgstr ""
"Nel daemon, l'antica API `switchInput` è ora **DEPRECATED**; lo stesso per "
"`switchSecondaryInput`:"
#: ../../../developer/calls.md:133
msgid "`requestMediaChange` replaces this, for both calls and conferences:"
msgstr ""
"`requestMediaChange` sostituisce questo, sia per le chiamate che per le "
"conferenze:"
#: ../../../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 ""
"Se una chiamata viene effettuata con un peer in cui la versione del daemon è"
" < 13.3.0, il multi-stream non è abilitato e viene utilizzato il vecchio "
"comportamento (solo 1 video)."
#: ../../../developer/calls.md:163
msgid "Identifications of streams"
msgstr "Identificazione dei flussi"
#: ../../../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 ""
"Poiché ora possono esserci più stream, ogni stream multimediale viene "
"identificato dal suo identificatore, e il formato è \"<type>_<idx>\"; ad "
"esempio: \"audio_0\", \"video_2\", ecc."
#: ../../../developer/calls.md:169
msgid "Rotation"
msgstr "Rotation"
#: ../../../developer/calls.md:171 ../../../developer/calls.md:187
#: ../../../developer/calls.md:201
msgid "The XML was updated to add the wanted stream:"
msgstr "L' XML è stato aggiornato per aggiungere il flusso desiderato:"
#: ../../../developer/calls.md:185
msgid "Key-frame"
msgstr "Quadro chiave"
#: ../../../developer/calls.md:199
msgid "Voice activity"
msgstr "Attività vocale"
#: ../../../developer/calls.md:215
msgid "Conference"
msgstr "Conferenza"
#: ../../../developer/calls.md:217
msgid "Reflected changes are documented {doc}`here <conference-protocol>`."
msgstr ""
"Le modifiche riflesse sono documentate {doc}` qui <conferenza-protokolo>`."
#: ../../../developer/calls.md:219
msgid "Client"
msgstr "Cliente"
#: ../../../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 ""
"Anche se il back-end supporta fino a 32 media contemporaneamente, eccetto "
"per i client personalizzati, attualmente consigliamo di dare la possibilità "
"di condividere solo una fotocamera e un video allo stesso tempo."
#: ../../../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 ""
"Nella logica della biblioteca, `addMedia` e `removeMedia` nella `callModel` "
"usano direttamente il `requestMediaChange` e possono essere utilizzati come "
"riferimento di progettazione."
#: ../../../developer/calls-in-swarm.md:1
msgid "Calls in Swarm"
msgstr "Chiamate in Swarm"
#: ../../../developer/calls-in-swarm.md:4
msgid "Goals"
msgstr "Obiettivi"
#: ../../../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 ""
"Questo sito ha lo scopo di descrivere come la chiamata funziona con i "
"gruppi. Questo metodo consentirà ai clienti di fornire una chiamata per più "
"partecipanti con una storia di testo condiviso. Il protocollo deve essere "
"flessibile, mantenere la compatibilità con lo stack SIP, adn deve lavorare "
"in un ambiente distribuito. Questo ambiente distribuito porta anche alcune "
"sfide, come le possibili condizioni di corsa (dove più parti possono "
"iniziare una chiamata allo stesso tempo)."
#: ../../../developer/calls-in-swarm.md:8
#: ../../../developer/conference-protocol.md:5
#: ../../../developer/design-process.md:4 ../../../developer/drt.rst:23
msgid "Definitions"
msgstr "Definizioni"
#: ../../../developer/calls-in-swarm.md:10
msgid ""
"a **Rendezvous** will mix all authorized incoming calls in a conference."
msgstr ""
"un **Rendezvous** mescolerà tutte le chiamate autorizzate in entrata in una "
"conferenza."
#: ../../../developer/calls-in-swarm.md:11
msgid "Two new URIs will be used for this feature:"
msgstr "Per questa funzione saranno utilizzati due nuovi URI:"
#: ../../../developer/calls-in-swarm.md:12
msgid "`swarm:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`"
msgstr "`swarm:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#: ../../../developer/calls-in-swarm.md:13
msgid "`rdv:accountUri/deviceId/conversationId/confId`"
msgstr "`rdv:accountUri/dispositivoId/conversazioneId/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 ""
"**Profil di swarm** è il profilo dello swarm memorizzato in una vCard "
"(`profile.vcf`, vedere {ref}`developer/swarm:Conversation's profile "
"synchronization` e {doc}`synchronizing-profiles`)"
#: ../../../developer/calls-in-swarm.md:15
msgid "`rdvUri` is the default URI for a Swarm, set in the *Swarm's profile*"
msgstr ""
"`rdvUri` è l'URI predefinito per un swarm, impostato nel profilo del swarm*"
#: ../../../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 ""
"Nota: questi due URI consentono al cliente di effettuare una chiamata per "
"aderire a un *Rendezvous* o di avviare una chiamata a uno sciame, con "
"conseguente logica descritta nella sezione successiva."
#: ../../../developer/calls-in-swarm.md:19
msgid "Place a call in a Swarm"
msgstr "Chiamare un gruppo"
#: ../../../developer/calls-in-swarm.md:21
msgid "Proposed flow:"
msgstr "Flusso proposto:"
#: ../../../developer/calls-in-swarm.md:23
msgid "**a:** If `rdvUri` is set:"
msgstr "**a:** Se è impostato `rdvUri`:"
#: ../../../developer/calls-in-swarm.md:24
#: ../../../developer/calls-in-swarm.md:27
msgid "Call it"
msgstr "Chiamalo così."
#: ../../../developer/calls-in-swarm.md:25
msgid "If failed, go to **b:**"
msgstr "Se non riesce, va a **b:**"
#: ../../../developer/calls-in-swarm.md:26
msgid "**b:** else if there is a current active call:"
msgstr "**b:** se esiste una chiamata attiva corrente:"
#: ../../../developer/calls-in-swarm.md:28
msgid "If failed, go to **c:**"
msgstr "Se non riesce, vai a **c:**"
#: ../../../developer/calls-in-swarm.md:29
msgid "**c:** else, host a new *Rendezvous* and join it."
msgstr "Altrimenti, ospita un nuovo \"Rendezvous\" e unisciti a esso."
#: ../../../developer/calls-in-swarm.md:30
msgid "Also, ask users if they want to be the host for next calls."
msgstr ""
"Chiedi anche agli utenti se vogliono essere l'host per le prossime chiamate."
#: ../../../developer/calls-in-swarm.md:32
msgid ""
"![Diagram: Placing a call in a Swarm](images/placing-call-in-swarm-"
"diagram.png)"
msgstr "! [Diagramma: inserire una chiamata in un swarm]"
#: ../../../developer/calls-in-swarm.md:32
msgid "Diagram: Placing a call in a Swarm"
msgstr "Diagramma: inserimento di una chiamata in un gruppo"
#: ../../../developer/calls-in-swarm.md:34
msgid "**TODO, when to commit and who is commiting**"
msgstr "**TODO, quando impegnarsi e chi si impegna**"
#: ../../../developer/calls-in-swarm.md:36
msgid "Incoming calls for swarm"
msgstr "In arrivo richieste di sciame"
#: ../../../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 ""
"Quando si riceve una nuova chiamata in entrata, l'URI DEVE essere "
"analizzato. Se la chiamata in entrata è per un *Rendezvous* che è "
"attualmente ospitato dal dispositivo e il chiamer è autorizzato a unirsi, la"
" chiamata DEVE essere risolta e aggiunta al corrente *Rendezvous*"
#: ../../../developer/calls-in-swarm.md:41
msgid "Defining a host for a Swarm"
msgstr "Definire un ospite per un colpo"
#: ../../../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 ""
"Per definire un URI predefinito, il membro che vuole essere l'host dovrebbe "
"aggiornare il profilo della conversazione, e questo sarà sincronizzato e "
"convalidato da pari. Tuttavia, l'host DEVE essere in grado di accettare o "
"non essere l'host e un membro con abbastanza autorizzazioni DEVE essere in "
"grado di chiedere a un dispositivo di essere l'host. Questo processo non è "
"deciso per ora."
#: ../../../developer/calls-in-swarm.md:45
msgid "**TODO? Permissions to update, negotiation of the host**"
msgstr "** TODO? Permessi di aggiornamento, negoziazione dell'ospite**"
#: ../../../developer/calls-in-swarm.md:47
#: ../../../developer/conference-protocol.md:181
#: ../../../developer/file-transfer.md:196
msgid "Future"
msgstr "Futuro"
#: ../../../developer/calls-in-swarm.md:49
msgid "Join notifications?"
msgstr "- Unire le notifiche?"
#: ../../../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 ""
"I membri dello sciame che non sono in una chiamata DEVEREBBEREbbero sapere "
"chi è nelle chiamate attive."
#: ../../../developer/calls-in-swarm.md:53
msgid "SIP Bridge?"
msgstr "Il ponte 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 ""
"Poiché le conferenze sono ancora chiamate SIP miste, un ponte SIP è ancora "
"possibile. Nel profilo di *Swarm* dovrebbe essere possibile aggiungere "
"un'entrata SIP, come alcuni sistemi VoIP popolari)"
#: ../../../developer/choosing-crf-value-for-encoder.md:1
msgid "Choosing CRF value for encoder"
msgstr "Scegliere il valore CRF per l'incodificatore"
#: ../../../developer/choosing-crf-value-for-encoder.md:4
#: ../../../developer/design-process.md:13
msgid "Context"
msgstr "Context"
#: ../../../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'utilizzo della larghezza di banda da parte dell'applicazione Jami non è "
"ottimale per tutti i tipi di connessioni."
#: ../../../developer/choosing-crf-value-for-encoder.md:7
msgid "Observation"
msgstr "Osservazione"
#: ../../../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 ""
"Non è necessario mirare a una qualità ottimale (CRF < 20) perché oltre a "
"ciò, la percezione visiva è quasi simile mentre il flusso di dati (bitrate) "
"richiesto è molto più elevato."
#: ../../../developer/choosing-crf-value-for-encoder.md:10
msgid "Objective"
msgstr "Obiettivo"
#: ../../../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 ""
"Il presente documento ha lo scopo di verificare l'impatto di un cambiamento "
"della qualità del video con il parametro CRF dell'encoder."
#: ../../../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 "Questi test sono stati eseguiti confrontando:"
#: ../../../developer/choosing-crf-value-for-encoder.md:15
msgid "The first one encoded with Jami's current parameters"
msgstr "Il primo codificato con i parametri attuali di Jami."
#: ../../../developer/choosing-crf-value-for-encoder.md:16
msgid "The second encoded with a lower quality"
msgstr "Il secondo codificato con una qualità inferiore"
#: ../../../developer/choosing-crf-value-for-encoder.md:18
msgid ""
"Each of these tests were performed for the following resolutions: 1080p, "
"720p and 436p."
msgstr ""
"Ciascuna di queste prove è stata eseguita per le seguenti risoluzioni: "
"1080p, 720p e 436p."
#: ../../../developer/choosing-crf-value-for-encoder.md:20
msgid "For each of these resolutions several bitrates have been used:"
msgstr ""
"Per ciascuna di queste risoluzioni sono stati utilizzati diversi bitrate:"
#: ../../../developer/choosing-crf-value-for-encoder.md:21
msgid "300 Kbit/s (Jami low value)"
msgstr "300 Kbit/s (valore minimo di Jam)"
#: ../../../developer/choosing-crf-value-for-encoder.md:22
msgid "1.5 Mbit/s (Intermediate value)"
msgstr "1,5 Mbit/s (valore intermedio)"
#: ../../../developer/choosing-crf-value-for-encoder.md:23
msgid "6 Mbit/s (High value)"
msgstr "6 Mbit/s (valore elevato)"
#: ../../../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 ""
"I grafici mostrano l'evoluzione del bitrate con il file in esame "
"(risoluzione e specifico set bitrate)."
#: ../../../developer/choosing-crf-value-for-encoder.md:27
msgid "A visual comparison (side by side) was made for each test."
msgstr "Per ciascun test è stato effettuato un confronto visivo (insieme)."
#: ../../../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 ""
"Grazie a questo test possiamo stimare il bitrate che sarà emesso in Jami in "
"base ai parametri scelti."
#: ../../../developer/choosing-crf-value-for-encoder.md:33
msgid ""
"1080p / 300 kbit/s / CRF28 ![image](images/choosing-crf-1080p-300kbps-"
"crf28.png) 1080p / 300 kbit/s / CRF38 ![image](images/choosing-"
"crf-1080p-300kbps-crf38.png)"
msgstr ""
"1080p / 300 kbit/s / CRF28! [immagine](immagini/scelta-crf-1080p-300kbps-"
"crf28.png) 1080p / 300 kbit/s / CRF38! [immagine](immagini/scelta-"
"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 "immagine"
#: ../../../developer/choosing-crf-value-for-encoder.md:38
msgid "Visual comparison (CRF28 a gauche / CRF38 a droite)"
msgstr "Confronto visivo (CRF28 a sinistra / CRF38 a destra)"
#: ../../../developer/choosing-crf-value-for-encoder.md:40
msgid ""
"1080p / 1.5 Mbps / CRF22 ![image](images/choosing-crf-1080p-1.5mbps-"
"crf22.png) 1080p / 1.5 Mbit/s / CRF30 ![image](images/choosing-"
"crf-1080p-1.5mbps-crf30.png)"
msgstr ""
"1080p / 1.5 Mbps / CRF22! [immagine](immagini/scelta-crf-1080p-1.5mbps-"
"crf22.png) 1080p / 1.5 Mbit/s / CRF30! [immagine](immagini/scelta-"
"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 "Confronto visivo (CRF22 a sinistra / CRF30 a destra)"
#: ../../../developer/choosing-crf-value-for-encoder.md:47
msgid ""
"1080p / 6 Mbps / CRF17 ![image](images/choosing-crf-1080p-6mbps-crf17.png) "
"1080p / 6 Mbit/s / CRF23 ![image](images/choosing-crf-1080p-6mbps-crf23.png)"
msgstr ""
"1080p / 6 Mbps / CRF17! [immagine](immagini/scelta-crf-1080p-6mbps-"
"crf17.png) 1080p / 6 Mbit/s / CRF23! [immagine](immagini/scelta-"
"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 "Confronto visivo (CRF17 a sinistra / CRF23 a destra)"
#: ../../../developer/choosing-crf-value-for-encoder.md:56
msgid ""
"720p / 300 kbps / CRF28 ![image](images/choosing-crf-720p-300kbps-crf28.png)"
" 720p / 300 kbit/s / CRF38 ![image](images/choosing-crf-720p-300kbps-"
"crf38.png) Visual comparison (CRF28 left / CRF38 right)"
msgstr ""
"720p / 300 kbps / CRF28! [immagine](immagini/scelta-crf-720p-300kbps-"
"crf28.png) 720p / 300 kbit/s / CRF38! [immagine](immagini/scelta-"
"crf-720p-300kbps-crf38.png) Comparazione visiva (CRF28 sinistra / CRF38 "
"destra)"
#: ../../../developer/choosing-crf-value-for-encoder.md:62
msgid ""
"720p / 1.5 Mbps / CRF22 ![image](images/choosing-crf-720p-1.5mbps-crf22.png)"
" 720p / 1.5 Mbit/s / CRF30 (Test with reduced CRF) ![image](images/choosing-"
"crf-720p-1.5mbps-crf30.png)"
msgstr ""
"720p / 1.5 Mbps / CRF22![immagine](immagini/scelta-crf-720p-1.5mbps-"
"crf22.png) 720p / 1.5 Mbit/s / CRF30 (Test con CRF "
"ridotto)![immagine](immagini/scelta-crf-720p-1.5mbps-crf30.png)"
#: ../../../developer/choosing-crf-value-for-encoder.md:69
msgid ""
"720p / 6 Mbps / CRF17 ![image](images/choosing-crf-720p-6mbps-crf17.png) "
"720p / 6 Mbit/s / CRF23 ![image](images/choosing-crf-720p-6mbps-crf23.png)"
msgstr ""
"720p / 6 Mbps / CRF17! [immagine](immagini/scelta-crf-720p-6mbps-crf17.png) "
"720p / 6 Mbit/s / CRF23! [immagine](immagini/scelta-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 "Confronto visivo (CRF17 a sinistra / CRF23 a destra)"
#: ../../../developer/choosing-crf-value-for-encoder.md:78
msgid ""
"436p / 300 kbps / CRF28 ![image](images/choosing-crf-436p-300kbps-crf28.png)"
" 436p / 300 kbit/s / CRF38 ![image](images/choosing-crf-436p-300kbps-"
"crf38.png)"
msgstr ""
"436p / 300 kbps / CRF28! [immagine](immagini/scelta-crf-436p-300kbps-"
"crf28.png) 436p / 300 kbit/s / CRF38! [immagine](immagini/scelta-"
"crf-436p-300kbps-crf38.png)"
#: ../../../developer/choosing-crf-value-for-encoder.md:83
msgid "Visual comparison (CRF28 left / CRF38 right)"
msgstr "Confronto visivo (CRF28 a sinistra / CRF38 a destra)"
#: ../../../developer/choosing-crf-value-for-encoder.md:85
msgid ""
"436p / 1.5 Mbps / CRF22 ![image](images/choosing-crf-436p-1.5mbps-crf22.png)"
" 436p / 1.5 Mbit/s / CRF30 ![image](images/choosing-crf-436p-1.5mbps-"
"crf30.png)"
msgstr ""
"436p / 1.5 Mbps / CRF22! [immagine](immagini/scelta-crf-436p-1.5mbps-"
"crf22.png) 436p / 1.5 Mbit/s / CRF30! [immagine](immagini/scelta-"
"crf-436p-1.5mbps-crf30.png)"
#: ../../../developer/choosing-crf-value-for-encoder.md:92
msgid ""
"436p / 6 Mbps / CRF17 ![image](images/choosing-crf-436p-6mbps-crf17.png) "
"436p / 6 Mbit/s / CRF23 ![image](images/choosing-crf-436p-6mbps-crf23.png)"
msgstr ""
"436p / 6 Mbps / CRF17! [immagine](immagini/scelta-crf-436p-6mbps-crf17.png) "
"436p / 6 Mbit/s / CRF23! [immagine](immagini/scelta-crf-436p-6mbps-"
"crf23.png)"
#: ../../../developer/coding-style.md:1
msgid "Coding style"
msgstr "Stile di codifica"
#: ../../../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 ""
#: ../../../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 ""
"Le regole del formato C++ sono definite da questo file clang-format: "
"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 ""
#: ../../../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 ""
#: ../../../developer/conference-protocol.md:1
msgid "Conference protocol"
msgstr "Protocollo della conferenza"
#: ../../../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 ""
"Questo documento ha lo scopo di descrivere le evoluzioni che faremo per la "
"gestione delle conferenze (audio/video). L'obiettivo è quello di migliorare "
"l'attuale implementazione, che si limita a unire le chiamate SIP e a fornire"
" una visualizzazione a griglia, per passare a una visualizzazione in cui i "
"partecipanti sono elencati, possono essere silenziati in modo indipendente o"
" la disposizione del video può essere modificata (per mostrare solo un "
"partecipante)."
#: ../../../developer/conference-protocol.md:7
msgid "Host: Is the user who mix the audio/video streams for the others"
msgstr "Host: è l'utente che mescola i flussi audio/video per gli altri"
#: ../../../developer/conference-protocol.md:8
msgid "Participant: Every user in the conference, even the host"
msgstr "Partecipante: ogni utente della conferenza, anche l'host"
#: ../../../developer/conference-protocol.md:10
msgid "Disclaimer"
msgstr "Disclaimer"
#: ../../../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 ""
"Questo documento descrive solo i primi passaggi, che per ora significano "
"l'identificazione dei partecipanti e la posizione del video mixer inviato a "
"tutti i partecipanti."
#: ../../../developer/conference-protocol.md:14
msgid "Possible layouts"
msgstr "Possibili layout"
#: ../../../developer/conference-protocol.md:16
msgid "GRID: Every member is shown with the same height/width"
msgstr "GRID: ogni membro è mostrato con la stessa altezza/larghezza"
#: ../../../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: uno membro è zoomato e viene visualizzato l'altro "
"preview"
#: ../../../developer/conference-protocol.md:18
msgid "ONE_BIG: One member take the full screen rendered"
msgstr "ONE_BIG: un membro prende la schermata completa"
#: ../../../developer/conference-protocol.md:20
msgid ""
"Two new methods are available to manage the conference Layout in "
"CallManager:"
msgstr ""
"Due nuovi metodi sono disponibili per gestire la conferenza Layout in "
"CallManager:"
#: ../../../developer/conference-protocol.md:38
#: ../../../developer/conference-protocol.md:95 ../../../developer/drt.rst:120
#: ../../../developer/swarm.md:493
msgid "Implementation"
msgstr "Attuazione"
#: ../../../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 ""
"L'implementazione è piuttosto semplice. Tutto è gestito da `conference.cpp` "
"(per collegare il partecipante alle fonti) e `video_mixer.cpp` (per rendere "
"il layout desiderato)."
#: ../../../developer/conference-protocol.md:43
msgid "Syncing Conferences Informations"
msgstr "Informazioni di sincronizzazione delle conferenze"
#: ../../../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 ""
"Nota: In realtà, la parola partecipante è usata per chiamate mescolate in "
"una conferenza. Questo può portare all'inizio a alcuni problemi per l'API e "
"deve essere risolto in futuro"
#: ../../../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'obiettivo è di informare tutti i partecipanti dei metadati del video reso."
" Ciò significa chi è il partecipante alla conferenza e dove si trova il "
"video."
#: ../../../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 ""
"Se un partecipante è una conferenza, le informazioni di layout entranti "
"dovrebbero essere fuse quando inviate ad altri partecipanti."
#: ../../../developer/conference-protocol.md:51
msgid "Layout Info"
msgstr "Informazioni di layout"
#: ../../../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 ""
"Il layout viene memorizzato come VectorMapStringString per i clienti e "
"internamente con un vettore<ParticipantInfo> con il seguente formato:"
#: ../../../developer/conference-protocol.md:67
msgid "Possible keys are:"
msgstr "Le chiavi possibili sono:"
#: ../../../developer/conference-protocol.md:69
msgid "uri = account's uri"
msgstr "uri = uri della conta"
#: ../../../developer/conference-protocol.md:70
msgid "device = device's id"
msgstr "dispositivo = ID del dispositivo"
#: ../../../developer/conference-protocol.md:71
msgid "media = media's id"
msgstr "media = ID del media"
#: ../../../developer/conference-protocol.md:72
msgid "active = if the participant is active"
msgstr "attivo = se il partecipante è attivo"
#: ../../../developer/conference-protocol.md:73
msgid "x = position (x) in the video"
msgstr "x = posizione (x) nel video"
#: ../../../developer/conference-protocol.md:74
msgid "y = position (y) in the video"
msgstr "Y = posizione (y) nel video"
#: ../../../developer/conference-protocol.md:75
msgid "w = size (width) in the video"
msgstr "w = dimensione (larghezza) nel video"
#: ../../../developer/conference-protocol.md:76
msgid "h = size (height) in the video"
msgstr "h = dimensione (altezza) nel video"
#: ../../../developer/conference-protocol.md:77
msgid "videoMuted = if the video is muted"
msgstr "videocamera spenta = se la videocamera è spenta"
#: ../../../developer/conference-protocol.md:78
msgid "audioLocalMuted = if the audio is locally muted"
msgstr ""
"microfono locale disattivato = se il microfono del tuo dispositivo è stato "
"spento da te"
#: ../../../developer/conference-protocol.md:79
msgid "audioModeratorMuted = if the audio is muted by moderators"
msgstr ""
"microfono spento al Moderatore = se i moderatori spengono il loro microfono"
#: ../../../developer/conference-protocol.md:80
msgid "isModerator = if it's a moderator"
msgstr "isModerator = se è un moderatore"
#: ../../../developer/conference-protocol.md:81
msgid "handRaised = if the hand is raised"
msgstr "mano alzata = se la mano è alzata"
#: ../../../developer/conference-protocol.md:82
msgid "voiceActivity = if the stream has voice activity"
msgstr "voiceActivity = se il flusso ha attività vocale"
#: ../../../developer/conference-protocol.md:83
msgid "recording = if the peer is recording the conference"
msgstr "registrazione = se il pari sta registrando la conferenza"
#: ../../../developer/conference-protocol.md:85
msgid "New API"
msgstr "Nuova 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 ""
"Un nuovo metodo (in CallManager) e un nuovo segnale per ottenere "
"rispettivamente le informazioni e gli aggiornamenti delle conferenze attuali"
" sono disponibili:"
#: ../../../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'oggetto `Conference` (che esiste solo se mischiamo le chiamate, questo "
"significa che siamo noi il maestro) gestisce le informazioni per l'intera "
"conferenza, basandosi sul layoutInfos di ciascun oggetto `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 ""
"Quindi, ogni oggetto `Call` ora ha una LayoutInfo e se aggiornato, chiedere "
"all'oggetto `Conference` di aggiornare le sue informazioni."
#: ../../../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 ""
"Il direttore di una conferenza invia le sue informazioni attraverso il "
"canale SIP come messaggio con il seguente tipo MIME: "
"`applicazione/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 ""
"Quindi, se una chiamata riceve qualche informazione confidenziale, sappiamo "
"che questa chiamata è un membro di una conferenza."
#: ../../../developer/conference-protocol.md:106
msgid ""
"To summarize, `Call` manages received layouts, `Conference`-managed sent "
"layouts."
msgstr ""
"In sintesi, `Call` gestisce le layout ricevute, `Conference` gestisce le "
"layout inviate."
#: ../../../developer/conference-protocol.md:108
msgid "Changing the state of the conference"
msgstr "Cambiare lo stato della conferenza"
#: ../../../developer/conference-protocol.md:110
msgid ""
"To change the state of the conference, participants needs to send orders "
"that the host will handle."
msgstr ""
"Per cambiare lo stato della conferenza, i partecipanti devono inviare ordini"
" che l'ospite gestirà."
#: ../../../developer/conference-protocol.md:112
msgid "The protocol have the following needs:"
msgstr "Il protocollo ha le seguenti esigenze:"
#: ../../../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 ""
"In realtà per una conferenza sono 3 i livelli per definire un partecipante:"
#: ../../../developer/conference-protocol.md:115
msgid "The account which is the identity of the participant"
msgstr "Il conto che costituisce l'identità del partecipante"
#: ../../../developer/conference-protocol.md:116
msgid "Devices, because each account can join via multiple devices"
msgstr "Dispositivi, perché ogni account può unirsi tramite più dispositivi"
#: ../../../developer/conference-protocol.md:117
msgid ""
"Medias, because there can be multiple videos by devices (eg 1 camera and 1 "
"screen sharing)"
msgstr ""
"Medi, perché possono esserci più video per dispositivo (ad esempio 1 "
"fotocamera e 1 condivisione dello schermo)"
#: ../../../developer/conference-protocol.md:119
msgid ""
"To save bandwidth, clients should be able to send multiple orders at once."
msgstr ""
"Per risparmiare larghezza di banda, i clienti dovrebbero essere in grado di "
"inviare più ordini contemporaneamente."
#: ../../../developer/conference-protocol.md:121
msgid "General actions"
msgstr "Azioni generali"
#: ../../../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 ""
"Per modificare un layout, il moderatore può inviare un carico utile con "
"\"applicazione/confOrder+json\" come tipo: dove **0** è una griglia, **1** è"
" un utente in grande, altri in piccolo, **2** è uno in grande"
#: ../../../developer/conference-protocol.md:126
msgid "Account's actions"
msgstr "Azioni del conto"
#: ../../../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 ""
"Per il momento, tuttavia, non vi è alcuna azione sostenuta, in futuro "
"`moderatore: true/false ` deve essere gestito per cambiare un moderatore."
#: ../../../developer/conference-protocol.md:130
msgid "Device's actions"
msgstr "Azioni del dispositivo"
#: ../../../developer/conference-protocol.md:132
msgid ""
"`hangup: true` to hangup a device from the conference (only moderators)"
msgstr ""
"`hangup: true` per appendere un dispositivo della conferenza (solo i "
"moderatori)"
#: ../../../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: true/false ` per modificare lo stato della mano elevata."
#: ../../../developer/conference-protocol.md:135
msgid "Media's actions"
msgstr "Le azioni dei media"
#: ../../../developer/conference-protocol.md:137
msgid ""
"`muteAudio` only doable by moderators to mute the audio of a participant"
msgstr ""
"\"disattiva microfono\" può essere fatto solo dai moderatori per disattivare"
" il microfono di un partecipante"
#: ../../../developer/conference-protocol.md:138
msgid "`muteVideo` not supported yet."
msgstr "\"disattiva videocamera\" non è ancora disponibile."
#: ../../../developer/conference-protocol.md:139
msgid "`active` to mark the media as active."
msgstr "`active` per segnalare i media come attivi."
#: ../../../developer/conference-protocol.md:140
msgid ""
"`voiceActivity` to indiciate a media stream's voice activity status (only "
"relevant for audio)"
msgstr ""
"`voiceActivity ` indicare lo stato dell'attività vocale di un flusso di "
"media (solo rilevante per l'audio)"
#: ../../../developer/conference-protocol.md:142
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "Example"
msgstr "Esempio"
#: ../../../developer/conference-protocol.md:144
msgid "So, the `application/confOrder+json` will contains:"
msgstr "Quindi, l'applicazione/confOrder+json` contiene:"
#: ../../../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 ""
"Nota: il tipo di supporto deve essere incluso nelle informazioni di "
"conferenze e può essere utilizzato per il cliente per migliorare la "
"visualizzazione (ad esempio non tagliare la condivisione dello schermo)"
#: ../../../developer/conference-protocol.md:172
msgid "Controlling moderators"
msgstr "Controllo dei moderatori"
#: ../../../developer/conference-protocol.md:174
msgid "There is actually 3 possibilities:"
msgstr "Ci sono in realtà 3 possibilità:"
#: ../../../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 ""
"Configurazione del conto di cambio per aggiungere un elenco di moderatori "
"(Nella config.yml (`defaultModerators` può contenere un elenco di moderatori"
" predefiniti)"
#: ../../../developer/conference-protocol.md:177
msgid ""
"If `localModeratorsEnabled` is true, all accounts of the device will be "
"moderators"
msgstr ""
"Se `localModeratorsEnabled` è vero, tutti gli account del dispositivo "
"saranno moderatori"
#: ../../../developer/conference-protocol.md:178
msgid ""
"If `allModeratorsEnabled` is true, anybody in the conference will be a "
"moderator"
msgstr ""
"Se `allModeratorsEnabled` è vero, chiunque nella conferenza sarà un "
"moderatore"
#: ../../../developer/conference-protocol.md:183
msgid "Separate streams to allow more controls?"
msgstr "Strumi separati per permettere più controlli?"
#: ../../../developer/conference-protocol.md:185
msgid "Notes/Comments"
msgstr "Nota/Commenti"
#: ../../../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 ""
"E' probabile che il protocollo si evolverà per le esigenze future. Credo che"
" sia meglio se abbiamo un campo \"versione\". La versione precedente sarà "
"riconosciuta se questo campo manca."
#: ../../../developer/connection-manager.md:1
msgid "The connection manager"
msgstr "Il gestore di connessione"
#: ../../../developer/connection-manager.md:4
#: ../../../developer/file-transfer.md:49 ../../../developer/introduction.md:1
#: ../../../developer/location-sharing.md:42
msgid "Introduction"
msgstr "Introduzione"
#: ../../../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 ""
"Il gestore di connessione è il primo pezzo delle funzionalità di chat di "
"gruppo. Questa classe gestisce le connessioni con i colleghi e offre "
"all'utente socket multiplexati ai dispositivi che vogliono connettere. Ad "
"esempio, se Alice vuole essere connessa a uno dei dispositivi di Bob per "
"trasferire 2 file, chiederà al gestore di connessione di aprire 2 canali "
"(uno per file) a Bob. Questo darà:"
#: ../../../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 ""
"Dietro a ciò, il ConnectionManager prima si connetterà al dispositivo di Bob"
" tramite il DHT (via ICE) e imposterà un TLS Socket. Poi, chiederà un "
"canale, e quando il canale è pronto, informare Alice tramite un callback. "
"Per il secondo file, userà il primo socket e aprirà un nuovo canale (bisogna"
" solo 2 pacchetti TLS, quindi è veloce)"
#: ../../../developer/connection-manager.md:26
msgid "DHT side"
msgstr "DHT lato"
#: ../../../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 ""
"È lo stesso di {doc}`call`, vedere **Exchange ICE candidate**, **ICE "
"negoziazione**, **Encripta il socket di controllo** ma solo in 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 ""
"Tuttavia, quando una parte riceve una nuova richiesta di ICE, viene attivato"
" il richiamo di ritorno impostato da ` nul "
"onICERequest(onICERequestCallback&&& cb);`."
#: ../../../developer/connection-manager.md:32
msgid "Negotiating a new channel"
msgstr "Negoziare un nuovo canale"
#: ../../../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 canale è definito da un id (unique) e un uri (non unico). ad esempio (1, "
"'git://*')"
#: ../../../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 ""
"Quando è pronto, il ConnectionManager considera che esiste il canale 0 che "
"viene chiamato canale CONTROL e viene utilizzato per richiedere nuovi "
"canali."
#: ../../../developer/connection-manager.md:38
msgid "The protocol used is pretty simple and looks like the RTP protocol:"
msgstr ""
"Il protocollo utilizzato è piuttosto semplice e assomiglia al protocollo "
"RTP:"
#: ../../../developer/connection-manager.md:40
msgid "16 bits are used to store the length of the body."
msgstr "16 bit vengono utilizzati per memorizzare la lunghezza del corpo."
#: ../../../developer/connection-manager.md:41
msgid "16 bits for the channel id (destination)"
msgstr "16 bit per l'id del canale (destinamento)"
#: ../../../developer/connection-manager.md:42
msgid "body"
msgstr "corpo"
#: ../../../developer/connection-manager.md:44
msgid "So all packets have a 32 bits len header."
msgstr "Quindi tutti i pacchetti hanno un len header a 32 bit."
#: ../../../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 ""
"Per richiedere un nuovo canale, il ConnectionManager invierà un "
"`ChannelRequest` oggetto (msgpack viene utilizzato per serializzare lo "
"strumento) nel canale 0 per inviare l'id e il nome del nuovo canale al peer "
"(con `isAnswer = false`). Il peer richiamerà il callback dato con ̀ void "
"onChannelRequest(ChannelRequestCallBack&& cb);` e rifiuterà o accetterà la "
"richiesta. Se accettata, il peer risponderà con un ChannelRequest con gli "
"stessi dati (e ̀`isAnswer = true`) e quindi saranno attivate le richieste di"
" ritorno di entrambi i peer per informare che il ChannelSock è utilizzabile."
#: ../../../developer/connection-manager.md:48
msgid "Closing a channel"
msgstr "Chiudere un canale"
#: ../../../developer/connection-manager.md:50
msgid ""
"A *EOF* is transmitted for a channel if the length of the content is 0."
msgstr ""
"Un *EOF* viene trasmesso per un canale se la lunghezza del contenuto è di 0."
#: ../../../developer/connection-manager.md:52
msgid "Structure of the connectionManager"
msgstr "Struttura della connessioneManager"
#: ../../../developer/connection-manager.md:54
msgid "Ownership"
msgstr "Proprietà"
#: ../../../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 account Jami possiede il ConnectionManager e ha accesso agli oggetti "
"ChannelSocket (shared_ptr posseduto con il MultiplexedSocket."
#: ../../../developer/connection-manager.md:57
msgid "The ConnectionManager owns MultiplexedSockets and ICE objects"
msgstr "Il ConnectionManager possiede gli oggetti MultiplexedSockets e ICE"
#: ../../../developer/connection-manager.md:58
msgid ""
"MultiplexedSockets owns the TLS transport and the ChannelSocket objects"
msgstr ""
"MultiplexedSockets possiede il trasporto TLS e gli oggetti ChannelSocket"
#: ../../../developer/connection-manager.md:59
msgid "ChannelSocket owns the data buffers"
msgstr "ChannelSocket possiede i buffer di dati"
#: ../../../developer/connection-manager.md:61
msgid "Roles"
msgstr "Ruoli"
#: ../../../developer/connection-manager.md:63
msgid "ConnectionManager is used to manage connections to peers."
msgstr ""
"ConnectionManager è utilizzato per gestire le connessioni con i coetanei."
#: ../../../developer/connection-manager.md:64
msgid ""
"MultiplexedSockets are used to send data over the TLSSocket, read the "
"incoming packets and manage channels."
msgstr ""
"MultiplexedSockets sono utilizzati per inviare dati tramite il TLSSocket, "
"leggere i pacchetti in arrivo e gestire i canali."
#: ../../../developer/connection-manager.md:65
msgid "ChannelSockets are used by the client to interact with the other peer."
msgstr ""
"ChannelSockets sono utilizzati dal cliente per interagire con l'altro pari."
#: ../../../developer/connection-manager.md:67 ../../../developer/swarm.md:620
msgid "Usage"
msgstr "Utilizzamento"
#: ../../../developer/connection-manager.md:69
msgid ""
"Scenarios are described in the corresponding unit tests "
"(`test/unitTest/connectionManager/connectionManager.cpp`)"
msgstr ""
"Gli scenari sono descritti nei corrispondenti test unitari "
"(`test/unitTest/connectionManager/connectionManager.cpp`)"
#: ../../../developer/contact-management.md:1
msgid "Contact management"
msgstr "Gestione dei contatti"
#: ../../../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 ""
"Questa sezione presenta come trovare e aggiungere un contatto dal DHT al "
"cliente. L'uso di un server di nome non sarà spiegato qui. Se si desidera "
"maggiori dettagli su questo, si prega di leggere {doc}`name-server-"
"protocol`."
#: ../../../developer/contact-management.md:6
msgid "Presence on the network"
msgstr "Presenza sulla rete"
#: ../../../developer/contact-management.md:8
msgid "Announce the presence on the DHT"
msgstr "Annunciare la presenza sul 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 presenza è abbastanza semplice da annunciare sul DHT. In realtà, è solo "
"un valore contenente il hash del dispositivo (vedi la sezione precedente, "
"{doc}`account-management`) sul hash corrispondente all'impronta digitale "
"della chiave. Quindi, se abbiamo il conto "
"`bf5f1e21d3eb2c1246946aa49d5dcf3e5b9cb1b9` con il dispositivo "
"`62fbdff0ce86f368c7d3c2682539e5ba9e06404f`, il seguente valore definito "
"verrà inviato sul 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 ""
"(Questo valore può essere inserito con `dht_.put(h, VALUE, "
"dht::DoneCallback{}, {}, true);`, come un permanente). Se il dispositivo è "
"annunciato, il dispositivo è presente. Per ora, non c'è modo di eliminare o "
"modificare un valore sul DHT (questo arriverà quando OpenDHT supporterà "
"ECC). Quindi, la presenza ha sempre un ritardo per ora (ritardo medio: "
"scadenza-tempo/2, quindi 2min30 per ora)."
#: ../../../developer/contact-management.md:31
msgid "Get if a contact is present"
msgstr "Chiama se c' è un contatto"
#: ../../../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 ""
"Ora la nostra presenza sulla rete, è il momento di ottenere se qualcuno è "
"presente sul DHT. Con la sezione precedente, è facile fare il processo "
"inverso. Per sapere se qualcuno è presente sul DHT (es: "
"`bf5f1e21d3eb2c1246946aa49d5dcf3e5b9c1b9`), dobbiamo ottenere il valore a "
"`bf5f1e21d3eb2c1246946aa49d5dcf3e5b9cb1b9` e recuperare il `DeviceAnuncio ` "
"su questo hash. Il codice correlato nel daemon ringring è in `ccount.cpp`:"
#: ../../../developer/contact-management.md:66
msgid "And that's all."
msgstr "E basta."
#: ../../../developer/contact-management.md:68
msgid "Client perspective"
msgstr ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../developer/contact-management.md:141
msgid ""
"`lineStatus` will contain any custom status sent by the peer (e.g. *Lunch "
"Time!*)"
msgstr ""
#: ../../../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 ""
#: ../../../developer/contact-management.md:145
msgid "RFC3863 is used to send status over the SIP connection."
msgstr ""
#: ../../../developer/contact-management.md:147
msgid "Pending request"
msgstr "In attesa"
#: ../../../developer/contact-management.md:149
msgid "Send a request"
msgstr "Invia una richiesta"
#: ../../../developer/contact-management.md:151
msgid "**TODO craft request**"
msgstr "** Richiesta di imbarcazioni 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 ""
"Infine, una volta che la richiesta di fiducia è stata elaborata, possiamo "
"spingere la richiesta al seguente hash: `InfoHash(\"inbox:\" + deviceId) `"
#: ../../../developer/contact-management.md:155
msgid "The following code is used in the daemon:"
msgstr "Il seguente codice è utilizzato nel daemon:"
#: ../../../developer/contact-management.md:160
msgid "Receiving a request"
msgstr "Ricezione di una richiesta"
#: ../../../developer/contact-management.md:164
msgid "(Accept/Block/Discard)"
msgstr "(Accettazione/blocco/rifiuto)"
#: ../../../developer/contact-management.md:166
msgid "Daemon API"
msgstr "Daemon API"
#: ../../../developer/contact-management.md:168
msgid ""
"All methods to follow the presence of a buddy is located in the "
"`PresenceManager` such as:"
msgstr ""
"Tutti i metodi per seguire la presenza di un amico si trovano nel "
"`PresenceManager` come:"
#: ../../../developer/contact-management.md:199
msgid ""
"All methods and signals used to manage trust requests and contacts are in "
"the `ConfigurationManager` such as:"
msgstr ""
"Tutti i metodi e i segnali utilizzati per gestire le richieste di fiducia e "
"i contatti sono presenti nel `ConfigurationManager` quali:"
#: ../../../developer/contact-management.md:291
msgid ""
"If you want some examples, these methods are used into `contactmodel.cpp` in"
" LRC."
msgstr ""
"Se si desidera alcuni esempi, questi metodi vengono utilizzati in "
"`contactmodel.cpp` in LRC."
#: ../../../developer/debugging-tools.rst:2
msgid "Debugging Tools"
msgstr "Strumenti di debug"
#: ../../../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 ""
"Ci sono diversi modi per difettare Jami da un punto di vista dello "
"sviluppatore, a seconda di quello che si vuole difettare."
#: ../../../developer/debugging-tools.rst:7
msgid "Loggers"
msgstr "Legnario"
#: ../../../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 ""
"Il primo modo è quello di utilizzare i logger runtime. Iniziando `jami` con "
"`-d` permetterà di registrare il logging da parte del deamon (o la sezione "
"Soluzione dei problemi nelle impostazioni generali). Poiché Jami utilizza "
"diverse librerie, non abbiamo abilitato tutti i log per impostazione "
"predefinita. Ma puoi passare alcune variabili ambientali per mostrarlo:"
#: ../../../developer/debugging-tools.rst:13
msgid "`SIPLOGLEVEL=5` for enabling logs from PJSIP."
msgstr "`SIPLOGLEVEL=5` per l'accesso ai registri da PJSIP."
#: ../../../developer/debugging-tools.rst:14
msgid "`DHTLOGLEVEL=5` for enabling logs from OpenDHT."
msgstr "`DHTLOGLEVEL=5` per l'accesso ai registri da OpenDHT."
#: ../../../developer/debugging-tools.rst:15
msgid "`AVLOGLEVEL=50` for enabling logs from ffmpeg."
msgstr "`AVLOGLEVEL=50` per l'accesso ai registri di ffmpeg."
#: ../../../developer/debugging-tools.rst:18
msgid "Debuggers"
msgstr "Dispositori di errori"
#: ../../../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 ""
"Generalmente l'IDE ha un debugger incorporato. Altrimenti, è possibile "
"utilizzare `gdb` per ad esempio aggiungere punti di interruzione, backtrace "
"da crash, stampa di strutture interne, ecc. È necessario compilare il "
"progetto in modalità *DEBUG* per ottenere i simboli di debug."
#: ../../../developer/debugging-tools.rst:24
msgid "Some useful commands:"
msgstr "Alcuni comandi utili:"
#: ../../../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` - Aggiungere un punto di interruzione (*file.cpp:line* può"
" essere sostituito da un simbolo)"
#: ../../../developer/debugging-tools.rst:27
msgid "`t a a bt` - (thread apply all backtrace) to get all backtraces"
msgstr ""
"`t a a bt` - (filamento applicare tutte le tracce) per ottenere tutte le "
"tracce"
#: ../../../developer/debugging-tools.rst:28
msgid "`Ctrl + X / A` - pass in graphical view"
msgstr "`Ctrl + X / A` - passare nella visualizzazione grafica"
#: ../../../developer/debugging-tools.rst:29
msgid "`p` - print an internal value."
msgstr "`p` - stampare un valore interno."
#: ../../../developer/debugging-tools.rst:32
msgid "Profilers"
msgstr "Profili"
#: ../../../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 ""
"I debuggers sono utili, ma non mostrano il consumo di memoria in tempo reale"
" / attività di rete / utilizzo del CPU. Per questo, è possibile utilizzare "
"il profiler incorporato nel vostro IDE (da Android Studio o Qt Creator / "
"Visual Studio per esempio)."
#: ../../../developer/debugging-tools.rst:39
msgid "Address Sanitizer"
msgstr "Indirizzo Sanitario"
#: ../../../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 ""
"Questo può essere utile per rilevare perdite, incidenti, potenziali blocchi "
"ciechi durante il tempo di esecuzione. Per consentire questo, è possibile "
"compilare il daemon con `CXXFLAGS+=\"-fsanitize=address\"`. Altri bandiere "
"come `tsan` possono essere utili."
#: ../../../developer/debugging-tools.rst:45
msgid "Valgrind/Callgrind"
msgstr "Valgrind/Callgrind"
#: ../../../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 è uno strumento per monitorare le allocazioni, l'utilizzo della CPU"
" e altro e può essere utilizzato tramite: `valgrind --tool=callgrind./jami "
"-d`. Questo renderà l'applicazione molto lenta ma può fornire utili rapporti"
" sull'utilizzo della memoria allocazione / prestazioni (**KCacheGrind** può "
"essere utilizzato per leggere i rapporti)."
#: ../../../developer/debugging-tools.rst:52
msgid "Tests"
msgstr "Test"
#: ../../../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 ""
"Daemon ha molte prove e copertura abilitate. Se il daemon è costruito in "
"statico (altri simboli privati non saranno disponibili), l'aggiunta di nuovi"
" test può aiutare a riprodurre bug, risolvere bug ed evitare qualsiasi "
"regressione."
#: ../../../developer/debugging-tools.rst:59
msgid "Agent"
msgstr "Agente."
#: ../../../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 ""
"I test utilizzano solo un daemon per simulare entrambi i pari. Quindi può "
"essere difficile testare in vari ambienti. Un'altra possibilità è di "
"scrivere uno scenario e eseguire un agente (la documentazione è disponibile "
"nel repository del daemon)."
#: ../../../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 ""
"Infine, i tracepoint possono essere creati e analizzati. "
"`daemon/tools/trace` forniscono la documentazione e alcuni esempi. Il "
"vantaggio di LTTng è che è più veloce dei registri, può essere attivato da "
"eventi del sistema e può essere utilizzato con tracepoint già presenti nel "
"kernel (in modo da poter essere utilizzato con tracepoint da interfacce di "
"rete)."
#: ../../../developer/delivery-status.md:1
msgid "Synchronization of delivery status"
msgstr ""
#: ../../../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 ""
#: ../../../developer/delivery-status.md:5
msgid "How it works (backend)"
msgstr ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 "Processo"
#: ../../../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 ""
#: ../../../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 ""
#: ../../../developer/drt.rst:6
msgid ""
"Therefore, we require a structural framework that accomplishes the following"
" objectives:"
msgstr ""
#: ../../../developer/drt.rst:8
msgid "Maximizes the number of connected nodes at all times."
msgstr ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../developer/drt.rst:56
msgid ""
"Every node is aware of its successors and predecessors in the Chord network."
msgstr ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../developer/drt.rst:85
msgid "Distance is: :math:`d(n1,n2,) = (prefix(n1) - prefix(n2)) mod 2b`"
msgstr ""
#: ../../../developer/drt.rst:88
msgid "Size of the routing table: :math:`(2b - 1)log{_2}{N}`"
msgstr ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../developer/drt.rst:106
msgid ""
"To retrieve a specific value, a node sends a request to the nearest node "
"with the corresponding hash."
msgstr ""
#: ../../../developer/drt.rst:108
msgid "Distance is :math:`d(n1, n2,) = n1 XOR n2`"
msgstr ""
#: ../../../developer/drt.rst:111
msgid "Size of the routing table: :math:`K \\times log{_2}{N}`"
msgstr ""
#: ../../../developer/drt.rst:114
msgid "Number of hops: :math:`log{_2}{N}`"
msgstr ""
#: ../../../developer/drt.rst:117
msgid "where b is generally 1."
msgstr ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../developer/drt.rst:126
msgid ""
"The routing table is subsequently updated whenever an event occurs on a "
"node."
msgstr ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 "Richieste di funzionalità"
#: ../../../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 ""
"Questa pagina esiste per classificare le richieste di funzionalità per "
"feedback degli utenti, per evitare di lasciare i biglietti aperti per anni."
#: ../../../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}`Implementare il tubo <13> per supportare la condivisione "
"dello schermo su Wayland` -> Contatto #Jami (Adrien, Sébastien, ecc.) / hard"
" / In corso"
#: ../../../developer/feature-requests.md:12
msgid "Connectivity -> Contact #Jami (Sébastien) / medium:"
msgstr "Connettività -> Contatto #Jami (Sébastien) / mezzo:"
#: ../../../developer/feature-requests.md:13
msgid "TURN ipv6 support"
msgstr "Supporto di ipv6 di TURN"
#: ../../../developer/feature-requests.md:14
msgid "connection ipv6 only<->ipv4 only"
msgstr "connessione ipv6 solo<->ipv4 solo"
#: ../../../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 "Fix IP a IP -> Contatta #Jami (Adrien, Sébastien) / facile"
#: ../../../developer/feature-requests.md:17
msgid "Add unit-tests / probably easy"
msgstr "Aggiungere test unitari / probabilmente 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 ""
"Ricerca nei contatti del sistema ({client-gnome-issue}`1191`, {client-gnome-"
"issue}`829`, ecc.) -> Contatto #Jami (Adrien, Sébastien, Andreas, ecc.) / "
"facile ma lungo"
#: ../../../developer/feature-requests.md:21
msgid "Crypto: (Contact #Jami - Adrien)"
msgstr "Crypto: (conto #Jami - Adrien)"
#: ../../../developer/feature-requests.md:22
msgid "Update media RTP ciphers for ffmpeg / probably easy"
msgstr "Aggiornare i codici RTP media per ffmpeg / probabilmente facile"
#: ../../../developer/feature-requests.md:23
msgid "Support ECC (instead RSA) for Jami accounts / hard but short"
msgstr "Supporto ECC (invece di RSA) per i conti Jami / duro ma breve"
#: ../../../developer/feature-requests.md:24
msgid "Remove usages of SHA1 (ids + git) / hard"
msgstr "Elimina gli usi di SHA1 (ids + git) / hard"
#: ../../../developer/feature-requests.md:25
msgid "Media -> Contact #Jami (Adrien, Andreas, etc.)"
msgstr "Media -> Contatto #Jami (Adrien, Andreas, ecc.)"
#: ../../../developer/feature-requests.md:26
msgid "{daemon-issue}`POC for AV1 support <27>` / probably hard"
msgstr "{daemon-issues}`POC per AV1 supporto <27>` / probabilmente difficile"
#: ../../../developer/feature-requests.md:27
msgid "Investigate audio quality (contact #Jami, medium difficulty)"
msgstr "Investigare la qualità dell'audio (conto #Jami, difficoltà media)"
#: ../../../developer/feature-requests.md:28
msgid "Plugins ideas: (Contact #Jami - Aline)"
msgstr "Idee di plugin: (Contacco #Jami - Aline)"
#: ../../../developer/feature-requests.md:29
msgid "{plugins-issue}`Payment plug-in <27>`"
msgstr ""
"Il pagamento è stato effettuato con il pagamento di un'offerta di pagamento."
#: ../../../developer/feature-requests.md:30
msgid "A chat-GPT plugin"
msgstr "Un plugin per chat-GPT"
#: ../../../developer/feature-requests.md:31
msgid "Add new transports (e.g. QUIC?)"
msgstr "Aggiungere nuovi trasporti (ad esempio QUIC?)"
#: ../../../developer/feature-requests.md:32
msgid "Add libtorrent support?"
msgstr "Aggiungi un supporto libertorente?"
#: ../../../developer/feature-requests.md:33
msgid ""
"Public page/personal blog available through Jami (Contact #Jami / medium "
"difficulty & long term project)"
msgstr ""
"Pagina pubblica/blog personale disponibile tramite Jami (Contact #Jami / "
"difficoltà medie e progetto a lungo termine)"
#: ../../../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}`Add support per la scoperta dei pari<868>` (conto #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 come componente nativo per evitare di dipendere da qt-webengine per "
"questo (non disponibile su macOS) (ad esempio "
"https://github.com/jnodev/QMLemoji)"
#: ../../../developer/feature-requests.md:39
msgid ""
"Categorized conversations (like favorites, groups, etc) (to discuss with "
"#Jami)"
msgstr ""
"Conversazioni categorizzate (come preferite, gruppi, ecc.) (per discutere "
"con #Jami)"
#: ../../../developer/feature-requests.md:40
msgid "jami-web:"
msgstr "jami-web:"
#: ../../../developer/feature-requests.md:41
msgid ""
"Design architecture to support calls between jami-web and desktop versions "
"-> Contact #Jami (Adrien, Sébastien) / hard"
msgstr ""
"Architettura di progettazione per supportare le chiamate tra versioni jami-"
"web e desktop -> Contatto #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 ""
"Aiuto per la Roadmap 2023: "
"https://git.jami.net/groups/savoirfairelinux/-/epics/48"
#: ../../../developer/feature-requests.md:46
msgid "Some other ideas from tickets:"
msgstr "Altre idee dei biglietti:"
#: ../../../developer/feature-requests.md:48
msgid "Planned/In progress"
msgstr "Progetto/in corso"
#: ../../../developer/feature-requests.md:50
msgid ""
"Improve Jami on Yocto (some codecs problems/lag on i.MX 6) -> Contact Rennes"
msgstr ""
"Migliorare Jami su Yocto (alcuni problemi/arretrato dei codec su i.MX 6) -> "
"Contatta 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) -> Contatto #Jami (Andreas)"
#: ../../../developer/feature-requests.md:54
msgid "Redo emoji-picker with native component"
msgstr "Redo emoji-picker con componente nativo"
#: ../../../developer/feature-requests.md:55
msgid "Implement designs from Charlotte"
msgstr "Progetti di realizzazione di Charlotte"
#: ../../../developer/feature-requests.md:56
msgid "Help for swarms (Sébastien)"
msgstr "Aiuto per gli sciami (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-project}`jami-web`; perché installare un'app può essere noioso."
#: ../../../developer/feature-requests.md:61
msgid "Wanted but not planned"
msgstr "Voluta ma non prevista"
#: ../../../developer/feature-requests.md:63
#: ../../../developer/feature-requests.md:93
msgid "?"
msgstr "- Non è vero."
#: ../../../developer/feature-requests.md:65
msgid ""
"Can be implemented, contributions welcome (or will take months/years to "
"come)"
msgstr ""
"Può essere attuato, i contributi sono benvenuti (o richiederanno mesi/anni)"
#: ../../../developer/feature-requests.md:67
msgid ""
"{project-issue}`add possibility to show \"reachable at the following times\""
" (contact details) <1261>`"
msgstr ""
"{project-issue}` aggiungere la possibilità di mostrare \"accessibile alle "
"ore seguenti\" (dettagli di contatto) <1261>`"
#: ../../../developer/feature-requests.md:69
msgid ""
"{project-issue}`Preferences per contact (allow calls, file transfer, custom "
"ringtone) <1280>`"
msgstr ""
"{project-issue}`Preferenze per contatto (autorizzare chiamate, trasferimento"
" di file, suono suonatore personalizzato) <1280>`"
#: ../../../developer/feature-requests.md:71
msgid ""
"{project-issue}`Ability to create polls (ideally a plugin with swarm) "
"<1254>`"
msgstr ""
"{project-issue}`Capacità di creare sondaggi (idealmente un plugin con "
"sciame) <1254>`"
#: ../../../developer/feature-requests.md:73
msgid "{project-issue}`Support for Panic buttons <623>`"
msgstr "{project-issue}`Supporto per i pulsanti di panico <623>`"
#: ../../../developer/feature-requests.md:74
msgid "Matrix bridge"
msgstr "Ponte 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 ""
"Supporto completo al TOR o altre alternative come lokinet ({progetto-"
"soprazione}`922`, {progetto-soprazione}`622`, {progetto-soprazione}`495`), "
"{progetto-soprazione}`i2p <630>`"
#: ../../../developer/feature-requests.md:78
msgid "{project-issue}`Bluetooth support <774>`"
msgstr "`Supporto Bluetooth <774> `"
#: ../../../developer/feature-requests.md:79
msgid "{project-issue}`Secret-based turn server <886>`"
msgstr "{project-issue}`Secret-based turn server <886>`"
#: ../../../developer/feature-requests.md:80
msgid "{client-android-issue}`Ability to compress files before sending <720>`"
msgstr ""
"{client-android-issue}`Capacità di comprimere i file prima di inviare <720>`"
#: ../../../developer/feature-requests.md:82
msgid "Ability to trim recorded clips before sending"
msgstr "Capacità di tagliare i clip registrati prima di inviare"
#: ../../../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 "Echo bot per testare l'audio"
#: ../../../developer/feature-requests.md:85
msgid ""
"{project-issue}`Handle click on jami:uri system wide (missing "
"macOS/Android/iOS) <653>`"
msgstr ""
"{project-issue}`Clicca manualmente su jami:uri sistema (manca "
"macOS/Android/iOS) <653>`"
#: ../../../developer/feature-requests.md:86
msgid ""
"{project-issue}`Initial audio mode <1288>` (need to wait for group chat)"
msgstr ""
"{project-issue}`Modo audio iniziale <1288>` (bisogna aspettare la chat di "
"gruppo)"
#: ../../../developer/feature-requests.md:88
msgid "{project-issue}`Feature Request: Volume Slider <1524>`"
msgstr "{progetto-emissione}`Figurazione richiesta: Volume Slider <1524>`"
#: ../../../developer/feature-requests.md:89
msgid "{client-qt-issue}`Portable version for Windows <170>`"
msgstr "{client-qt-issue}`Versione portatile per Windows <170>`"
#: ../../../developer/feature-requests.md:91
msgid "Depends on mass changes"
msgstr "Dipende dalle variazioni di massa"
#: ../../../developer/feature-requests.md:95
#: ../../../developer/release-process.md:0
#: ../../../developer/release-process.md:59
msgid "Packaging"
msgstr "Imballaggio"
#: ../../../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 "Altri"
#: ../../../developer/feature-requests.md:101
msgid "{project-issue}`Collaborative editor <1010>`"
msgstr "{project-issue}`Editore collaborativo <1010>`"
#: ../../../developer/feature-requests.md:102
msgid "{project-issue}`A thunderbird plugin <516>`"
msgstr "Un plug-in di \"Tonnerbird\""
#: ../../../developer/feature-requests.md:103
msgid "{project-issue}`OpenAlias <928>`"
msgstr "{project-issue}`OpenAlias <928>`"
#: ../../../developer/feature-requests.md:104
msgid "{project-issue}`CMIS integration <455>`"
msgstr "{project-issue}`integrazione del CMIS <455>`"
#: ../../../developer/feature-requests.md:105
msgid "{project-issue}`Sound safety <441>`"
msgstr "{project-issue}`Sicurezza del suono <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à di vedere più chat contemporaneamente <909>`"
#: ../../../developer/feature-requests.md:107
msgid "{client-gnome-issue}`Vocoder option <957>`"
msgstr "{client-gnome-issue}`Vocoder opzione <957>`"
#: ../../../developer/feature-requests.md:108
msgid "{project-issue}`SOCKS5 support <430>`"
msgstr "{project-issue}`SOCKS5 sostegno <430>`"
#: ../../../developer/feature-requests.md:109
msgid "{project-issue}`Cardbook integration <383>`"
msgstr "{project-issue}`integrazione del libro di carte <383>`"
#: ../../../developer/feature-requests.md:110
msgid "{project-issue}`Multiple instances running <629>`"
msgstr "{project-issue}`Multiplici istanze in esecuzione <629>`"
#: ../../../developer/feature-requests.md:111
msgid "{daemon-issue}`Whiteboard <181>`"
msgstr "Il quadro bianco"
#: ../../../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 "Reazione emoji nelle chiamate <497>"
#: ../../../developer/feature-requests.md:114
msgid "{client-android-issue}`Conversation's background <710>`"
msgstr "{client-android-issue}`Conversare background <710>`"
#: ../../../developer/feature-requests.md:115
msgid "{project-issue}`[Desktop] Option to have a Window per Chat <633>`"
msgstr ""
"{project-issue}`[Desktop] Opzione di avere una finestra per Chat <633>`"
#: ../../../developer/feature-requests.md:116
msgid "{project-issue}`Multiple text selection <1096>`"
msgstr "{project-issue}`Selezione di testo multiplo <1096>`"
#: ../../../developer/feature-requests.md:117
msgid "{project-issue}`In-app sticker pack creation <1317>`"
msgstr "{project-issue}`In-app creazione di pack di adesivi <1317>`"
#: ../../../developer/feature-requests.md:118
msgid "{project-issue}`Re-order messages <1357>`"
msgstr "{progetto-emissione}`Riordini di messaggi <1357>`"
#: ../../../developer/feature-requests.md:119
msgid "{daemon-issue}`Remote control <349>`"
msgstr "Il controllo remoto"
#: ../../../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}`Messaggi bloccati (funzione che può essere abilitata "
"a nascondere i messaggi fino a quando non vengono cliccati) <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 "Trasferimento di file"
#: ../../../developer/file-transfer.md:4
msgid "**THIS PAGE IS DEPRECATED: READ {ref}`developer/swarm:File transfer`**"
msgstr ""
"**QUESTA PAGINA È DEPREDITA: LEGGI {ref}`developer/swarm:file transfer`**"
#: ../../../developer/file-transfer.md:7
#: ../../../developer/location-sharing.md:4
msgid "How to use it?"
msgstr "Come usarlo?"
#: ../../../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 ""
"Per inviare un file su gnome, in una conversazione è necessario fare clic "
"sull'icona inviare file in basso a destra della conversazione:"
#: ../../../developer/file-transfer.md:15
msgid ""
"![Gnome_send_file](https://git.jami.net/savoirfairelinux/jami-"
"project/uploads/e7571789effe8641f5ff4117e47f89dd/Gnome_send_file.png)"
msgstr ""
"Il progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di approvazione del "
"progetto di approvazione del progetto di approvazione del progetto di "
"approvazione del progetto di approvazione del progetto di"
#: ../../../developer/file-transfer.md:15
msgid "Gnome_send_file"
msgstr "Gnome_send_file"
#: ../../../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 ""
"Poi vedrai la tua immagine non appena il trasferimento è finito (e le "
"immagini di visualizzazione sono attivate)"
#: ../../../developer/file-transfer.md:20
msgid ""
"![Gnome_image](https://git.jami.net/savoirfairelinux/jami-"
"project/uploads/cc03387d134a9aa71c6deb60ccf53ed8/Gnome_image.png)"
msgstr "(Gnome_image)"
#: ../../../developer/file-transfer.md:20
msgid "Gnome_image"
msgstr "Gnome_image"
#: ../../../developer/file-transfer.md:22
msgid ""
"On the contrary if you receive a file (and if it's not a picture &lt; 20 "
"Mb), you will have to accept the transfer:"
msgstr ""
"Al contrario, se ricevi un file (e se non è un'immagine &lt; 20 Mb), dovrai "
"accettare il trasferimento:"
#: ../../../developer/file-transfer.md:25
msgid ""
"![Gnome_accept](https://git.jami.net/savoirfairelinux/jami-"
"project/uploads/29dd852e062e7bcbcb654e4e7e3f8e47/Gnome_accept.png)"
msgstr "- [Gnome_accept]"
#: ../../../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 ""
"E poi il file verrà inviato, e avrete la possibilità di annullare in mezzo "
"al trasferimento."
#: ../../../developer/file-transfer.md:30
msgid ""
"![Gnome_ongoing](https://git.jami.net/savoirfairelinux/jami-"
"project/uploads/92f319f8a88f75c388020d999f607bdc/Gnome_ongoing.png)"
msgstr "- (Gnome_ongoing)"
#: ../../../developer/file-transfer.md:30
msgid "Gnome_ongoing"
msgstr "Gnome in corso"
#: ../../../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 ""
"Quando parli con qualcuno su Android, hai la possibilità di inviare una foto"
" sul tuo dispositivo o scattare una foto con questi pulsanti:"
#: ../../../developer/file-transfer.md:37
msgid ""
"![Android_file_buttons](https://git.jami.net/savoirfairelinux/jami-"
"project/uploads/d68472b2c7bfcc616b0c674c9c7a8fed/Android_file_buttons.png)"
msgstr "! [botoni di file di Android]"
#: ../../../developer/file-transfer.md:37
msgid "Android_file_buttons"
msgstr "Android_file_buttons"
#: ../../../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 ""
"Nota: quando inviate un file, l'altro deve accettarlo. In questo momento "
"vedrete 'peer in attesa':"
#: ../../../developer/file-transfer.md:42
msgid ""
"![Android_awaiting_peer](https://git.jami.net/savoirfairelinux/jami-"
"project/uploads/56f0316c945ca243448668ae9091b1de/Android_awaiting_peer.png)"
msgstr ""
"! [Android_waiting_peer](https://git.jami.net/savoirfairelinux/jami-"
"project/uploads/56f0316c945ca243448668ae9091b1de/Android_waiting_peer.png)"
#: ../../../developer/file-transfer.md:42
msgid "Android_awaiting_peer"
msgstr "Android_waiting_peer"
#: ../../../developer/file-transfer.md:44
#: ../../../developer/location-sharing.md:39
msgid "How it works? (technical)"
msgstr "Come funziona?"
#: ../../../developer/file-transfer.md:47
msgid "How it works"
msgstr "Come funziona"
#: ../../../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 è un'applicazione distribuita e deve funzionare senza alcuna "
"connessione internet. Quindi, anche il trasferimento di file! in pratica, "
"usiamo lo stesso metodo per eseguire il trasferimento di file e le chiamate,"
" ma in TCP. Per riassumere come funziona, possiamo immaginare una situazione"
" in cui Alice (A) vuole trasferire un file a 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 ""
"Per farlo, Jami sta usando ICE (RFC 6544), un protocollo utilizzato per "
"negoziare i collegamenti tra pari. Alice invierà, in un pacchetto "
"crittografato tramite il DHT l'ip del suo dispositivo. Quindi, quando Bob "
"riceverà gli ips di Alice, saranno in grado di negoziare un trasporto in cui"
" Bob sarà in grado di inviare i pacchetti ad Alice. Il negoziato può essere "
"successo, ma se fallirà, un server TURN sarà utilizzato (quello configurato "
"nelle impostazioni) per eseguire il trasferimento. Se il negoziato riesce, "
"Bob invierà i suoi ips ad Alice per eseguire la negoziazione nell'altra "
"direzione."
#: ../../../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 ""
"Ora che il collegamento TCP bidirezionale è qui, il passo successivo sarà "
"quello di negoziare un TLS 1.3 (generalmente un (TLS1.3)-DHE-FFDHE8192)-RSA-"
"PSS-RSAE-SHA384)-AES-256-GCM) quando scrivo queste righe) tra Alice e Bob, "
"poi Alice inizierà a trasferire il file."
#: ../../../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 prima parte sarà un piccolo intestazione per descrivere il contenuto del "
"file."
#: ../../../developer/file-transfer.md:61
msgid "Sending a file"
msgstr "Invio di un file"
#: ../../../developer/file-transfer.md:63
msgid "The following method is used:"
msgstr "Si utilizza il seguente metodo:"
#: ../../../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 cliente chiamera' `DataTransferFacade::sendFile() `. "
"`DataTransferFacade` è la classe corrispondente all'API esposta per i "
"clienti. È utilizzato per gestire una vista dei trasferimenti di file (le "
"classi corrispondenti sono `DataTransfer`, `IncomingFileTransfer`, "
"`OutgoingFileTransfer` e `SubOutgoingFileTransfer`). Questo metodo chiederà "
"al collegato `JamiAccount` di richiedere una connessione."
#: ../../../developer/file-transfer.md:67
msgid ""
"![Diagram: DataTransfer class diagram]images/file-transfer-datatransfer-"
"class-diagram.png)"
msgstr ""
"![Diagramma: Diagramma di classe di trasferimento dati]images/file-transfer-"
"dataatransfer-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\\. Il metodo `DhtPeerConnector: requestConnection() ` viene attivato e "
"crea una connessione tra tutti i dispositivi collegati del peer (trovati sul"
" DHT). `DhtPeerConnector` viene utilizzato per gestire il loop di evento "
"principale che gestisce le connessioni. Quando viene trovato un dispositivo,"
" il *event loop* creerà un `ClientConnector` (che gestisce la connessione "
"per un dispositivo) e lancerà il metodo `process) `."
#: ../../../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\\. Questo metodo viene utilizzato per avviare il trasporto ICE e inserire "
"un *PeerConnectionMsg* (che contiene il messaggio SDP, vedere sotto) sul DHT"
" e attendere una risposta (`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\\. Poi viene ricevuta una risposta dal DHT, che contiene indirizzi "
"pubblici del dispositivo peer. Ora possiamo negoziare un collegamento TLS "
"(direttamente tramite ICE, o tramite TURN come fallback). Questo "
"`TlsSocketEndpoint` viene dato all'oggetto `PeerConnection` come output e il"
" trasferimento può iniziare."
#: ../../../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 ""
"Quando la presa TLS è pronta, viene chiamata la callback "
"`DataTransferFacade::Impl::onConnectionRequestReply`, e un "
"`OutgoingFileTransfer` è collegato alla `PeerConnection` come input. Questo "
"`OutgoingFileTransfer` contiene un elenco di `SubOutgoingFileTransfer` (uno "
"per dispositivo) in cui ogni sotto-trasferimento è un trasferimento a un "
"dispositivo. Lo facciamo per poter fornire la visione più ottimista del "
"trasferimento (se un contatto come 3 dispositivi, in cui il contatto annulla"
" il trasferimento su un dispositivo, ma ha accettato il trasferimento su gli"
" altri due, verrà mostrato il trasferimento più avanzato)."
#: ../../../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\\. Il `SubOutgoingFileTransfer` trasferirà prima l'intestazione del file, "
"attenderà l'accettazione da parte dei colleghi (un messaggio \"GO\\n\" sul "
"socket) e poi invierà il file."
#: ../../../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\\. Se viene ricevuta una cancellazione dal peer o dal cliente o se il "
"trasferimento di file termina, la connessione verrà chiusa tramite un "
"messaggio `CANCEL` sul `DhtPeerConnector::eventLoop() ` e le risorse saranno"
" rilasciate."
#: ../../../developer/file-transfer.md:81
msgid ""
"![TLSsocketEndpoint](images/file-transfer-tlssocketendpoint-diagram.png)"
msgstr ""
"! [TLSsocketEndpoint](immagini/file-transfer-tlssocketendpoint-diagram.png)"
#: ../../../developer/file-transfer.md:81
msgid "TLSsocketEndpoint"
msgstr "TLSsocketEndpoint"
#: ../../../developer/file-transfer.md:83
msgid "Receiving a file"
msgstr "Ricezione di un file"
#: ../../../developer/file-transfer.md:86
msgid ""
"The same structure is used to receive files, but the method changes a bit:"
msgstr ""
"La stessa struttura viene utilizzata per ricevere file, ma il metodo cambia "
"un po':"
#: ../../../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` viene utilizzata per ricevere i messaggi dal DHT, "
"perché la prima cosa ricevuta sarà la richiesta DHT."
#: ../../../developer/file-transfer.md:89
msgid ""
"Then, this message is given to `DhtPeerConnector: onRequestMessage()` "
"through the eventLoop."
msgstr ""
"In seguito, questo messaggio viene trasmesso a `DhtPeerConnector: "
"onRequestMessage() ` attraverso l'eventLoop."
#: ../../../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 ""
"Il `DhtPeerConnector::Impl::answerToRequest` cercherà di connettersi al "
"server TURN (se non collegato) e inizializzarà il trasporto ICE. Questo "
"metodo aprirà 2 connessioni di controllo a un server TURN (uno per "
"autorizzare i colleghi IPv4, un altro per i colleghi IPv6, a causa di **RFC "
"6156**) se non è già aperto e consentirà agli indirizzi pubblici Peer di "
"connettersi. Quindi, se l'SDP ricevuto non contiene candidati ICE, "
"utilizzerà il TURN e elaborerà la risposta SDP per aspettare il "
"collegamento. Se l'SDP contiene i candidati ICE, il metodo cercherà di "
"negoziare il collegamento (o di tornare indietro sul TURN) e quindi "
"rispondere allo SDP (con i candidati ICE o meno)."
#: ../../../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 ""
"Una volta che i collegamenti sono pronti, come il mittente, un collegamento "
"TLS viene negoziato e dato alla `PeerConnection` dato alla "
"`IncomingFileTransfer` come input."
#: ../../../developer/file-transfer.md:93
msgid "Re-ask for a previous file transfer"
msgstr "Richiedere un trasferimento di file precedente"
#: ../../../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 ""
"Come specificato in {ref}`developer/swarm:Other mime types`, le interazioni "
"di trasferimento dei dati vengono ora sincronizzate e memorizzate in "
"conversazioni. Quindi, un dispositivo può facilmente rilevare se un file è "
"stato scaricato o meno. Se non lo è, può chiedere a tutti i membri della "
"conversazione di trasmettere nuovamente il file."
#: ../../../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 ""
"Per questo, il dispositivo invierà un json con il tipo di mime: "
"`applicazione/chiesta di trasferimento dati+json` contenente `conversazione`"
" (id della conversazione), `interazione` (interazione correlata), `deviceId`"
" il dispositivo che riceve il file."
#: ../../../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 ""
"Il mittente verifica ora se il dispositivo è un dispositivo del pari "
"annunciato e che il dispositivo è un membro della conversazione, e può "
"inviare il file tramite un trasferimento di file classico."
#: ../../../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 ""
"Il ricevitore può ora accettare il primo trasferimento in entrata, scaricare"
" il file e verificare che la sha3sum sia corretta."
#: ../../../developer/file-transfer.md:103
msgid "Schema"
msgstr "Schema"
#: ../../../developer/file-transfer.md:105
msgid ""
"![Diagram: main schema diagram](images/file-transfer-main-schema-"
"diagram.png)"
msgstr "! [Diagramma: schema principale]"
#: ../../../developer/file-transfer.md:105
msgid "Diagram: main schema diagram"
msgstr "Diagramma: schema principale"
#: ../../../developer/file-transfer.md:107
msgid "SDP sent over the DHT"
msgstr "SDP inviato attraverso il 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 ""
"Dove `0d04b932` è l'ufrag e `7c33834e7cf944bf0e367b47` la password della "
"sessione ICE. `2130706431` e `1694498815` sono la priorità dei candidati. "
"`192.168.0.126 42751 tipo di ospite tcptype passivo` è un candidato ospite "
"passivo e `1694498815 X.X.X.X 42751 tipo srflx tcptype passivo` un ospite "
"passivo che riflette l'ip pubblico (immaginato tramite UPnP)."
#: ../../../developer/file-transfer.md:125
msgid "PJSIP related patches."
msgstr "Patch correlati al PJSIP."
#: ../../../developer/file-transfer.md:127
msgid "3 patches will be included into the PJSIP project:"
msgstr "3 patch saranno inclusi nel progetto PJSIP:"
#: ../../../developer/file-transfer.md:129
msgid ""
"RFC 6062, used to perform TURN over TCP (merged upstream: pjproject - "
"fa6616c43c7e19797084f4e02a67d1fb6fd99473)"
msgstr ""
"RFC 6062, utilizzato per eseguire TURN su TCP (fusi a monte: pjproject - "
"fa6616c43c7e19797084f4e02a67d1fb6fd99473)"
#: ../../../developer/file-transfer.md:130
msgid "RFC 6544, used to perform ICE over TCP"
msgstr "RFC 6544, utilizzato per eseguire ICE su TCP"
#: ../../../developer/file-transfer.md:131
msgid "A fix for pj_activesock"
msgstr "Un aggiustamento per pj_activesock"
#: ../../../developer/file-transfer.md:133
msgid "Note that the stack for the file transfer is:"
msgstr "Si noti che la pila per il trasferimento di file è:"
#: ../../../developer/file-transfer.md:145
msgid "Multi devices"
msgstr "Dispositivi multi"
#: ../../../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 utente RING può collegare il proprio account a diversi dispositivi. "
"Quindi, dobbiamo implementare il trasferimento quando un utente invia un "
"file a un contatto che ha più dispositivi collegati a questo account."
#: ../../../developer/file-transfer.md:151
msgid "First approach"
msgstr "Primo approccio"
#: ../../../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 ""
"Il primo approccio era quello di inviare una richiesta attraverso il DHT a "
"tutti i dispositivi e i primi dispositivi che rispondono ottengono il file "
"da trasferire."
#: ../../../developer/file-transfer.md:158
msgid "Current approach"
msgstr "Approccio attuale"
#: ../../../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 ""
"Ora, inviamo ancora una richiesta a tutti i dispositivi. La differenza è che"
" tutti i dispositivi avranno la notifica per ricevere un file e possono "
"accettare / rifiutare il trasferimento."
#: ../../../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 ""
"Ora (dal momento che <https://gerrit-ring.savoirfairelinux.com/#/c/9327/>), "
"quando un utente invia un file, richiederà una *PeerConnection* con tutti i "
"dispositivi peer. E per tutte le connessioni, colleghiamo un nuovo flusso di"
" input per avere la possibilità di accettare/rifiutare/annullare ogni "
"trasferimento separatamente."
#: ../../../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 ""
"In *data\\_transfer.cpp* definiamo la classe *OptimisticMetaOutgoingInfo* "
"che rappresenta la vista ottimista da mostrare al cliente. È ottimista "
"perché se un contatto accetta un trasferimento su un dispositivo e rifiuta "
"su altri, questa classe mostrerà il trasferimento di file in corso. E "
"mostrerà un errore solo se tutti i dispositivi rifiutano il trasferimento."
#: ../../../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 ""
"Questa classe è collegata a *SubOutgoingFileTransfer* che rappresentano lo "
"stato di un trasferimento con un dispositivo. I clienti avranno la "
"possibilità di mostrare un trasferimento sotto in seguito (vedi lista TODO)."
#: ../../../developer/file-transfer.md:180
msgid "Using another TURN server"
msgstr "Utilizzando un altro server 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 ""
"In realtà il server di default di TURN è *turn.ring.cx*. Ma puoi ospitare il"
" tuo server di TURN. Ad esempio eseguendo un server [coturn] "
"(https://github.com/coturn/coturn)."
#: ../../../developer/file-transfer.md:186
msgid "`sudo turnserver -a -v -n -u user:password -r \"realm\"`"
msgstr "`sudo turnserver -a -v -n -u utente:password -r \"realm\"`"
#: ../../../developer/file-transfer.md:188
msgid ""
"Then, you can configure the TURN server in the advanced settings of RING."
msgstr ""
"Quindi, puoi configurare il server TURN nelle impostazioni avanzate di 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 ""
"Nota: questo richiede alcune conoscenze tecniche. Inoltre, il server TURN "
"dovrebbe vedere lo stesso indirizzo IP del nodo come il nodo di destinazione"
" o la connessione di pari fallirà (perché l'autorizzazione sarà errata)"
#: ../../../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 ""
"Per ora, se un trasferimento di file non riesce durante il processo, il "
"mittente non può riprendere il trasferimento e deve rilanciare l'intero "
"trasferimento."
#: ../../../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 ""
#: ../../../developer/file-transfer.md:210
msgid "TODO List"
msgstr "Lista TODO"
#: ../../../developer/file-transfer.md:212
msgid "Add unit-tests (https://gerrit-ring.savoirfairelinux.com/\\#/c/9365/)"
msgstr ""
"Aggiungere test unitari (https://gerrit-"
"ring.savoirfairelinux.com/\\#/c/9365/)"
#: ../../../developer/file-transfer.md:213
msgid "Show subtransfers status for outgoing files"
msgstr ""
"Mostra lo stato dei trasferimenti di sotto-connessione per i file in uscita"
#: ../../../developer/file-transfer.md:214
msgid "Offset resume (for failed transfer)"
msgstr "Resumé compensato (per trasferimento fallito)"
#: ../../../developer/important-rfcs.md:1
msgid "Important RFCs"
msgstr "RFC importanti"
#: ../../../developer/important-rfcs.md:4
msgid "SIP"
msgstr "SIP"
#: ../../../developer/important-rfcs.md:6
msgid "Reference: <http://tools.ietf.org/html/rfc3261>"
msgstr "Referenza: <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 "Valori aggiornamenti e estensioni:"
#: ../../../developer/important-rfcs.md:10
msgid "SIP Re-INVITE: <http://tools.ietf.org/html/rfc6141>"
msgstr "SIP RECOMMENDATO: <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 "Referenza: <http://tools.ietf.org/html/rfc5245>"
#: ../../../developer/important-rfcs.md:16
msgid "ICE TCP"
msgstr ""
#: ../../../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 "Referenza: <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 ""
"Come utilizzare SDP: <http://tools.ietf.org/html/rfc3264> Valuabili "
"aggiornamenti ed estensioni:"
#: ../../../developer/important-rfcs.md:27
msgid "SDP and IPv6: <http://tools.ietf.org/html/rfc6157>"
msgstr "SDP e IPv6: <http://tools.ietf.org/html/rfc6157>"
#: ../../../developer/important-rfcs.md:28
msgid "SDP for SRTP: <http://tools.ietf.org/html/rfc4568>"
msgstr "SDP per 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 "Referenza: <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 e RTCP sulla stessa porta: <http://tools.ietf.org/html/rfc5761>"
#: ../../../developer/important-rfcs.md:40
msgid "SRTP"
msgstr "SRST"
#: ../../../developer/important-rfcs.md:42
msgid "Reference: <http://tools.ietf.org/html/rfc3711>"
msgstr "Referenza: <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 per 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 e AES-256: <https://tools.ietf.org/html/rfc6188>"
#: ../../../developer/important-rfcs.md:48
msgid "AES-GCM: <https://tools.ietf.org/html/rfc7714>"
msgstr "AES-GCM: <https://tools.ietf.org/html/rfc7714>"
#: ../../../developer/improving-quality-of-jami.md:1
msgid "Improving the quality of Jami"
msgstr "Migliorare la qualità di Jami"
#: ../../../developer/improving-quality-of-jami.md:4
msgid "Unit-tests"
msgstr "Test unitari"
#: ../../../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 ""
"È più difficile fare un test unitario sul progetto Jami a causa delle "
"condizioni di gara sulla dipendenza a più livelli."
#: ../../../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 ""
"Ci sono circa 30 test unitari e una copertura del 26%. A causa dell'elevata "
"domanda di Jami per dare nuove funzionalità agli utenti rapidamente, non "
"sono mantenuti dagli sviluppatori o da un dipartimento di 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 ""
"Utilizziamo lcov per la copertura, puoi trovare la configurazione dell'lcovs"
" nel daemons Makefile.am. Inoltre, la copertura può essere trovata su "
"https://docs.jami.net/coverage/"
#: ../../../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 ""
"Bisogna implementare un sistema per convincere il team a fare un test "
"unitario per un nuovo codice prima di fondersi."
#: ../../../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 ""
"È possibile avviare eseguendo make check nella cartella daemon o "
"separatamente nella cartella di test unitario con 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'ambiente deve essere impostato con -- disable-shared durante il "
"comando./configure"
#: ../../../developer/improving-quality-of-jami.md:18
msgid "Framework Tests"
msgstr "Test quadro"
#: ../../../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 ""
"Puoi trovare test framework nel daemons Makefile.am e farlo con make "
"integrazione. Questo chiama lo script jami_test.py nella cartella "
"tools/dringctrl. Utilizza dringctrl.py e controller.py che ti permettono di "
"controllare Jami attraverso bash."
#: ../../../developer/improving-quality-of-jami.md:22
msgid ""
"This makes a series of calls to assure jami’s opendht network is stable."
msgstr ""
"Questo fa una serie di chiamate per assicurare che la rete aperta di Jami's "
"sia stabile."
#: ../../../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 ""
"In futuro, per testare le funzionalità di Jami nel suo insieme, dovranno "
"essere implementati altri test quadro."
#: ../../../developer/improving-quality-of-jami.md:26
msgid "Integration tests"
msgstr "Test di integrazione"
#: ../../../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 ""
"Ogni commit passa attraverso test di integrazione in dockers sulle macchine "
"di costruzione si possono trovare i dettagli su: 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 ""
"La revisione del codice viene effettuata da un altro sviluppatore, a volte "
"il codice viene rivisto dallo stesso sviluppatore, questo dovrebbe essere "
"evitato per enfatizzare la legge di 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 consente a Jenkins di costruire Jami e verificare il linting. Puoi"
" trovare filtri e risultati su: sonar- jami.savoirfairelinux.net Sonar "
"utilizza clang-tidy come compilatore di linting preprocessore, puoi trovare "
"filtri clangs nel file.clang-tidy nella cartella 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 ""
"Su sflvault sonarqube si possono trovare al servizio m#2637 e login di "
"amministrazione al servizio s#7169"
#: ../../../developer/improving-quality-of-jami.md:36
msgid "Doc and feedback:"
msgstr "Doc e feedback:"
#: ../../../developer/improving-quality-of-jami.md:38
msgid "You can find all the documentation on docs.jami.net"
msgstr "Puoi trovare tutta la documentazione su docs.jami.net"
#: ../../../developer/improving-quality-of-jami.md:40
msgid "Issues are made by developers or users on git.jami.net"
msgstr ""
"Le questioni sono presentate dagli sviluppatori o dagli utenti su "
"git.jami.net"
#: ../../../developer/improving-quality-of-jami.md:42
msgid "Monitoring"
msgstr "Monitoraggio"
#: ../../../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 ""
"Una scheda viene chiamata ogni 30 minuti su una macchina virtuale jami-"
"monitorpeervm-01. Si può trovarla sul servizio s#7209 e sta chiamando un "
"altro cliente virtuale jami-monitorpeer-02 (servizio s#7224)."
#: ../../../developer/improving-quality-of-jami.md:46
msgid ""
"If needed, the manual command is ./script.sh –peer "
"031acbb73f2a3385b2babc7161f13325be103431"
msgstr ""
"Se necessario, il comando manuale è./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 ""
"Ritraccia un grafico di punto in tempo reale su "
"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 "Test di fumo"
#: ../../../developer/improving-quality-of-jami.md:52
msgid "Before each releases every clients MUST past a list of scenarios."
msgstr ""
"Prima di rilasciare ogni cliente deve passare attraverso una lista di "
"scenari."
#: ../../../developer/improving-quality-of-jami.md:54
msgid "Scenarios are described here: [Jami smoke tests](jami-smoke-tests.ods)"
msgstr "I scenari sono descritti qui: [testi di fumo di Jami]"
#: ../../../developer/improving-quality-of-jami.md:57
msgid ""
"They are reviewed by QA dpt. before sending it to the developers if needed."
msgstr ""
"Sono esaminati da QA dpt. prima di inviarli agli sviluppatori se necessario."
#: ../../../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 ""
"Se un rilascio contiene un commit di rete che è stato fuso, il dipartimento "
"QA dovrebbe essere in grado di automatizzare i diversi test di connettività "
"(come descritto di seguito nelle configurazioni di chiamate)"
#: ../../../developer/improving-quality-of-jami.md:61
msgid "Calls configurations."
msgstr "Chiama le configurazioni."
#: ../../../developer/improving-quality-of-jami.md:63
msgid "This is the list of network configurations that need to be tested:"
msgstr ""
"Questo è il elenco delle configurazioni di rete che devono essere testate:"
#: ../../../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) per entrambe le "
"parti."
#: ../../../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 ""
"Se entrambe le parti sono IPv4 solo senza TURN/STUN/UPnP, la chiamata "
"dovrebbe essere solo locale."
#: ../../../developer/improving-quality-of-jami.md:69
msgid "Special note: FDroid"
msgstr "Nota speciale: FDroid"
#: ../../../developer/improving-quality-of-jami.md:71
msgid ""
"The script to generate MR is in the client-android repo "
"(fdroidMergeRequest.sh)"
msgstr ""
"Lo script per generare MR è nel client-android repo (fdroidMergeRequest.sh)"
#: ../../../developer/improving-quality-of-jami.md:73
msgid "What needs to be done"
msgstr "Cosa deve essere fatto"
#: ../../../developer/improving-quality-of-jami.md:75
msgid "Push coverage closer to 60%"
msgstr "Spingere la copertura più vicino al 60%"
#: ../../../developer/improving-quality-of-jami.md:77
msgid ""
"Establish a system within the team to assure maintenance and creation of "
"unit-tests."
msgstr ""
"Imposta un sistema all'interno del team per garantire la manutenzione e la "
"creazione di test unitari."
#: ../../../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 ""
"Ogni funzione principale deve essere testata nel suo insieme aggiungendo un "
"test quadro (cioè assicurarsi che un messaggio sia stato ricevuto, che la "
"chiamata sia stata terminata bene da entrambi i lati, ecc.)"
#: ../../../developer/improving-quality-of-jami.md:81
msgid ""
"Each new functionality should be tested on each platform before merging it "
"to reduce regression"
msgstr ""
"Ogni nuova funzionalità dovrebbe essere testata su ogni piattaforma prima di"
" essere unita per ridurre la regressione"
#: ../../../developer/improving-quality-of-jami.md:83
msgid "Integrate sonarqube on each client"
msgstr "Integrare sonarqube su ogni cliente"
#: ../../../developer/improving-quality-of-jami.md:85
msgid "Automate the testing of Jami’s behavior on network compatibility"
msgstr ""
"Automatizzare il test del comportamento di Jami sulla compatibilità con la "
"rete"
#: ../../../developer/improving-quality-of-jami.md:87
msgid "Make a make_ring.py script adaptable to windows also"
msgstr "Fare uno script make_ring.py adattabile anche alle finestre"
#: ../../../developer/index.rst:3
msgid "Developer manual"
msgstr "Manuale per gli sviluppatori"
#: ../../../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 ""
"Il manuale per gli sviluppatori di Jami è un riferimento per gli "
"sviluppatori e i collaboratori di Jami, documentando i vari aspetti "
"dell'hacking e dello sviluppo di Jami, comprese le spiegazioni approfondite "
"su come Jami è progettato e su come le sue varie parti lavorano insieme."
#: ../../../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 ""
"Salve! Nel manuale degli sviluppatori di Jami, imparerai come funziona Jami "
"dall'alto al basso, con alcuni esempi."
#: ../../../developer/introduction.md:7
msgid "Table of contents"
msgstr "Tabella dei contenuti"
#: ../../../developer/introduction.md:9
msgid "{doc}`apis-of-jami`"
msgstr "{doc}`apis-of-jami`"
#: ../../../developer/introduction.md:10
msgid "Basic features"
msgstr "Caratteristiche di base"
#: ../../../developer/introduction.md:11
msgid "{doc}`account-management`"
msgstr "{doc}`-conto-gestione `"
#: ../../../developer/introduction.md:12
msgid "{doc}`contact-management`"
msgstr "{doc}`contact-management`"
#: ../../../developer/introduction.md:13
msgid "{doc}`swarm`"
msgstr "{doc}`swarm`"
#: ../../../developer/introduction.md:14
msgid "{doc}`calls`"
msgstr "{doc}`call `"
#: ../../../developer/introduction.md:15
msgid "{doc}`file-transfer` (deprecated; see {doc}`swarm`)"
msgstr "{doc}`file-transfer ` (deprecato; vedere {doc}`swarm`)"
#: ../../../developer/introduction.md:16
msgid "{doc}`message-displayed-status`"
msgstr "{doc}`message-displayed-status`"
#: ../../../developer/introduction.md:18
msgid "Advanced features"
msgstr "Caratteristiche avanzate"
#: ../../../developer/introduction.md:19
msgid "Manage audio/videos"
msgstr "Gestione audio/video"
#: ../../../developer/introduction.md:20
msgid "Call recording"
msgstr "Registrazione chiamate"
#: ../../../developer/introduction.md:21
msgid ""
"[The push notifications "
"system](https://github.com/savoirfairelinux/opendht/wiki/Push-notifications-"
"support)"
msgstr ""
"[Sistema di notifiche "
"push]https://github.com/savoirfairelinux/opendht/wiki/Push-notifications-"
"support)"
#: ../../../developer/introduction.md:22
msgid "What is a DHTProxy"
msgstr "Che cos' è un DHTProxy"
#: ../../../developer/introduction.md:23
msgid "Supporting SIP"
msgstr "Sostenere il SIP"
#: ../../../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}`sincronizzazione-profili `"
#: ../../../developer/introduction.md:27
msgid "{doc}`../contribute`"
msgstr "{doc}`../contribuire`"
#: ../../../developer/introduction.md:28
msgid "{doc}`Build instructions <../build/building>`"
msgstr "{doc}`Instruzioni di costruzione <../construzione/construzione>`"
#: ../../../developer/introduction.md:29
msgid "{doc}`submitting-your-first-patch`"
msgstr "{doc}`invio-il tuo-primo-patch `"
#: ../../../developer/introduction.md:30
msgid "{doc}`feature-requests`"
msgstr "{doc}`request-feature `"
#: ../../../developer/introduction.md:32
msgid "Group chats in details"
msgstr "Cate di gruppo dettagliate"
#: ../../../developer/introduction.md:33 ../../../developer/introduction.md:42
msgid "Description"
msgstr "Descrizione"
#: ../../../developer/introduction.md:34
msgid "{doc}`connection-manager`"
msgstr "{doc}`connessione-manager `"
#: ../../../developer/introduction.md:35
msgid "DRT"
msgstr "DDRT"
#: ../../../developer/introduction.md:36
msgid "{doc}`calls-in-swarm`"
msgstr "{doc}`call-in-swarm`"
#: ../../../developer/introduction.md:38
msgid "Drafts"
msgstr "Progetti"
#: ../../../developer/introduction.md:39
msgid "{doc}`conference-protocol`"
msgstr "{doc}`conferenza-protokolo"
#: ../../../developer/introduction.md:40
msgid "{doc}`synchronization-protocol`"
msgstr "{doc}`ssincronizzazione-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 ""
"Se stai leggendo questo, è probabile che tu voglia contribuire a uno dei "
"componenti/progetti di Jami, o implementare il tuo cliente."
#: ../../../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), utilizzato per la comunicazione p2p. Puoi "
"interagire con questa biblioteca come qualsiasi biblioteca C ++, o "
"utilizzando l'enveloppo Python, o tramite la sua [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 ""
"Il daemon, che è la parte principale. è la parte che fa tutta la logica per "
"Jami e interagisce con OpenDHT, pjsip, FFmpeg, e le altre biblioteche, e "
"implementa l'intero protocollo. se si desidera creare un nuovo client Jami, "
"si consiglia di implementarlo sopra a questo daemon, utilizzando una delle "
"sue molte API (REST, DBus, libwrap, o JNI)."
#: ../../../developer/introduction.md:60
msgid "The client part, which is basically the *frontend*."
msgstr "La parte del cliente, che è fondamentalmente il \"frontend\"."
#: ../../../developer/introduction.md:62
msgid ""
"The developer manual of Jami will explain the different features from all of"
" these layers."
msgstr ""
"Il manuale degli sviluppatori di Jami spiegherà le diverse caratteristiche "
"di tutti questi strati."
#: ../../../developer/jami-identifiers.md:1
msgid "Jami identifiers"
msgstr "Identificatori 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 ""
"Ci sono molti identificatori in Jami. Dobbiamo unificare il nome di questi "
"identificatori tra tutte le implementazioni. Questa pagina fa riferimento a "
"vari tipi di identificatori utilizzati in Jami con esempi pertinenti."
#: ../../../developer/jami-identifiers.md:8
msgid ""
"**Jami Infohash** or **Jami public key fingerprint** : a public key "
"fingerprint such as `3d1112ab2bb089370c0744a44bbbb0786418d40b`"
msgstr ""
"**Jami Infohash** o **Jami Key Public Fingerprint**: un'impronta digitale di"
" chiave pubblica come `3d1112ab2bb089370c0744a44bb0786418d40b`"
#: ../../../developer/jami-identifiers.md:10
msgid ""
"**Registered name** : a username associated to a Jami Infohash on the "
"blockchain such as `jeandupont`"
msgstr ""
"**Nome registrato**: un nome utente associato a un Jami Infohash sulla "
"blockchain come `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 Jami o SIP URI come "
"`jami:3d1112ab2bb089370c0744a44bb0786418d40b` o `jami:jeandupont` o "
"`<sip:nnnnn@host:5060>`. Deve essere conforme a "
"[rfc3986]https://tools.ietf.org/html/rfc3986). Se è un SIP URI, deve essere "
"conforme a [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 canonica**: `jami:3d1112ab2bb089370c0744a44bb0786418d40b` o "
"`sip:nnnnn@host:5060`. La forma più semplificata dell'URI. Il nome "
"registrato deve essere risolto, non include <> parentesi o nome di "
"visualizzazione. Prefisso con lo schema (`jami:` o `sip:` o `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 ""
"**User ID**: nome registrato (preferito) o impronta digitale della chiave "
"pubblica. Identificatore di un account rivolto all'utente per una chiave "
"pubblica."
#: ../../../developer/jami-identifiers.md:17
msgid ""
"**Display name** or **Profile name** : an editable user-defined profile name"
" such as `Jean Dupont`."
msgstr ""
"**Nome di visualizzazione** o **Nome di profilo**: un nome di profilo "
"modificabile definito dall'utente come `Jean Dupont`."
#: ../../../developer/jami-identifiers.md:20
msgid "When displaying a contact:"
msgstr "Quando si visualizza un contatto:"
#: ../../../developer/jami-identifiers.md:28
msgid "If Display name is empty, User ID is shown instead"
msgstr "Se il nome dello schermo è vuoto, viene visualizzato l'ID utente"
#: ../../../developer/jami-identifiers.md:29
msgid "If both lines have the same content, only the first line is displayed"
msgstr ""
"Se entrambe le righe hanno lo stesso contenuto, viene visualizzata solo la "
"prima riga"
#: ../../../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 ""
"Se non è disponibile alcuna foto e è disponibile un nome registrato (anello)"
" o un nome di visualizzazione (sip), la prima lettera di questo nome può "
"essere utilizzata per generare un inserzionista."
#: ../../../developer/jami-identifiers.md:32
msgid ""
"If no photo is available, a placeholder with an Canonical URI-specific "
"background color can be used:"
msgstr ""
"Se non è disponibile una foto, può essere utilizzato un contenitore di "
"posizione con un colore di sfondo specifico per l'URI canonica:"
#: ../../../developer/jami-identifiers.md:57
msgid ""
"Color values are from the material palette: https://material.io/tools/color"
msgstr ""
"I valori dei colori sono dalla palette di materiali: "
"https://material.io/tools/color"
#: ../../../developer/jami-identifiers.md:60
msgid "![références_couleurs_jami](images/jami-reference-colours.png)"
msgstr "! [références_couleurs_jami]"
#: ../../../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 "Localizzazione condivisione sul cliente QT"
#: ../../../developer/location-sharing.md:7
msgid "Trivial use"
msgstr "Uso banale"
#: ../../../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 ""
"In una conversazione, l'utente può fare clic sull'icona della posizione per "
"visualizzare una mappa. Se `Location Services` è abilitato sul dispositivo, "
"la posizione dell'utente verrà mostrata sulla mappa, insieme alle località "
"di tutti gli altri membri che condividono la loro posizione (da tutte le "
"conversazioni dell'account selezionato). L'utente può attivare e spegnere la"
" condivisione della posizione facendo clic sui pulsanti di condivisione "
"della posizione."
#: ../../../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 ""
"Quando un utente condivide la propria posizione in una conversazione, "
"sull'icona della conversazione appare un'icona di posizione rossa. Se "
"l'utente riceve una posizione da un altro membro, viene visualizzata "
"un'icona di posizione arancione su tutte le conversazioni in cui il membro è"
" presente."
#: ../../../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'utente può interagire con la mappa recernendo, avvicinando e avvicinando, "
"spostando e chiudendola. La mappa può anche essere pinnata o dispinata. "
"Quando la mappa è dispinata, può essere ripinnata se l'utente è nel giusto "
"account. Questa funzione consente all'utente di mantenere la mappa visibile "
"mentre continua a usare Jami."
#: ../../../developer/location-sharing.md:15
msgid "Advanced use"
msgstr "Uso avanzato"
#: ../../../developer/location-sharing.md:17
msgid "Multi-sharing"
msgstr "Multicoparticipazione"
#: ../../../developer/location-sharing.md:19
msgid "scenario"
msgstr "scenario"
#: ../../../developer/location-sharing.md:21
msgid ""
"The user is already sharing location with conversation A and conversation B."
msgstr ""
"L'utente sta già condividendo la posizione con la conversazione A e la "
"conversazione B."
#: ../../../developer/location-sharing.md:23
msgid "Feature"
msgstr "Caratteristica"
#: ../../../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 ""
"Se l'utente passa alla conversazione C, la mappa è ancora visibile e "
"l'utente ha due opzioni"
#: ../../../developer/location-sharing.md:27
msgid ""
"Click on the location sharing button to also share location with the members"
" of conversation C."
msgstr ""
"Fai clic sul pulsante condivisione della posizione per condividere anche la "
"posizione con i membri della conversazione 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 ""
"Clicca sul pulsante di fine condivisione della posizione. Questo farà "
"emergere una finestra che consente all'utente di disattivare completamente "
"la condivisione della posizione o di smettere di condividere la propria "
"posizione con i membri della conversazione C."
#: ../../../developer/location-sharing.md:30
msgid "Pinned window"
msgstr "Finestra con pin"
#: ../../../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 ""
"Se la finestra è disattaccata, l'utente non potrà fare clic sul pulsante "
"condivisione della posizione perché la finestra non è più connessa a una "
"conversazione. Per iniziare a condividere la posizione con nuove persone, "
"l'utente deve rinfonzare la finestra."
#: ../../../developer/location-sharing.md:34
msgid "Multi accounts"
msgstr "Conti multipli"
#: ../../../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 ""
"Ogni account ha una propria mappa unica. Se l'utente dischiude la mappa "
"mentre è in account A, quindi passa al account B e dischiude la mappa, "
"saranno visibili due mappe. Le mappe per gli account A e B visualizzano le "
"posizioni condivise con questi account, rispettivamente, e sono "
"completamente separate l'una dall'altra"
#: ../../../developer/location-sharing.md:44
msgid "This feature is divided into three parts:"
msgstr "Questa caratteristica è suddivisa in tre parti:"
#: ../../../developer/location-sharing.md:46
msgid "Sending one's position"
msgstr "Inviando la propria posizione"
#: ../../../developer/location-sharing.md:47
#: ../../../developer/location-sharing.md:78
msgid "Receiving a position"
msgstr "Ricevere una posizione"
#: ../../../developer/location-sharing.md:48
#: ../../../developer/location-sharing.md:89
msgid "Displaying a position"
msgstr "Mostra una posizione"
#: ../../../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 ""
"Per determinare la posizione, viene utilizzata l'API [Qt "
"Positioning]https://doc.qt.io/qt-6/qtpositioning-index.html). Una volta "
"determinata la posizione, viene inviata come messaggio sul DHT e trasmessa "
"al cliente. La posizione ricevuta viene quindi visualizzata utilizzando la "
"libreria JavaScript [OpenLayers]https://openlayers.org/)."
#: ../../../developer/location-sharing.md:53
msgid "Sending a position"
msgstr "Invio di una posizione"
#: ../../../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 ""
"Appena aperta una mappa, la classe `Positioning` si occupa di recuperare la "
"posizione corrente utilizzando la classe `QGeoPositionInfoSource` del modulo"
" `QtPositioning`. La posizione viene quindi convertita in formato JSON e "
"trasmessa al `positionManager`. Questa classe coordina l'intero processo di "
"condivisione della posizione. La posizione viene poi condivisa attraverso la"
" funzione `sendPosition()`. È condivisa:"
#: ../../../developer/location-sharing.md:61
msgid ""
"Locally through the `localPositionReceived` signal so that the user can see "
"their own position"
msgstr ""
"Locali attraverso il segnale `localPositionReceived` in modo che l'utente "
"possa vedere la propria posizione"
#: ../../../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 ""
"Il DHT è disponibile su `positionShareConvIds_` lista. Questa lista contiene"
" le chiavi di tutte le conversazioni con cui l'utente vuole condividere la "
"propria posizione. Da questa chiave, vengono ottenuti gli URI di tutti i "
"partecipanti e un messaggio di posizione viene inviato a ciascun "
"partecipante."
#: ../../../developer/location-sharing.md:65
msgid "The JSON format of a position is as follows:"
msgstr "Il formato JSON di una posizione è il seguente:"
#: ../../../developer/location-sharing.md:67
msgid "Type (position or stop message)"
msgstr "Tipo (messaggio di posizione o di fermo)"
#: ../../../developer/location-sharing.md:68
msgid "Latitude"
msgstr "Latitudine"
#: ../../../developer/location-sharing.md:69
msgid "Longitude"
msgstr "Lungo-titudine"
#: ../../../developer/location-sharing.md:70
msgid "Time (unused by the QtClient)"
msgstr "Tempo (non utilizzato dal QtClient)"
#: ../../../developer/location-sharing.md:72
msgid ""
"An example of data: "
"`{\\\"lat\\\":45.51616583988481,\\\"long\\\":-73.620693,\\\"time\\\":1671658862000,\\\"type\\\":\\\"Position\\\"}`"
msgstr ""
"Un esempio di dati: "
"`{\\\"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 ""
"Quando si invia la posizione al demone, viene trasmesso anche l'URI "
"dell'autore."
#: ../../../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 ""
"Quando l'utente smette di condividere la propria posizione con una "
"conversazione, l'ID della conversazione viene semplicemente rimosso dalla "
"lista `positionShareConvIds_`. Un messaggio di \"stop\" viene inviato anche "
"a ogni partecipante."
#: ../../../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 ""
"Quando una posizione viene ricevuta, viene attivato il slot "
"\"onPositionReceived() \" Che si tratti di una posizione locale dal modulo "
"`QtPositioning` o di una posizione da un altro contatto."
#: ../../../developer/location-sharing.md:83
msgid "Added (the URI is not present in the list)"
msgstr "Aggiunto (l'URI non è presente nell'elenco)"
#: ../../../developer/location-sharing.md:84
msgid "Updated (the URI is already present in the list)"
msgstr "Aggiornato (l'URI è già presente nell'elenco)"
#: ../../../developer/location-sharing.md:85
msgid "Deleted (type = \"Stop\")"
msgstr "Deletto (tipo = \"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 posizione è memorizzata nell'elenco sotto forma di oggetto di tipo "
"`positionObject`. Questo tipo consente di avere un cane da guardia per ogni "
"posizione."
#: ../../../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 ""
"Quando viene ricevuta una posizione (slot `onPositionReceived() ` attivata),"
" la posizione viene trasmessa a Qml che a sua volta invia le informazioni "
"alla libreria JavaScript [https://openlayers.org/]. Il modulo Qt `WebEngine`"
" consente di creare il ponte tra la tecnologia web della biblioteca e Qml. "
"Ogni posizione è rappresentata da uno strato aggiunto alla mappa."
#: ../../../developer/message-displayed-status.md:1
msgid "Message displayed status"
msgstr "Lo stato di visualizzazione del messaggio"
#: ../../../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 ""
"Ogni cliente deve generalmente essere in grado di mostrare quale peer legge "
"quale messaggio e capire quanti messaggi non letti ci sono."
#: ../../../developer/message-displayed-status.md:6
msgid "For this, the daemon provides some APIs:"
msgstr "Per questo, il demone fornisce alcune API:"
#: ../../../developer/message-displayed-status.md:8
msgid "Set a message displayed"
msgstr "Impostare un messaggio visualizzato"
#: ../../../developer/message-displayed-status.md:10
msgid "The Configuration manager provides:"
msgstr "Il gestore di configurazione fornisce:"
#: ../../../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 ""
"Deve essere eseguito quando viene mostrata l'interazione e è selezionata la "
"conversazione."
#: ../../../developer/message-displayed-status.md:48
msgid ""
"This sends a SIP messages to connected peers with the following format:"
msgstr "Questo invia un messaggio SIP ai collegati con il seguente formato:"
#: ../../../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 ""
"Il peer lo saprà quindi tramite `onMessageDisplayed` e emetterà un segnale "
"al cliente (`libjami::ConfigurationSignal::AccountMessageStatusChanged` con "
"stato 3 (`libjami::Account::MessageStates::DISPLAYED`))"
#: ../../../developer/message-displayed-status.md:68
msgid "Get unread messages"
msgstr "Ricevere messaggi non letti"
#: ../../../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 ""
"Conoscendo l'ultimoDisplayedMessage per il nostro account, possiamo "
"utilizzare queste informazioni e "
"`ConfigrationManager::countInteractionsSince` che contano l'interazione "
"dall'ultimo messaggio a un dato messaggio (in genere l'interazione "
"visualizzata per l'ultima volta)"
#: ../../../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 ""
"Per ottenere l'ultimo messaggio visualizzato per un membro, in "
"`Configuration::getConversationMembers` ogni membro avrà l'ultima "
"interazione visualizzata disponibile tramite `memberInfo[\"lastDisplayed\"]`"
#: ../../../developer/message-displayed-status.md:74
msgid "How this information is stored"
msgstr "Come vengono memorizzate queste informazioni"
#: ../../../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 ""
"In `src/jamidht/conversation.cpp` ogni conversazione memorizza gli ultimi "
"messaggi visualizzati in una mappa<string, string> (uri, interactionId) e "
"questa struttura è serializzata in "
"`fileutils::get_data_dir()/getAccountID()/conversation_data/repository_->id()/lastDisplayed`"
#: ../../../developer/name-server-protocol.md:1
msgid "Name Server protocol"
msgstr "Nome Protocollo server"
#: ../../../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 ""
"Il protocollo utilizzato da Jami per la consultazione e la registrazione di "
"un nome si basa su un HTTP [REST] "
"(https://en.wikipedia.org/wiki/Representational_state_transfer) API che "
"risponde alle richieste con documenti JSON e codici di stato HTTP regolari."
#: ../../../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 ""
"Il nome pubblico è ospitato su `ns.jami.net` e utilizza una blockchain come "
"suo backend."
#: ../../../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 ""
"Se si gestisce il proprio nome server, la ricerca di un nome utente sotto "
"forma di `username@example.com` cercherà il nome `username` con il nome "
"server a `example.com`. (Non è necessario aggiungere `@ns.jami.net` per "
"utilizzare il nome server predefinito.)"
#: ../../../developer/name-server-protocol.md:19
msgid "Rules on name formatting"
msgstr "Regole relative alla formattazione dei nomi"
#: ../../../developer/name-server-protocol.md:22
msgid ""
"Usernames are checked by a regex to ensure some rules about their format:"
msgstr ""
"I nomi utente vengono controllati da un regex per assicurarsi alcune regole "
"sul loro formato:"
#: ../../../developer/name-server-protocol.md:25
msgid "Length must be between 3 and 32 characters"
msgstr "La lunghezza deve essere compresa tra 3 e 32 caratteri"
#: ../../../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 "Chiedendo un nome"
#: ../../../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 "Questo è il servizio principale fornito da un nome server."
#: ../../../developer/name-server-protocol.md:35
#: ../../../developer/name-server-protocol.md:83
#: ../../../developer/name-server-protocol.md:131
msgid "Request"
msgstr "Richiesta"
#: ../../../developer/name-server-protocol.md:37
msgid ""
"A request for the name `foobar` is a `GET` request with `/name/`*`foobar`* "
"as the URI."
msgstr ""
"Una richiesta per il nome `foobar` è una richiesta `GET` con "
"`/name/`*`foobar`* come URI."
#: ../../../developer/name-server-protocol.md:40
#: ../../../developer/name-server-protocol.md:89
#: ../../../developer/name-server-protocol.md:150
msgid "Response (Success)"
msgstr "Risposta (successo)"
#: ../../../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 ""
"Se il nome viene trovato, una risposta con codice di stato `200` `OK` deve "
"essere inviata al cliente con un campo `Content-type` impostato come "
"`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 ""
"L'organismo è un documento JSON con 2 attributti di stringhe: `name` e "
"`addr`. `name` è uguale a quello richiesto e `addr` è una rappresentazione "
"esadecima dell'ID Jami prefisso con `0x`."
#: ../../../developer/name-server-protocol.md:50
#: ../../../developer/name-server-protocol.md:98
msgid "In our example, the JSON answer would be:"
msgstr "Nel nostro esempio, la risposta JSON sarebbe:"
#: ../../../developer/name-server-protocol.md:59
#: ../../../developer/name-server-protocol.md:106
msgid "Response (Not found)"
msgstr "Risposta (Non trovata)"
#: ../../../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 ""
"Se il nome non viene trovato, una risposta con codice di stato `404` `Not` "
"`Found` deve essere inviata al cliente con un campo `Content-type` impostato"
" come `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 ""
"Il corpo è un documento JSON con un attributo di una stringia: `error`. "
"Questo attributo è riempito da un messaggio di errore che spiega l'errore (e"
" potrebbe essere visualizzato nel client in futuro)."
#: ../../../developer/name-server-protocol.md:69
#: ../../../developer/name-server-protocol.md:116
msgid "On the reference implementation, the returned document is:"
msgstr ""
"Per quanto riguarda l'attuazione di riferimento, il documento restituito è:"
#: ../../../developer/name-server-protocol.md:77
msgid "Querying an address"
msgstr "Inquesta di indirizzo"
#: ../../../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 ""
"Questo servizio è un'analisi inversa. Si richiede un indirizzo e un nome "
"utente viene restituito se uno è registrato sul server di nomi."
#: ../../../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 ""
"Una richiesta di ID `jami:29347542eb07159f316577e1ae16243d152f6b7b` è una "
"richiesta `GET` con `/addr/`*`29347542eb07159f316577e1ae16243d152f6b7b`* "
"come 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 ""
"Se l'indirizzo corrisponde a un nome utente, una risposta con codice di "
"stato `200` `OK` deve essere inviata al cliente con un campo `Content-type` "
"impostato come `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 ""
"Il corpo è un documento JSON con un attributo di una stringia: `name`. Il "
"valore di questo campo è il nome registrato a questo indirizzo"
#: ../../../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 ""
"Se l'indirizzo non viene trovato, una risposta con codice di stato `404` "
"`Not` `Found` deve essere inviata al cliente con un campo `Content-type` "
"impostato come `application/json`."
#: ../../../developer/name-server-protocol.md:124
msgid "Registering a name"
msgstr "Registrazione di un nome"
#: ../../../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 ""
"Questa parte del protocollo è utilizzata per registrare una nuova coppia di "
"nome/indirizzo."
#: ../../../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 ""
"Una richiesta di registrazione del nome `foobar` è una richiesta `POST` con "
"`/name/`*`foobar`* come URI. L'attributo di intestazione `Content-type` deve"
" essere impostato su `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 ""
"Il corpo della richiesta è un documento JSON con 2 attributti di stringhe: "
"`addr` e `owner`. `addr` contiene l'ID Jami prefisso con `0x` e `owner` è il"
" nome da registrare."
#: ../../../developer/name-server-protocol.md:141
msgid "An example for `foobar` could be:"
msgstr "Un esempio di `foobar` potrebbe essere:"
#: ../../../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 ""
"Se la coppia di nome/indirizzo è registrata con successo, una risposta con "
"codice di stato `200` `OK` deve essere inviata al cliente con un campo "
"`Content-type` impostato come `application/json`."
#: ../../../developer/name-server-protocol.md:156
msgid ""
"The body contain a JSON document with 1 boolean attribute `success` set to "
"`true`."
msgstr ""
"Il corpo contiene un documento JSON con 1 attributo booleano `success` "
"impostato su `true`."
#: ../../../developer/name-server-protocol.md:159
msgid "As an example:"
msgstr "Per esempio:"
#: ../../../developer/name-server-protocol.md:167
msgid ""
"Further attempts to query the name or the address should then be successful."
msgstr ""
"I tentativi ulteriori di richiedere il nome o l'indirizzo dovrebbero quindi "
"avere successo."
#: ../../../developer/name-server-protocol.md:170
msgid "Response (Bad request)"
msgstr "Risposta (cattiva richiesta)"
#: ../../../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 ""
"Se la registrazione non può essere effettuata a causa di un errore nella "
"richiesta (formattamento, attributo mancante, ecc.), una risposta con codice"
" di stato `400` `Bad` `Request` deve essere inviata al cliente con un campo "
"`Content-type` impostato come `applicazione/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 ""
"Il corpo è un documento JSON con 2 attributi: `success` che è un boolean e "
"`error` che è una stringa. `success` è impostato su `false` e `error` è "
"riempito di un messaggio di errore che spiega l'errore (e potrebbe essere "
"visualizzato nel client in futuro)."
#: ../../../developer/name-server-protocol.md:182
msgid "For an invalid formatting of the username, the body could be:"
msgstr ""
"Per un formato non valido del nome utente, l'organismo potrebbe essere:"
#: ../../../developer/name-server-protocol.md:191
msgid "Response (Forbidden)"
msgstr "Risposta (proibita)"
#: ../../../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 ""
"Se la registrazione non può essere effettuata perché il nome è già preso, "
"una risposta con codice di stato `403` `Forbidden` deve essere inviata al "
"cliente con un campo `Content-type` impostato come `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 ""
"Il corpo è un documento JSON con 3 attributi: `success` che è un insieme "
"booleano di `false`, `name` e `addr` che sono entrambe le stringhe replicate"
" dalla richiesta originale."
#: ../../../developer/name-server-protocol.md:201
msgid ""
"Registering `foobar`, with it being already registered, would lead to the "
"following response:"
msgstr ""
"La registrazione `foobar`, già registrata, porterebbe alla seguente "
"risposta:"
#: ../../../developer/name-server-protocol.md:212
msgid "Some links"
msgstr "Alcuni collegamenti"
#: ../../../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-project}`jami-nameservice`: riferimento all'implementazione di "
"NodeJS utilizzata da `ns.jami.net` e che richiede un nodo Ethereum."
#: ../../../developer/protocol.md:1 ../../../developer/swarm.md:401
msgid "Protocol"
msgstr "Protocollo"
#: ../../../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'impronta digitale standard x509 160 bit della chiave pubblica dell'account"
" è chiamata **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 ""
#: ../../../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 ""
"Il campo UID oggetto del certificato di conto deve essere la forma "
"esadesimale dell'impronta digitale della chiave pubblica."
#: ../../../developer/protocol.md:22
msgid "Persisting the account"
msgstr "Persistente contabilità"
#: ../../../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 "*Vedere [RFC 5280]"
#: ../../../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 **dispositivo** è definito da una coppia di chiavi RSA con una lunghezza "
"di chiavi di almeno 4096 bit."
#: ../../../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 certificato di dispositivo** è definito come un certificato x509 il cui "
"oggetto è una chiave pubblica del dispositivo, firmata con una chiave "
"privata dell'account. Il certificato DEVE essere valido. Il campo UID "
"dell'emittente DEVE essere la forma esadecimale dell'impronta digitale della"
" chiave pubblica dell'account."
#: ../../../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 ""
"Per mantenere una chiave privata del dispositivo e certificato è definita "
"l'implementazione. L'accesso a una chiave privata del dispositivo salvato "
"deve essere autenticato."
#: ../../../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 ""
#: ../../../developer/protocol.md:56
msgid "Account transmission format"
msgstr "Formatto di trasmissione del conto"
#: ../../../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 ""
"Il formato di archivio ** account** definisce come serializzare una chiave "
"privata di account per la trasmissione, ad esempio per firmare un nuovo "
"certificato di dispositivo."
#: ../../../developer/protocol.md:62
msgid ""
"The account archive is an encrypted JSON object with the following "
"structure:"
msgstr ""
"L'archivio dell'account è un oggetto JSON criptato con la seguente "
"struttura:"
#: ../../../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'oggetto JSON può contenere ulteriori coppie di valori chiavi definite "
"dall'implementazione."
#: ../../../developer/protocol.md:76
msgid "The string JSON object is encrypted using a key defined as :"
msgstr ""
"L' oggetto string JSON è crittografato utilizzando una chiave definita come:"
#: ../../../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 ""
"Dove il PIN è un numero casuale di 32 bit in forma esadesimale, \"+\" è una "
"concatenatura di stringhe, il timestamp è il timestamp UNIX attuale diviso "
"per 1200 (20 minuti) e la password è una password scelto dall'utente."
#: ../../../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 ""
"Il PIN deve essere mostrato all'utente per essere copiato manualmente sul "
"nuovo dispositivo fisico insieme alla password."
#: ../../../developer/protocol.md:90
msgid "Contacting another account"
msgstr "Contatto con un altro conto"
#: ../../../developer/protocol.md:93
msgid "ICE descriptor exchange over OpenDHT"
msgstr "Scambio di descriptori ICE con OpenDHT"
#: ../../../developer/protocol.md:95
msgid "**Listening for incoming calls**"
msgstr "**Ascolto le chiamate in arrivo**"
#: ../../../developer/protocol.md:97
msgid ""
"A device listens for incoming call by performing a listen OpenDHT operation "
"on"
msgstr ""
"Un dispositivo ascolta le chiamate in arrivo eseguendo un'operazione OpenDHT"
" su"
#: ../../../developer/protocol.md:100
msgid "`h(\"callto\"+deviceID)`"
msgstr "`h(\"chiamata\"+dispositivoID) `"
#: ../../../developer/protocol.md:102
msgid ""
"where h is SHA1, \"+\" is the string concatenation and deviceID is the "
"hexadecimal form of the deviceID."
msgstr ""
"dove h è SHA1, \"+\" è la concatenation di stringhe e deviceID è la forma "
"esadecimale del deviceID."
#: ../../../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 ""
"I valori OpenDHT ricevuti che non sono crittografati o non sono corretamente"
" firmati devono essere eliminati. Il valore deve essere crittografato con la"
" chiave pubblica del dispositivo chiamato e firmato con la chiave privata "
"del dispositivo di chiamata secondo le specifiche OpenDHT."
#: ../../../developer/protocol.md:110
msgid "**Sending the Initial Offer**"
msgstr "**Invio dell'offerta iniziale**"
#: ../../../developer/protocol.md:112
msgid "*See [RFC 5245](https://tools.ietf.org/html/rfc5245)*"
msgstr "*Vedere [RFC 5245]"
#: ../../../developer/protocol.md:114
msgid ""
"RFC 5245 defines ICE (Interactive Connectivity Establishment), a protocol "
"for NAT traversal."
msgstr ""
"RFC 5245 definisce ICE (Interactive Connectivity Establishment), un "
"protocollo per il passaggio 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 ""
"L'ICE viene utilizzata a Jami per stabilire una comunicazione peer-to-peer "
"tra due dispositivi."
#: ../../../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 ""
"Il dispositivo di chiamata raccoglie i candidati e crea un'offerta iniziale "
"secondo le specifiche dell'ICE e inizia il processo di negoziazione "
"dell'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 ""
"Il dispositivo di chiamata inserisce l'offerta ICE criptata (l'offerta "
"iniziale) sul DHT al numero h(\"callto\"+deviceID) dove il deviceID è la "
"forma esadecimale del chiamato deviceID."
#: ../../../developer/protocol.md:128
msgid "**ICE serialization format**"
msgstr "**Format di serie di 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 ""
"ICE messaggi scambiati tra i colleghi durante una configurazione di chiamata"
" utilizzare il formato seguente."
#: ../../../developer/protocol.md:134
msgid ""
"This protocol is a compound of msgpack values, successively packed in this "
"order:"
msgstr ""
"Questo protocollo è un composto di valori msgpack, successivamente imballati"
" in questo ordine:"
#: ../../../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 numero intero che indica la versione del protocollo formato messaggio ICE"
" utilizzato per il resto dei dati."
#: ../../../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 array di stringhe di 2 elementi della session locale ICE ufrag e la "
"password della session locale ICE"
#: ../../../developer/protocol.md:140
msgid "an integer giving the number of components in the ICE session"
msgstr ""
"un numero intero che indica il numero di componenti nella sessione 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 ""
"una serie di stringhe, delle precedenti voci di numero, in cui ogni stringhe"
" descrive il candidato ICE, formato come una riga \"a=\" (senza "
"l'intestazione \"a=\") descritta a [rfc5245, sezione "
"4.3](https://tools.ietf.org/html/rfc5245#page-26)"
#: ../../../developer/protocol.md:143
msgid "**Sending the Answer**"
msgstr "**Inviando la risposta**"
#: ../../../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 ""
"Al ricevimento dell'offerta iniziale ICE criptata e firmata (attraverso "
"l'operazione di ascolto), un dispositivo chiamato deve eseguire controlli di"
" autorizzazione del dispositivo di chiamata, identificati come il firmatario"
" dell'offerta iniziale."
#: ../../../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 ""
"Se il dispositivo di chiamata non è autorizzato o se per un motivo di "
"implementazione definito il dispositivo chiamato rifiuta la richiesta di "
"connessione in entrata, il dispositivo chiamato deve ignorare l'offerta "
"iniziale e può registrare l'evento."
#: ../../../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 ""
"Se il dispositivo chiamato autorizza il chiama e desidera accettare la "
"connessione deve costruire una risposta ICE, avviare il processo di "
"negoziazione ICE e inviare la risposta ICE criptata e firmata allo stesso "
"tasto DHT."
#: ../../../developer/protocol.md:161
#: ../../../developer/technical-overview.md:241
msgid "DTLS negotiation"
msgstr "Negoziazione 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 ""
"Una volta che è stato creato un canale di comunicazione peer-to-peer, il "
"dispositivo chiamato ascolta su di esso le connessioni DTLS in entrata "
"(agendo come server DTLS) mentre il richiamatore inizia una connessione DTLS"
" uscente (agendo come client DTLS)."
#: ../../../developer/protocol.md:168
msgid ""
"The DTLS communication must be RFC6347 compliant "
"([1](https://tools.ietf.org/html/rfc6347))."
msgstr ""
"La comunicazione DTLS deve essere conforme alla 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 ""
"I coetanei devono supportare solo le suite di cipriche PFS. L'insieme di "
"suite di cipriche supportate è definito come implementazione ma deve "
"includere almeno ECDHE-AES-GCM (TODO: specificare le suite esatte "
"raccomandate per supportare)."
#: ../../../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 ""
"Durante la stretta di mano DTLS, entrambi i pari devono fornire la loro "
"catena di certificati di dispositivo e devono autenticare l'altro pari, "
"verificando che la sua chiave pubblica sia la stessa utilizzata durante lo "
"scambio DHT ICE."
#: ../../../developer/protocol.md:179
msgid "SIP call"
msgstr "SIP chiamata"
#: ../../../developer/protocol.md:181
msgid "*See [Important\\_RFC](Important_RFC \"wikilink\")*"
msgstr "*Vedere [Importante\\_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 ""
"Una volta che è disponibile un canale di comunicazione peer-to-peer "
"crittografato e autenticato, il protocollo SIP "
"[2](https://tools.ietf.org/html/rfc3261) deve essere utilizzato per "
"effettuare una chiamata e inviare messaggi."
#: ../../../developer/protocol.md:188
#: ../../../developer/technical-overview.md:277
msgid "The SIP implementation must support ICE and SRTP."
msgstr "L'attuazione del SIP deve sostenere ICE e 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 ""
"I codec supportati sono definiti come implementazione, ma i clienti Jami "
"dovrebbero supportare il codec audio Opus e il codec video 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 ""
"L'SRTP deve essere utilizzato per negoziare i media con SIP, utilizzando una"
" nuova chiave casuale per ogni media e per ogni negoziazione."
#: ../../../developer/protocol.md:197
msgid "Cryptographic primitives"
msgstr "Primitive criptografiche"
#: ../../../developer/protocol.md:200
msgid "Password stretching"
msgstr "Strettazione della password"
#: ../../../developer/protocol.md:202
msgid ""
"*See [Argon2 specifications](https://github.com/P-H-C/phc-winner-"
"argon2/blob/master/argon2-specs.pdf)*"
msgstr ""
"*Vedi [Specificazioni di 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 ""
"Le password vengono estese usando argon2i utilizzando t\\_cost = 16, "
"m\\_cost = 2\\^16 (64 MiB), mono-threaded, per generare un hash di 512 bit."
#: ../../../developer/protocol.md:208
msgid ""
"The result is then hashed again using SHA{1, 256, 512} depending on the "
"requested key size."
msgstr ""
"Il risultato viene quindi hashed di nuovo utilizzando SHA{1, 256, 512} a "
"seconda della dimensione della chiave richiesta."
#: ../../../developer/protocol.md:211
msgid "Encryption"
msgstr "Crittografia"
#: ../../../developer/protocol.md:213
msgid "Using a provided key (128, 192 or 256 bits)"
msgstr "Utilizzando una chiave fornita (128, 192 o 256 bit)"
#: ../../../developer/protocol.md:215
msgid ""
"Encryption uses standard AES-GCM as implemented by Nettle using a random IV "
"for each encryption."
msgstr ""
"La crittografia utilizza la norma AES-GCM, come implementata da Nettle, "
"utilizzando un IV casuale per ogni crittografia."
#: ../../../developer/protocol.md:218
msgid "Using a text password"
msgstr "Utilizzando una password di testo"
#: ../../../developer/protocol.md:220
msgid ""
"The password is stretched to generate a 256 bits key and a random salt of "
"128 bits."
msgstr ""
"La password è estesa per generare una chiave a 256 bit e un sale casuale di "
"128 bit."
#: ../../../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 ""
"I dati di ingresso sono crittografati utilizzando AES-GCM (vedi sopra) e il "
"sale viene allegato all'inizio del testo di crittografia risultante."
#: ../../../developer/protocol.md:226
msgid "During a call"
msgstr "Durante una chiamata"
#: ../../../developer/protocol.md:228
msgid ""
"Audio/video data are exchanged using encrypted RTP channels between peers."
msgstr ""
"I dati audio/video vengono scambiati tramite canali RTP crittografati tra "
"pari."
#: ../../../developer/protocol.md:231
msgid ""
"The protocol is a classic SRTP, with following supported crypto suites:"
msgstr ""
"Il protocollo è un classico SRTP, con le seguenti criptovalute supportate:"
#: ../../../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 può utilizzare AES\\_CM\\_128\\_HMAC\\_SHA1\\_80 o 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 chiave principale e il sale sono numeri casuali, diversi per ogni "
"chiamata."
#: ../../../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 ""
#: ../../../developer/qt-qml-coding-style.md:1
msgid "Qt and QML coding style"
msgstr "Stile di codifica Qt e 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 "Nome del segnale e della slot"
#: ../../../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 ""
"Sia i segnali che le slot dovrebbero utilizzare camelCase. Un segnale "
"dovrebbe utilizzare il semplice passato tempo o passato participio di "
"qualche verbo, probabilmente prefisso da un soggetto corto. Una slot "
"corrispondente dovrebbe essere il segnale prefisso con la parola \"on\" e "
"non la parola \"slot\". Ecco alcuni esempi:"
#: ../../../developer/qt-qml-coding-style.md:29
#: ../../../developer/qt-qml-testing-tools.md:4
#: ../../../developer/qt-qml-testing-tools.md:105
msgid "QML"
msgstr "QML"
#: ../../../developer/qt-qml-coding-style.md:30
msgid "Code formatting"
msgstr "Formattazione del codice"
#: ../../../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 versione Qt 5.15.0 di qmlformat ha alcuni problemi che riguardano le "
"sezioni di commenti e attualmente non discrimina le colonne mass, quindi "
"continueremo a formattare utilizzando queste linee guida per ora."
#: ../../../developer/qt-qml-testing-tools.md:1
msgid "Qt and QML testing tools"
msgstr "Strumenti di prova Qt e 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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../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 ""
#: ../../../developer/qt-qml-testing-tools.md:77
msgid "C++"
msgstr "C++"
#: ../../../developer/qt-qml-testing-tools.md:79
msgid "Google Test"
msgstr "Google Test"
#: ../../../developer/qt-qml-testing-tools.md:80
msgid "Google's c++ test framework."
msgstr "Il framework di test di Google C++."
#: ../../../developer/qt-qml-testing-tools.md:82
#: ../../../developer/qt-qml-testing-tools.md:109
msgid "Installation"
msgstr "Installazione"
#: ../../../developer/qt-qml-testing-tools.md:83
msgid "Ubuntu / Debian: `apt install googletest libgtest-dev`"
msgstr "Ubuntu / Debian: `apt installare google test libgtest-dev`"
#: ../../../developer/qt-qml-testing-tools.md:86
#: ../../../developer/qt-qml-testing-tools.md:112
msgid "Example main.cpp"
msgstr "Esempio 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 installare qml-module-qqtest libqt5quicktest5`"
#: ../../../developer/release-process.md:1
msgid "Release process"
msgstr "Processo di rilascio"
#: ../../../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 ""
#: ../../../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 ""
"In questo caso, non è una soluzione avere una revisione unica, ma un "
"\"stato\" globale e **vari aggiornamenti per modulo**."
#: ../../../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 ""
#: ../../../developer/release-process.md:18
msgid "**PROCESS FLOW:**"
msgstr "**FLOO DEL PROCESSO:**"
#: ../../../developer/release-process.md:0
msgid "1"
msgstr "1"
#: ../../../developer/release-process.md:0
msgid "2"
msgstr "2"
#: ../../../developer/release-process.md:0
msgid "3"
msgstr "3"
#: ../../../developer/release-process.md:0
msgid "4"
msgstr "4"
#: ../../../developer/release-process.md:0
msgid "5"
msgstr "5"
#: ../../../developer/release-process.md:0
msgid "6"
msgstr "6"
#: ../../../developer/release-process.md:0
#: ../../../developer/release-process.md:26
msgid "Redmine Ticket"
msgstr "Biglietto Redmine"
#: ../../../developer/release-process.md:0
#: ../../../developer/release-process.md:33
msgid "Repository Preparation"
msgstr "Preparazione del deposito"
#: ../../../developer/release-process.md:0
#: ../../../developer/release-process.md:38
msgid "Testing"
msgstr "Provare"
#: ../../../developer/release-process.md:0
#: ../../../developer/release-process.md:54
msgid "Push tags"
msgstr "Tag di spinta"
#: ../../../developer/release-process.md:0
#: ../../../developer/release-process.md:178
msgid "Advertisement"
msgstr "Pubblicità"
#: ../../../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 ""
"Crea una nuova Task on redmine allegata alla versione della versione, per il"
" sotto-module giusto. Imposta il titolo a \"Release Major.Minor.Micro\", con"
" il numero di versione appropriato."
#: ../../../developer/release-process.md:36
msgid "**This section was outdated and removed**"
msgstr "**Questa sezione è stata superata e rimossa**"
#: ../../../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 ""
"Inizia con l'albero git pulito eseguendo `git pulito -d -f -x` dalla "
"directory di livello superiore del progetto."
#: ../../../developer/release-process.md:44
msgid "Build and install the daemon and client, see How\\\\\\_to\\\\\\_build"
msgstr "Costruire e installare il daemon e il client, vedere Come\\\\\\_to\\\\\\_build"
#: ../../../developer/release-process.md:45
msgid ""
"Run the test suite in daemon and client, on different distributions and "
"machines."
msgstr ""
"Eseguire la suite di test in daemon e client, su diverse distribuzioni e "
"macchine."
#: ../../../developer/release-process.md:47
msgid "Run manual tests"
msgstr "Eseguire test manuali"
#: ../../../developer/release-process.md:48
msgid "Try registering and using different accounts."
msgstr "Prova a registrarti e ad utilizzare diversi account."
#: ../../../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 ""
"Per catturare i valori non iniziali utilizzati, perdite di memoria, "
"liberature non valide, ecc. eseguire `valgrind --track-origin=yes --db-"
"attach=yes./bin/dring`"
#: ../../../developer/release-process.md:57
msgid "`git push --tags`"
msgstr "`git spingere --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 "Liberazione"
#: ../../../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 "Devi solo lanciare lo script di rilascio."
#: ../../../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 "Quando il packaging è finito, verificare se è installabile."
#: ../../../developer/release-process.md:184
msgid "on the official website <https://ring.cx>"
msgstr "sul sito ufficiale <https://ring.cx>"
#: ../../../developer/release-process.md:185
msgid "on Twitter <https://twitter.com/JoinTheRing>"
msgstr "Su 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 ""
"per posta elettronica a ring@lists.savoirfairelinux.net con la rubrica di "
"sottogetto: \"Ring Major.Minor.Patch released\""
#: ../../../developer/setting-up-your-own-turn-server.md:1
msgid "Setting up your own TURN server"
msgstr "Configurazione del tuo server 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 può essere configurato per utilizzare server TURN o STUN ([RFC "
"5766](https://tools.ietf.org/html/rfc5766)) per stabilire una connessione "
"tra due pari."
#: ../../../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 ""
"Il server di default di TURN è \"turn.jami.net\", con nome utente \"ring\", "
"password \"ring\" e regno \"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 ""
"In questa guida, imposteremo un server "
"[coturn]https://github.com/coturn/coturn). Ci sono altre implementazioni di "
"server TURN/STUN disponibili sotto una licenza gratuita, come "
"[TurnServer]http://turnserver.sourceforge.net/) e "
"[Restund](http://www.creytiv.com/restund.html)."
#: ../../../developer/setting-up-your-own-turn-server.md:17
msgid "Installing"
msgstr "Installazione"
#: ../../../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 è disponibile nella maggior parte delle distribuzioni Linux. su "
"Debian, installalo con il seguente comando:"
#: ../../../developer/setting-up-your-own-turn-server.md:25
msgid "Configuring"
msgstr "Configurazione"
#: ../../../developer/setting-up-your-own-turn-server.md:27
msgid "Here is a basic `turnserver.conf` file:"
msgstr "Ecco un file di 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 ""
"Questo funziona anche come un server STUN. Il server STUN non richiede un "
"nome utente e password (STUN utilizza molto poca larghezza di banda)."
#: ../../../developer/setting-up-your-own-turn-server.md:41
msgid "Creating users on your TURN server"
msgstr "Creazione di utenti sul tuo server 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 ""
"Per creare utenti sul tuo server TURN, usa il binario `turnadmin` (questo "
"potrebbe richiedere autorizzazioni superutente)."
#: ../../../developer/setting-up-your-own-turn-server.md:50
msgid "Launching the TURN server"
msgstr "Lancio del server TURN"
#: ../../../developer/setting-up-your-own-turn-server.md:56
msgid "Configuring Jami to authenticate with the TURN server"
msgstr "Configurazione Jami per autenticare con il server 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 ""
"Puoi configurare Jami per utilizzare il tuo server TURN dalla sezione "
"avanzata delle impostazioni dell' account:"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "Field"
msgstr "Campo"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "Value"
msgstr "Valore"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "**server url**"
msgstr "** url del server**"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "host and port of your server"
msgstr "host e porta del server"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "0.0.0.0:10000"
msgstr "0,0.0.0:10000"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "**username**"
msgstr "**nome utente**"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "username"
msgstr "nome utente"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "bob"
msgstr "Bob"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "**password**"
msgstr "**password**"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "password"
msgstr "password"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "secretpassword"
msgstr "password segreta"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "**realm**"
msgstr "**Realm**"
#: ../../../developer/setting-up-your-own-turn-server.md:0
msgid "realm"
msgstr "regno"
#: ../../../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 "Invio del primo patch"
#: ../../../developer/submitting-your-first-patch.md:4
msgid "Setting up git and ssh"
msgstr "Configurazione git e ssh"
#: ../../../developer/submitting-your-first-patch.md:6
msgid "(**to work smoothly with Gerrit.**)"
msgstr "(**per lavorare senza problemi con Gerrit.**)"
#: ../../../developer/submitting-your-first-patch.md:9
msgid "first see:"
msgstr "vedere in primo luogo:"
#: ../../../developer/submitting-your-first-patch.md:11
msgid ""
"{ref}`Creating a gerrit review <developer/working-with-gerrit:To Create the "
"Review>`"
msgstr ""
"{ref}`Creare un'analisi gerrit <developer/working-with-gerrit:To Create the "
"Review>`"
#: ../../../developer/submitting-your-first-patch.md:13
msgid "SSH setup"
msgstr "Impostazione SSH"
#: ../../../developer/submitting-your-first-patch.md:15
msgid "https://review.jami.net/Documentation/user-upload.html#ssh"
msgstr ""
"Il sito web è stato pubblicato su www.jami.net/Documentation/user-"
"upload.html#ssh"
#: ../../../developer/submitting-your-first-patch.md:17
msgid "Generate a personal dedicated public / private key set."
msgstr "Generare un set di chiavi pubbliche e private dedicato a te."
#: ../../../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 ""
"La tua identificazione è stata salvata in `jami_gerrit_review_rsa`. La tua "
"chiave pubblica è stata salvata in `jami_gerrit_review_rsa.pub.`"
#: ../../../developer/submitting-your-first-patch.md:25
msgid "Tell gerrit your public key"
msgstr "Di' a Gerrit la tua chiave pubblica."
#: ../../../developer/submitting-your-first-patch.md:26
msgid ""
"Login to [gerrit](https://review.jami.net) via your Gitlab account (Sign-"
"in=>OAuth Gitlab)"
msgstr ""
"Accedere a [gerrit] (https://review.jami.net) tramite il tuo account 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 ""
"Segui le istruzioni della chiave ssh trovate nelle opzioni utente "
"[impostazioni]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 "Configura il tuo local ssh (via `ssh-add` o in `~/.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 ""
"Testare tutti i precedenti (ssh sul servizio o semplicemente cercare di "
"clonare un repo su gerrit tramite ssh)"
#: ../../../developer/submitting-your-first-patch.md:33
msgid "Your Repository"
msgstr "Il tuo deposito"
#: ../../../developer/submitting-your-first-patch.md:35
msgid ""
"This *assumes* you have moved any existing project clone out of the way."
msgstr ""
"Questo *assume* che tu abbia spostato qualsiasi clone di progetto esistente "
"fuori dalla strada."
#: ../../../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 ""
"Clone una copia (fresca) del progetto. `git clone "
"ssh://USERNAME@review.jami.net:29420/PROJECT_NAME_GOES_HERE.git`; ad esempio"
" `git clone 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 "Configurazione di questo clone locale.git/config (opzionale)"
#: ../../../developer/submitting-your-first-patch.md:39
msgid "Generate commit Change-Ids aka: commit-msg hook script"
msgstr "Generare commit Change-Ids aka: 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, da installare su.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 ""
"Lo script crea un hash unico per ogni commit effettuato dal tuo repository."
#: ../../../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 prima volta che si tenta di _push_ per rivedere `git push origin "
"HEAD:refs/for/master`, gerrit noterà una mancanza di 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 presenterà anche una stringa di copia sicura (scp)."
#: ../../../developer/submitting-your-first-patch.md:55
msgid "References"
msgstr "Referenze"
#: ../../../developer/submitting-your-first-patch.md:58
msgid ""
"[Some Gritty Details](https://review.jami.net/Documentation/user-"
"upload.html#_gritty_details)"
msgstr ""
"[Alcuni dettagli di grassi]https://review.jami.net/Documentation/user-"
"upload.html#_gritty_details)"
#: ../../../developer/submitting-your-first-patch.md:62
msgid "Original author: *Peter Gossner*"
msgstr "Autore originale: Peter Gossner"
#: ../../../developer/swarm.md:1
msgid "Swarm"
msgstr "Caccia"
#: ../../../developer/swarm.md:3
msgid "Synospis"
msgstr "Sospide"
#: ../../../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'obiettivo di questo documento è quello di descrivere come le chat di "
"gruppo (a.k.a. **swarm chat**) saranno implementate a 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* è un gruppo in grado di discutere senza alcuna autorità centrale "
"in modo resiliente. Infatti, se due persone non hanno alcuna connettività "
"con il resto del gruppo (cioè interruzione di Internet), ma possono "
"contattarsi (in una LAN per esempio o in una subnetwork), saranno in grado "
"di inviare messaggi tra loro e poi, saranno in grado di sincronizzare con il"
" resto del gruppo quando è possibile."
#: ../../../developer/swarm.md:9
msgid "So, the *swarm* is defined by:"
msgstr "Quindi, la \"swarm\" è definita da:"
#: ../../../developer/swarm.md:10
msgid "Ability to split and merge following the connectivity."
msgstr "Capacità di divisione e fusione in seguito alla connettività."
#: ../../../developer/swarm.md:11
msgid ""
"Syncing of the history. Anyone must be able to send a message to the whole "
"group."
msgstr ""
"Qualsiasi persona deve essere in grado di inviare un messaggio a tutto il "
"gruppo."
#: ../../../developer/swarm.md:12
msgid "No central authority. Can not rely on any server."
msgstr "Nessuna autorità centrale, non si può affidarsi a nessun server."
#: ../../../developer/swarm.md:13
msgid ""
"Non-repudiation. Devices must be able to verify old messages' validity and "
"to replay the whole history."
msgstr ""
"I dispositivi devono essere in grado di verificare la validità dei vecchi "
"messaggi e riprodurre l'intera storia."
#: ../../../developer/swarm.md:14
msgid "PFS on the transport. Storage is managed by the device."
msgstr "PFS sul trasporto."
#: ../../../developer/swarm.md:16
msgid ""
"The main idea is to get a synchronized Merkle tree with the participants."
msgstr ""
"L'idea principale è di ottenere un albero di Merkle sincronizzato con i "
"partecipanti."
#: ../../../developer/swarm.md:18
msgid "We identified four modes for swarm chat that we want to implement:"
msgstr ""
"Abbiamo identificato quattro modalità per lo chat swarm che vogliamo "
"implementare:"
#: ../../../developer/swarm.md:19
msgid ""
"**ONE_TO_ONE**, basically the case we have today when you discuss to a "
"friend"
msgstr ""
"**ONE_TO_ONE**, in pratica il caso che abbiamo oggi quando parli con un "
"amico"
#: ../../../developer/swarm.md:20
msgid ""
"**ADMIN_INVITES_ONLY** generally a class where the teacher can invite "
"people, but not students"
msgstr ""
"**ADMIN_INVITES_ONLY** generalmente una classe in cui l'insegnante può "
"invitare persone, ma non gli studenti"
#: ../../../developer/swarm.md:21
msgid "**INVITES_ONLY** a private group of friends"
msgstr "**INVITES_ONLY** un gruppo privato di amici"
#: ../../../developer/swarm.md:22
msgid "**PUBLIC** basically an opened forum"
msgstr "**PUBLIC** in sostanza un forum aperto"
#: ../../../developer/swarm.md:24
msgid "Scenarios"
msgstr "Sceni"
#: ../../../developer/swarm.md:26
msgid "Create a Swarm"
msgstr "Crea un gruppo"
#: ../../../developer/swarm.md:28
msgid "*Bob wants to create a new swarm*"
msgstr "# Bob vuole creare un nuovo sciame #"
#: ../../../developer/swarm.md:30
msgid "Bob creates a local git repository."
msgstr "Bob crea un repository locale di git."
#: ../../../developer/swarm.md:31
msgid "Then, he creates an initial signed commit with the following:"
msgstr "Poi, crea un primo impegno firmato con quanto segue:"
#: ../../../developer/swarm.md:32
msgid "His public key in `/admins`"
msgstr "La sua chiave pubblica in `/admins `"
#: ../../../developer/swarm.md:33
msgid "His device certificate in ̀ /devices`"
msgstr "Il certificato di dispositivo in ̀ /dispositivi `"
#: ../../../developer/swarm.md:34
msgid "His CRL in ̀ /crls`"
msgstr "Il suo RLC in ̀ /crls`"
#: ../../../developer/swarm.md:35
msgid "The hash of the first commit becomes the **ID** of the conversation"
msgstr "Il hash del primo commento diventa l'ID della conversazione."
#: ../../../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 annuncia agli altri dispositivi che crea una nuova conversazione, che "
"viene fatta tramite un invito a unirsi allo sciame inviato attraverso il DHT"
" ad altri dispositivi collegati a quell'account."
#: ../../../developer/swarm.md:38
msgid "Adding someone"
msgstr "Aggiungendo qualcuno"
#: ../../../developer/swarm.md:40
msgid "*Alice adds Bob*"
msgstr "* Alice aggiunge Bob*"
#: ../../../developer/swarm.md:42
msgid "Alice adds Bob to the repo:"
msgstr "Alice aggiunge Bob al repo:"
#: ../../../developer/swarm.md:43
msgid "Adds the invited URI in `/invited`"
msgstr "Aggiunge l'URI invitato in `/invited`"
#: ../../../developer/swarm.md:44
msgid "Adds the CRL into `/crls`"
msgstr "Aggiunge la RLC a `/crls`"
#: ../../../developer/swarm.md:45
msgid "Alice sends a request on the DHT"
msgstr "Alice manda una richiesta sul DHT"
#: ../../../developer/swarm.md:47
msgid "Receiving an invite"
msgstr "Ricevere un invito"
#: ../../../developer/swarm.md:49
msgid "*Alice gets the invite to join the previously create swarm*"
msgstr "* Alice riceve l'invito di unirsi al sciame creato prima *"
#: ../../../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 ""
"Lei accetta l'invito (se rifiuta, non fa nulla, rimarrà solo invitato e "
"Alice non riceverà mai alcun messaggio)"
#: ../../../developer/swarm.md:52
msgid "A peer-to-peer connection between Alice and Bob is done."
msgstr "Una connessione tra Alice e Bob è finita."
#: ../../../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 tira fuori il repo di Bob. ** AVVERTENZA significa che i messaggi "
"hanno bisogno di una connessione, non dal DHT come oggi**"
#: ../../../developer/swarm.md:54
msgid "Alice validates commits from Bob"
msgstr "Alice convalida i commenti di 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 ""
"Per confermare che Alice è membro, rimuove l'invito dal directory "
"`/invited`, quindi aggiunge il suo certificato nel directory `/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 ""
"Una volta che tutti i commenti sono stati validati e sul suo dispositivo, "
"gli altri membri del gruppo sono scoperti da Alice. Con questi pari, "
"costruirà il **DRT** (spiegato di seguito) con Bob come bootstrap."
#: ../../../developer/swarm.md:58
msgid "Sending a message"
msgstr "Invio di un messaggio"
#: ../../../developer/swarm.md:60
msgid "*Alice sends a message*"
msgstr "* Alice manda un messaggio *"
#: ../../../developer/swarm.md:62
msgid ""
"Sending a message is pretty simple. Alice writes a commit-message in the "
"following format:"
msgstr ""
"Inviare un messaggio è abbastanza semplice. Alice scrive un messaggio di "
"commit nel seguente formato:"
#: ../../../developer/swarm.md:64
msgid "**TODO format unclear**"
msgstr "**Format di TODO non chiaro**"
#: ../../../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 ""
"E aggiunge il suo dispositivo e la sua CRL al repository se manca (altri "
"devono essere in grado di verificare il commit). I conflitti di fusione sono"
" evitati perché siamo principalmente basati su messaggi di commit, non su "
"file (a meno che non siano localizzati i certificati CRLS +). poi annuncia "
"il nuovo commit tramite il **DRT** con un messaggio di servizio (spiegato in"
" seguito) e pings il DHT per i dispositivi mobili (debbono ricevere una "
"notifica push)."
#: ../../../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 ""
"Per pingare altri dispositivi, l'inviatore invia agli altri membri un "
"messaggio SIP con mimetype = \"applicazione/im-gitmessage-id\" contenente un"
" JSON con il \"deviceId\" che invia il messaggio, l'\"id\" della "
"conversazione correlata e il \"commit\""
#: ../../../developer/swarm.md:70
msgid "Receiving a message"
msgstr "Ricevere un messaggio"
#: ../../../developer/swarm.md:72
msgid "*Bob receives the message from Alice*"
msgstr "Bob riceve il messaggio di Alice"
#: ../../../developer/swarm.md:74
msgid "*Bob* do a git pull on *Alice*"
msgstr "# Bob # fa un giro # # Alice #"
#: ../../../developer/swarm.md:75
msgid "Commits MUST be verified via a hook"
msgstr "Gli impegni devono essere verificati con un gancio"
#: ../../../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 ""
"Se tutti i commit sono validi, i commit vengono memorizzati e visualizzati."
#: ../../../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 ""
"Se tutti i commenti non sono validi, pull viene annullato. *Alice* deve "
"ripristinare il suo stato a un stato corretto. *Processo TODO*"
#: ../../../developer/swarm.md:79
msgid "Validating a commit"
msgstr "Convalida di un impegno"
#: ../../../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 ""
"Per evitare che gli utenti spingano alcuni commit indesiderati (con "
"conflitti, messaggi falsi, ecc.), è così che ogni commit (dal più antico al "
"più recente) DEVE essere convalidato prima di unire una branca remota:"
#: ../../../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 ""
"Nota: se la convalida fallisce, il fetch viene ignorato e non si fusi il "
"ramo (e rimuovere i dati), e l'utente deve essere notificato Nota2: Se un "
"fetch è troppo grande, non è fatto (** 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 ""
"Per ogni commit, verificare che il dispositivo che tenta di inviare il "
"commit sia autorizzato in questo momento e che i certificati siano presenti "
"(nei/nei dispositivi del dispositivo e nei/i membri o/i amministratori "
"dell'emittente)."
#: ../../../developer/swarm.md:87
msgid ""
"3 cases. The commit has 2 parents, so it's a merge, nothing more to validate"
" here"
msgstr ""
"Il commit ha due genitori, quindi è una fusione, non c'è altro da confermare"
" qui"
#: ../../../developer/swarm.md:88
msgid "The commit has 0 parents, it's the initial commit:"
msgstr "Il commit ha 0 genitori, è il commit iniziale:"
#: ../../../developer/swarm.md:89
msgid "Check that admin cert is added"
msgstr "Controllare che il certificato di amministrazione è aggiunto"
#: ../../../developer/swarm.md:90
msgid "Check that device cert is added"
msgstr "Controllare che il certificato di dispositivo sia aggiunto"
#: ../../../developer/swarm.md:91
msgid "Check CRLs added"
msgstr "Controllo delle RRL aggiunte"
#: ../../../developer/swarm.md:92
msgid "Check that no other file is added"
msgstr "Controllare che nessun altro file è stato aggiunto"
#: ../../../developer/swarm.md:93
msgid "The commit has 1 parent, commit message is a JSON with a type:"
msgstr "Il commit ha 1 genitore, il messaggio commit è un JSON con un tipo:"
#: ../../../developer/swarm.md:94
msgid "If text (or other mime-type that doesn't change files)"
msgstr "Se testo (o altro tipo di mime che non cambia file)"
#: ../../../developer/swarm.md:95
msgid "Check signature from certificate in the repo"
msgstr "Controllo della firma del certificato nel repo"
#: ../../../developer/swarm.md:96
msgid "Check that no weird file is added outside device cert nor removed"
msgstr ""
"Controllare che nessun file strano è aggiunto fuori certificato di "
"dispositivo né rimosso"
#: ../../../developer/swarm.md:97
msgid "If vote"
msgstr "Se si vota"
#: ../../../developer/swarm.md:98
msgid "Check that voteType is supported (ban, unban)"
msgstr "Controllare che voteType sia supportato (ban, unban)"
#: ../../../developer/swarm.md:99
msgid "Check that vote is for the user that signs the commit"
msgstr "Controlla che il voto sia per l'utente che firma il commit"
#: ../../../developer/swarm.md:100
msgid "Check that vote is from an admin and device present & not banned"
msgstr ""
"Controllare che il voto sia da un amministratore e dispositivo presente & "
"non vietato"
#: ../../../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 "Controllare che nessun file strano è stato aggiunto o rimosso"
#: ../../../developer/swarm.md:102
msgid "If member"
msgstr "Se il membro"
#: ../../../developer/swarm.md:103
msgid "If adds"
msgstr "Se si aggiunge"
#: ../../../developer/swarm.md:104 ../../../developer/swarm.md:110
msgid "Check that the commit is correctly signed"
msgstr "Controllare che il commit sia corretto"
#: ../../../developer/swarm.md:105
msgid "Check that certificate is added in /invited"
msgstr "Controllare che il certificato sia aggiunto in / invitato"
#: ../../../developer/swarm.md:107
msgid "If ONE_TO_ONE, check that we only have one admin, one member"
msgstr ""
"Se ONE_TO_ONE, controlla che abbiamo solo un amministratore, un membro"
#: ../../../developer/swarm.md:108
msgid "If ADMIN_INVITES_ONLY, check that invite is from an admin"
msgstr ""
"Se ADMIN_INVITES_ONLY, controllare che l'invito è da un amministratore"
#: ../../../developer/swarm.md:109
msgid "If joins"
msgstr "Se si unisce"
#: ../../../developer/swarm.md:111
msgid "Check that device is added"
msgstr "Controllare che il dispositivo è aggiunto"
#: ../../../developer/swarm.md:112
msgid "Check that invitation is moved to members"
msgstr "Controllare che l' invito sia stato trasferito ai membri"
#: ../../../developer/swarm.md:114
msgid "If banned"
msgstr "Se è vietato"
#: ../../../developer/swarm.md:115
msgid "Check that vote is valid"
msgstr "Controlla che il voto sia valido"
#: ../../../developer/swarm.md:116
msgid "Check that the user is ban via an admin"
msgstr "Controllare che l'utente è vietato tramite un amministratore"
#: ../../../developer/swarm.md:117
msgid "Check that member or device certificate is moved to banned/"
msgstr ""
"Controllare che il certificato di membro o dispositivo sia spostato al "
"proibito/"
#: ../../../developer/swarm.md:118
msgid "Check that only files related to the vote are removed"
msgstr "Controllare che siano rimossi solo i file relativi al voto"
#: ../../../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 ""
"Avvisare l'utente che potrebbe essere con una versione vecchia o che il suo "
"pari ha tentato di inviare commenti indesiderati"
#: ../../../developer/swarm.md:123
msgid "Ban a device"
msgstr "Interdire un dispositivo"
#: ../../../developer/swarm.md:125
msgid "*Alice, Bob, Carla, Denys are in a swarm. Alice bans Denys*"
msgstr "Alice, Bob, Carla, Denys sono in uno sciame."
#: ../../../developer/swarm.md:127
msgid ""
"This is one of the most difficult scenarios in our context. Without central "
"authority we can not trust:"
msgstr "Questo è uno dei scenari più difficili del nostro contesto."
#: ../../../developer/swarm.md:129
msgid "Timestamps of generated commits"
msgstr "Stampi temporali degli impegni generati"
#: ../../../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 ""
"Se ci sono più dispositivi di amministrazione e se Alice può parlare con Bob"
" ma non con Denys e Carla; Carla può parlare con Denys; Denys vieta Alice, "
"Alice vieta Denys, qual sarà lo stato quando i 4 membri si uniranno le "
"conversazioni."
#: ../../../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 dispositivo può essere compromesso, rubato o il suo certificato può "
"scadere. Dovremmo essere in grado di vietare un dispositivo e evitare che "
"mentisca sulla sua scadenza o inviare messaggi nel passato (modificando il "
"certificato o il timestamp del suo impegno)."
#: ../../../developer/swarm.md:133
msgid ""
"Similar systems (with distributed group systems) are not so much, but these "
"are some examples:"
msgstr ""
"I sistemi simili (con sistemi di gruppo distribuiti) non sono così tanti, ma"
" questi sono alcuni esempi:"
#: ../../../developer/swarm.md:135
msgid ""
"[mpOTR doesn't define how to ban "
"someone](https://www.cypherpunks.ca/~iang/pubs/mpotr.pdf)"
msgstr "[mpOTR non definisce come vietare qualcuno]"
#: ../../../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, senza alcun server centrale per la chat di gruppo (EDIT: hanno "
"recentemente cambiato questo punto), non dà la possibilità di vietare "
"qualcuno da un gruppo."
#: ../../../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 ""
"Questo sistema di voto ha bisogno di un'azione umana per vietare qualcuno o "
"deve basarsi sulle informazioni sulle RLC dal repository (perché non "
"possiamo fidarci delle RLC esterne)"
#: ../../../developer/swarm.md:140
msgid "Remove a device from a conversation"
msgstr "Togliere un dispositivo da una conversazione"
#: ../../../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 ""
"Questa è l'unica parte che deve avere un consenso per evitare la divisione "
"della conversazione, come se due membri si calciano l'uno dall'altro dalla "
"conversazione, cosa vedrà la terza?"
#: ../../../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 ""
"Questo è necessario per rilevare dispositivi revocati, o semplicemente "
"evitare di ottenere persone indesiderate presenti in una sala pubblica."
#: ../../../developer/swarm.md:146
msgid "*Alice removes Bob*"
msgstr "# Alice toglie Bob #"
#: ../../../developer/swarm.md:148
msgid "Note: Alice MUST be admins to vote"
msgstr "Nota: Alice deve essere amministratore per votare"
#: ../../../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 ""
"Per farlo, crea il file in /votes/ban/members/uri_bob/uri_alice (i membri "
"possono essere sostituiti da dispositivi per un dispositivo, o invitati per "
"inviti o amministratori per amministratori) e impegna"
#: ../../../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 ""
"Quindi controlla se il voto è risolto. Ciò significa che >50% degli "
"amministratori accetta di vietare Bob (se è sola, è certo che è più del "
"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 ""
"Se il voto è risolto, i file in /votes/ban possono essere rimossi, tutti i "
"file per Bob in /members, /admins, /invited, /CRL, /devices possono essere "
"rimossi (o solo in /devices se si tratta di un dispositivo che è vietato) e "
"il certificato di Bob può essere inserito in /banned/members/bob_uri.crt (o "
"/banned/devices/uri.crt se un dispositivo è vietato) e impegnato al repo"
#: ../../../developer/swarm.md:153
msgid "Then, Alice informs other users (outside Bob)"
msgstr "Poi, Alice informa gli altri utenti (fuori di Bob)"
#: ../../../developer/swarm.md:155
msgid "*Alice (admin) re-adds Bob (banned member)"
msgstr "*Alice (amministratore) aggiunge Bob (membri vietati)"
#: ../../../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 ""
"Per farlo, crea il file in /votes/unban/members/uri_bob/uri_alice (i membri "
"possono essere sostituiti da dispositivi per un dispositivo, o invitati per "
"inviti o amministratori per amministratori) e impegna"
#: ../../../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 ""
"Se il voto è risolto, i file in /votes/unban possono essere rimossi, tutti i"
" file per Bob in /members, /admins, /invited, /CRL, possono essere "
"riaggiunti (o solo in /devices se si tratta di un dispositivo che non è "
"vietato) e impegnati al repo"
#: ../../../developer/swarm.md:160
msgid "Remove a conversation"
msgstr "Elimina una conversazione"
#: ../../../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 ""
"Salvare in convInfos removed=time::now() (come removeContact salva nei "
"contatti) che la conversazione viene rimossa e sincronizzata con i "
"dispositivi di altri utenti"
#: ../../../developer/swarm.md:163
msgid "Now, if a new commit is received for this conversation it's ignored"
msgstr ""
"Ora, se viene ricevuto un nuovo impegno per questa conversazione viene "
"ignorato"
#: ../../../developer/swarm.md:164
msgid ""
"Now, if Jami startup and the repo is still present, the conversation is not "
"announced to clients"
msgstr ""
"Se Jami e il repo sono ancora presenti, la conversazione non viene "
"annunciata ai clienti."
#: ../../../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 ""
"Due casi: a. Se non c'è nessun altro membro nella conversazione possiamo "
"rimuovere immediatamente il repository b. Se ancora altri membri, "
"impegnatevi a lasciare la conversazione, e ora aspettate che almeno un altro"
" dispositivo sincronizzi questo messaggio. Questo evita il fatto che altri "
"membri rilevino ancora l'utente come un membro valido e inviano ancora nuove"
" notifiche di messaggio."
#: ../../../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 ""
"Quando siamo sicuri che qualcuno sia sincronizzato, rimuovi "
"erased=time::now() e sincronizza con i dispositivi di altri utenti"
#: ../../../developer/swarm.md:169
msgid ""
"All devices owned by the user can now erase the repository and related files"
msgstr ""
"Tutti i dispositivi di proprietà dell'utente possono ora cancellare il "
"repository e i file correlati"
#: ../../../developer/swarm.md:171
msgid "How to specify a mode"
msgstr "Come specificare una modalità"
#: ../../../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 ""
"I modi non possono essere cambiati nel tempo. O è un'altra conversazione. "
"Quindi, questi dati vengono memorizzati nel messaggio iniziale di commit."
#: ../../../developer/swarm.md:184
msgid ""
"For now, \"mode\" accepts values 0 (ONE_TO_ONE), 1 (ADMIN_INVITES_ONLY), 2 "
"(INVITES_ONLY), 3 (PUBLIC)"
msgstr ""
"Per ora, \"mode\" accetta valori 0 (ONE_TO_ONE), 1 (ADMIN_INVITES_ONLY), 2 "
"(INVITES_ONLY), 3 (PUBLIC)"
#: ../../../developer/swarm.md:186
msgid "Processus for 1:1 swarms"
msgstr "Processo per sciami 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'obiettivo è quello di mantenere l'antica API (addContact/removeContact, "
"sendTrustRequest/acceptTrustRequest/discardTrustRequest) per generare uno "
"sciame con un pari e il suo contatto."
#: ../../../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 ""
"Il processo è ancora lo stesso, un account può aggiungere un contatto "
"tramite addContact, quindi inviare una richiesta di fiducia tramite il DHT. "
"Ma due modifiche sono necessarie:"
#: ../../../developer/swarm.md:191
msgid ""
"The TrustRequest embeds a \"conversationId\" to inform the peer what "
"conversation to clone when accepting the request"
msgstr ""
"La TrustRequest inserisce un \"conversationId\" per informare il partner "
"quale conversazione clonare quando accetta la richiesta"
#: ../../../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 viene riprovato quando il contatto torna online. Non è il caso "
"oggi (come non vogliamo generare una nuova TrustRequest se il pari scarica "
"il primo). Quindi, se un account riceve una richiesta di fiducia, verrà "
"ignorato automaticamente se la richiesta con una conversazione correlata "
"viene rifiutata (come convRequests sono sincronizzati)"
#: ../../../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 ""
"Poi, quando un contatto accetta la richiesta, è necessario un periodo di "
"sincronizzazione, perché il contatto ora deve clonare la conversazione."
#: ../../../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() rimuoverà il contatto e le conversazioni 1:1 correlate (con "
"lo stesso processo di \"Remove a conversation\")."
#: ../../../developer/swarm.md:198
msgid "Tricky scenarios"
msgstr "Scenari complicati"
#: ../../../developer/swarm.md:200
msgid ""
"There are some cases where two conversations can be created. This is at "
"least two of those scenarios:"
msgstr "Ci sono alcuni casi in cui si possono creare due conversazioni."
#: ../../../developer/swarm.md:202 ../../../developer/swarm.md:205
msgid "Alice adds Bob"
msgstr "Alice aggiunge Bob"
#: ../../../developer/swarm.md:203
msgid "Bob accepts"
msgstr "Bob accetta."
#: ../../../developer/swarm.md:204
msgid "Alice removes Bob"
msgstr "Alice rimuove Bob"
#: ../../../developer/swarm.md:207
msgid "or"
msgstr "o"
#: ../../../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 aggiunge Bob e Bob aggiunge Alice allo stesso tempo, ma entrambi "
"non sono collegati tra loro"
#: ../../../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 ""
"In questo caso, vengono generate due conversazioni. Non vogliamo rimuovere i"
" messaggi dagli utenti o scegliere una conversazione qui. Quindi, a volte "
"verranno mostrati due sciami 1:1 tra gli stessi membri. Genererà alcuni bug "
"durante il tempo di transizione (come non vogliamo rompere API, la "
"conversazione inferita sarà una delle due conversazioni mostrate, ma per ora"
" è \"ok-ish\", sarà risolto quando i clienti gestiranno completamente la "
"conversazione ID per tutte le API (chiamata, trasferimento di file, ecc.)."
#: ../../../developer/swarm.md:213
msgid "Note while syncing"
msgstr "Nota durante la sincronizzazione"
#: ../../../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 ""
"Dopo aver accettato la richiesta di una conversazione, c'è un momento in cui"
" il daemon ha bisogno di recuperare il repository remoto. Durante questo "
"tempo, i clienti DEVONO mostrare una visualizzazione di sincronizzazione per"
" fornire informazioni all'utente."
#: ../../../developer/swarm.md:218
msgid ""
"ConfigurationManager::getConversations() will return the conversation's id "
"even while syncing"
msgstr ""
"ConfigurationManager::getConversations() restituirà l'id della conversazione"
" anche durante la sincronizzazione"
#: ../../../developer/swarm.md:219
msgid ""
"ConfigurationManager::conversationInfos() will return {{\"syncing\": "
"\"true\"}} if syncing."
msgstr ""
"ConfigurationManager::conversationInfos() restituirà {{\"sincronizzazione\":"
" \"verità\"}} se si sincronizza."
#: ../../../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::getConversationMembers() restituirà una mappa di due "
"URI (il conto corrente e il pari che ha inviato la richiesta)"
#: ../../../developer/swarm.md:222
msgid "Conversations requests specification"
msgstr "Conversazioni richiede specifica"
#: ../../../developer/swarm.md:224
msgid ""
"Conversations requests are represented by a **Map<String, String>** with the"
" following keys:"
msgstr ""
"Le richieste di conversazione sono rappresentate da una **Map<String, "
"String>** con le seguenti tasti:"
#: ../../../developer/swarm.md:226
msgid "id: the conversation id"
msgstr "ID: il numero di conversazione"
#: ../../../developer/swarm.md:227
msgid "from: uri of the sender"
msgstr "da: uri dell'inviatore"
#: ../../../developer/swarm.md:228
msgid "received: timestamp"
msgstr "ricevuta: timestamp"
#: ../../../developer/swarm.md:229
msgid "title: (optional) name for the conversation"
msgstr "titolo: nome (opzionale) della conversazione"
#: ../../../developer/swarm.md:230
msgid "description: (optional)"
msgstr "descrizione: (opzionale)"
#: ../../../developer/swarm.md:231
msgid "avatar: (optional)"
msgstr "avatar: (opzionale)"
#: ../../../developer/swarm.md:233
msgid "Conversation's profile synchronization"
msgstr "Sincronizzazione del profilo della conversazione"
#: ../../../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 ""
"Per essere identificabili, una conversazione ha generalmente bisogno di "
"alcuni metadati, come un titolo (ad esempio: Jami), una descrizione (ad "
"esempio: alcuni link, quale è il progetto, ecc.), e un'immagine (il logo del"
" progetto)."
#: ../../../developer/swarm.md:237
msgid "Storage in the repository"
msgstr "Storage nel deposito"
#: ../../../developer/swarm.md:239
msgid ""
"The profile of the conversation is stored in a classic vCard file at the "
"root (`/profile.vcf`) like:"
msgstr ""
"Il profilo della conversazione è memorizzato in un classico file vCard alla "
"radice (`/profile.vcf`) come:"
#: ../../../developer/swarm.md:249
msgid "Synchronization"
msgstr "Sincronizzazione"
#: ../../../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 ""
"Per aggiornare la vCard, un utente con abbastanza autorizzazioni (di "
"default: =ADMIN) deve modificare `/profile.vcf`. e commetterà il file con il"
" mimetype `application/update-profile`. Il nuovo messaggio viene inviato "
"tramite lo stesso meccanismo e tutti i colleghi riceveranno il segnale "
"**MessageReceived** dal daemon. Il ramo viene eliminato se il commit "
"contiene altri file o troppo grandi o se eseguito da un membro non "
"autorizzato (di default: <ADMIN)."
#: ../../../developer/swarm.md:253
msgid "Last Displayed"
msgstr "Ultimo visualizzazione"
#: ../../../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 ""
"Nei dati sincronizzati, ogni dispositivo invia agli altri dispositivi lo "
"stato delle conversazioni. In questo stato, viene inviato l'ultimo "
"visualizzato. Tuttavia, poiché ogni dispositivo può avere il suo stato per "
"ogni conversazione, e probabilmente senza lo stesso ultimo impegno in "
"qualche momento, ci sono diversi scenari da tenere conto:"
#: ../../../developer/swarm.md:257
msgid "5 scenarios are supported:"
msgstr "Sono supportati 5 scenari:"
#: ../../../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 ""
"se l'ultimo display inviato da altri dispositivi è lo stesso di quello "
"attuale, non c'è nulla da fare."
#: ../../../developer/swarm.md:259
msgid ""
"if there is no last displayed for the current device, the remote displayed "
"message is used."
msgstr ""
"se non è stato visualizzato l'ultimo per il dispositivo corrente, viene "
"utilizzato il messaggio visualizzato a distanza."
#: ../../../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 ""
"se l'ultimo telecomando visualizzato non è presente nella repo, significa "
"che il commit verrà recuperato in seguito, quindi cache il risultato"
#: ../../../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 ""
"se il telecomando è già stato recuperato, controlliamo che l'ultimo locale "
"visualizzato sia prima nella storia per sostituirlo"
#: ../../../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 ""
"Infine, se viene annunciato un messaggio dello stesso autore, significa che "
"dobbiamo aggiornare l'ultimo visualizzato."
#: ../../../developer/swarm.md:264
msgid "Preferences"
msgstr "Preferenze"
#: ../../../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 ""
"Ogni conversazione ha allegato le preferenze impostate dall'utente. Queste "
"preferenze sono sincronizzate tra i dispositivi dell'utente. Questo può "
"essere il colore della conversazione, se l'utente vuole ignorare le "
"notifiche, il limite di dimensione del trasferimento di file, ecc. Per ora, "
"le chiavi riconosciute sono:"
#: ../../../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 ""
"\"ignoreNotifications\" - ignorare le notifiche per i nuovi messaggi in "
"questa conversazione"
#: ../../../developer/swarm.md:270
msgid "\"symbol\" - to define a default emoji."
msgstr "\"simbolo\" - per definire un emoji predefinito."
#: ../../../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 ""
"Queste preferenze sono memorizzate in un pacchetto MapStringString, "
"memorizzato in `accountDir/conversation_data/conversationId/preferences` e "
"inviate solo tra i dispositivi dello stesso utente tramite SyncMsg."
#: ../../../developer/swarm.md:274
msgid "The API to interact with the preferences are:"
msgstr "L'API per interagire con le preferenze è:"
#: ../../../developer/swarm.md:294
msgid "Merge conflicts management"
msgstr "Gestione dei conflitti di fusione"
#: ../../../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 ""
"Poiché due amministratori possono modificare la descrizione allo stesso "
"tempo, può verificarsi un conflitto di fusione su `profile.vcf`. In questo "
"caso, verrà scelto il commit con il hash più alto (ad es. ffffff > 000000)."
#: ../../../developer/swarm.md:298
msgid "APIs"
msgstr "API"
#: ../../../developer/swarm.md:300
msgid "The user got 2 methods to get and set conversation's metadatas:"
msgstr ""
"L'utente ha ottenuto 2 metodi per ottenere e impostare i metadati della "
"conversazione:"
#: ../../../developer/swarm.md:326
msgid "where `infos` is a `map<str, str>` with the following keys:"
msgstr "dove `infos` è una `map<str, str>` con le seguenti chiavi:"
#: ../../../developer/swarm.md:328
msgid "mode: READ-ONLY"
msgstr "modalità: solo lettura"
#: ../../../developer/swarm.md:329
msgid "title"
msgstr "titolo"
#: ../../../developer/swarm.md:330
msgid "description"
msgstr "descrizione"
#: ../../../developer/swarm.md:331
msgid "avatar"
msgstr "avatar"
#: ../../../developer/swarm.md:333
msgid "Re-import an account (link/export)"
msgstr "Riimportazione di un conto (link/export)"
#: ../../../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'archivio DEVE contenere conversationId per poter recuperare le "
"conversazioni su nuovi commit dopo un re-import (perché non c'è invito a "
"questo punto)."
#: ../../../developer/swarm.md:337
msgid ""
"The conversationId is there, in this case, the daemon is able to re-clone "
"this conversation"
msgstr ""
"La conversazione è lì, in questo caso, il demone è in grado di riclonare "
"questa conversazione"
#: ../../../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 conversazioneId è mancante, quindi il demone chiede (attraverso un "
"messaggio `{{\"applicazione/invita\", conversazioneId}}`) un nuovo invito "
"che l'utente deve (ri) accettare"
#: ../../../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 ""
"Si noti che una conversazione può essere recuperata solo se c'è un contatto "
"o un altro dispositivo, altrimenti sarà persa."
#: ../../../developer/swarm.md:342
msgid "Used protocols"
msgstr "Protocolli utilizzati"
#: ../../../developer/swarm.md:344
msgid "Git"
msgstr "- Gita"
#: ../../../developer/swarm.md:346
msgid "Why this choice"
msgstr "Perché questa scelta"
#: ../../../developer/swarm.md:348
msgid ""
"Each conversation will be a git repository. This choice is motivated by:"
msgstr "Ogni conversazione sarà un repository di git."
#: ../../../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 ""
"Merkel Tree è la struttura perfetta per farlo e può essere linearizzata "
"dalla fusione di rami. Inoltre, poiché è ampiamente utilizzato da Git, è "
"facile sincronizzare tra dispositivi."
#: ../../../developer/swarm.md:351
msgid "Distributed by nature. Massively used. Lots of backends and pluggable."
msgstr ""
"Distribuito dalla natura, ampiamente utilizzato, un sacco di backend e "
"pluggable."
#: ../../../developer/swarm.md:352
msgid "Can verify commits via hooks and massively used crypto"
msgstr ""
"Può verificare i compromessi tramite ganci e criptovalute utilizzate in "
"massa"
#: ../../../developer/swarm.md:353
msgid "Can be stored in a database if necessary"
msgstr "Può essere memorizzato in un database se necessario"
#: ../../../developer/swarm.md:354
msgid "Conflicts are avoided by using commit messages, not files."
msgstr "I conflitti vengono evitati utilizzando messaggi commit, non file."
#: ../../../developer/swarm.md:356
msgid "What we have to validate"
msgstr "Cosa dobbiamo confermare"
#: ../../../developer/swarm.md:358
msgid "Performance? `git.lock` can be low"
msgstr "Performance? `git.lock` può essere basso"
#: ../../../developer/swarm.md:359
msgid "Hooks in libgit2"
msgstr "Anciame in libgit2"
#: ../../../developer/swarm.md:360
msgid "Multiple pulls at the same time?"
msgstr "- Moltissime tirature contemporaneamente?"
#: ../../../developer/swarm.md:362
msgid "Limits"
msgstr "Limiti"
#: ../../../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 ""
"Per eliminare una conversazione, il dispositivo deve lasciare la "
"conversazione e crearne un'altra."
#: ../../../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 ""
"Tuttavia, i messaggi non permanenti (come i messaggi leggibili solo per "
"alcuni minuti) possono essere inviati tramite un messaggio speciale tramite "
"il DRT (come le notifiche di digitazione o lettura)."
#: ../../../developer/swarm.md:368
msgid "Structure"
msgstr "Struttura"
#: ../../../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 modifica massicciamente il trasferimento di file. Ora, tutta la storia"
" è sincronizzata, consentendo a tutti i dispositivi della conversazione di "
"recuperare facilmente i file vecchi. Questi cambiamenti ci permettono di "
"passare da una logica in cui il mittente ha spinto il file su altri "
"dispositivi, attraverso il tentativo di connettersi ai loro dispositivi "
"(Questo era male perché non era davvero resistente ai cambiamenti / errori "
"di connessione e aveva bisogno di un nuovo tentativo manuale) a una logica "
"in cui il mittente consente ad altri dispositivi di scaricare. Inoltre, "
"qualsiasi dispositivo che abbia il file può essere l'host per altri "
"dispositivi, consentendo di recuperare i file anche se il mittente non è lì."
#: ../../../developer/swarm.md:403
msgid ""
"The sender adds a new commit in the conversation with the following format:"
msgstr ""
"Il mittente aggiunge un nuovo commit alla conversazione con il seguente "
"formato:"
#: ../../../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 ""
"e crea un link in "
"`${data_path}/conversation_data/${conversation_id}/${file_id}` dove "
"`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 ""
"Quindi, il ricevitore può ora scaricare i file contattando i dispositivi che"
" ospitano il file aprendo un canale con `name=\"data-transfer://\" + "
"conversationId + \"/\" + currentDeviceId() + \"/\" + fileId` e memorizzare "
"le informazioni che il file sta aspettando in "
"`${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 ""
"Il dispositivo che riceve la connessione accetta il canale verificando se il"
" file può essere inviato (se sha3sum è corretto e se il file esiste). Il "
"ricevitore manterrà il primo canale aperto, chiuderà gli altri e scriverà in"
" un file (con lo stesso percorso del mittente: "
"`${data_path}/conversation_data/${conversation_id}/${file_id}`) tutti i dati"
" in arrivo."
#: ../../../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 ""
"Quando il trasferimento è finito o il canale chiuso, la sha3sum viene "
"verificata per verificare che il file è corretto (o è stato eliminato)."
#: ../../../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 ""
"In caso di fallimento, quando un dispositivo della conversazione sarà di "
"nuovo online, chiederemo tutti i file in attesa nello stesso modo."
#: ../../../developer/swarm.md:423
msgid "Call in swarm"
msgstr "Chiama lo sciame"
#: ../../../developer/swarm.md:425
msgid "TODO: nameserver part"
msgstr "TODO: parte del nome del server"
#: ../../../developer/swarm.md:427
msgid "Idea"
msgstr "L'idea"
#: ../../../developer/swarm.md:429
msgid ""
"A swarm conversation can have multiple rendez-vous. A rendez-vous is defined"
" by the following uri:"
msgstr "Una conversazione di sciame può avere più appuntamenti."
#: ../../../developer/swarm.md:431
msgid ""
"\"accountUri/deviceId/conversationId/confId\" where accountUri/deviceId "
"describes the host."
msgstr ""
"\"accountUri/deviceId/conversationId/confId\" dove accountUri/deviceId "
"descrive l'host."
#: ../../../developer/swarm.md:433
msgid "The host can be determined via two ways:"
msgstr "L'ospite può essere determinato in due modi:"
#: ../../../developer/swarm.md:435
msgid ""
"In the swarm metadatas. Where it's stored like the title/desc/avatar of the "
"room"
msgstr ""
"Nel sciame di metadati, dove sono archiviati come il titolo/disc/avatar "
"della stanza."
#: ../../../developer/swarm.md:436
msgid "Or the initial caller."
msgstr "O l'appaltatore iniziale."
#: ../../../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 ""
"Quando si inizia una chiamata, l'host aggiunge un nuovo impegno allo sciame,"
" con l'URI da unire (accountUri/deviceId/conversationId/confId). Questo sarà"
" valido fino alla fine della chiamata (annunciato da un impegno con la "
"durata da mostrare)"
#: ../../../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 ""
"Quindi ogni parte riceverà l'informazione che una chiamata è iniziata e sarà"
" in grado di unirsi a essa chiamando."
#: ../../../developer/swarm.md:443
msgid "Attacks?"
msgstr "- Attacchi?"
#: ../../../developer/swarm.md:445
msgid "Avoid git bombs"
msgstr "Evita le bombe git"
#: ../../../developer/swarm.md:447
msgid "Notes"
msgstr "Nota"
#: ../../../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 ""
"Il timestamp di un commit può essere affidabile perché è modificabile. Solo "
"il timestamp dell'utente può essere affidabile."
#: ../../../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 ""
"Le operazioni Git, i messaggi di controllo, i file e altre cose "
"utilizzeranno un collegamento TLS v1.3 p2p con solo le cifre che "
"garantiscono PFS. Quindi ogni chiave viene rinegoziata per ogni nuova "
"connessione."
#: ../../../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 ""
"Utilizzato per inviare messaggi per cellulari (per attivare notifiche push) "
"e per avviare connessioni TCP."
#: ../../../developer/swarm.md:459
msgid "Network activity"
msgstr "Attività di rete"
#: ../../../developer/swarm.md:461
msgid "Process to invite someone"
msgstr "Processo di invito a qualcuno"
#: ../../../developer/swarm.md:463
msgid "Alice wants to invite Bob:"
msgstr "Alice vuole invitare Bob:"
#: ../../../developer/swarm.md:465
msgid "Alice adds bob to a conversation"
msgstr "Alice aggiunge Bob a una conversazione"
#: ../../../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 ""
"Due possibilità per l'invio del messaggio a. Se non collegato, tramite il "
"DHT b. Altrimenti, Alice invia sul canale 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 ""
"Due possibilità per Bob a. Riceve l'invito, viene emesso un segnale per il "
"cliente b. Non è connesso, quindi non riceverà mai la richiesta perché Alice"
" non deve sapere se Bob ha semplicemente ignorato o bloccato Alice."
#: ../../../developer/swarm.md:477
msgid "Process to send a message to someone"
msgstr "Processo per inviare un messaggio a qualcuno"
#: ../../../developer/swarm.md:479
msgid "Alice wants to send a message to Bob:"
msgstr "Alice vuole mandare un messaggio a Bob:"
#: ../../../developer/swarm.md:481
msgid "Alice adds a message in the repo, giving an ID"
msgstr "Alice aggiunge un messaggio nel repo, dando un documento"
#: ../../../developer/swarm.md:482
msgid "Alice gets a message received (from herself) if successful"
msgstr "Alice riceve un messaggio (da lei stessa) se riesce"
#: ../../../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 ""
"In entrambi i casi viene creato un messaggio: { \"applicazione/im-"
"gitmessage-id\" : \"{\"id\":\"$convId\", \"commit\":\"$commitId\", "
"\"deviceId\": \"$alice_device_hash\"}\"}. a. Se non è collegato, tramite il "
"DHT b. Altrimenti, Alice invia sul canale 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 ""
"Bob non è connesso ad Alice, quindi se si fida di lui, chieda una nuova "
"connessione e vai a b. b. Se è connesso, prendi da Alice e annuncia nuovi "
"messaggi c. Bob non conosce quella conversazione. Chiedi attraverso il DHT "
"di ottenere un invito prima di poter accettare quella conversazione "
"({\"applicazione/invito\", conversazioneId}) d. Bob è disconnesso (nessuna "
"rete, o semplicemente chiuso). Non riceverà il nuovo messaggio ma cercherà "
"di sincronizzare quando si verificherà la prossima connessione"
#: ../../../developer/swarm.md:495
msgid "![Diagram: swarm chat classes](images/swarm-chat-classes-diagram.jpg)"
msgstr "! [Diagramma: lezioni di chat di sciame]"
#: ../../../developer/swarm.md:495
msgid "Diagram: swarm chat classes"
msgstr "Diagramma: lezioni di chat swarm"
#: ../../../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 "**!! OLD DRAFT!!**"
#: ../../../developer/swarm.md:610
msgid ""
"Note: Following notes are not organized yet. Just some line of thoughts."
msgstr "Nota: Le seguenti note non sono ancora organizzate."
#: ../../../developer/swarm.md:612
msgid "Crypto improvements."
msgstr "Miglioramenti delle criptovalute."
#: ../../../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 ""
"Per una funzione di chat di gruppo seria, abbiamo anche bisogno di "
"criptovalute serie. Con il design attuale, se un certificato viene rubato "
"come i valori DHT precedenti di una conversazione, la conversazione può "
"essere decrittografata. Forse dobbiamo andare a qualcosa come **Double "
"ratchet**."
#: ../../../developer/swarm.md:616
msgid ""
"Note: a lib might exist to implement group conversations. TODO, investigate."
msgstr ""
"Nota: potrebbe esistere una liberazione per implementare conversazioni di "
"gruppo."
#: ../../../developer/swarm.md:618
msgid "Needs ECC support in OpenDHT"
msgstr "Necessità di sostegno ECC in OpenDHT"
#: ../../../developer/swarm.md:622
msgid "Add Roles?"
msgstr "Aggiungere ruoli?"
#: ../../../developer/swarm.md:624
msgid "There is two major use case for group chats:"
msgstr "Ci sono due principali casi di utilizzo per le chiacchiere di gruppo:"
#: ../../../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 ""
"Qualcosa come un Mattermost in un'azienda, con canali privati, e alcuni "
"ruoli (admin/spectator/bot/etc) o per l'istruzione (dove solo pochi sono "
"attivi)."
#: ../../../developer/swarm.md:627
msgid "Horizontal conversations like a conversation between friends."
msgstr "Conversazioni orizzontali come una conversazione tra amici."
#: ../../../developer/swarm.md:629
msgid "Jami will be for which one?"
msgstr ""
#: ../../../developer/swarm.md:631
msgid "Implementation idea"
msgstr "Idea di attuazione"
#: ../../../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 ""
"Certificato per un gruppo che firma un utente con una bandiera per un ruolo."
#: ../../../developer/swarm.md:635
msgid "Join a conversation"
msgstr "Partecipa a una conversazione"
#: ../../../developer/swarm.md:637
msgid "Only via a direct invite"
msgstr "Solo con un invito diretto"
#: ../../../developer/swarm.md:638
msgid "Via a link/QR Code/whatever"
msgstr "Per via di un link/QR Code/qualunque"
#: ../../../developer/swarm.md:639
msgid "Via a room name? (a **hash** on the DHT)"
msgstr "- Per mezzo di un nome di stanza?"
#: ../../../developer/swarm.md:641
msgid "What we need"
msgstr "Cosa ci serve"
#: ../../../developer/swarm.md:643
msgid ""
"Confidentiality: members outside of the group chat should not be able to "
"read messages in the group"
msgstr ""
"Confidenzialità: i membri al di fuori della chat di gruppo non dovrebbero "
"poter leggere i messaggi nel gruppo"
#: ../../../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 ""
"Segretezza: se una chiave del gruppo è compromessa, i messaggi precedenti "
"dovrebbero rimanere confidenziali (qualora possibile)"
#: ../../../developer/swarm.md:646
msgid "Message ordering: There is a need to have messages in the right order"
msgstr ""
"Ordinazione dei messaggi: è necessario avere i messaggi nell'ordine giusto"
#: ../../../developer/swarm.md:647
msgid ""
"Synchronization: There is also a need to be sure to have all messages at "
"soon as possible."
msgstr ""
"Sincronizzazione: occorre anche assicurarsi di avere tutti i messaggi il "
"prima possibile."
#: ../../../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 ""
"Persistenza: in realtà, un messaggio sul DHT dura solo 10 minuti. Perché è "
"il momento migliore calcolato per questo tipo di DHT. Per persistere i dati,"
" il nodo deve riimpostare il valore sul DHT ogni 10 minuti. Un altro modo "
"per farlo quando il nodo è offline è lasciare che i nodi riimpostino i dati."
" Ma, se dopo 10 minuti, 8 nodi sono ancora qui, faranno 64 richieste (e è "
"esponenziale)."
#: ../../../developer/swarm.md:650
msgid "Other distributed ways"
msgstr "Altri modi distribuiti"
#: ../../../developer/swarm.md:652
msgid "IPFS: Need some investigation"
msgstr "- Ho bisogno di un'indagine."
#: ../../../developer/swarm.md:653
msgid "BitMessage: Need some investigation"
msgstr "Ho bisogno di un'indagine."
#: ../../../developer/swarm.md:654
msgid "Maidsafe: Need some investigation"
msgstr "Ho bisogno di un'indagine."
#: ../../../developer/swarm.md:656
msgid "Based on current work we have"
msgstr "In base al lavoro attuale che abbiamo"
#: ../../../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 ""
"Il chat di gruppo può basarsi sullo stesso lavoro che abbiamo già per i "
"dispositivi multi-dispositivi (ma qui, con un certificato di gruppo)."
#: ../../../developer/swarm.md:660
msgid ""
"History sync. This needs to move the database from the client into the "
"daemon."
msgstr "Questo deve spostare il database dal client al demone."
#: ../../../developer/swarm.md:661
msgid ""
"If nobody is connected, the synchronization can not be done, and the person "
"will never see the conversation"
msgstr ""
"Se nessuno è connesso, la sincronizzazione non può essere fatta, e la "
"persona non vedrà mai la conversazione"
#: ../../../developer/swarm.md:663
msgid "Another dedicated DHT"
msgstr "Un altro DHT dedicato"
#: ../../../developer/swarm.md:665
msgid "Like a DHT with a superuser. (Not convinced)"
msgstr "Come un DHT con un superutente."
#: ../../../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 ""
"Attualmente, l'algoritmo di trasferimento di file si basa su una connessione"
" TURN (vedi {doc}`file-transfer`). Nel caso di un gruppo grande, questo sarà"
" cattivo. Prima di tutto abbiamo bisogno di un implementato p2p per il "
"trasferimento di file. Implementare l'RFC per il trasferimento p2p."
#: ../../../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 ""
"Altro problema: attualmente non esiste un supporto TCP per ICE in PJSIP. "
"Questo è obbligatorio per questo punto (in pjsip o fatto in casa)"
#: ../../../developer/swarm.md:673
msgid "Resources"
msgstr "Risorse"
#: ../../../developer/swarm.md:675
msgid "https://eprint.iacr.org/2017/666.pdf"
msgstr "Il sito web è stato pubblicato su www.eprint.iacr.org/2017/666.pdf"
#: ../../../developer/swarm.md:676
msgid ""
"Robust distributed synchronization of networked linear systems with "
"intermittent information (Sean Phillips and Ricardo G.Sanfelice)"
msgstr ""
"Robusta sincronizzazione distribuita di sistemi lineari in rete con "
"informazioni intermittenti (Sean Phillips e Ricardo G.Sanfelice)"
#: ../../../developer/synchronization-protocol.md:1
msgid "Synchronization protocol"
msgstr "Protocollo di sincronizzazione"
#: ../../../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 ""
"Il swarm chat offre nuove possibilità per ogni dispositivo. Ora, è possibile"
" sincronizzare la storia tra i dispositivi condividendo il relativo "
"repository."
#: ../../../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 ""
"Molti scenari sono definiti nel documento di progettazione di {doc}`Swarm "
"<swarm>`, tuttavia, ciò non implica la sincronizzazione delle conversazioni "
"tra dispositivi per lo stesso utente."
#: ../../../developer/synchronization-protocol.md:8
msgid "Old method"
msgstr "Vecchio metodo"
#: ../../../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 sincronizzazione dei dispositivi è stata effettuata tramite DHT. Poiché "
"ogni valore NON DEVE superare i 64k, le conversazioni non sono state inviate"
" in sincronizzazione dei dispositivi, né i profili dei membri, perché è "
"troppo pesante. Questo è un problema e DEVE essere migliorato."
#: ../../../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 ""
"Nel vecchio metodo, il daemon sta ascoltando su \"inbox:DEVICE_ID\" per i "
"valori DeviceSync che contiene la lista di contatti da sincronizzare (cfr "
"`AccountManager::startSync() `);"
#: ../../../developer/synchronization-protocol.md:14
msgid ""
"**NOTE:** The current **DeviceSync** value present on the **DHT** is "
"deprecated with this draft."
msgstr ""
"**NOTA:** Il valore corrente **DeviceSync** presente sul **DHT** è deprecato"
" con questo progetto."
#: ../../../developer/synchronization-protocol.md:16
msgid "New method"
msgstr "Nuovo metodo"
#: ../../../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 ""
"Dal momento che Jami ha {doc}`ConnectionManager <connection-manager>`, "
"utilizzando il socket p2p è possibile eseguire sincronizzazione rapidamente "
"con i grandi valori (perché il socket non è limitato nei dati)"
#: ../../../developer/synchronization-protocol.md:20
msgid "Now, this is the scenario used to sync:"
msgstr "Questo è lo scenario usato per sincronizzare:"
#: ../../../developer/synchronization-protocol.md:22
msgid ""
"When the device (*A*) goes online, it announces its presence via a "
"DeviceAnnouncement like the OldMethod"
msgstr ""
"Quando il dispositivo (*A*) entra in rete, annuncia la sua presenza tramite "
"un annuncio di dispositivo come il metodo antico"
#: ../../../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 ""
"Altri dispositivi (*!A*) rilevano l'annuncio e chiedono a questo dispositivo"
" attraverso il **ConnectionManager** di aprire un nuovo canale chiamato "
"\"sync://DEVICE_ID_A\". (Nota: A riceverà un annuncio da altri dispositivi, "
"quindi chiederà anche canali di sincronizzazione)."
#: ../../../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 ""
"Non appena viene aperto questo canale, il dispositivo che chiede questo "
"canale invierà un valore **DeviceSync** (cfr. parte successiva) contenente "
"le sue conversazioni e contatti noti."
#: ../../../developer/synchronization-protocol.md:25
msgid "*A* will check the **DeviceSync** value and:"
msgstr "*A* controllerà il valore di **DeviceSync** e:"
#: ../../../developer/synchronization-protocol.md:26
msgid "Remove contacts if it detects removed contacts"
msgstr "Rimuovere i contatti se rileva i contatti rimossi"
#: ../../../developer/synchronization-protocol.md:27
msgid "Add contacts if it detects added contacts"
msgstr "Aggiungere contatti se rileva contatti aggiunti"
#: ../../../developer/synchronization-protocol.md:28
msgid "Remove conversations if it detects removed conversations"
msgstr "Elimina le conversazioni se rileva le conversazioni eliminate"
#: ../../../developer/synchronization-protocol.md:29
msgid "Add conversations if it detects added conversations"
msgstr "Aggiungere conversazioni se rileva conversazioni aggiunte"
#: ../../../developer/synchronization-protocol.md:30
msgid ""
"Remove conversation's requests if request is accepted (now in "
"conversations)/declined"
msgstr ""
"Elimina le richieste di conversazione se la richiesta è accettata (ora in "
"conversazione) / rifiutata"
#: ../../../developer/synchronization-protocol.md:31
msgid "Add conversation's requests if detected"
msgstr "Aggiungere le richieste della conversazione se rilevato"
#: ../../../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 ""
"Nota: Se *A* rileva nuove conversazioni, chiederà al dispositivo che ha "
"annunciato quella conversazione di clonare il repository attraverso un "
"canale git (come descritto nel progetto di chat {doc}`Swarm <swarm>`)"
#: ../../../developer/synchronization-protocol.md:35
msgid "Device Sync"
msgstr "Sincronizzazione del dispositivo"
#: ../../../developer/synchronization-protocol.md:37
msgid "This value is a JSON containing:"
msgstr "Questo valore è un JSON contenente:"
#: ../../../developer/synchronization-protocol.md:54
msgid "User stories"
msgstr "Storie degli utenti"
#: ../../../developer/synchronization-protocol.md:56
msgid "Sync when adding device"
msgstr "Sincronizzare quando si aggiunge il dispositivo"
#: ../../../developer/synchronization-protocol.md:58
#: ../../../developer/synchronization-protocol.md:65
#: ../../../developer/synchronization-protocol.md:73
msgid "Alice creates a conversation"
msgstr "Alice crea una conversazione"
#: ../../../developer/synchronization-protocol.md:59
#: ../../../developer/synchronization-protocol.md:66
msgid "(Optional) Alice add some messages"
msgstr "Alice aggiunge alcuni messaggi"
#: ../../../developer/synchronization-protocol.md:60
msgid "Alice adds another device"
msgstr "Alice aggiunge un altro dispositivo"
#: ../../../developer/synchronization-protocol.md:61
#: ../../../developer/synchronization-protocol.md:68
msgid ""
"The other device should receives and sync the conversation previously "
"created"
msgstr ""
"L'altro dispositivo dovrebbe ricevere e sincronizzare la conversazione "
"creata in precedenza"
#: ../../../developer/synchronization-protocol.md:63
msgid "Sync when connect a device"
msgstr "Sincronizzare quando si collega un dispositivo"
#: ../../../developer/synchronization-protocol.md:67
msgid "Alice connects another device"
msgstr "Alice collega un altro dispositivo"
#: ../../../developer/synchronization-protocol.md:70
msgid "Sync between multiple devices"
msgstr "Sincronizzazione tra più dispositivi"
#: ../../../developer/synchronization-protocol.md:72
msgid "Alice got 2 devices"
msgstr "Alice ha 2 dispositivi."
#: ../../../developer/synchronization-protocol.md:74
msgid ""
"The other device should receives and sync the conversation created on one of"
" the devices"
msgstr ""
"L'altro dispositivo deve ricevere e sincronizzare la conversazione creata su"
" uno dei dispositivi"
#: ../../../developer/synchronization-protocol.md:76
msgid "Sync for detecting new requests"
msgstr "Sincronizzazione per rilevare nuove richieste"
#: ../../../developer/synchronization-protocol.md:78
msgid "Alice receives a conversation's request"
msgstr "Alice riceve la richiesta di una conversazione"
#: ../../../developer/synchronization-protocol.md:79
msgid "Alice add a new device"
msgstr "Alice aggiunge un nuovo dispositivo"
#: ../../../developer/synchronization-protocol.md:80
msgid "The other device should retrieve the requests from device A"
msgstr "L'altro dispositivo deve recuperare le richieste dal dispositivo A"
#: ../../../developer/synchronization-protocol.md:82
msgid "Sync for accepted requests"
msgstr "Sincronizzazione delle richieste accettate"
#: ../../../developer/synchronization-protocol.md:84
#: ../../../developer/synchronization-protocol.md:90
msgid "Alice has 2 devices"
msgstr "Alice ha due dispositivi."
#: ../../../developer/synchronization-protocol.md:85
msgid "Alice accepts a conversation's request"
msgstr "Alice accetta la richiesta di una conversazione"
#: ../../../developer/synchronization-protocol.md:86
msgid "The other device should detect the accepted request"
msgstr "L'altro dispositivo deve rilevare la richiesta accettata"
#: ../../../developer/synchronization-protocol.md:88
msgid "Sync for decline requests"
msgstr "Sincronizzazione per le richieste di rifiuto"
#: ../../../developer/synchronization-protocol.md:91
msgid "Alice declines a conversation's request"
msgstr "Alice rifiuta la richiesta di una conversazione"
#: ../../../developer/synchronization-protocol.md:92
msgid "The other device should detect the declined request"
msgstr "L'altro dispositivo deve rilevare la richiesta rifiutata"
#: ../../../developer/synchronization-protocol.md:94
msgid "Current implementation"
msgstr "Attuale attuazione"
#: ../../../developer/synchronization-protocol.md:96
msgid "{gerrit}`15584` implements this page"
msgstr "{gerrit}`15584` implementa questa pagina"
#: ../../../developer/synchronizing-profiles.md:1
msgid "Profile synchronization"
msgstr "Sincronizzazione del profilo"
#: ../../../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 ""
"Ci sono due tipi di profili: quello per il conto corrente e quello dei "
"contatti. Poiché questa vcard contiene informazioni, come l'avatar e il nome"
" del display, dovrebbe essere sincronizzata il prima possibile. Ma, deve "
"essere inviata solo quando necessario, per evitare trasmissioni di dati non "
"necessarie. Il formato utilizzato per memorizzare i profili è una [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 "Dove sono archiviati i profili?"
#: ../../../developer/synchronizing-profiles.md:7
msgid "Self"
msgstr "Automazione"
#: ../../../developer/synchronizing-profiles.md:9
msgid ""
"It's in `${idPath_}/profile.vcf` e.g.: "
"`.local/share/jami/xxxxxx/profile.vcf` on GNU/Linux."
msgstr ""
"È in `${idPath_}/profile.vcf` es. `.local/share/jami/xxxxxx/profile.vcf` su "
"GNU/Linux."
#: ../../../developer/synchronizing-profiles.md:11
msgid "Contacts"
msgstr "Contatti"
#: ../../../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 ""
"Poiché questa logica è ancora gestita per cliente, dipende dal cliente. "
"Tuttavia, su Desktop, questo è unificato e memorizzato in: "
"`${idPath_}/profili/${base64(uri)}.vcf`"
#: ../../../developer/synchronizing-profiles.md:16
msgid "When a profile is sent"
msgstr "Quando viene inviato un profilo"
#: ../../../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 ""
"All'inizio di una chiamata, generalmente il cliente invia la vCard. "
"Tuttavia, questo metodo deve essere rimosso a favore dell'altro situato nel "
"daemon."
#: ../../../developer/synchronizing-profiles.md:23
msgid "Send to contact's devices"
msgstr "Inviare ai dispositivi dei contatti"
#: ../../../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 ""
"Quando si connette a un nuovo dispositivo, viene eseguito un canale di "
"sincronizzazione o SIP. Quando questo canale è pronto, controlliamo se "
"dobbiamo inviare il profilo. Per questo, il hash del profilo viene "
"confrontato con quello nella cache (`${cacheDir}/${accId}/vcard/sha3` come "
"`~/.cache/jami/xxxxx/vcard/sha3`on GNU/Linux), e viene verificato il file "
"`${cacheDir}/${accId}/vcard/deviceId`."
#: ../../../developer/synchronizing-profiles.md:27
msgid "Multidevices"
msgstr "Dispositivi multi-unità"
#: ../../../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 ""
"Se il profilo viene inviato e il dispositivo è dallo stesso account, le "
"conversazioni vengono controllate e inviamo i profili di tutti i membri. Il "
"nome del canale sarà \"${conversationId}/profile/${memberUri}.vcf\". "
"Comportamento testato in `daemon/test/unitTest/syncHistory/syncHistory.cpp`"
#: ../../../developer/technical-overview.md:1
msgid "Technical overview"
msgstr "Presentazione tecnica"
#: ../../../developer/technical-overview.md:4
msgid "Concepts"
msgstr "Concetti"
#: ../../../developer/technical-overview.md:7
msgid "Jami Account"
msgstr "Conto di 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 account **Jami** è definito da un'identità criptografica Jami basata su "
"**RSA asimetrica chiave-par** e gestito con **x.509 certificati** come "
"definito da *[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 utilizza la libreria di **gnutls** per generare e gestire chiavi e "
"certificati RSA."
#: ../../../developer/technical-overview.md:16
msgid "Jami certificate"
msgstr "Certificato di Jami"
#: ../../../developer/technical-overview.md:18
msgid "This represents the identify of a Jami user."
msgstr "Questo rappresenta l'identità di un utente Jami."
#: ../../../developer/technical-overview.md:19
msgid "Generated at account creation"
msgstr "Generato alla creazione di un conto"
#: ../../../developer/technical-overview.md:20
msgid "Contains the Jami account public key."
msgstr "Contiene la chiave pubblica del conto Jami."
#: ../../../developer/technical-overview.md:21
msgid ""
"The SHA-1 fingerprint (160-bits) of this public certificate is the "
"**JamiId**."
msgstr ""
"L'impronta digitale SHA-1 (160 bit) di questo certificato pubblico è il "
"**JamiId**."
#: ../../../developer/technical-overview.md:23
msgid "Signed by a CA (from an organization or self-signed)."
msgstr "Firmato da un CA (da un'organizzazione o autografo)."
#: ../../../developer/technical-overview.md:24
msgid "The subject UID field must be the hexadecimal form of the JamiId."
msgstr "Il campo UID soggetto deve essere la forma esadecimale del JamiId."
#: ../../../developer/technical-overview.md:25
msgid ""
"The issuer UID field must be the hexadecimal form of the issuer public key "
"fingerprint (CA)."
msgstr ""
"Il campo UID dell'emittente deve essere la forma esadecimale dell'impronta "
"digitale della chiave pubblica dell'emittente (CA)."
#: ../../../developer/technical-overview.md:27
msgid "Random RSA key-pair of at least 4096-bits long."
msgstr "Coppia di chiavi RSA casuale di almeno 4096 bit di lunghezza."
#: ../../../developer/technical-overview.md:29
msgid "Device certificate"
msgstr "Certificato di apparecchio"
#: ../../../developer/technical-overview.md:31
msgid "This is the identity of one specific device used to run Jami."
msgstr ""
"Questa è l'identità di un dispositivo specifico usato per gestire Jami."
#: ../../../developer/technical-overview.md:32
msgid "One per device."
msgstr "Uno per dispositivo."
#: ../../../developer/technical-overview.md:33
msgid "Random and 4096-bits long."
msgstr "Random e lungo 4096 bit."
#: ../../../developer/technical-overview.md:34
msgid "The SHA-1 fingerprint of the public key becomes the **DeviceId**."
msgstr ""
"L'impronta digitale SHA-1 della chiave pubblica diventa il **DeviceId**."
#: ../../../developer/technical-overview.md:35
msgid "Must be signed by the private key that created the Jami certificate."
msgstr ""
"Deve essere firmato dalla chiave privata che ha creato il certificato Jami."
#: ../../../developer/technical-overview.md:36
msgid "The subject UID field must be the hexadecimal form of the DeviceId."
msgstr ""
"Il campo UID soggetto deve essere la forma esadecimale del dispositivo."
#: ../../../developer/technical-overview.md:37
msgid ""
"The issuer UID field must be the hexadecimal form of the issuer public key "
"fingerprint (JamiId)."
msgstr ""
"Il campo UID dell'emittente deve essere la forma esadecimale dell'impronta "
"digitale della chiave pubblica dell'emittente (JamiId)."
#: ../../../developer/technical-overview.md:40
msgid "Usages"
msgstr "Utilizzamenti"
#: ../../../developer/technical-overview.md:42
msgid "The JamiId:"
msgstr "Il 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 ""
"È la chiave DHT dove viene pubblicato il elenco dei dispositivi di account e"
" dove tutti i dispositivi ascoltano sincronizzare i cambiamenti di account "
"(cioè aggiungere o revocare un dispositivo)."
#: ../../../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 ""
"Le chiavi RSA del certificato Jami sono utilizzate come chiavi a lungo "
"termine per firmare/cifrare/decrittografare i messaggi inviati tramite il "
"DHT:"
#: ../../../developer/technical-overview.md:48
msgid ""
"private key to sign-off and decrypt incoming messages and device "
"certificates."
msgstr ""
"chiave privata per la firma e la decodifica dei messaggi in arrivo e dei "
"certificati di dispositivo."
#: ../../../developer/technical-overview.md:50
msgid ""
"public key to encrypt messages (this is done by the message issuer using the"
" receiver public key)."
msgstr ""
"chiave pubblica per crittografare i messaggi (questo viene fatto "
"dall'emittente del messaggio utilizzando la chiave pubblica del "
"destinatario)."
#: ../../../developer/technical-overview.md:52
msgid ""
"A device can be \"removed\" from a Jami account through revocation of the "
"device certificate:"
msgstr ""
"Un dispositivo può essere \"rilevato\" da un account Jami mediante la revoca"
" del certificato di dispositivo:"
#: ../../../developer/technical-overview.md:54
msgid ""
"Revoked device certificates are added to one or more standard x509 "
"Certificate Revocation List (CRL)."
msgstr ""
"I certificati di dispositivo revocati sono aggiunti a uno o più standard "
"x509 Certificate Revocation List (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 ""
"Le RRL per il dispositivo revocato devono essere valide e firmate con la "
"corrispondente chiave CA, che è la chiave privata del conto Jami."
#: ../../../developer/technical-overview.md:59
msgid "Long-term Storage"
msgstr "Stoccaggio a lungo termine"
#: ../../../developer/technical-overview.md:61
msgid "Why storing data?"
msgstr "Perché memorizzare i dati?"
#: ../../../developer/technical-overview.md:65
msgid ""
"Jami needs to load certificates and key-pairs each time the application is "
"started."
msgstr ""
"Jami deve caricare certificati e coppie di chiavi ogni volta che viene "
"avviata la domanda."
#: ../../../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 ""
"Quando Jami crea un nuovo dispositivo, queste informazioni sono necessarie, "
"condivise da un altro dispositivo di fiducia in modo sicuro."
#: ../../../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 ""
"Non tutte le piattaforme forniscono un modo sicuro per memorizzare i dati, "
"Jami supporta questo fatto criptando i dati memorizzati al di fuori della "
"memoria (cioè su un file-system) utilizzando una password definita "
"dall'utente durante la creazione dell'account."
#: ../../../developer/technical-overview.md:76
msgid "These files are stored on user device (see below for details):"
msgstr ""
"Questi file sono memorizzati sul dispositivo dell'utente (vedere qui sotto "
"per i dettagli):"
#: ../../../developer/technical-overview.md:77
msgid "a compressed and encrypted archive with private account data."
msgstr "un archivio compresso e crittografato con i dati del conto privato."
#: ../../../developer/technical-overview.md:78
msgid "the public certificates chain as a CRT file"
msgstr "la catena dei certificati pubblici come file CRT"
#: ../../../developer/technical-overview.md:79
msgid "the device private key."
msgstr "la chiave privata del dispositivo."
#: ../../../developer/technical-overview.md:81
msgid "Jami archive (export.gz)"
msgstr "Archivio Jami (export.gz)"
#: ../../../developer/technical-overview.md:83
msgid "Contains private account data."
msgstr "Contiene dati di conto privato."
#: ../../../developer/technical-overview.md:84
msgid ""
"Currently transmitted over the DHT network when device is created or "
"revoked."
msgstr ""
"Attualmente trasmesso sulla rete DHT quando il dispositivo viene creato o "
"revocato."
#: ../../../developer/technical-overview.md:86
msgid "It's a JSON compressed and encrypted file."
msgstr "E' un file JSON compresso e crittografato."
#: ../../../developer/technical-overview.md:90
msgid "The current format is (could change at any time):"
msgstr "Il formato corrente è (potrebbe cambiare in qualsiasi momento):"
#: ../../../developer/technical-overview.md:103
msgid "The JSON byte-stream is compressed using \\*gzip\\* algorithm."
msgstr "Il flusso di byte JSON è compresso utilizzando l'algoritmo \\*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 ""
"Quindi il flusso gzip è crittografato utilizzando una cifra simmetrica AES-"
"GCM-256 con una chiave a 256 bit."
#: ../../../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 ""
"Questa chiave è derivata dalla password fornita dall'utente, un PIN e un "
"timestamp, utilizzando [Argon2](https://github.com/P-H-C/phc-winner-argon2) "
"(un password stretching e normalizer) come segue:"
#: ../../../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 ""
"Il PIN deve essere mostrato all'utente per essere copiato manualmente sul "
"nuovo dispositivo fisico insieme alla password per completare il processo di"
" creazione del dispositivo."
#: ../../../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 ""
"NOTA: quando si esporta un file su DHT o altrove, il demone aggiorna "
"l'archivio prima, per scrivere i contatti più recenti. Questo è il motivo "
"per cui la password è necessaria quando si esporta (non è solo una copia "
"dell'archivio altrove)"
#: ../../../developer/technical-overview.md:129
msgid "Jami device certificate chain (ring\\_device.crt)"
msgstr "Catenata di certificati per dispositivi Jami (ring\\_device.crt)"
#: ../../../developer/technical-overview.md:131
#: ../../../developer/technical-overview.md:137
msgid "PEM format"
msgstr "Formatto PEM"
#: ../../../developer/technical-overview.md:132
msgid ""
"Includes the Device certificate and parent certificates (Jami device "
"certificate and parents)"
msgstr ""
"Include il certificato di dispositivo e i certificati genitori (certificato "
"di dispositivo Jami e genitori)"
#: ../../../developer/technical-overview.md:135
msgid "Device private key (ring\\_device.key)"
msgstr "Chiusura privata del dispositivo (ring\\_device.key)"
#: ../../../developer/technical-overview.md:138
msgid "not encrypted, we let the device file-system protect this file"
msgstr ""
"Non è crittografato, lasciamo che il file-system del dispositivo protegga "
"questo file"
#: ../../../developer/technical-overview.md:140
msgid "The DHT network"
msgstr "La rete DHT"
#: ../../../developer/technical-overview.md:142
msgid ""
"Dedicated [ Jami distributed network](Ring_distributed_network \"wikilink\")"
" page."
msgstr ""
"Pagina dedicata [Jami distribuita rete] ((Ring_distributed_network "
"\"wikilink\")"
#: ../../../developer/technical-overview.md:145
msgid "Contact Request"
msgstr "Richiesta di contatto"
#: ../../../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 "Messaggio istantaneo"
#: ../../../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 "Con chiamate in entrata e in uscita"
#: ../../../developer/technical-overview.md:164
msgid ""
"Contactable addresses (i.e. IP addresses) of the user are given to peer "
"only:"
msgstr ""
"Gli indirizzi di contatto (ad esempio gli indirizzi IP) dell'utente sono "
"dati solo a pari:"
#: ../../../developer/technical-overview.md:166
msgid "When we call a peer (outgoing call)."
msgstr "Quando chiamiamo un compagno,"
#: ../../../developer/technical-overview.md:167
msgid "When a **trusted** peer is calling (incoming call)."
msgstr "Quando un compagno di fiducia chiama (chiamata in arrivo)."
#: ../../../developer/technical-overview.md:168
msgid ""
"All combination forms of how a specific device can be contacted is "
"summarized by a ICE message:"
msgstr ""
"Tutte le forme combinate di come un dispositivo specifico può essere "
"contattato sono riassunte da un messaggio 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)* definisce ICE (Interactive"
" Connectivity Establishment), un protocollo per il passaggio NAT."
#: ../../../developer/technical-overview.md:176
msgid "Making an outgoing call"
msgstr "Fare una chiamata in uscita"
#: ../../../developer/technical-overview.md:178
msgid ""
"The calling device gathers candidates and build an **Initial Offer** "
"according to the ICE specifications."
msgstr ""
"Il dispositivo di chiamata raccoglie i candidati e crea un'offerta iniziale "
"secondo le specifiche ICE."
#: ../../../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 ""
"Il dispositivo di chiamata inserisce l'offerta ICE criptata (l'offerta "
"iniziale*) sul DHT al: `h(\"`[callto:\"+DeviceID`](callto:%22+DeviceID)`)` "
"dove *h* è SHA1, *+* è la concatenation string, *DeviceID* è in forma "
"esadecimale."
#: ../../../developer/technical-overview.md:185
msgid ""
"The calling device waits on the peer answer, with its own ICE candidates "
"lists."
msgstr ""
"Il dispositivo di chiamata aspetta la risposta dei pari, con le sue liste di"
" candidati ICE."
#: ../../../developer/technical-overview.md:187
msgid ""
"At peer answer reception, the calling device starts the ICE negotiation."
msgstr ""
"Al ricevimento delle risposte dei colleghi, il dispositivo di chiamata "
"inizia la negoziazione 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 ""
"Se il negoziato è riuscito, il processo continua su un sistema di sessioni "
"DTLS del lato del cliente su una presa ICE creata (vedere sotto)."
#: ../../../developer/technical-overview.md:192
msgid "Listening for incoming calls"
msgstr "Ascolto le chiamate in arrivo"
#: ../../../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 dispositivo ascolta le chiamate in arrivo eseguendo un'operazione OpenDHT"
" ascolto su `h(\"`[`callto:\"+DeviceID`](callto:%22+DeviceID)`)` dove *h* è "
"SHA1, *+* è la concatenation string e *DeviceID* è in forma esadecimale."
#: ../../../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 ""
"Al ricevimento della ICE *Offerta iniziale*, il dispositivo chiamato ** "
"deve** effettuare una convalida di sicurezza del pari (vedere sotto)."
#: ../../../developer/technical-overview.md:200
msgid ""
"If the security validation succeed, the called device starts the ICE "
"negotiation."
msgstr ""
"Se la convalida di sicurezza riesce, il dispositivo chiamato inizia la "
"negoziazione 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 ""
"Se il negoziato è riuscito, il processo continua su un sistema di sessioni "
"DTLS del lato del server su una presa ICE creata (vedere sotto)."
#: ../../../developer/technical-overview.md:205
msgid ""
"*Note: OpenDHT drops values that are not properly encrypted or signed, as "
"specified by OpenDHT protocol.*"
msgstr ""
"*Nota: OpenDHT elimina i valori non correttamente crittografati o firmati, "
"come specificato dal protocollo OpenDHT.*"
#: ../../../developer/technical-overview.md:208
msgid "ICE serialization format"
msgstr "Formatto di serielizzazione ICE"
#: ../../../developer/technical-overview.md:210
msgid ""
"ICE messages exchanged between peers during a call set up use following "
"format."
msgstr ""
"I messaggi ICE scambiati tra i colleghi durante una chiamata utilizzati nel "
"formato seguente."
#: ../../../developer/technical-overview.md:212
msgid ""
"An ICE message is a chunk of binary data, following "
"[msgpack](http://msgpack.org/) data format."
msgstr ""
"Un messaggio ICE è un pezzo di dati binari, seguendo il formato dati "
"[msgpack]"
#: ../../../developer/technical-overview.md:222
msgid "**Current defined protocol is 1**:"
msgstr "**Il protocollo definito in corso è 1**:"
#: ../../../developer/technical-overview.md:224
msgid "Security Validation of the Peer"
msgstr "Convalida della sicurezza da parte dei pari"
#: ../../../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 ""
"Al ricevimento dell'offerta iniziale ICE criptata e firmata (attraverso "
"l'operazione di ascolto), un dispositivo chiamato deve effettuare controlli "
"di autorizzazione del dispositivo di chiamata, identificato come il "
"firmatario dell'offerta iniziale."
#: ../../../developer/technical-overview.md:230
msgid ""
"Authorization rules are implementation defined, but a typical implementation"
" would authorize known or trusted contacts."
msgstr ""
"Le regole di autorizzazione sono definite per l'attuazione, ma una tipico "
"attuazione autorizerebbe contatti conosciuti o di fiducia."
#: ../../../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 ""
"Una volta che un canale di comunicazione peer-to-peer è stato istituito dal "
"protocollo ICE, il dispositivo chiamato inizia una sessione DTLS server-side"
" sul socket ICE, mentre il chiamer inizia una sessione DTLS client-side "
"sull'altro lato del socket ICE."
#: ../../../developer/technical-overview.md:247
msgid ""
"The DTLS communication is [RFC6347](https://tools.ietf.org/html/rfc6347) "
"compliant using gnutls library."
msgstr ""
"La comunicazione DTLS è [RFC6347](https://tools.ietf.org/html/rfc6347) "
"conforme utilizzando la libreria 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 ""
"Per evitare che i certificati di pari siano visualizzati in testo chiaro per"
" l'anonimato della chiamata, la stretta di mano della sessione viene "
"effettuata due volte:"
#: ../../../developer/technical-overview.md:253
msgid ""
"A first handshake in **anonymous mode** to create a secure but anonymous "
"transport."
msgstr ""
"Una prima stretta di mano in modalità anonima per creare un trasporto sicuro"
" ma anonimo."
#: ../../../developer/technical-overview.md:255
msgid ""
"A second handshake in **certificate mode**, over the first one, to prove the"
" identity of peers."
msgstr ""
"Una seconda stretta di mano in modalità certificato, rispetto alla prima, "
"per dimostrare l'identità dei coetanei."
#: ../../../developer/technical-overview.md:258
msgid "Only PFS cipher suites are supported:"
msgstr "Sono supportate solo le suite di codici PFS:"
#: ../../../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'insieme di suite di codici supportate è definito come implementazione, ma "
"dovrebbe includere almeno ECDHE-AES-GCM."
#: ../../../developer/technical-overview.md:261
msgid "The actual cipher suites (in gnutls form) is:"
msgstr "Le suite di codici reali (in forma di gnuccelli) sono:"
#: ../../../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 ""
"passi anonimi: `SECURE192:-KX-ALL:+ANON-ECDH:+ANON-DH:+SECURE192:-VERS-TLS-"
"ALL:+VERS-DTLS-ALL:-RSA:%SERVER_PRECEDENCE:%SAFE_RENEGOTIATION`"
#: ../../../developer/technical-overview.md:264
msgid ""
"certificate step: `SECURE192:-VERS-TLS-ALL:+VERS-DTLS-"
"ALL:-RSA:%SERVER_PRECEDENCE:%SAFE_RENEGOTIATION`"
msgstr ""
"Passo di certificazione: `SECURE192:-VERS-TLS-ALL: +VERS-DTLS-"
"ALL:-RSA:%SERVER_PRECEDENCE:%SAFE_RENEGOTIATION`"
#: ../../../developer/technical-overview.md:267
msgid "SIP signaling"
msgstr "Segnalazione SIP"
#: ../../../developer/technical-overview.md:269
msgid ""
"Used over the DTLS session to signaling the call (vcard, media negotiation, "
"hangup, instant messaging, ...)"
msgstr ""
"Usato durante la sessione DTLS per segnalare la chiamata (vcard, "
"negoziazione dei media, hangup, messaggistica istantanea,...)"
#: ../../../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 ""
"Una volta che è disponibile un canale di comunicazione peer-to-peer "
"crittografato e autenticato, deve essere utilizzato il protocollo "
"[SIP]https://tools.ietf.org/html/rfc3261) per effettuare una chiamata e "
"inviare messaggi."
#: ../../../developer/technical-overview.md:275
msgid ""
"The caller might send a SIP INVITE as soon as the DTLS channel is "
"established."
msgstr ""
"Il richiamatore potrebbe inviare un SIP INVITE non appena il canale DTLS è "
"stato creato."
#: ../../../developer/technical-overview.md:284
msgid "Presence"
msgstr "Presenza"
#: ../../../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 "Sicurezza / Privacy"
#: ../../../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 fornisce un segreto di avanzamento per le chiamate e nei messaggi di "
"testo con diverse negoziazioni di chiavi di Eliptic Curve Diffie-Hellman ad "
"ogni chiamata."
#: ../../../developer/technical-overview.md:297
msgid "More informations:"
msgstr "Ulteriori informazioni:"
#: ../../../developer/technical-overview.md:299
msgid ""
"[Technical overview](technical/Technical-overview) of concepts and protocols"
" inside Jami"
msgstr ""
"[Visualità tecnica](visualità tecnica/tecnica) dei concetti e dei protocolli"
" all'interno di Jami"
#: ../../../developer/working-with-gerrit.md:1
msgid "Working with Gerrit"
msgstr "Lavorare con Gerrit"
#: ../../../developer/working-with-gerrit.md:4
msgid "Account Setup"
msgstr "Configurazione dell' account"
#: ../../../developer/working-with-gerrit.md:6
msgid "Gerrit server: <https://review.jami.net>"
msgstr "Servidore Gerrit: <https://review.jami.net>"
#: ../../../developer/working-with-gerrit.md:7
msgid ""
"User documentation: <https://review.jami.net/Documentation/intro-user.html>"
msgstr ""
"Documentazione dell'utente: <https://review.jami.net/Documentazione/intro-"
"user.html>"
#: ../../../developer/working-with-gerrit.md:8
msgid "Jami projects on Gerrit: <https://review.jami.net/admin/repos/>"
msgstr "Progetti Jami su 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 ""
"Accedere con il tuo account google o github o con il tuo account "
"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 ""
"Dovrai anche [caricare una chiave "
"SSH]https://review.jami.net/settings/#SSHKeys) per poter effettuare "
"modifiche per la revisione."
#: ../../../developer/working-with-gerrit.md:12
msgid "Don't forget to select a username."
msgstr "Non dimenticare di selezionare un nome utente."
#: ../../../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 ""
"Infine, l'indirizzo email specificato nella configurazione git deve "
"corrispondere a quello registrato con il tuo account Gerrit."
#: ../../../developer/working-with-gerrit.md:15
msgid ""
"*Note for Savoir-faire Linux employees: please continue to use your "
"@savoirfairelinux.com email address.*"
msgstr ""
"* Nota per i dipendenti di Savoir-faire Linux: si prega di continuare a "
"utilizzare il tuo indirizzo email @savoirfairelinux.com.*"
#: ../../../developer/working-with-gerrit.md:17
msgid "To Know your Git Config"
msgstr "Per conoscere la configurazione 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 "Per testare l' accesso SSH"
#: ../../../developer/working-with-gerrit.md:23
msgid ""
"To check that your SSH access is properly setup, run the following command:"
msgstr ""
"Per verificare che l'accesso SSH sia stato configurato correttamente, "
"eseguire il seguente comando:"
#: ../../../developer/working-with-gerrit.md:25
msgid "`ssh -p 29420 <username>@review.jami.net`"
msgstr "`ssh -p 29420 <nome utente>@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> è il tuo nome utente Gerrit, che dovresti aver impostato durante "
"la creazione dell'account."
#: ../../../developer/working-with-gerrit.md:44
msgid "Git Configuration"
msgstr "Configurazione Git"
#: ../../../developer/working-with-gerrit.md:46
msgid "Gerrit is the official git repository."
msgstr "Gerrit e' il deposito ufficiale di Git."
#: ../../../developer/working-with-gerrit.md:48
msgid "To update the configuration"
msgstr "Per aggiornare la configurazione"
#: ../../../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 ""
"Per aggiornare le informazioni remote, si deve usare il repository Gerrit."
#: ../../../developer/working-with-gerrit.md:52
msgid ""
"`git remote set-url origin "
"ssh://<username>@review.jami.net:29420/<project_name>`"
msgstr ""
"`git set-url origin ssh://<username>@review.jami.net:29420/<project_name>`"
#: ../../../developer/working-with-gerrit.md:54
msgid "Replace `<project_name>` by the correct project (example: jami-daemon)"
msgstr ""
"Rimpiazzare `<project_name>` con il progetto corretto (esempio: jami-daemon)"
#: ../../../developer/working-with-gerrit.md:56
msgid "Or clone the existing repository if you want to start fresh."
msgstr "O clona il repository esistente se vuoi ricominciare da capo."
#: ../../../developer/working-with-gerrit.md:58
msgid "To Push by Default in refs/for/master"
msgstr "Per spingere per impostazione predefinita in refs/for/master"
#: ../../../developer/working-with-gerrit.md:60
msgid ""
"You can configure git to automatically create a review when a change is "
"pushed."
msgstr ""
"Puoi configurare Git per creare automaticamente una recensione quando viene "
"spinta una modifica."
#: ../../../developer/working-with-gerrit.md:62
msgid "`git config remote.origin.push HEAD:refs/for/master`"
msgstr "`git config remote.origin.push HEAD:refs/for/master`"
#: ../../../developer/working-with-gerrit.md:64
msgid "To Create the Review"
msgstr "Per creare la revisione"
#: ../../../developer/working-with-gerrit.md:66
msgid ""
"When pushing to this magic branch, a review will automatically be created on"
" Gerrit."
msgstr ""
"Quando si spinge a questo ramo magico, verrà creata automaticamente una "
"recensione su Gerrit."
#: ../../../developer/working-with-gerrit.md:68
msgid "`git push origin HEAD:refs/for/master`"
msgstr "`git spingere origine TESTO:refs/for/master`"
#: ../../../developer/working-with-gerrit.md:70
msgid ""
"If you configured the default to refs/for/master as described above, simply"
msgstr ""
"Se hai configurato il default a refs/for/master come descritto sopra, basta"
#: ../../../developer/working-with-gerrit.md:72
msgid "`git push`"
msgstr "`git spingere `"
#: ../../../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 ""
"Se HEAD attualmente punta alla branca con i commit che vorresti spingere. "
"Idealmente, dovresti lavorare in una branca di funzionalità / bug per il "
"problema in questione."
#: ../../../developer/working-with-gerrit.md:76
msgid "`git push origin <bugfix_branchname>:refs/for/master`"
msgstr "`git push origin <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 ""
"Se questa è la prima volta che spingi, verrai invitato ad installare un "
"gancio post-commit per inserire un Change-ID nel tuo messaggio di commit. "
"Gerrit ha bisogno di questo per tracciare i patchset e rifiuterà i push fino"
" a quando non lo installa."
#: ../../../developer/working-with-gerrit.md:80
msgid "To Push a Private patch"
msgstr "Per spingere un patch privato"
#: ../../../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 ""
"È possibile spingere un lavoro in corso (a.k.a. progetto) spingendo a "
"refs/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 ""
"Ad esempio, si può desiderare un telecomando \"privato\" da spingere; aprire"
" <project_dir>/.git/config e aggiungere:"
#: ../../../developer/working-with-gerrit.md:93
msgid "Then:"
msgstr "Allora:"
#: ../../../developer/working-with-gerrit.md:95
msgid "`git push private`"
msgstr "`git spingere privato `"
#: ../../../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 ""
"La funzione privata è identica a quella dei patch set, solo che non sono "
"visibili per altri e non attivano alcuna costruzione di Jenkins."