From d8af5509b9d95ef45b0a29763d57d1a0a8c55ce0 Mon Sep 17 00:00:00 2001 From: Sudo-Ivan Date: Wed, 7 Jan 2026 19:13:48 -0600 Subject: [PATCH] feat(locales): update German and Russian translations, add Italian localization - Enhanced German and Russian JSON files with new entries for telemetry, location management, and content security policy settings. - Added Italian localization file with comprehensive translations for the application, covering various features and settings. - Improved user experience by ensuring consistent terminology across all supported languages. --- meshchatx/src/frontend/locales/de.json | 78 +- meshchatx/src/frontend/locales/en.json | 66 +- meshchatx/src/frontend/locales/it.json | 1503 ++++++++++++++++++++++++ meshchatx/src/frontend/locales/ru.json | 78 +- 4 files changed, 1695 insertions(+), 30 deletions(-) create mode 100644 meshchatx/src/frontend/locales/it.json diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json index 1ad9e3e..5997a6a 100644 --- a/meshchatx/src/frontend/locales/de.json +++ b/meshchatx/src/frontend/locales/de.json @@ -194,9 +194,42 @@ "emergency_mode_active": "Notfallmodus aktiv - In-Memory-Datenbank und eingeschränkte Dienste werden verwendet.", "blackhole_integration_enabled": "Blackhole-Integration", "blackhole_integration_description": "Identitäten automatisch auf der Reticulum-Transportebene sperren (Blackhole), wenn Benutzer in MeshChatX verbannt werden.", - "failed_announce": "failed to announce", - "search_settings": "Search settings...", - "show_qr": "Show QR Code" + "failed_announce": "Ankündigung fehlgeschlagen", + "search_settings": "Einstellungen suchen...", + "show_qr": "QR-Code anzeigen", + "csp_settings": "Content-Security-Policy (CSP)", + "csp_description": "Fügen Sie manuell erlaubte Domains und Quellen für verschiedene Ressourcentypen hinzu. Dies ist nützlich für benutzerdefinierte Kachelserver, Bots oder externe Integrationen.", + "csp_extra_connect_src": "Zusätzliche Connect-Quellen", + "csp_extra_connect_src_description": "Zusätzliche Quellen für fetch/Websocket-Verbindungen (z. B. https://api.example.com).", + "csp_extra_img_src": "Zusätzliche Bildquellen", + "csp_extra_img_src_description": "Zusätzliche Quellen für Bilder und Kacheln.", + "csp_extra_frame_src": "Zusätzliche Frame-Quellen", + "csp_extra_frame_src_description": "Zusätzliche Quellen für Iframes.", + "csp_extra_script_src": "Zusätzliche Skriptquellen", + "csp_extra_script_src_description": "Zusätzliche Quellen für Skripte (nur für fortgeschrittene Benutzer).", + "csp_extra_style_src": "Zusätzliche Style-Quellen", + "csp_extra_style_src_description": "Zusätzliche Quellen für Stylesheets.", + "location": "Standort", + "location_source": "Standortquelle", + "location_source_browser": "Automatisch (Browser)", + "location_source_manual": "Manuell", + "location_source_browser_desc": "Verwendet die Geolocation-API Ihres Browsers. Hinweis: In der Desktop-App kann dies Google-Dienste nutzen.", + "location_source_manual_desc": "Verwenden Sie manuell eingegebene Koordinaten für maximale Privatsphäre.", + "location_manual_lat": "Breitengrad", + "location_manual_lon": "Längengrad", + "location_manual_alt": "Höhe (m)", + "telemetry_enabled": "Telemetrie aktiviert", + "telemetry_description": "Erlauben Sie MeshChatX das Senden und Empfangen von Telemetriedaten. Dies beinhaltet die Beantwortung von Standortanfragen von vertrauenswürdigen Peers.", + "telemetry_trusted_peers": "Vertrauenswürdige Telemetrie-Peers", + "telemetry_no_trusted_peers": "Keine vertrauenswürdigen Peers konfiguriert. Vertrauen Sie Peers aus dem Chat-Menü, um ihnen zu erlauben, Ihren Standort abzufragen.", + "telemetry_revoke_trust": "Vertrauen entziehen", + "telemetry_trust_revoked": "Telemetrie-Vertrauen für {name} entzogen", + "telemetry_trust_granted_alert": "Peer ist nun für Telemetrie vertrauenswürdig.", + "telemetry_trust_revoked_alert": "Telemetrie-Vertrauen entzogen.", + "telemetry_trust_failed": "Fehler beim Aktualisieren des Telemetrie-Vertrauens.", + "telemetry_trust_revoke": "Telemetrie-Vertrauen entziehen", + "telemetry_trust_grant": "Für Telemetrie vertrauen", + "location_manage_desc": "Verwalten Sie, wie Ihr Standort geteilt wird." }, "common": { "open": "Öffnen", @@ -362,6 +395,7 @@ "export_all": "Alle exportieren", "search_placeholder": "Suche nach Name, Typ, Host...", "all": "Alle", + "connected_only": "Nur verbundene", "all_types": "Alle Typen", "no_interfaces_found": "Keine Schnittstellen gefunden", "no_interfaces_description": "Passen Sie Ihre Suche an oder fügen Sie eine neue Schnittstelle hinzu.", @@ -572,7 +606,10 @@ "no_contacts_telephone": "No contacts found in telephone", "failed_load_contacts": "Failed to load contacts", "location_request_sent": "Location request sent", - "failed_send_location_request": "Failed to send location request", + "failed_send_location_request": "Senden der Standortanfrage fehlgeschlagen", + "fetching_location": "Standort wird abgerufen...", + "location_sent": "Standort erfolgreich geteilt", + "location_requested": "Standort angefordert", "remove_image_confirm": "Are you sure you want to remove this image attachment?", "failed_start_recording": "failed to start recording", "remove_audio_confirm": "Are you sure you want to remove this audio attachment?", @@ -740,6 +777,21 @@ "queues_purged": "Announce queues purged", "failed_purge": "Failed to purge queues" }, + "rnpath_trace": { + "title": "RNS Pfad-Verfolgung", + "description": "Visualisiere den Pfad und die Hops zu einem Ziel-Hash im Mesh.", + "destination_hash": "Ziel-Hash", + "placeholder": "32-stelligen Ziel-Hash eingeben...", + "trace": "Pfad verfolgen", + "tracing": "Verfolge Pfad durch das Mesh...", + "total_hops": "Gesamt Hops", + "interface": "Ausgangs-Schnittstelle", + "next_hop": "Nächster Hop", + "ready_title": "Einen Pfad verfolgen", + "ready_desc": "Gib oben einen Ziel-Hash ein, um zu visualisieren, wie Pakete durch das Mesh reisen.", + "unknown_hops": "{count} Zwischen-Hops", + "ping_test": "Mit Ping testen" + }, "translator": { "title": "Übersetzer", "description": "Text mit der LibreTranslate API oder lokalem Argos Translate übersetzen." @@ -897,15 +949,15 @@ "description": "Erstellen und lesen Sie LXMF-signierte Papiernachrichten über QR-Codes." }, "rns_page_node": { - "title": "RNS Page-Knoten", + "title": "RNS Page Node", "description": "Nomadnet-Micron-Seiten hosten und Dateien mühelos teilen." }, "rns_tunnel": { - "title": "RNS-Tunnel", + "title": "RNSTunnel", "description": "Regulären IP-Verkehr über Reticulum-Netzwerkverbindungen tunneln." }, "rns_filesync": { - "title": "RNS-Dateisynchronisierung", + "title": "RNSFilesync", "description": "Dateien effizient mit anderen Mesh-Peers teilen und synchronisieren." }, "bots": { @@ -1328,14 +1380,16 @@ "nav_settings_desc": "Einstellungsseite öffnen", "nav_ping": "Ping", "nav_ping_desc": "Netzwerkknoten pingen", - "nav_rnprobe": "RN Probe", + "nav_rnprobe": "RNProbe", "nav_rnprobe_desc": "Reticulum-Knoten sondieren", - "nav_rncp": "RN CP", + "nav_rncp": "RNCP", "nav_rncp_desc": "Reticulum Control Protocol", - "nav_rnstatus": "RN Status", + "nav_rnstatus": "RNStatus", "nav_rnstatus_desc": "Reticulum-Status anzeigen", - "nav_rnpath": "RN Pfad", + "nav_rnpath": "RNPath", "nav_rnpath_desc": "Netzwerkpfade anzeigen", + "nav_rnpath_trace": "RNPath-Verfolgung", + "nav_rnpath_trace_desc": "Netzwerkpfade visualisieren", "nav_translator": "Übersetzer", "nav_translator_desc": "Nachrichten übersetzen", "nav_forwarder": "Weiterleiter", @@ -1450,4 +1504,4 @@ "banishment_lifted": "Banishment lifted successfully", "failed_lift_banishment": "Failed to lift banishment" } -} \ No newline at end of file +} diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json index fa5ba68..4ffb4bc 100644 --- a/meshchatx/src/frontend/locales/en.json +++ b/meshchatx/src/frontend/locales/en.json @@ -196,7 +196,40 @@ "loading_identity": "Loading your identity", "emergency_mode_active": "Emergency Mode Active - Using in-memory database and restricted services.", "blackhole_integration_enabled": "Blackhole Integration", - "blackhole_integration_description": "Automatically blackhole identities at the Reticulum transport layer when banishing users in MeshChatX." + "blackhole_integration_description": "Automatically blackhole identities at the Reticulum transport layer when banishing users in MeshChatX.", + "csp_settings": "Content Security Policy (CSP)", + "csp_description": "Manually add allowed domains and sources for various resource types. This is useful for custom tile servers, bots, or external integrations.", + "csp_extra_connect_src": "Extra Connect Sources", + "csp_extra_connect_src_description": "Additional sources for fetch/websocket connections (e.g. https://api.example.com).", + "csp_extra_img_src": "Extra Image Sources", + "csp_extra_img_src_description": "Additional sources for images and tiles.", + "csp_extra_frame_src": "Extra Frame Sources", + "csp_extra_frame_src_description": "Additional sources for iframes.", + "csp_extra_script_src": "Extra Script Sources", + "csp_extra_script_src_description": "Additional sources for scripts (advanced use only).", + "csp_extra_style_src": "Extra Style Sources", + "csp_extra_style_src_description": "Additional sources for stylesheets.", + "location": "Location", + "location_source": "Location Source", + "location_source_browser": "Automatic (Browser)", + "location_source_manual": "Manual", + "location_source_browser_desc": "Uses your browser's geolocation API. Note: In the desktop app, this may use Google services.", + "location_source_manual_desc": "Use manually entered coordinates for maximum privacy.", + "location_manual_lat": "Latitude", + "location_manual_lon": "Longitude", + "location_manual_alt": "Altitude (m)", + "telemetry_enabled": "Telemetry Enabled", + "telemetry_description": "Allow MeshChatX to send and receive telemetry data. This includes responding to location requests from trusted peers.", + "telemetry_trusted_peers": "Trusted Telemetry Peers", + "telemetry_no_trusted_peers": "No trusted peers configured. Trust peers from the chat menu to allow them to request your location.", + "telemetry_revoke_trust": "Revoke Trust", + "telemetry_trust_revoked": "Revoked telemetry trust for {name}", + "telemetry_trust_granted_alert": "Peer is now trusted for telemetry.", + "telemetry_trust_revoked_alert": "Telemetry trust revoked.", + "telemetry_trust_failed": "Failed to update telemetry trust.", + "telemetry_trust_revoke": "Revoke Telemetry Trust", + "telemetry_trust_grant": "Trust for Telemetry", + "location_manage_desc": "Manage how your location is shared." }, "common": { "open": "Open", @@ -362,6 +395,7 @@ "export_all": "Export all", "search_placeholder": "Search by name, type, host...", "all": "All", + "connected_only": "Connected only", "all_types": "All types", "no_interfaces_found": "No interfaces found", "no_interfaces_description": "Adjust your search or add a new interface.", @@ -575,6 +609,9 @@ "failed_load_contacts": "Failed to load contacts", "location_request_sent": "Location request sent", "failed_send_location_request": "Failed to send location request", + "fetching_location": "Fetching location...", + "location_sent": "Location shared successfully", + "location_requested": "Location requested", "remove_image_confirm": "Are you sure you want to remove this image attachment?", "failed_start_recording": "failed to start recording", "remove_audio_confirm": "Are you sure you want to remove this audio attachment?", @@ -829,6 +866,21 @@ "queues_purged": "Announce queues purged", "failed_purge": "Failed to purge queues" }, + "rnpath_trace": { + "title": "RNS Path Trace", + "description": "Visualize the path and hops to any destination hash on the mesh.", + "destination_hash": "Destination Hash", + "placeholder": "Enter 32-char destination hash...", + "trace": "Trace Path", + "tracing": "Tracing path through the mesh...", + "total_hops": "Total Hops", + "interface": "Exit Interface", + "next_hop": "Next Hop", + "ready_title": "Trace a Path", + "ready_desc": "Enter a destination hash above to visualize how packets travel through the mesh to reach it.", + "unknown_hops": "{count} Intermediate Hops", + "ping_test": "Test with Ping" + }, "translator": { "title": "Translator", "description": "Translate text using LibreTranslate API or local Argos Translate." @@ -1417,14 +1469,16 @@ "nav_settings_desc": "Open settings page", "nav_ping": "Ping", "nav_ping_desc": "Ping network nodes", - "nav_rnprobe": "RN Probe", + "nav_rnprobe": "RNProbe", "nav_rnprobe_desc": "Probe Reticulum nodes", - "nav_rncp": "RN CP", + "nav_rncp": "RNCP", "nav_rncp_desc": "Reticulum Control Protocol", - "nav_rnstatus": "RN Status", + "nav_rnstatus": "RNStatus", "nav_rnstatus_desc": "View Reticulum status", - "nav_rnpath": "RN Path", + "nav_rnpath": "RNPath", "nav_rnpath_desc": "View network paths", + "nav_rnpath_trace": "RNPath Trace", + "nav_rnpath_trace_desc": "Visualize network paths", "nav_translator": "Translator", "nav_translator_desc": "Translate messages", "nav_forwarder": "Forwarder", @@ -1450,4 +1504,4 @@ "action_changelog": "Changelog", "action_changelog_desc": "View what's new" } -} \ No newline at end of file +} diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json new file mode 100644 index 0000000..0023723 --- /dev/null +++ b/meshchatx/src/frontend/locales/it.json @@ -0,0 +1,1503 @@ +{ + "bots": { + "title": "LXMFy Bot", + "description": "Gestisci bot automatizzati per echo, note e promemoria usando LXMFy.", + "bot_framework": "Bot Framework", + "lxmfy_not_detected": "LXMFy non rilevato", + "lxmfy_not_detected_desc": "Per usare i bot, devi installare il pacchetto LXMFy:", + "install_via_pip": "Installa via pip", + "create_new_bot": "Crea Nuovo Bot", + "running_bots": "Bot in Esecuzione", + "no_bots_running": "Nessun bot è attualmente in esecuzione.", + "select": "Seleziona", + "start_bot": "Avvia Bot", + "stop_bot": "Ferma Bot", + "restart_bot": "Riavvia Bot", + "saved_bots": "Bot Salvati", + "bot_name": "Nome Bot", + "cancel": "Annulla", + "bot_started": "Bot avviato con successo", + "bot_stopped": "Bot fermato", + "failed_to_start": "Impossibile avviare il bot", + "failed_to_stop": "Impossibile fermare il bot", + "delete_bot": "Elimina Bot", + "export_identity": "Esporta Identità", + "bot_deleted": "Bot eliminato con successo", + "failed_to_delete": "Impossibile eliminare il bot", + "more_bots_coming": "Altri bot in arrivo!" + }, + "app": { + "name": "Reticulum MeshChatX", + "sync_messages": "Sincronizza Messaggi", + "compose": "Componi", + "messages": "Messaggi", + "nomad_network": "Nomad Network", + "map": "Mappa", + "archives": "Archivi", + "propagation_nodes": "Nodi di Propagazione", + "network_visualiser": "Visualizzatore di Rete", + "interfaces": "Interfacce", + "tools": "Strumenti", + "settings": "Impostazioni", + "identities": "Identità", + "documentation": "Documentazione", + "about": "Informazioni", + "changelog_title": "Novità", + "do_not_show_again": "Non mostrare più per questa versione", + "do_not_show_ever": "Non mostrare mai più", + "tutorial_title": "Guida Introduttiva", + "tutorial_welcome": "Benvenuto in MeshChatX", + "tutorial_connect": "Connettiti alla Mesh", + "tutorial_finish": "Pronto per Iniziare!", + "tutorial_restart_required": "Riavvio Richiesto", + "tutorial_docker_note": "Se stai usando Docker, assicurati di riavviare il container.", + "my_identity": "La Mia Identità", + "identity_hash": "Hash Identità", + "lxmf_address": "Indirizzo LXMF", + "announce": "Annuncia", + "announce_now": "Annuncia Ora", + "show_qr": "Mostra Codice QR", + "failed_announce": "impossibile annunciare", + "last_announced": "Ultimo annuncio: {time}", + "last_announced_never": "Ultimo annuncio: Mai", + "display_name_placeholder": "Nome Visualizzato", + "profile": "Profilo", + "manage_identity": "Gestisci la tua identità, la partecipazione al trasporto e i predefiniti LXMF.", + "theme": "Tema", + "theme_mode": "Modalità {mode}", + "transport": "Trasporto", + "enabled": "Abilitato", + "disabled": "Disabilitato", + "propagation": "Propagazione", + "local_node_running": "Nodo locale in esecuzione", + "client_only": "Solo client", + "copy": "Copia", + "appearance": "Aspetto", + "appearance_description": "Passa tra i temi chiaro e scuro in qualsiasi momento.", + "light_theme": "Tema Chiaro", + "dark_theme": "Tema Scuro", + "live_preview": "L'anteprima si aggiorna istantaneamente.", + "realtime": "Tempo Reale", + "transport_mode": "Modalità Trasporto", + "transport_description": "Inoltra percorsi e traffico per i peer vicini.", + "enable_transport_mode": "Abilita Modalità Trasporto", + "transport_toggle_description": "Inoltra annunci, rispondi alle richieste di percorso e aiuta la tua mesh a rimanere online.", + "requires_restart": "Richiede il riavvio dopo la modifica.", + "show_community_interfaces": "Mostra Interfacce della Comunità", + "community_interfaces_description": "Mostra i preset mantenuti dalla comunità quando aggiungi nuove interfacce.", + "reliability": "Affidabilità", + "messages_description": "Configura come MeshChat gestisce i fallimenti di consegna dei messaggi. Controlla il comportamento dei tentativi automatici, la ritrasmissione degli allegati e i meccanismi di fallback per garantire una consegna affidabile dei messaggi nella rete mesh.", + "auto_resend_title": "Invia automaticamente quando il peer annuncia", + "auto_resend_description": "I messaggi falliti vengono riprovati automaticamente quando la destinazione trasmette di nuovo.", + "retry_attachments_title": "Consenti tentativi con allegati", + "retry_attachments_description": "Anche i carichi utili di grandi dimensioni verranno riprovati (utile quando entrambi i peer hanno limiti elevati).", + "auto_fallback_title": "Fallback automatico al nodo di propagazione", + "auto_fallback_description": "Le consegne dirette fallite vengono messe in coda sul tuo nodo di propagazione preferito.", + "inbound_stamp_cost": "Costo Francobollo Messaggio in Entrata", + "inbound_stamp_description": "Richiedi francobolli proof-of-work per i messaggi a consegna diretta inviati a te. Valori più alti richiedono più lavoro computazionale dai mittenti. Intervallo: 1-254. Predefinito: 8.", + "browse_nodes": "Sfoglia Nodi", + "propagation_nodes_description": "Mantieni il flusso delle conversazioni anche quando i peer sono offline.", + "nodes_info_1": "I nodi di propagazione conservano i messaggi in modo sicuro fino a quando i destinatari non si sincronizzano di nuovo.", + "nodes_info_2": "I nodi si collegano tra loro per distribuire carichi utili crittografati.", + "nodes_info_3": "La maggior parte dei nodi conserva i dati per circa 30 giorni, poi scarta gli elementi non consegnati.", + "run_local_node": "Esegui un nodo di propagazione locale", + "run_local_node_description": "MeshChat annuncerà e manterrà un nodo usando questo hash di destinazione locale.", + "preferred_propagation_node": "Nodo di Propagazione Preferito", + "preferred_node_placeholder": "Hash di destinazione, es. a39610c89d18bb48c73e429582423c24", + "fallback_node_description": "I messaggi ripiegano su questo nodo ogni volta che la consegna diretta fallisce.", + "auto_sync_interval": "Intervallo Sincronizzazione Automatica", + "last_synced": "Ultima sincronizzazione {time} fa.", + "last_synced_never": "Ultima sincronizzazione: mai.", + "propagation_stamp_cost": "Costo Francobollo Nodo di Propagazione", + "propagation_stamp_description": "Richiedi francobolli proof-of-work per i messaggi propagati attraverso il tuo nodo. Valori più alti richiedono più lavoro computazionale. Intervallo: 13-254. Predefinito: 16. **Nota:** La modifica richiede il riavvio dell'app.", + "language": "Lingua", + "select_language": "Seleziona la tua lingua preferita.", + "custom_fork_by": "Fork personalizzato da", + "open": "Apri", + "identity": "Identità", + "lxmf_address_hash": "Hash Indirizzo LXMF", + "propagation_node_status": "Stato Nodo di Propagazione", + "last_sync": "Ultima Sincronizzazione: {time} fa", + "last_sync_never": "Ultima Sincronizzazione: mai", + "syncing": "Sincronizzazione...", + "syncing_node": "Sincronizzazione... ({state})", + "synced": "Sincronizzato", + "not_synced": "Non Sincronizzato", + "not_configured": "Non Configurato", + "toggle_source": "Attiva/Disattiva Codice Sorgente", + "audio_calls": "Telefono", + "calls": "Chiamate", + "status": "Stato", + "active_call": "Chiamata Attiva", + "incoming": "In entrata", + "outgoing": "In uscita", + "call": "Chiama", + "calls_plural": "Chiamate", + "hop": "salto", + "hops_plural": "salti", + "hung_up_waiting": "Riattaccato, in attesa di chiamata...", + "view_incoming_calls": "Visualizza Chiamate in Entrata", + "hangup_all_calls": "Riattacca Tutte le Chiamate", + "clear_history": "Cancella Cronologia", + "no_active_calls": "Nessuna chiamata attiva", + "incoming_call": "Chiamata in arrivo...", + "outgoing_call": "Chiamata in uscita...", + "call_active": "Attiva", + "call_ended": "Terminata", + "propagation_node": "Nodo di Propagazione", + "sync_now": "Sincronizza Ora", + "setting_auto_saved": "Impostazione {label} salvata automaticamente", + "backup_max_count": "Limite backup automatici", + "message_font_size": "Dimensione carattere messaggi", + "message_icon_size": "Dimensione icona", + "search_settings": "Cerca impostazioni...", + "auto_resend": "Invio Automatico", + "retry_attachments": "Riprova Allegati", + "auto_fallback": "Fallback Automatico", + "community_interfaces": "Interfacce Comunità", + "preferred_node": "Nodo Preferito", + "local_node": "Nodo Locale", + "auto_sync": "Sincronizzazione Automatica", + "inbound_stamp_cost_label": "Costo Francobollo in Entrata", + "propagation_stamp_cost_label": "Costo Francobollo Propagazione", + "page_archiver": "Archiviatore Pagine", + "smart_crawler": "Smart Crawler", + "authentication": "Autenticazione", + "banishment": "Esilio", + "banishment_description": "Personalizza l'effetto visivo mostrato per i peer e i nodi esiliati.", + "banished_effect_enabled": "Abilita Effetto Esilio", + "banished_effect_description": "Mostra una sovrapposizione visiva sui peer e sui nodi esiliati.", + "banished_text_label": "Testo Esilio", + "banished_text_description": "Messaggio personalizzato da visualizzare sulla sovrapposizione.", + "banished_color_label": "Colore Esilio", + "banished_color_description": "Il colore usato per l'effetto esilio.", + "desktop_open_calls_in_separate_window": "Apri Chiamate in 2ª Finestra", + "desktop_open_calls_in_separate_window_description": "Quando una chiamata è attiva, verrà mostrata in una finestra popup separata invece che all'interno dell'app.", + "desktop_hardware_acceleration_enabled": "Accelerazione Hardware", + "desktop_hardware_acceleration_enabled_description": "Disabilita se riscontri sfarfallio dell'interfaccia utente, schermi neri o glitch grafici.", + "translator": "Traduttore", + "translator_enabled": "Abilita Traduttore", + "translator_description": "Abilita le funzioni di traduzione nelle conversazioni.", + "libretranslate_url": "URL LibreTranslate", + "libretranslate_url_description": "L'URL dove l'API LibreTranslate è accessibile.", + "system": "Sistema", + "reticulum_stack": "Stack Reticulum", + "reticulum_stack_description": "Gestisci lo stack di rete Reticulum sottostante.", + "reload_rns": "Ricarica RNS", + "reload_rns_description": "Deregistra tutte le destinazioni, ferma l'istanza RNS corrente e ricaricala. Utile per applicare modifiche alla configurazione o riavviare lo stack di rete mesh senza riavviare l'intera applicazione.", + "reloading_rns": "Ricaricando RNS...", + "reloaded_rns": "Reticulum ricaricato con successo", + "announce_interval": "Intervallo Annuncio", + "stop_sync_confirm": "Sei sicuro di voler interrompere la sincronizzazione?", + "sync_error_generic": "Qualcosa è andato storto. Riprova più tardi.", + "sync_complete": "Sincronizzazione completata. {count} messaggi ricevuti.", + "sync_error": "Errore sincronizzazione: {status}", + "switching_identity": "Cambiando Identità...", + "loading_identity": "Caricamento della tua identità", + "emergency_mode_active": "Modalità Emergenza Attiva - Utilizzo del database in memoria e servizi limitati.", + "blackhole_integration_enabled": "Integrazione Blackhole", + "blackhole_integration_description": "Metti automaticamente in blackhole le identità a livello di trasporto Reticulum quando esili gli utenti in MeshChatX.", + "csp_settings": "Content Security Policy (CSP)", + "csp_description": "Aggiungi manualmente domini e sorgenti consentiti per vari tipi di risorse. Utile per server di tile personalizzati, bot o integrazioni esterne.", + "csp_extra_connect_src": "Sorgenti di Connessione Extra", + "csp_extra_connect_src_description": "Sorgenti aggiuntive per connessioni fetch/websocket (es. https://api.example.com).", + "csp_extra_img_src": "Sorgenti Immagine Extra", + "csp_extra_img_src_description": "Sorgenti aggiuntive per immagini e tile.", + "csp_extra_frame_src": "Sorgenti Frame Extra", + "csp_extra_frame_src_description": "Sorgenti aggiuntive per iframe.", + "csp_extra_script_src": "Sorgenti Script Extra", + "csp_extra_script_src_description": "Sorgenti aggiuntive per script (solo per uso avanzato).", + "csp_extra_style_src": "Sorgenti Stile Extra", + "csp_extra_style_src_description": "Sorgenti aggiuntive per fogli di stile.", + "location": "Posizione", + "location_source": "Sorgente posizione", + "location_source_browser": "Automatica (Browser)", + "location_source_manual": "Manuale", + "location_source_browser_desc": "Utilizza l'API di geolocalizzazione del browser. Nota: nell'app desktop, potrebbe utilizzare i servizi Google.", + "location_source_manual_desc": "Usa coordinate inserite manualmente per la massima privacy.", + "location_manual_lat": "Latitudine", + "location_manual_lon": "Longitudine", + "location_manual_alt": "Altitudine (m)", + "telemetry_enabled": "Telemetria abilitata", + "telemetry_description": "Consenti a MeshChatX di inviare e ricevere dati telemetrici. Ciò include la risposta alle richieste di posizione da parte di peer fidati.", + "telemetry_trusted_peers": "Peer Telemetrici Fidati", + "telemetry_no_trusted_peers": "Nessun peer fidato configurato. Fidati dei peer dal menu della chat per consentire loro di richiedere la tua posizione.", + "telemetry_revoke_trust": "Revoca Fiducia", + "telemetry_trust_revoked": "Fiducia telemetrica revocata per {name}", + "telemetry_trust_granted_alert": "Il peer è ora considerato fidato per la telemetria.", + "telemetry_trust_revoked_alert": "Fiducia telemetrica revocata.", + "telemetry_trust_failed": "Impossibile aggiornare la fiducia telemetrica.", + "telemetry_trust_revoke": "Revoca Fiducia Telemetrica", + "telemetry_trust_grant": "Fidati per la Telemetria", + "location_manage_desc": "Gestisci come viene condivisa la tua posizione." + }, + "common": { + "open": "Apri", + "close": "Chiudi", + "cancel": "Annulla", + "save": "Salva", + "block": "Esilia", + "delete": "Elimina", + "edit": "Modifica", + "add": "Aggiungi", + "sync": "Sincronizza", + "restart_app": "Riavvia App", + "reveal": "Rivela", + "refresh": "Aggiorna", + "copy": "Copia", + "copy_to_clipboard": "Copia negli appunti", + "vacuum": "Vacuum", + "auto_recover": "Recupero Automatico", + "shutdown": "Spegni", + "acknowledge_reset": "Conferma e Reimposta", + "continue": "Continua", + "confirm": "Conferma", + "delete_confirm": "Sei sicuro di voler eliminare questo elemento? L'azione non può essere annullata.", + "search": "Cerca strumenti...", + "no_results": "Nessuno strumento trovato", + "error": "Errore", + "success": "Successo", + "warning": "Avviso", + "info": "Info", + "copied": "Copiato negli appunti", + "failed_to_copy": "Impossibile copiare negli appunti", + "save_failed": "Impossibile salvare la configurazione!", + "invalid_address": "Indirizzo Non Valido", + "loading": "Caricamento...", + "ok": "OK" + }, + "maintenance": { + "title": "Manutenzione e Dati", + "description": "Gestisci i tuoi dati locali, svuota le cache e fai il backup delle conversazioni.", + "clear_messages": "Cancella Tutti i Messaggi", + "clear_messages_desc": "Elimina permanentemente tutti i messaggi inviati e ricevuti.", + "clear_announces": "Cancella Tutti gli Annunci", + "clear_announces_desc": "Rimuovi tutti i peer e i nodi scoperti dalla tua cache.", + "clear_nomadnet_favs": "Cancella Preferiti NomadNetwork", + "clear_nomadnet_favs_desc": "Rimuovi tutti i nodi NomadNetwork salvati dai tuoi preferiti.", + "clear_lxmf_icons": "Cancella Icone LXMF", + "clear_lxmf_icons_desc": "Rimuovi le icone utente LXMF memorizzate sul tuo dispositivo.", + "clear_archives": "Cancella Archivi Pagine", + "clear_archives_desc": "Elimina tutte le pagine NomadNetwork memorizzate.", + "clear_confirm": "Sei sicuro? Questa azione non può essere annullata.", + "messages_cleared": "Messaggi cancellati con successo", + "announces_cleared": "Annunci cancellati con successo", + "favourites_cleared": "Preferiti cancellati con successo", + "lxmf_icons_cleared": "Icone LXMF cancellate con successo", + "archives_cleared": "Archivi cancellati con successo", + "import_success": "Importati con successo {count} messaggi", + "import_failed": "Impossibile importare i messaggi" + }, + "identities": { + "title": "Identità", + "manage": "Gestisci e passa tra più identità Reticulum.", + "new_identity": "Nuova Identità", + "generate_fresh": "Genera una nuova identità Reticulum.", + "display_name": "Nome Visualizzato", + "display_name_hint": "es. Agente Segreto", + "current": "Corrente", + "switch": "Passa a questa identità", + "delete": "Elimina identità", + "no_identities": "Nessuna identità trovata", + "create_first": "Crea una nuova identità per iniziare.", + "switch_confirm": "Passare all'identità \"{name}\"? L'applicazione dovrà essere riavviata.", + "delete_confirm": "Sei sicuro di voler eliminare l'identità \"{name}\"? L'azione non può essere annullata.", + "switched": "Identità cambiata. L'applicazione si riavvierà ora per applicare le modifiche.", + "created": "Identità creata con successo", + "deleted": "Identità eliminata", + "failed_load": "Impossibile caricare le identità", + "enter_display_name_warning": "Inserisci un nome visualizzato", + "failed_create": "Impossibile creare l'identità", + "switch_scheduled": "Cambio programmato. Ricaricando l'applicazione...", + "failed_switch": "Impossibile cambiare identità", + "failed_delete": "Impossibile eliminare l'identità" + }, + "about": { + "title": "Informazioni", + "version": "v{version}", + "rns_version": "RNS {version}", + "lxmf_version": "LXMF {version}", + "python_version": "Python {version}", + "config_path": "Percorso config", + "database_path": "Percorso database", + "database_size": "Dimensione database", + "database_health": "Salute Database", + "database_health_description": "Controllo rapido, ottimizzazione WAL e strumenti di recupero per il database MeshChatX.", + "running_checks": "Esecuzione controlli...", + "integrity": "Integrità", + "journal_mode": "Modalità journal", + "wal_autocheckpoint": "Autocheckpoint WAL", + "page_size": "Dimensione pagina", + "pages_free": "Pagine / Libere", + "free_space_estimate": "Spazio libero stimato", + "system_resources": "Risorse di Sistema", + "live": "Live", + "memory_rss": "Memoria (RSS)", + "virtual_memory": "Memoria Virtuale", + "network_stats": "Statistiche di Rete", + "sent": "Inviati", + "received": "Ricevuti", + "packets_sent": "Pacchetti Inviati", + "packets_received": "Pacchetti Ricevuti", + "reticulum_stats": "Statistiche Reticulum", + "total_paths": "Percorsi Totali", + "announces_per_second": "Annunci / sec", + "announces_per_minute": "Annunci / min", + "announces_per_hour": "Annunci / ora", + "download_activity": "Attività di Download", + "no_downloads_yet": "Ancora nessun download", + "runtime_status": "Stato Runtime", + "shared_instance": "Istanza Condivisa", + "standalone_instance": "Istanza Standalone", + "transport_enabled": "Trasporto Abilitato", + "transport_disabled": "Trasporto Disabilitato", + "identity_addresses": "Identità e Indirizzi", + "telephone_address": "Indirizzo Telefono", + "security_integrity": "Integrità di Sicurezza", + "security_integrity_description": "Stato di verifica del sistema per il backend e i file dei dati", + "secured": "Protetto", + "tampering_detected": "Manomissione Rilevata", + "technical_issues": "Problemi Tecnici:", + "integrity_backend_error": "Il binario del backend dell'applicazione (estratto da ASAR) sembra essere stato modificato o sostituito. Questo potrebbe indicare un attore malevolo che tenta di compromettere la tua comunicazione mesh.", + "integrity_data_error": "Le tue identità o i file del database sembrano essere stati modificati mentre l'app era chiusa.", + "integrity_warning_footer": "Procedi con cautela. Se non hai aggiornato o modificato manualmente questi file, la tua installazione potrebbe essere compromessa.", + "no_integrity_violations": "Nessuna violazione di integrità rilevata dall'ultimo avvio.", + "dependency_chain": "Catena di Dipendenze", + "other_core_components": "Altri Componenti Core", + "backend_dependencies": "Dipendenze Backend", + "delete_snapshot_confirm": "Sei sicuro di voler eliminare questo snapshot?", + "snapshot_deleted": "Snapshot eliminato", + "failed_delete_snapshot": "Impossibile eliminare lo snapshot", + "delete_backup_confirm": "Sei sicuro di voler eliminare questo backup?", + "backup_deleted": "Backup eliminato", + "failed_delete_backup": "Impossibile eliminare il backup", + "database_restored": "Database ripristinato. Riavvio...", + "failed_restore_snapshot": "Impossibile ripristinare lo snapshot", + "restore_snapshot_confirm": "Sei sicuro di voler ripristinare questo snapshot? Questo sovrascriverà il database corrente e richiederà il riavvio dell'app.", + "integrity_acknowledged": "Problemi di integrità confermati", + "integrity_acknowledged_reset": "Problemi di integrità confermati e manifest reimpostato", + "integrity_acknowledge_confirm": "Sei sicuro di voler confermare questi problemi di integrità? Questo aggiornerà il manifest di sicurezza per riflettere lo stato attuale dei tuoi file.", + "failed_acknowledge_integrity": "Impossibile confermare i problemi di integrità", + "shutdown_sent": "Comando di spegnimento inviato al server.", + "identity_exported": "File chiave identità esportato", + "identity_copied": "Chiave identità Base32 copiata negli appunti" + }, + "interfaces": { + "title": "Interfacce", + "manage": "Gestisci", + "description": "Cerca, filtra ed esporta i tuoi adattatori Reticulum.", + "add_interface": "Aggiungi Interfaccia", + "import": "Importa", + "export_all": "Esporta tutto", + "search_placeholder": "Cerca per nome, tipo, host...", + "all": "Tutte", + "connected_only": "Solo connesse", + "all_types": "Tutti i tipi", + "no_interfaces_found": "Nessuna interfaccia trovata", + "no_interfaces_description": "Modifica la tua ricerca o aggiungi una nuova interfaccia.", + "restart_required": "Riavvio richiesto", + "restart_description": "Reticulum MeshChatX deve essere riavviato affinché le modifiche alle interfacce abbiano effetto.", + "restart_now": "Riavvia ora", + "failed_enable": "impossibile abilitare l'interfaccia", + "failed_disable": "impossibile disabilitare l'interfaccia", + "delete_confirm": "Sei sicuro di voler eliminare questa interfaccia? L'azione non può essere annullata!", + "failed_delete": "impossibile eliminare l'interfaccia", + "failed_export_all": "Impossibile esportare le interfacce", + "failed_export_single": "Impossibile esportare l'interfaccia", + "failed_reload": "Impossibile ricaricare Reticulum!", + "interface_not_found": "L'interfaccia selezionata per la modifica non è stata trovata.", + "discovery_settings_saved": "Impostazioni di scoperta salvate", + "failed_save_discovery": "Impossibile salvare le impostazioni di scoperta", + "no_interfaces_found_config": "Nessuna interfaccia trovata nel file di configurazione selezionato", + "failed_parse_config": "Impossibile analizzare il file di configurazione", + "select_config_file": "Seleziona un file di configurazione", + "select_at_least_one": "Seleziona almeno un'interfaccia da importare", + "import_success": "Interfacce importate con successo. MeshChat deve essere riavviato per applicare le modifiche.", + "failed_import_all": "Impossibile importare le interfacce" + }, + "map": { + "title": "Mappa", + "description": "Mappa compatibile con l'uso offline e supporto MBTiles.", + "upload_mbtiles": "Carica MBTiles", + "select_file": "Seleziona file MBTiles", + "offline_mode": "Modalità Offline", + "online_mode": "Modalità Online", + "attribution": "Attribuzione", + "bounds": "Confini", + "center": "Centro", + "zoom": "Zoom", + "uploading": "Caricamento...", + "upload_success": "Mappa caricata con successo", + "upload_failed": "Impossibile caricare la mappa", + "no_map_loaded": "Nessuna mappa offline caricata. Carica un file .mbtiles per abilitare la modalità offline.", + "invalid_file": "File MBTiles non valido. Sono supportate solo le tile raster.", + "default_view": "Vista Predefinita", + "set_as_default": "Imposta come Vista Predefinita", + "export_area": "Esporta Area", + "export_instructions": "Trascina sulla mappa per selezionare un'area.", + "min_zoom": "Zoom Min", + "max_zoom": "Zoom Max", + "tile_count": "Tile Stimate", + "start_export": "Inizia Esportazione", + "exporting": "Esportazione Mappa...", + "download_ready": "Esportazione Completata", + "download_now": "Scarica MBTiles", + "caching_enabled": "Caching Tile", + "clear_cache": "Svuota Cache", + "cache_cleared": "Cache tile svuotata", + "tile_server_url": "URL Server Tile", + "tile_server_url_placeholder": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", + "tile_server_url_hint": "Usa {z}, {x}, {y} per zoom, colonna, riga", + "tile_server_saved": "URL server tile salvato", + "tile_server_openstreetmap": "OpenStreetMap", + "nominatim_api_url": "URL API Nominatim", + "nominatim_api_url_placeholder": "https://nominatim.openstreetmap.org", + "nominatim_api_url_hint": "URL di base per il servizio di geocodifica Nominatim", + "nominatim_api_saved": "URL API Nominatim salvato", + "search_placeholder": "Cerca una posizione...", + "search_offline_error": "La ricerca è disponibile solo in modalità online", + "search_connection_error": "Impossibile connettersi al servizio di ricerca. Controlla la tua connessione internet.", + "search_error": "Errore di ricerca", + "search_no_results": "Nessun risultato trovato", + "custom_tile_server_unavailable": "Il server tile personalizzato non è accessibile in modalità offline", + "custom_nominatim_unavailable": "Il server Nominatim personalizzato non è accessibile in modalità offline", + "onboarding_title": "Esporta in MBTiles!", + "onboarding_text": "Usa lo strumento di esportazione per scaricare aree della mappa come file MBTiles per l'uso offline.", + "onboarding_got_it": "Ho capito", + "tool_point": "Disegna Punto", + "tool_linestring": "Disegna Linea", + "tool_polygon": "Disegna Poligono", + "tool_circle": "Disegna Cerchio", + "tool_measure": "Misura Distanza/Area", + "tool_clear": "Cancella Disegni", + "save_drawing": "Salva Livello Disegno", + "load_drawing": "Carica Livello Disegno", + "save_drawing_title": "Salva Livello Disegno", + "save_drawing_desc": "Salva le tue annotazioni attuali sulla mappa nel database.", + "drawing_name": "Nome Livello", + "drawing_name_placeholder": "es. Area Target Alpha", + "load_drawing_title": "Carica Livello Disegno", + "loading_drawings": "Caricamento livelli salvati...", + "no_drawings": "Nessun Livello Salvato", + "no_drawings_desc": "Non hai ancora salvato alcuna annotazione sulla mappa.", + "saved_on": "Salvato il", + "settings": "Impostazioni Mappa", + "go_to_my_location": "Vai alla Mia Posizione", + "source_updated": "Sorgente mappa aggiornata", + "failed_set_active": "Impossibile impostare la mappa attiva", + "file_deleted": "File eliminato", + "failed_delete_file": "Impossibile eliminare il file", + "storage_saved": "Directory di archiviazione salvata", + "failed_save_storage": "Impossibile salvare la directory", + "export_cancelled": "Esportazione annullata", + "failed_cancel_export": "Impossibile annullare l'esportazione", + "failed_start_export": "Impossibile avviare l'esportazione", + "select_mbtiles_error": "Seleziona un file .mbtiles", + "view_saved": "Vista predefinita salvata", + "failed_save_view": "Impossibile salvare la vista predefinita", + "failed_clear_cache": "Impossibile svuotare la cache", + "failed_save_tile_server": "Impossibile salvare l'URL del server tile", + "failed_save_nominatim": "Impossibile salvare l'URL dell'API Nominatim", + "copied_coordinates": "Coordinate copiate", + "failed_load_drawings": "Impossibile caricare i disegni", + "not_initialized": "Mappa non inizializzata", + "drawing_saved": "Disegno salvato", + "failed_save_drawing": "Impossibile salvare il disegno", + "deleted": "Eliminato", + "failed_delete": "Impossibile eliminare", + "location_not_determined": "Impossibile determinare la tua posizione", + "geolocation_not_supported": "La geolocalizzazione non è supportata dal tuo browser", + "no_nodes_location": "Nessun nodo scoperto con posizione trovata", + "failed_fetch_nodes": "Impossibile recuperare i nodi scoperti per la mappatura" + }, + "interface": { + "disable": "Disabilita", + "enable": "Abilita", + "edit_interface": "Modifica Interfaccia", + "export_interface": "Esporta Interfaccia", + "delete_interface": "Elimina Interfaccia", + "listen": "Ascolta", + "forward": "Inoltra", + "port": "Porta", + "frequency": "Frequenza", + "bandwidth": "Larghezza di banda", + "txpower": "Potenza TX", + "spreading_factor": "SF", + "coding_rate": "Coding Rate", + "bitrate": "Bitrate", + "tx": "TX", + "rx": "RX", + "noise": "Rumore", + "clients": "Client" + }, + "messages": { + "title": "Messaggi", + "conversations": "Conversazioni", + "announces": "Annunci", + "search_placeholder": "Cerca in {count} conversazioni...", + "unread": "Non letti", + "failed": "Falliti", + "attachments": "Allegati", + "no_messages_yet": "Ancora nessun messaggio", + "loading_conversations": "Caricamento conversazioni...", + "no_conversations": "Nessuna Conversazione", + "discover_peers": "Scopri i peer nella scheda Annunci", + "no_search_results": "Nessun Risultato Trovato", + "try_another_search": "Prova un termine di ricerca diverso", + "no_search_results_conversations": "La tua ricerca non corrisponde ad alcuna conversazione.", + "search_placeholder_announces": "Cerca in {count} annunci recenti...", + "no_peers_discovered": "Nessun Peer Scoperto", + "waiting_for_announce": "In attesa che qualcuno annunci!", + "no_search_results_peers": "La tua ricerca non corrisponde ad alcun Peer!", + "direct": "Diretto", + "downloading": "Scaricamento", + "hops": "{count} salti", + "hops_away": "{count} salti di distanza", + "snr": "SNR {snr}", + "stamp_cost": "Costo Francobollo {cost}", + "pop_out_chat": "Estrai chat", + "custom_display_name": "Nome Visualizzato Personalizzato", + "send_placeholder": "Scrivi un messaggio...", + "no_messages_in_conversation": "Ancora nessun messaggio in questa conversazione.", + "say_hello": "Di' ciao!", + "no_active_chat": "Nessuna Chat Attiva", + "select_peer_or_enter_address": "Seleziona un peer dalla barra laterale o inserisci un indirizzo qui sotto", + "add_files": "Aggiungi File", + "paste_from_clipboard": "Incolla dagli Appunti", + "location": "Posizione", + "share_location": "Condividi Posizione", + "request_location": "Richiedi Posizione", + "view_on_map": "Visualizza sulla Mappa", + "request": "Richiesta", + "generate_paper_message": "Genera Messaggio Cartaceo (LXM)", + "recording": "Registrazione: {duration}", + "nomad_network_node": "Nodo Nomad Network", + "toggle_source": "Attiva/Disattiva Codice Sorgente", + "folder_created": "Cartella creata", + "failed_create_folder": "Impossibile creare la cartella", + "folder_renamed": "Cartella rinominata", + "failed_rename_folder": "Impossibile rinominare la cartella", + "folder_deleted": "Cartella eliminata", + "failed_delete_folder": "Impossibile eliminare la cartella", + "moved_to_folder": "Spostato nella cartella", + "failed_move_folder": "Impossibile spostare nella cartella", + "marked_read": "Segnato come letto", + "failed_mark_read": "Impossibile segnare come letto", + "conversations_deleted": "Conversazioni eliminate", + "failed_delete_conversations": "Impossibile eliminare le conversazioni", + "failed_export_folders": "Impossibile esportare le cartelle", + "folders_imported": "Cartelle importate", + "failed_import_folders": "Impossibile importare le cartelle", + "failed_read_clipboard": "Impossibile leggere dagli appunti", + "failed_send_ingest": "Impossibile inviare la richiesta di ingest", + "address_copied": "Il tuo indirizzo LXMF è stato copiato negli appunti", + "hash_copied": "Hash identità copiato negli appunti", + "failed_to_copy_hash": "Impossibile copiare l'hash identità", + "failed_copy_address": "Impossibile copiare l'indirizzo", + "translation_failed": "Traduzione fallita", + "failed_add_contact": "Impossibile aggiungere il contatto", + "ingesting_paper_message": "Ingesting messaggio cartaceo...", + "failed_ingest_paper": "Impossibile ingerire il messaggio cartaceo", + "enter_display_name": "Inserisci un nome visualizzato personalizzato", + "failed_update_display_name": "Impossibile aggiornare il nome visualizzato", + "failed_load_audio": "Impossibile caricare l'allegato audio.", + "no_contacts_telephone": "Nessun contatto trovato nel telefono", + "failed_load_contacts": "Impossibile caricare i contatti", + "location_request_sent": "Richiesta di posizione inviata", + "failed_send_location_request": "Impossibile inviare la richiesta di posizione", + "fetching_location": "Recupero della posizione...", + "location_sent": "Posizione condivisa con successo", + "location_requested": "Posizione richiesta", + "remove_image_confirm": "Sei sicuro di voler rimuovere questo allegato immagine?", + "failed_start_recording": "impossibile avviare la registrazione", + "remove_audio_confirm": "Sei sicuro di voler rimuovere questo allegato audio?", + "failed_generate_qr": "Impossibile generare il QR", + "enter_folder_name": "Inserisci il nome della cartella", + "new_folder": "Nuova Cartella", + "rename_folder": "Rinomina cartella", + "failed_render_qr": "Impossibile renderizzare il codice QR", + "uri_copied": "URI copiato negli appunti", + "failed_copy_uri": "Impossibile copiare l'URI", + "paper_message_sent": "Messaggio cartaceo inviato con successo", + "failed_send_paper": "Impossibile inviare il messaggio cartaceo", + "failed_load_config": "Impossibile caricare la configurazione", + "profile_icon_saved": "Icona del profilo salvata con successo", + "failed_save_profile_icon": "Impossibile salvare l'icona del profilo", + "select_colors_warning": "Seleziona sia il colore di sfondo che quello dell'icona", + "select_icon_warning": "Seleziona un'icona", + "changes_reset": "Modifiche reimpostate ai valori salvati", + "profile_icon_removed": "Icona del profilo rimossa con successo", + "user_banished": "Utente esiliato con successo", + "failed_banish_user": "Impossibile esiliare l'utente", + "delete_conversation_confirm": "Sei sicuro di voler eliminare questa conversazione?", + "failed_delete_conversation": "impossibile eliminare la conversazione", + "delete_history_confirm": "Sei sicuro di voler eliminare tutti i messaggi in questa conversazione? L'azione non può essere annullata!", + "failed_delete_history": "impossibile eliminare la cronologia", + "invalid_destination_hash": "Hash di destinazione non valido", + "invalid_destination_hash_format": "Formato hash di destinazione non valido", + "ping_failed": "Ping fallito. Riprova più tardi", + "ping_reply_from": "Risposta valida da {hash}", + "duration": "Durata: {duration}", + "hops_there": "Salti Andata: {count}", + "hops_back": "Salti Ritorno: {count}", + "signal_quality": "Qualità Segnale: {quality}%", + "rssi_val": "RSSI: {rssi}dBm", + "snr_val": "SNR: {snr}dB" + }, + "settings": { + "shortcut_saved": "Scorciatoia salvata", + "shortcut_deleted": "Scorciatoia eliminata", + "archived_pages_flushed": "Pagine archiviate svuotate.", + "failed_enable_transport": "Impossibile abilitare la modalità trasporto!", + "failed_disable_transport": "Impossibile disabilitare la modalità trasporto!", + "failed_reload_reticulum": "Impossibile ricaricare Reticulum!", + "folders_exported": "Cartelle esportate", + "failed_export_folders": "Impossibile esportare le cartelle", + "folders_imported": "Cartelle e mappature importate con successo", + "failed_import_folders": "Impossibile importare le cartelle" + }, + "debug": { + "title": "Log di Debug", + "description": "Visualizza i log dell'applicazione e le anomalie rilevate.", + "failed_fetch_logs": "Impossibile recuperare i log", + "logs_copied": "I log in questa pagina sono stati copiati negli appunti", + "failed_copy_logs": "Impossibile copiare i log" + }, + "visualiser": { + "title": "Visualizzatore di Rete", + "description": "Visualizza la topologia della rete mesh.", + "reticulum_mesh": "Reticulum Mesh", + "network_visualizer": "Visualizzatore di Rete", + "node_info": "Info Nodo", + "hash": "Hash", + "hops": "Salti", + "interface": "Interfaccia", + "rssi": "RSSI", + "snr": "SNR", + "first_seen": "Visto per la prima volta", + "last_seen": "Visto l'ultima volta", + "center_node": "Centra sul nodo", + "copy_hash": "Copia Hash", + "banish_identity": "Esilia identità", + "banished_identities": "Identità esiliate", + "filter_nodes": "Filtra nodi...", + "all": "Tutti", + "direct": "Diretto", + "one_hop": "1 Salto", + "multi_hops": "2+ Salti", + "clear": "Cancella", + "show_labels": "Mostra tutte le etichette", + "bouncing_balls": "Modalità palle rimbalzanti", + "orbit_mode": "Modalità orbita", + "show_edges": "Mostra bordi", + "show_tooltips": "Mostra tooltip", + "show_rssi": "Mostra RSSI", + "show_snr": "Mostra SNR", + "show_hops": "Mostra Salti", + "physics": "Fisica", + "gravity": "Gravità", + "spring_length": "Lunghezza molla", + "spring_strength": "Forza molla", + "damping": "Smorzamento", + "central_gravity": "Gravità centrale", + "edge_strength": "Forza bordo", + "force_atlas_2": "Force Atlas 2", + "barns_hut": "Barns Hut", + "repulsion": "Repulsione", + "reset_physics": "Reimposta fisica", + "reset_camera": "Reimposta Telecamera", + "clear_graph": "Cancella grafico", + "total_nodes": "Nodi totali", + "total_edges": "Bordi totali", + "discovered": "Scoperti", + "wait_between_batches": "Attesa tra i batch", + "batch": "Batch", + "loading_status": "Stato caricamento", + "failed_load": "Impossibile caricare i dati di rete" + }, + "banishment": { + "title": "Esiliati", + "description": "Gestisci gli utenti e i nodi esiliati", + "failed_load_banished": "Impossibile caricare le destinazioni esiliate", + "search_placeholder": "Cerca per hash o nome visualizzato...", + "loading_items": "Caricamento elementi esiliati...", + "no_items": "Nessun elemento esiliato trovato", + "lift_banishment": "Revoca Esilio", + "lift_banishment_confirm": "Sei sicuro di voler revocare l'esilio per {name}?", + "banished_at": "Esiliato il", + "banished_until": "Esiliato fino al", + "reason": "Motivo", + "type": "Tipo", + "user": "Utente", + "node": "Nodo", + "banishment_lifted": "Esilio revocato con successo", + "failed_lift_banishment": "Impossibile revocare l'esilio" + }, + "nomadnet": { + "remove_favourite": "Rimuovi dai Preferiti", + "add_favourite": "Aggiungi ai Preferiti", + "page_archives": "Archivi Pagine", + "archive_current_version": "Archivia Versione Corrente", + "no_archives_for_this_page": "Nessun archivio per questa pagina", + "viewing_archived_version_from": "Visualizzazione versione archiviata del {time}", + "viewing_archived_version": "Visualizzazione versione archiviata", + "load_live": "Carica Live", + "failed_to_load_page": "Impossibile caricare la pagina", + "archived_version_available": "È disponibile una versione archiviata di questa pagina.", + "view_archive": "Visualizza Archivio", + "no_active_node": "Nessun Nodo Attivo", + "select_node_to_browse": "Seleziona un Nodo per iniziare a navigare!", + "open_nomadnet_url": "Apri un URL Nomadnet", + "unknown_node": "Nodo Sconosciuto", + "existing_download_in_progress": "Un download è già in corso. Attendi che finisca prima di iniziarne un altro.", + "favourites": "Preferiti", + "announces": "Annunci", + "search_favourites_placeholder": "Cerca in {count} preferiti...", + "search_placeholder_announces": "Cerca in {count} annunci recenti...", + "rename": "Rinomina", + "remove": "Rimuovi", + "no_favourites": "Nessun preferito", + "add_nodes_from_announces": "Aggiungi nodi dalla scheda annunci.", + "search_announces": "Cerca annunci", + "announced_time_ago": "Annunciato {time} fa", + "block_node": "Esilia Nodo", + "no_announces_yet": "Ancora nessun annuncio", + "no_search_results_peers": "Nessun peer trovato corrispondente alla tua ricerca.", + "listening_for_peers": "Ascolto dei peer sulla mesh.", + "block_node_confirm": "Sei sicuro di voler esiliare {name}? I suoi annunci verranno ignorati e non apparirà nel flusso degli annunci.", + "node_blocked_successfully": "Nodo esiliato con successo", + "failed_to_block_node": "Impossibile esiliare il nodo", + "failed_rename_favourite": "Impossibile rinominare il preferito", + "rename_favourite": "Rinomina questo preferito", + "remove_favourite_confirm": "Sei sicuro di voler rimuovere questo preferito?", + "enter_nomadnet_url": "Inserisci un URL Nomadnet", + "archiving_page": "Archiviazione pagina...", + "page_archived_successfully": "Pagina archiviata con successo.", + "identify_confirm": "Sei sicuro di volerti identificare su questo nodo NomadNetwork? La pagina si ricaricherà dopo l'invio della tua identità.", + "banishment_lifted": "Esilio revocato con successo", + "failed_lift_banishment": "Impossibile revocare l'esilio", + "enter_section_name": "Inserisci il nome della sezione", + "new_section": "Nuova Sezione", + "rename_section": "Rinomina sezione", + "delete_section_confirm": "Eliminare questa sezione? I preferiti verranno spostati nella sezione principale.", + "unsupported_url": "url non supportato: " + }, + "forwarder": { + "title": "Inoltro LXMF", + "description": "Inoltra i messaggi da un indirizzo a un altro, con instradamento di ritorno trasparente.", + "add_rule": "Aggiungi Regola di Inoltro", + "name": "Nome", + "name_placeholder": "Nome regola (es. Nodo Casa)...", + "forward_to_hash": "Inoltra all'Hash", + "destination_placeholder": "Hash LXMF di destinazione...", + "source_filter": "Filtro Sorgente (Opzionale)", + "source_filter_placeholder": "Inoltra solo da questo hash...", + "add_button": "Aggiungi Regola", + "active_rules": "Regole Attive", + "no_rules": "Nessuna regola di inoltro configurata.", + "active": "Attiva", + "disabled": "Disabilitata", + "forwarding_to": "Inoltro a: {hash}", + "source_filter_display": "Filtro sorgente: {hash}", + "delete_confirm": "Sei sicuro di voler eliminare questa regola?" + }, + "archives": { + "description": "Cerca e visualizza le pagine Nomad Network archiviate", + "search_placeholder": "Cerca contenuto, hash o percorso...", + "loading": "Caricamento archivi...", + "no_archives_found": "Nessun archivio trovato", + "adjust_filters": "Prova a regolare i tuoi filtri di ricerca.", + "browse_to_archive": "Le pagine archiviate appariranno qui una volta che avrai visitato i siti Nomad Network.", + "page": "Pagina", + "pages": "Pagine", + "view": "Visualizza", + "showing_range": "Visualizzazione da {start} a {end} di {total} archivi", + "page_of": "Pagina {page} di {total_pages}" + }, + "docs": { + "title": "Documentazione", + "subtitle": "Manuali e guide Reticulum.", + "status_title": "Stato Documentazione", + "status_downloading": "Scaricamento...", + "status_available": "Manuale Offline Disponibile", + "status_not_downloaded": "Non Scaricato", + "btn_download": "Scarica Manuali", + "btn_update": "Aggiorna Manuale", + "error": "Errore", + "failed_update_docs": "Impossibile aggiornare le sorgenti della documentazione", + "docs_link_copied": "Link alla documentazione copiato negli appunti", + "failed_copy_link": "Impossibile copiare il link" + }, + "tools": { + "utilities": "Utilità", + "power_tools": "Strumenti avanzati per operatori", + "diagnostics_description": "Gli strumenti di diagnostica e gli assistenti firmware sono inclusi in MeshChat per consentirti di risolvere i problemi dei peer senza lasciare la console.", + "ping": { + "title": "Ping", + "description": "Test di latenza per qualsiasi destinazione LXMF con stato in tempo reale." + }, + "rnprobe": { + "title": "RNProbe", + "description": "Sonda le destinazioni con dimensioni dei pacchetti personalizzate per testare la connettività." + }, + "rncp": { + "title": "RNCP", + "description": "Invia e ricevi file su RNS con monitoraggio dell'avanzamento." + }, + "rnstatus": { + "title": "RNStatus", + "description": "Visualizza le statistiche delle interfacce e le informazioni sullo stato della rete." + }, + "rnpath": { + "title": "RNPath", + "description": "Gestisci la tabella dei percorsi, visualizza i tassi di annuncio e richiedi percorsi.", + "failed_fetch": "Impossibile recuperare i dati del percorso", + "path_dropped": "Percorso eliminato", + "failed_drop": "Impossibile eliminare il percorso", + "error_drop": "Errore durante l'eliminazione del percorso", + "failed_request": "Impossibile richiedere il percorso", + "paths_dropped": "Percorsi eliminati", + "failed_drop_paths": "Impossibile eliminare i percorsi", + "purge_confirm": "Svuotare tutte le code di annuncio? L'azione non può essere annullata.", + "queues_purged": "Code di annuncio svuotate", + "failed_purge": "Impossibile svuotare le code" + }, + "rnpath_trace": { + "title": "RNS Path Trace", + "description": "Visualizza il percorso e i salti verso qualsiasi hash di destinazione sulla mesh.", + "destination_hash": "Hash di Destinazione", + "placeholder": "Inserisci hash di destinazione a 32 caratteri...", + "trace": "Traccia Percorso", + "tracing": "Tracciamento del percorso attraverso la mesh...", + "total_hops": "Salti Totali", + "interface": "Interfaccia di Uscita", + "next_hop": "Prossimo Salto", + "ready_title": "Traccia un Percorso", + "ready_desc": "Inserisci un hash di destinazione sopra per visualizzare come i pacchetti viaggiano attraverso la mesh per raggiungerlo.", + "unknown_hops": "{count} Salti Intermedi", + "ping_test": "Test con Ping" + }, + "translator": { + "title": "Traduttore", + "description": "Traduci testo usando l'API LibreTranslate o Argos Translate locale." + }, + "forwarder": { + "title": "Inoltro", + "description": "Inoltro LXMF con instradamento del percorso di ritorno." + }, + "rnode_flasher": { + "title": "Flasher RNode", + "description": "Flasher e aggiornamento degli adattatori RNode senza toccare la riga di comando.", + "select_device": "1. Seleziona il tuo dispositivo", + "product": "Prodotto", + "model": "Modello", + "select_product": "Seleziona un Prodotto", + "select_model": "Seleziona un Modello", + "enter_dfu_mode": "Entra in Modalità DFU", + "entering_dfu_mode": "Entrata in Modalità DFU...", + "find_device_issue": "Non trovi il tuo dispositivo? Apri una segnalazione su", + "select_firmware": "2. Seleziona il firmware da flashare (.zip)", + "flash_now": "Flasha Ora", + "flashing": "Flashing: {percentage}%", + "flashing_file_progress": "File {current}/{total}: {percentage}%", + "connecting_device": "Connessione al dispositivo...", + "download_firmware": "Scarica Firmware", + "official_firmware": "Firmware Ufficiale", + "ce_firmware": "Firmware CE", + "transport_node_firmware": "Firmware Nodo di Trasporto", + "common_issues": "Problemi Comuni", + "hardware_failure": "Guasto Hardware:", + "provision_eeprom_hint": "Devi inizializzare la eeprom al passaggio 3.", + "firmware_corrupt": "Firmware Corrotto:", + "set_firmware_hash_hint": "Devi impostare l'hash del firmware al passaggio 4.", + "step_provision": "3. Inizializza EEPROM", + "provision_description": "Imposta info dispositivo, checksum e firma vuota", + "provision": "Inizializza", + "provisioning_wait": "Inizializzazione: attendi...", + "step_set_hash": "4. Imposta Hash Firmware", + "set_hash_description": "Usa l'hash dalla scheda", + "set_firmware_hash": "Imposta Hash Firmware", + "setting_hash_wait": "Impostazione Hash Firmware: attendi...", + "step_done": "5. Finalizza", + "download_recommended": "Scarica e Carica Firmware Consigliato", + "downloading": "Scaricamento...", + "done_description": "Se sei arrivato fin qui e tutti i passaggi precedenti sono riusciti, il tuo RNode dovrebbe essere pronto all'uso.", + "meshchat_usage": "Per usare RNode con MeshChat, dovrai aggiungere una RNodeInterface nella pagina Interfacce → Aggiungi Interfaccia.", + "sideband_usage": "Per usare RNode con Sideband, dovrai configurarlo in Hardware → RNode e abilitare Connectivity → Connect via RNode.", + "restart_warning": "Devi riavviare MeshChat e Sideband affinché le modifiche alle impostazioni dell'interfaccia abbiano effetto!", + "advanced_tools": "Strumenti Avanzati", + "detect_rnode": "Rileva RNode", + "reboot_rnode": "Riavvia RNode", + "read_display": "Leggi Display", + "dump_eeprom": "Dump EEPROM", + "wipe_eeprom": "Cancella EEPROM", + "eeprom_console_hint": "I dump della EEPROM sono mostrati nella console degli strumenti per sviluppatori.", + "configure_bluetooth": "Configura Bluetooth (opzionale)", + "bluetooth_info_1": "Il Bluetooth non è supportato su tutti i dispositivi.", + "bluetooth_info_2": "Alcuni dispositivi usano il Bluetooth Classico, altri il BLE (Bluetooth Low Energy)", + "bluetooth_info_3": "Metti l'RNode in modalità accoppiamento Bluetooth, quindi connettiti ad esso dalle impostazioni Bluetooth di Android.", + "bluetooth_info_4": "Una volta avviata una richiesta di accoppiamento da Android, dovrebbe apparire un PIN sul display dell'RNode.", + "bluetooth_info_5": "In Sideband dovrai abilitare Connect using Bluetooth in Hardware → RNode.", + "bluetooth_info_6": "Se il tuo dispositivo usa BLE, dovrai anche abilitare Device requires BLE in Hardware → RNode.", + "bluetooth_restart_warning": "Non dimenticare di riavviare Sideband affinché le impostazioni abbiano effetto!", + "enable": "Abilita", + "disable": "Disabilita", + "start_pairing": "Inizia Accoppiamento", + "configure_tnc": "Configura Modalità TNC (opzionale)", + "tnc_info_1": "La modalità TNC consente di utilizzare un RNode come TNC compatibile KISS sulla porta seriale.", + "tnc_info_2": "Questa modalità lo rende utilizzabile con software per radioamatori che possono comunicare con un TNC KISS tramite una porta seriale.", + "tnc_warning": "Devi lasciare disabilitata la modalità TNC quando usi RNode con app come MeshChat o Sideband.", + "frequency": "Frequenza (Hz)", + "bandwidth": "Larghezza di banda", + "tx_power": "Potenza Tx (dBm)", + "spreading_factor": "Spreading Factor", + "coding_rate": "Coding Rate", + "configure_display": "Configura Display", + "rotation": "Rotazione", + "reconditioning": "Ricondizionamento", + "start": "Inizia", + "stop": "Ferma", + "rotation_v180_warning": "L'impostazione della rotazione del display richiede il firmware v1.80+", + "errors": { + "failed_download": "Impossibile scaricare il firmware: {error}", + "firmware_not_found_in_release": "Firmware consigliato non trovato nell'ultima release.", + "web_serial_not_supported": "Il Web Serial non è supportato in questo browser. Usa Chrome, Edge o un altro browser basato su Chromium.", + "no_device_selected": "Nessun dispositivo selezionato. Seleziona una porta seriale.", + "failed_connect": "Connessione al dispositivo fallita: {error}", + "not_an_rnode": "Il dispositivo selezionato non è un RNode! Assicurati di aver selezionato la porta seriale corretta.", + "failed_dfu": "Impossibile entrare in modalità DFU: {error}", + "select_firmware_first": "Seleziona prima un file firmware (.zip).", + "failed_flash": "Flashing del firmware fallito: {error}", + "esptool_not_loaded": "impossibile caricare esptool-js. Ricarica la pagina e riprova.", + "no_flash_config": "La configurazione di flash non è disponibile per il dispositivo selezionato. Seleziona un altro dispositivo o controlla il file del firmware.", + "failed_extract": "File richiesto \"{file}\" non trovato nel file ZIP del firmware. Scarica il firmware corretto per il tuo dispositivo.", + "failed_detect": "Impossibile rilevare l'RNode. Assicurati che il dispositivo sia connesso e nella modalità corretta.", + "provisioned_already": "La eeprom è già inizializzata. Devi cancellarla per reinizializzarla!", + "select_product_first": "Seleziona prima un prodotto!", + "select_model_first": "Seleziona prima un modello!", + "not_provisioned": "La eeprom non è inizializzata. Devi farlo prima!", + "failed_provision": "inizializzazione fallita: {error}", + "failed_set_hash": "impossibile impostare l'hash del firmware: {error}", + "failed_reboot": "Impossibile riavviare l'RNode: {error}", + "failed_read_display": "Impossibile leggere il display: {error}", + "failed_dump_eeprom": "Impossibile eseguire il dump della EEPROM: {error}", + "failed_wipe_eeprom": "Impossibile cancellare la EEPROM: {error}", + "failed_enable_tnc": "Impossibile abilitare la modalità TNC: {error}", + "failed_disable_tnc": "Impossibile disabilitare la modalità TNC: {error}", + "failed_enable_bluetooth": "Impossibile abilitare il Bluetooth: {error}", + "failed_disable_bluetooth": "Impossibile disabilitare il Bluetooth: {error}", + "failed_start_pairing": "Impossibile avviare l'accoppiamento: {error}", + "failed_set_rotation": "Impossibile impostare la rotazione del display: {error}", + "failed_start_reconditioning": "Impossibile avviare il ricondizionamento del display: {error}" + }, + "alerts": { + "firmware_downloaded": "Il firmware consigliato è stato scaricato e caricato.", + "dfu_ready": "Il dispositivo dovrebbe ora essere in modalità DFU. Puoi procedere con il flashing del firmware.", + "flash_success": "Il firmware è stato flashato con successo!", + "rebooting": "La scheda si sta riavviando!", + "eeprom_wipe_confirm": "Sei sicuro di voler cancellare la eeprom su questo dispositivo? L'operazione richiederà circa 30 secondi. Verrà mostrato un avviso al termine.", + "eeprom_wiped": "la eeprom è stata cancellata!", + "eeprom_dumped": "Dump della EEPROM eseguito in console", + "rnode_detected": "Rilevato RNode v{version}", + "provision_success": "il dispositivo è stato inizializzato!", + "hash_success": "l'hash del firmware è stato impostato!", + "tnc_enabled": "La modalità TNC è stata abilitata!", + "tnc_disabled": "La modalità TNC è stata disabilitata!", + "bluetooth_enabled": "Il Bluetooth è stato abilitato!", + "bluetooth_disabled": "Il Bluetooth è stato disabilitato!", + "bluetooth_pairing_pin": "PIN Accoppiamento Bluetooth: {pin}", + "bluetooth_pairing_started": "Modalità accoppiamento avviata (30s)", + "rotation_updated": "Rotazione aggiornata", + "reconditioning_started": "Ricondizionamento avviato" + } + }, + "micron_editor": { + "title": "Editor Micron", + "description": "Modifica e visualizza l'anteprima del markup Micron con rendering live.", + "editor": "Editor", + "preview": "Anteprima", + "download": "Scarica", + "edit": "Modifica", + "view_preview": "Visualizza Anteprima", + "placeholder": "Inserisci qui il tuo markup Micron...", + "reset": "Reimposta", + "new_tab": "Nuova Scheda", + "rename_tab": "Rinomina Scheda", + "confirm_reset": "Sei sicuro di voler reimpostare l'editor? Tutte le schede e i contenuti andranno persi.", + "confirm_delete_tab": "Sei sicuro di voler eliminare questa scheda?", + "main_tab": "Principale", + "guide_tab": "Guida NomadNet", + "parser_by": "Utilizzando il Parser Micron di" + }, + "paper_message": { + "title": "Messaggio Cartaceo", + "description": "Genera e leggi messaggi cartacei LXMF firmati tramite codici QR." + }, + "rns_page_node": { + "title": "RNS Page Node", + "description": "Ospita pagine micron Nomadnet e condividi file con facilità." + }, + "rns_tunnel": { + "title": "RNS Tunnel", + "description": "Crea tunnel per il traffico IP regolare su collegamenti di rete Reticulum." + }, + "rns_filesync": { + "title": "RNS Filesync", + "description": "Condividi e sincronizza file in modo efficiente con altri peer della mesh." + }, + "bots": { + "title": "LXMFy Bot", + "description": "Gestisci bot automatizzati per echo, note e promemoria usando LXMFy." + } + }, + "ping": { + "title": "Ping Peer della Mesh", + "description": "Solo le destinazioni {code} rispondono al ping.", + "destination_hash": "Hash di Destinazione", + "timeout_seconds": "Timeout Ping (secondi)", + "start_ping": "Inizia Ping", + "stop": "Ferma", + "clear_results": "Cancella Risultati", + "drop_path": "Elimina Percorso", + "status": "Stato", + "running": "In esecuzione", + "idle": "Inattivo", + "last_rtt": "Ultimo RTT", + "last_error": "Ultimo Errore", + "console_output": "Output Console", + "streaming_responses": "Risposte seq in streaming in tempo reale", + "no_pings_yet": "Nessun ping ancora. Inizia una sessione per raccogliere dati RTT.", + "invalid_hash": "Hash di destinazione non valido!", + "timeout_must_be_number": "Il timeout deve essere un numero!" + }, + "rncp": { + "file_transfer": "Trasferimento File", + "title": "RNCP - Reticulum Network Copy", + "description": "Invia e ricevi file sulla rete Reticulum usando le risorse RNS. Questo strumento consente un trasferimento affidabile dei file tra i nodi della mesh anche su collegamenti ad alta latenza.", + "usage_steps": "Come usare RNCP:", + "step_1": "1. Per **ricevere** un file, vai alla scheda **Ascolta**, inserisci gli hash delle identità consentite (chi può inviarti file) e clicca su **Inizia Ascolto**.", + "step_2": "2. Per **inviare** un file, ottieni l'**Hash di Destinazione** di un nodo in ascolto, inserisci il **Percorso File Locale** e clicca su **Invia File**.", + "step_3": "3. Per **recuperare** un file, ottieni l'**Hash di Destinazione** di un nodo in ascolto con 'Consenti Recupero' abilitato, inserisci il **Percorso File Remoto** e clicca su **Recupera File**.", + "send_file": "Invia File", + "fetch_file": "Recupera File", + "listen": "Ascolta", + "destination_hash": "Hash di Destinazione", + "file_path": "Percorso File", + "timeout_seconds": "Timeout (secondi)", + "disable_compression": "Disabilita compressione", + "cancel": "Annulla", + "progress": "Avanzamento", + "invalid_hash": "Hash di destinazione non valido!", + "provide_file_path": "Fornisci un percorso file!", + "file_sent_successfully": "File inviato con successo. ID Trasferimento: {id}", + "failed_to_send": "Impossibile inviare il file", + "remote_file_path": "Percorso File Remoto", + "save_path_optional": "Percorso di Salvataggio (opzionale)", + "save_path_placeholder": "Lascia vuoto per la directory corrente", + "allow_overwrite": "Consenti sovrascrittura", + "provide_remote_file_path": "Fornisci un percorso file remoto!", + "file_fetched_successfully": "File recuperato con successo. Salvato in: {path}", + "failed_to_fetch": "Impossibile recuperare il file", + "allowed_hashes": "Hash Identità Consentiti (uno per riga)", + "fetch_jail_path": "Percorso Jail di Recupero (opzionale)", + "allow_fetch": "Consenti recupero", + "start_listening": "Inizia Ascolto", + "stop_listening": "Ferma Ascolto", + "listening_on": "In ascolto su:", + "provide_allowed_hash": "Fornisci almeno un hash di identità consentito!", + "failed_to_start_listener": "Impossibile avviare il listener" + }, + "rnprobe": { + "network_diagnostics": "Diagnostica di Rete", + "title": "RNProbe - Sonda Destinazione", + "description": "Sonda le destinazioni con dimensioni dei pacchetti personalizzate per testare la connettività e misurare l'RTT.", + "destination_hash": "Hash di Destinazione", + "full_destination_name": "Nome Destinazione Completo", + "probe_size_bytes": "Dimensione Sonda (byte)", + "number_of_probes": "Numero di Sonde", + "wait_between_probes": "Attesa tra le Sonde (secondi)", + "start_probe": "Inizia Sonda", + "stop": "Ferma", + "clear_results": "Cancella Risultati", + "summary": "Riepilogo", + "sent": "Inviate", + "delivered": "Consegnate", + "timeouts": "Timeout", + "failed": "Fallite", + "probe_results": "Risultati Sonda", + "probe_responses_realtime": "Risposte della sonda in tempo reale", + "no_probes_yet": "Nessuna sonda ancora. Inizia una sonda per testare la connettività.", + "probe_number": "Sonda #{number}", + "bytes": "byte", + "hops": "Salti", + "rtt": "RTT", + "rssi": "RSSI", + "snr": "SNR", + "quality": "Qualità", + "timeout": "Timeout", + "invalid_hash": "Hash di destinazione non valido!", + "provide_full_name": "Fornisci un nome destinazione completo!", + "failed_to_probe": "Impossibile sondare la destinazione" + }, + "rnstatus": { + "network_diagnostics": "Diagnostica di Rete", + "title": "RNStatus - Stato della Rete", + "description": "Visualizza le statistiche delle interfacce e le informazioni sullo stato della rete.", + "refresh": "Aggiorna", + "include_link_stats": "Includi Statistiche Collegamento", + "sort_by": "Ordina per:", + "none": "Nessuno", + "bitrate": "Bitrate", + "rx_bytes": "Byte RX", + "tx_bytes": "Byte TX", + "total_traffic": "Traffico Totale", + "announces": "Annunci", + "active_links": "Collegamenti Attivi: {count}", + "no_interfaces_found": "Nessuna interfaccia trovata. Clicca su aggiorna per caricare lo stato.", + "mode": "Modalità", + "rx_packets": "Pacchetti RX", + "tx_packets": "Pacchetti TX", + "clients": "Client", + "peers_reachable": "raggiungibile", + "noise_floor": "Rumore di Fondo", + "interference": "Interferenza", + "cpu_load": "Carico CPU", + "cpu_temp": "Temp CPU", + "memory_load": "Carico Memoria", + "battery": "Batteria", + "network": "Rete", + "incoming_announces": "Annunci in Entrata", + "outgoing_announces": "Annunci in Uscita", + "airtime": "Airtime", + "channel_load": "Carico Canale" + }, + "translator": { + "text_translation": "Traduzione Testo", + "title": "Traduttore", + "description": "Traduci testo usando l'API LibreTranslate o Argos Translate locale.", + "argos_translate": "Argos Translate", + "libretranslate": "LibreTranslate", + "api_server": "Server API LibreTranslate", + "api_server_description": "Inserisci l'URL di base del tuo server LibreTranslate (es. http://localhost:5000)", + "source_language": "Lingua Sorgente", + "auto_detect": "Rilevamento automatico", + "target_language": "Lingua Destinazione", + "select_target_language": "Seleziona lingua destinazione", + "argos_not_detected": "Argos Translate non rilevato", + "argos_not_detected_desc": "Per usare la traduzione locale, devi installare il pacchetto Argos Translate usando uno dei seguenti metodi:", + "method_pip_venv": "Metodo 1: pip (venv)", + "method_pipx": "Metodo 2: pipx", + "note_restart_required": "Nota: Dopo l'installazione, potrebbe essere necessario riavviare l'applicazione e installare i pacchetti lingua tramite la CLI di Argos Translate.", + "no_language_packages": "Nessun pacchetto lingua rilevato", + "no_language_packages_desc": "Argos Translate è installato ma non sono disponibili pacchetti lingua. Installa i pacchetti lingua usando uno dei seguenti comandi:", + "install_all_languages": "Installa tutte le lingue", + "install_specific_pair": "Installa coppia di lingue specifica (esempio: da Inglese a Tedesco)", + "after_install_note": "Dopo aver installato i pacchetti lingua, clicca su \"Aggiorna Lingue\" per ricaricare le lingue disponibili.", + "text_to_translate": "Testo da Tradurre", + "enter_text_placeholder": "Inserisci il testo da tradurre...", + "translate": "Traduci", + "swap": "Scambia", + "clear": "Cancella", + "translation": "Traduzione", + "source": "Sorgente", + "detected": "Rilevata", + "available_languages": "Lingue Disponibili", + "languages_loaded_from": "Le lingue sono caricate dall'API LibreTranslate o dai pacchetti Argos Translate.", + "refresh_languages": "Aggiorna Lingue", + "failed_load_languages": "Impossibile caricare le lingue. Assicurati che LibreTranslate sia in esecuzione o che Argos Translate sia installato.", + "failed_translate": "Traduzione fallita. Assicurati che LibreTranslate sia in esecuzione o che Argos Translate sia installato.", + "select_languages_warning": "Seleziona sia la lingua sorgente che quella di destinazione.", + "auto_detect_not_supported": "Il rilevamento automatico non è supportato con Argos Translate. Seleziona una lingua sorgente.", + "copied_to_clipboard": "Copiato negli appunti" + }, + "call": { + "phone": "Telefono", + "voicemail": "Segreteria", + "settings": "Impostazioni", + "unknown": "Sconosciuto", + "call_ended": "Chiamata Terminata", + "call_declined": "Chiamata Rifiutata", + "initiation": "Inizializzazione...", + "send_to_voicemail": "Invia alla Segreteria", + "incoming_call": "Chiamata in Arrivo...", + "busy": "Occupato...", + "rejected": "Rifiutata...", + "calling": "Chiamata in corso...", + "available": "Disponibile...", + "ringing": "Squilla...", + "connecting": "Connessione...", + "connected": "Connesso", + "accept": "Accetta", + "decline": "Rifiuta", + "hangup": "Riattacca", + "answer_call": "Rispondi alla Chiamata", + "decline_call": "Rifiuta Chiamata", + "hangup_call": "Termina Chiamata", + "mute_mic": "Disattiva Mic", + "unmute_mic": "Attiva Mic", + "mute_speaker": "Disattiva Altoparlante", + "unmute_speaker": "Attiva Altoparlante", + "telephone": "Telefono", + "enter_identity_hash_to_call": "Inserisci un'identità da chiamare.", + "identity_hash": "Hash Identità", + "call_history": "Cronologia Chiamate", + "call_back": "Richiama", + "no_voicemails": "Nessun Messaggio in Segreteria", + "voicemails_will_appear_here": "Quando qualcuno ti lascia un messaggio, apparirà qui.", + "voicemail_inbox": "Messaggi Ricevuti", + "messages": "Messaggi", + "delete": "Elimina", + "voicemail_settings": "Impostazioni Segreteria", + "dependencies_missing": "Dipendenze Mancanti", + "voicemail_requires_espeak": "La segreteria richiede `espeak-ng` per generare i saluti. Installalo sul tuo sistema.", + "voicemail_requires_ffmpeg": "La segreteria richiede `ffmpeg` per elaborare i file audio. Installalo sul tuo sistema.", + "enable_voicemail": "Abilita Segreteria", + "enable_voicemail_description": "Accetta chiamate automaticamente e registra messaggi", + "greeting_message": "Messaggio di Saluto", + "enter_greeting_text": "Inserisci il testo del saluto...", + "greeting_text_description": "Questo testo verrà convertito in voce usando eSpeak NG.", + "tts_speed": "Velocità TTS", + "tts_pitch": "Tonalità TTS", + "tts_voice": "Voce TTS", + "tts_word_gap": "Intervallo Parole TTS", + "save_and_generate": "Salva e Genera", + "generating": "Generazione...", + "preview_greeting": "Anteprima Saluto", + "stop_preview": "Ferma Anteprima", + "answer_delay_seconds": "Ritardo Risposta (s)", + "max_recording_seconds": "Registrazione Max (s)", + "recording_voicemail": "Registrazione Messaggio", + "call_status": "Stato Chiamata", + "call_recording": "Registratore Chiamate", + "call_recording_description": "Registra le chiamate vocali in memoria", + "recordings": "Registrazioni", + "no_recordings": "Nessuna registrazione trovata", + "remote_rx": "Remoto (RX)", + "local_tx": "Locale (TX)", + "download_rx": "Scarica RX", + "download_tx": "Scarica TX", + "default_quality": "Qualità Predefinita", + "active_call": "Chiamata Attiva", + "status": "Stato", + "failed_to_answer_call": "Impossibile rispondere alla chiamata", + "failed_to_hangup_call": "Impossibile terminare la chiamata", + "failed_to_toggle_microphone": "Impossibile attivare/disattivare il microfono", + "failed_to_toggle_speaker": "Impossibile attivare/disattivare l'altoparlante", + "failed_to_switch_audio_profile": "Impossibile cambiare il profilo audio", + "failed_to_initiate_call": "Impossibile avviare la chiamata", + "enter_identity_hash_to_call_error": "Inserisci un'identità da chiamare", + "failed_to_save_settings": "Impossibile salvare le impostazioni", + "do_not_disturb": "Non Disturbare", + "load_more": "Carica Altri", + "go_to_phone_page": "Vai alla Pagina Telefono", + "search_history": "Cerca nella cronologia...", + "allow_calls_from_contacts_only": "Consenti chiamate solo dai contatti", + "settings_saved": "Impostazioni salvate", + "greeting_generated_successfully": "Saluto generato con successo", + "failed_to_generate_greeting": "Impossibile generare il saluto", + "no_greeting_audio_found": "Nessun audio del saluto trovato. Generane uno prima.", + "voicemail_deleted": "Messaggio eliminato", + "failed_to_delete_voicemail": "Impossibile eliminare il messaggio", + "ringtone": "Suoneria", + "ringtone_settings": "Impostazioni Suoneria", + "enable_custom_ringtone": "Abilita Suoneria Personalizzata", + "enable_custom_ringtone_description": "Riproduci un file audio personalizzato per tutte le chiamate in arrivo", + "upload_ringtone": "Carica Suoneria", + "uploading_ringtone": "Caricamento Suoneria...", + "no_custom_ringtone_uploaded": "Nessuna suoneria personalizzata caricata", + "supports_audio_formats": "Supporta MP3, OGG, WAV, M4A, FLAC. Verrà convertito in Opus.", + "preview_ringtone": "Anteprima Suoneria", + "remove_ringtone": "Rimuovi Suoneria", + "ringtone_uploaded_successfully": "Suoneria caricata con successo", + "failed_to_upload_ringtone": "Impossibile caricare la suoneria", + "ringtone_deleted": "Suoneria eliminata", + "failed_to_delete_ringtone": "Impossibile eliminare la suoneria", + "no_ringtone_audio_found": "Nessun audio della suoneria trovato. Caricane uno prima.", + "ringtone_volume": "Volume Suoneria", + "default_ringtone": "Suoneria Predefinita", + "ringtone_for_non_contacts": "Suoneria per chi non è nei contatti", + "primary_system_default": "Principale (Predefinita di Sistema)", + "random": "Casuale", + "edit_contact": "Modifica Contatto", + "add_contact": "Aggiungi Contatto", + "contact_name": "Nome Contatto", + "preferred_ringtone": "Suoneria Preferita", + "default_global_setting": "Predefinita (Impostazione Globale)", + "uploaded_ringtones": "Suonerie Caricate", + "save_contact": "Salva Contatto", + "primary_ringtone_set": "Suoneria principale impostata", + "failed_to_set_primary_ringtone": "Impossibile impostare la suoneria principale", + "failed_to_update_ringtone_name": "Impossibile aggiornare il nome della suoneria", + "failed_to_play_ringtone": "Impossibile riprodurre la suoneria", + "failed_to_play_voicemail": "Impossibile riprodurre il messaggio", + "web_audio_not_available": "Audio web non disponibile", + "no_audio_input_found": "Nessun dispositivo audio di input trovato. Controlla il microfono e i permessi.", + "microphone_permission_denied": "Permesso microfono negato. Consenti l'accesso e riprova.", + "failed_to_update_dnd": "Impossibile aggiornare lo stato Non Disturbare", + "failed_to_update_call_settings": "Impossibile aggiornare le impostazioni di chiamata", + "failed_to_update_recording_status": "Impossibile aggiornare lo stato di registrazione chiamata", + "call_history_cleared": "Cronologia chiamate cancellata", + "failed_to_clear_call_history": "Impossibile cancellare la cronologia chiamate", + "identity_banished": "Identità esiliata", + "failed_to_banish_identity": "Impossibile esiliare l'identità", + "name_and_hash_required": "Nome e hash identità richiesti", + "contact_updated": "Contatto aggiornato", + "contact_added": "Contatto aggiunto", + "contact_deleted": "Contatto eliminato", + "failed_to_delete_contact": "Impossibile eliminare il contatto", + "hash_copied": "Hash copiato negli appunti", + "failed_to_copy_hash": "Impossibile copiare l'hash", + "greeting_uploaded_successfully": "Saluto caricato con successo", + "greeting_deleted": "Saluto eliminato", + "failed_to_delete_greeting": "Impossibile eliminare il saluto", + "failed_to_start_recording_greeting": "Impossibile avviare la registrazione del saluto", + "greeting_recorded_from_mic": "Saluto registrato dal mic", + "failed_to_stop_recording_greeting": "Impossibile fermare la registrazione del saluto", + "failed_to_load_recording": "Impossibile caricare l'audio della registrazione", + "recording_deleted": "Registrazione eliminata", + "failed_to_delete_recording": "Impossibile eliminare la registrazione", + "call_sent_to_voicemail": "Chiamata inviata alla segreteria", + "failed_to_send_to_voicemail": "Impossibile inviare la chiamata alla segreteria", + "failed_load_audio_edit": "Impossibile caricare l'audio per la modifica", + "ringtone_saved": "Suoneria salvata con successo", + "failed_save_ringtone": "Impossibile salvare la suoneria modificata" + }, + "tutorial": { + "title": "Guida Introduttiva", + "welcome": "Benvenuto in", + "welcome_desc": "Il futuro della comunicazione off-grid. Sicuro, decentralizzato e inarrestabile.", + "security": "Sicurezza e Prestazioni", + "security_desc": "Miglioramenti massicci in velocità, sicurezza e recupero dai crash.", + "security_desc_page": "Miglioramenti massicci in velocità, sicurezza e integrità con recupero dai crash integrato.", + "maps": "Mappe", + "maps_desc": "OpenLayers con supporto MBTiles (esportazione e supporto offline) e endpoint API personalizzati.", + "maps_desc_page": "Supporto OpenLayers con MBTiles offline (esportazione e supporto offline) e endpoint API personalizzati per mappe online.", + "voice": "Voce LXST Completa", + "voice_desc": "Segreteria, suonerie, rubrica e condivisione contatti.", + "voice_desc_page": "Chiamate vocali cristalline su mesh. Segreteria, suonerie personalizzate e scoperta rubrica.", + "tools": "Strumenti Avanzati", + "tools_desc": "Editor Micron, NomadNet, strumenti RNS, Documentazione.", + "tools_desc_page": "Editor Micron, nodi NomadNet, strumenti RNS e documentazione integrata.", + "archiver": "Archiviatore", + "archiver_desc": "Archiviazione pagine manuale e automatizzata.", + "archiver_desc_page": "Strumenti di archiviazione pagine manuali e automatizzati per la navigazione offline.", + "banishment": "Esilio", + "banishment_desc": "Esilia persone e nodi fastidiosi, con supporto per il blocco degli annunci a livello di blackhole RNS", + "palette": "Tavolozza Comandi + Scorciatoie", + "palette_desc": "Naviga istantaneamente ovunque e personalizza le scorciatoie.", + "palette_desc_page": "Naviga nell'intera applicazione e personalizza il tuo flusso di lavoro con scorciatoie istantanee.", + "i18n": "Supporto i18n", + "i18n_desc": "Disponibile in Inglese, Tedesco e Russo.", + "i18n_desc_page": "Supporto completo all'internazionalizzazione per le lingue Inglese, Tedesco e Russo.", + "more_features": "+ molte altre funzioni!", + "connect": "Connettiti alla Mesh", + "connect_desc": "Per inviare messaggi, devi connetterti a un'interfaccia Reticulum.", + "connect_desc_page": "Usa una delle reti pubbliche qui sotto o aggiungi un'interfaccia personalizzata dalla pagina Interfacce.", + "suggested_networks": "Reti Pubbliche Suggerite", + "suggested_relays": "Relè Suggeriti", + "use": "Usa", + "online": "Online", + "custom_interfaces": "Interfacce Personalizzate", + "custom_interfaces_desc": "Vuoi aggiungere un'interfaccia specifica? Vai alla pagina Interfacce per configurare una connessione personalizzata.", + "custom_interfaces_desc_page": "Per qualsiasi relè privato o hardware gestito da te, aggiungilo tramite la pagina Interfacce dedicata.", + "open_interfaces": "Apri la pagina Interfacce", + "learn_create": "Impara e Crea", + "learn_create_desc": "Scopri come usare MeshChatX al massimo delle sue potenzialità.", + "learn_create_desc_page": "Scopri come usare MeshChatX al massimo delle sue potenzialità e crea i tuoi contenuti.", + "documentation": "Documentazione", + "documentation_desc": "Leggi la documentazione ufficiale di MeshChatX e Reticulum.", + "documentation_desc_page": "Guide complete per MeshChatX e lo stack di rete Reticulum sottostante.", + "meshchatx_docs": "Doc MeshChatX", + "reticulum_docs": "Doc Reticulum", + "read_meshchatx_docs": "Leggi Doc MeshChatX", + "reticulum_manual": "Manuale di Rete Reticulum", + "micron_editor": "Editor Micron", + "micron_editor_desc": "Dai un'occhiata all'Editor Micron per una guida sulla creazione di pagine mesh-native.", + "micron_editor_desc_page": "Impara come creare pagine mesh-native e contenuti interattivi usando il linguaggio di markup Micron.", + "open_micron_editor": "Apri Editor Micron", + "paper_messages": "Esplora Nodi NomadNet", + "paper_messages_desc": "Sfoglia pagine e servizi decentralizzati.", + "send_messages": "Invia Messaggi", + "send_messages_desc": "Inizia una conversazione sicura.", + "explore_nodes": "Visualizza Nodi", + "explore_nodes_desc": "Visualizza la mappa e la topologia della rete.", + "voice_calls": "Chiamate Vocali", + "voice_calls_desc": "Prova il fantastico editor di suonerie!", + "ready": "Pronto per Iniziare!", + "ready_desc": "Tutto è configurato. Devi riavviare l'applicazione affinché le modifiche abbiano effetto.", + "ready_desc_page": "MeshChatX è ora configurato. Devi riavviare l'applicazione per finalizzare la connessione.", + "docker_note": "Se stai usando Docker, assicurati di riavviare il container", + "restart_required": "Riavvio Richiesto", + "restart_desc_page": "Se stai usando Docker, assicurati di riavviare il container. Le app native si riavvieranno automaticamente.", + "back": "Indietro", + "skip": "Salta", + "next": "Avanti", + "restart_start": "Avvia MeshChatX", + "skip_setup": "Salta Configurazione", + "continue": "Continua", + "skip_confirm": "Sei sicuro di voler saltare la configurazione? Dovrai aggiungere le interfacce manualmente in seguito.", + "discovery_question": "Vuoi usare la scoperta delle interfacce della comunità e la connessione automatica?", + "discovery_desc": "Questo consente a MeshChatX di trovare e connettersi automaticamente ai nodi pubblici della comunità vicino a te o su internet.", + "yes": "Sì, usa la scoperta", + "no": "No, configurazione manuale", + "discovery_enabled": "Scoperta della comunità abilitata", + "failed_enable_discovery": "Impossibile abilitare la scoperta" + }, + "command_palette": { + "search_placeholder": "Cerca comandi, naviga o trova peer...", + "no_results": "Nessun risultato trovato per \"{query}\"", + "group_actions": "Azioni", + "group_recent": "Peer Recenti", + "group_contacts": "Contatti", + "footer_navigate": "Naviga", + "footer_select": "Seleziona", + "nav_messages": "Messaggi", + "nav_messages_desc": "Apri la pagina dei messaggi", + "nav_nomad": "Nomad Network", + "nav_nomad_desc": "Sfoglia le pagine Nomad Network", + "nav_map": "Mappa", + "nav_map_desc": "Visualizza la mappa della topologia di rete", + "nav_paper": "Messaggi Cartacei", + "nav_paper_desc": "Genera messaggi offline", + "nav_call": "Chiamate Vocali", + "nav_call_desc": "Apri la pagina delle chiamate vocali", + "nav_settings": "Impostazioni", + "nav_settings_desc": "Apri la pagina delle impostazioni", + "nav_ping": "Ping", + "nav_ping_desc": "Ping nodi di rete", + "nav_rnprobe": "RNProbe", + "nav_rnprobe_desc": "Sonda i nodi Reticulum", + "nav_rncp": "RNCP", + "nav_rncp_desc": "Reticulum Control Protocol", + "nav_rnstatus": "RNStatus", + "nav_rnstatus_desc": "Visualizza lo stato di Reticulum", + "nav_rnpath": "RNPath", + "nav_rnpath_desc": "Visualizza i percorsi di rete", + "nav_rnpath_trace": "RNPath Trace", + "nav_rnpath_trace_desc": "Visualizza i percorsi di rete", + "nav_translator": "Traduttore", + "nav_translator_desc": "Traduci messaggi", + "nav_forwarder": "Inoltro", + "nav_forwarder_desc": "Strumento di inoltro messaggi", + "nav_documentation": "Documentazione", + "nav_documentation_desc": "Visualizza la documentazione", + "nav_micron_editor": "Editor Micron", + "nav_micron_editor_desc": "Crea pagine mesh-native", + "nav_rnode_flasher": "Flasher RNode", + "nav_rnode_flasher_desc": "Flasha il firmware RNode", + "nav_debug_logs": "Log di Debug", + "nav_debug_logs_desc": "Visualizza i log di debug", + "action_sync": "Sincronizza Messaggi", + "action_sync_desc": "Sincronizza con il nodo di propagazione", + "action_compose": "Componi Messaggio", + "action_compose_desc": "Inizia un nuovo messaggio", + "action_orbit": "Attiva/Disattiva Orbita", + "action_orbit_desc": "Attiva o disattiva la modalità orbita", + "action_bouncing_balls": "Palle Rimbalzanti", + "action_bouncing_balls_desc": "Attiva o disattiva la modalità palle rimbalzanti", + "action_getting_started": "Guida Introduttiva", + "action_getting_started_desc": "Mostra la guida introduttiva", + "action_changelog": "Changelog", + "action_changelog_desc": "Visualizza le novità" + } +} diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json index e878f3b..af5494a 100644 --- a/meshchatx/src/frontend/locales/ru.json +++ b/meshchatx/src/frontend/locales/ru.json @@ -194,9 +194,42 @@ "emergency_mode_active": "Аварийный режим активен — используется база данных в оперативной памяти и ограниченные службы.", "blackhole_integration_enabled": "Интеграция Blackhole", "blackhole_integration_description": "Автоматически блокировать (blackhole) личности на транспортном уровне Reticulum при изгнании пользователей в MeshChatX.", - "failed_announce": "failed to announce", - "search_settings": "Search settings...", - "show_qr": "Show QR Code" + "failed_announce": "ошибка анонса", + "search_settings": "Поиск настроек...", + "show_qr": "Показать QR-код", + "csp_settings": "Политика безопасности контента (CSP)", + "csp_description": "Вручную добавьте разрешенные домены и источники для различных типов ресурсов. Это полезно для пользовательских серверов тайлов, ботов или внешних интеграций.", + "csp_extra_connect_src": "Дополнительные источники соединений", + "csp_extra_connect_src_description": "Дополнительные источники для соединений fetch/websocket (например, https://api.example.com).", + "csp_extra_img_src": "Дополнительные источники изображений", + "csp_extra_img_src_description": "Дополнительные источники для изображений и тайлов.", + "csp_extra_frame_src": "Дополнительные источники фреймов", + "csp_extra_frame_src_description": "Дополнительные источники для iframe.", + "csp_extra_script_src": "Дополнительные источники скриптов", + "csp_extra_script_src_description": "Дополнительные источники для скриптов (только для продвинутых пользователей).", + "csp_extra_style_src": "Дополнительные источники стилей", + "csp_extra_style_src_description": "Дополнительные источники для таблиц стилей.", + "location": "Местоположение", + "location_source": "Источник местоположения", + "location_source_browser": "Автоматически (браузер)", + "location_source_manual": "Вручную", + "location_source_browser_desc": "Использует API геолокации вашего браузера. Примечание: в десктопном приложении это может использовать сервисы Google.", + "location_source_manual_desc": "Используйте координаты, введенные вручную, для максимальной конфиденциальности.", + "location_manual_lat": "Широта", + "location_manual_lon": "Долгота", + "location_manual_alt": "Высота (м)", + "telemetry_enabled": "Телеметрия включена", + "telemetry_description": "Разрешить MeshChatX отправлять и получать телеметрические данные. Это включает ответ на запросы местоположения от доверенных узлов.", + "telemetry_trusted_peers": "Доверенные телеметрические узлы", + "telemetry_no_trusted_peers": "Нет настроенных доверенных узлов. Добавьте узлы в список доверенных из меню чата, чтобы разрешить им запрашивать ваше местоположение.", + "telemetry_revoke_trust": "Отозвать доверие", + "telemetry_trust_revoked": "Доверие телеметрии для {name} отозвано", + "telemetry_trust_granted_alert": "Узел теперь является доверенным для телеметрии.", + "telemetry_trust_revoked_alert": "Доверие телеметрии отозвано.", + "telemetry_trust_failed": "Не удалось обновить доверие телеметрии.", + "telemetry_trust_revoke": "Отозвать доверие телеметрии", + "telemetry_trust_grant": "Доверять телеметрии", + "location_manage_desc": "Управление тем, как передается ваше местоположение." }, "common": { "open": "Открыть", @@ -362,6 +395,7 @@ "export_all": "Экспорт всех", "search_placeholder": "Поиск по имени, типу, хосту...", "all": "Все", + "connected_only": "Только подключенные", "all_types": "Все типы", "no_interfaces_found": "Интерфейсы не найдены", "no_interfaces_description": "Измените параметры поиска или добавьте новый интерфейс.", @@ -572,7 +606,10 @@ "no_contacts_telephone": "No contacts found in telephone", "failed_load_contacts": "Failed to load contacts", "location_request_sent": "Location request sent", - "failed_send_location_request": "Failed to send location request", + "failed_send_location_request": "Не удалось отправить запрос местоположения", + "fetching_location": "Получение местоположения...", + "location_sent": "Местоположение успешно отправлено", + "location_requested": "Запрошено местоположение", "remove_image_confirm": "Are you sure you want to remove this image attachment?", "failed_start_recording": "failed to start recording", "remove_audio_confirm": "Are you sure you want to remove this audio attachment?", @@ -740,6 +777,21 @@ "queues_purged": "Announce queues purged", "failed_purge": "Failed to purge queues" }, + "rnpath_trace": { + "title": "RNS Трассировка пути", + "description": "Визуализация пути и переходов к любому хэшу назначения в сети.", + "destination_hash": "Хэш назначения", + "placeholder": "Введите 32-символьный хэш...", + "trace": "Трассировать путь", + "tracing": "Трассировка пути через сеть...", + "total_hops": "Всего переходов", + "interface": "Выходной интерфейс", + "next_hop": "Следующий переход", + "ready_title": "Трассировка пути", + "ready_desc": "Введите хэш назначения выше, чтобы увидеть, как пакеты проходят через сеть.", + "unknown_hops": "{count} промежуточных переходов", + "ping_test": "Проверить с помощью Ping" + }, "translator": { "title": "Translator", "description": "Перевод текста через LibreTranslate API или локальный Argos Translate." @@ -897,15 +949,15 @@ "description": "Создание и чтение подписанных бумажных сообщений LXMF через QR-коды." }, "rns_page_node": { - "title": "RNS Page-узел", + "title": "RNS Page Node", "description": "Хостинг микрон-страниц Nomadnet и удобный обмен файлами." }, "rns_tunnel": { - "title": "RNS-туннель", + "title": "RNS Tunnel", "description": "Туннелирование обычного IP-трафика через сеть Reticulum." }, "rns_filesync": { - "title": "RNS-файлообмен", + "title": "RNS Filesync", "description": "Эффективный обмен и синхронизация файлов с другими узлами mesh." }, "bots": { @@ -1328,14 +1380,16 @@ "nav_settings_desc": "Открыть страницу настроек", "nav_ping": "Ping", "nav_ping_desc": "Пинг узлов сети", - "nav_rnprobe": "RN Probe", + "nav_rnprobe": "RNProbe", "nav_rnprobe_desc": "Зондирование узлов Reticulum", - "nav_rncp": "RN CP", + "nav_rncp": "RNCP", "nav_rncp_desc": "Reticulum Control Protocol", - "nav_rnstatus": "RN Status", + "nav_rnstatus": "RNStatus", "nav_rnstatus_desc": "Просмотр статуса Reticulum", - "nav_rnpath": "RN Path", + "nav_rnpath": "RNPath", "nav_rnpath_desc": "Просмотр сетевых путей", + "nav_rnpath_trace": "Трассировка пути", + "nav_rnpath_trace_desc": "Визуализация сетевых путей", "nav_translator": "Переводчик", "nav_translator_desc": "Перевод сообщений", "nav_forwarder": "Форвардер", @@ -1450,4 +1504,4 @@ "banishment_lifted": "Banishment lifted successfully", "failed_lift_banishment": "Failed to lift banishment" } -} \ No newline at end of file +}