From 5e5ce253b8d8a896910db771a0f8ac520e8be2c4 Mon Sep 17 00:00:00 2001 From: Ivan Date: Sat, 2 May 2026 04:38:07 -0500 Subject: [PATCH] feat(locales): update translations for process logging, discovery interface messages, and bulk actions across multiple languages --- meshchatx/src/frontend/locales/de.json | 43 ++++++++++++++++++++--- meshchatx/src/frontend/locales/en.json | 48 ++++++++++++++++++++++---- meshchatx/src/frontend/locales/es.json | 43 ++++++++++++++++++++--- meshchatx/src/frontend/locales/fr.json | 43 ++++++++++++++++++++--- meshchatx/src/frontend/locales/it.json | 43 ++++++++++++++++++++--- meshchatx/src/frontend/locales/nl.json | 43 ++++++++++++++++++++--- meshchatx/src/frontend/locales/ru.json | 43 ++++++++++++++++++++--- meshchatx/src/frontend/locales/zh.json | 43 ++++++++++++++++++++--- 8 files changed, 308 insertions(+), 41 deletions(-) diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json index a173cb8..9a94daf 100644 --- a/meshchatx/src/frontend/locales/de.json +++ b/meshchatx/src/frontend/locales/de.json @@ -39,7 +39,16 @@ "rename_failed": "Name konnte nicht gespeichert werden", "name_required": "Namen eingeben", "announce_triggered": "Ankündigung angefordert", - "announce_failed": "Ankündigung konnte nicht angefordert werden" + "announce_failed": "Ankündigung konnte nicht angefordert werden", + "last_error_heading": "Letzter Fehler", + "view_process_log": "Prozesslog (Debug)", + "process_log_title": "Bot-Prozesslog", + "process_log_empty": "Noch keine Logausgabe für diesen Bot.", + "process_log_truncated": "Es wird nur das Ende des Logs angezeigt; die Datei auf der Festplatte ist größer.", + "process_log_loading": "Log wird geladen…", + "process_log_failed": "Prozesslog konnte nicht geladen werden", + "process_log_copied": "Log in die Zwischenablage kopiert", + "copy_process_log": "Log kopieren" }, "app": { "name": "Reticulum MeshChatX", @@ -898,6 +907,8 @@ "failed_reload": "Neuladen von Reticulum fehlgeschlagen!", "interface_not_found": "The selected interface for editing could not be found.", "discovery_settings_saved": "Erkennungseinstellungen gespeichert", + "discovery_list_refreshed": "Erkannten Schnittstellen aktualisiert.", + "discovery_list_refresh_failed": "Erkannte Schnittstellen konnten nicht aktualisiert werden.", "discovery_default_bootstrap_only": "Standard: nur Bootstrap für neue ausgehende TCP", "discovery_default_bootstrap_only_hint": "Neue TCP-Client- und Backbone-Connector-Schnittstellen erhalten bootstrap_only, damit RNS sie abkoppeln kann, sobald autoconnect_discovered_interfaces erfüllt ist.", "discovery_default_bootstrap_docs_link": "Siehe Reticulum-Bootstrap-Konnektivität.", @@ -978,7 +989,6 @@ "uploading": "Wird hochgeladen...", "upload_success": "Karte erfolgreich hochgeladen", "upload_failed": "Hochladen der Karte fehlgeschlagen", - "no_map_loaded": "Keine Offline-Karte geladen. Laden Sie eine .mbtiles-Datei hoch, um den Offline-Modus zu aktivieren.", "invalid_file": "Ungültige MBTiles-Datei. Nur Rasterkacheln werden unterstützt.", "default_view": "Standardansicht", "set_as_default": "Als Standardansicht festlegen", @@ -1131,7 +1141,10 @@ "tx": "TX", "rx": "RX", "noise": "Rauschen", - "clients": "Clients" + "clients": "Clients", + "link_up": "Verbindung aktiv", + "link_down": "Verbindung inaktiv", + "link_unknown": "Verbindungsstatus unbekannt" }, "messages": { "title": "Nachrichten", @@ -1361,6 +1374,9 @@ "remove": "Entfernen", "no_favourites": "Keine Favoriten", "add_nodes_from_announces": "Fügen Sie Knoten über den Tab 'Ankündigungen' hinzu.", + "favourites_search_no_results": "Keine Favoriten entsprechen Ihrer Suche", + "favourites_search_try_other": "Versuchen Sie einen anderen Suchbegriff.", + "no_favourites_in_section": "Keine Favoriten in diesem Abschnitt.", "search_announces": "Ankündigungen durchsuchen", "announced_time_ago": "Vor {time} angekündigt", "block_node": "Knoten blockieren", @@ -1404,7 +1420,19 @@ "path_finder_archive_loading": "Suche nach Archiv-Snapshot...", "export_section_favourites": "Abschnitts-Favoriten exportieren", "section_favourites_exported": "Abschnitts-Favoriten exportiert", - "section_favourites_export_failed": "Abschnitts-Favoriten konnten nicht exportiert werden" + "section_favourites_export_failed": "Abschnitts-Favoriten konnten nicht exportiert werden", + "sidebar_selection_mode": "Auswahlmodus", + "bulk_selected_count": "{count} ausgewählt", + "bulk_remove": "Entfernen", + "bulk_move_to_section": "In Abschnitt verschieben", + "bulk_remove_favourites_confirm": "{count} Favoriten von diesem Gerät entfernen?", + "bulk_remove_favourites_done": "{count} Favoriten entfernt", + "bulk_block_confirm": "{count} Knoten von der Ankündigungsliste verbannen?", + "bulk_block_done": "{count} Knoten gebannt", + "bulk_add_to_favourites": "Zu Favoriten hinzufügen", + "bulk_add_favourites_done": "{count} Knoten zu Favoriten hinzugefügt", + "bulk_block_nodes": "Verbannen", + "bulk_nothing_to_add_favourites": "Nichts hinzuzufügen (bereits Favoriten oder nichts ausgewählt)" }, "forwarder": { "title": "LXMF-Weiterleiter", @@ -2466,7 +2494,12 @@ "folders_exported": "Ordner exportiert", "failed_export_folders": "Ordner exportieren fehlgeschlagen", "folders_imported": "Ordner und Zuordnungen erfolgreich importiert", - "failed_import_folders": "Ordner importieren fehlgeschlagen" + "failed_import_folders": "Ordner importieren fehlgeschlagen", + "share_apk_heading": "Diese Installation teilen", + "share_apk_desc": "Das installierte MeshChatX-Paket per Bluetooth, Nearby Share oder einer anderen App senden. Nur in der Android-App verfügbar.", + "share_apk_short_hint": "Öffnet das Teilen-Menü für diese APK.", + "share_apk": "App teilen (APK)", + "share_apk_failed": "APK konnte nicht geteilt werden." }, "debug": { "title": "Debug Logs", diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json index 203ed56..f71e844 100644 --- a/meshchatx/src/frontend/locales/en.json +++ b/meshchatx/src/frontend/locales/en.json @@ -39,7 +39,16 @@ "rename_failed": "Could not save name", "name_required": "Enter a name", "announce_triggered": "Announce requested", - "announce_failed": "Could not request announce" + "announce_failed": "Could not request announce", + "last_error_heading": "Last error", + "view_process_log": "Process log (debug)", + "process_log_title": "Bot process log", + "process_log_empty": "No log output yet for this bot.", + "process_log_truncated": "Only the end of the log is shown; the file on disk is larger.", + "process_log_loading": "Loading log…", + "process_log_failed": "Could not load process log", + "process_log_copied": "Log copied to clipboard", + "copy_process_log": "Copy log" }, "app": { "name": "Reticulum MeshChatX", @@ -846,6 +855,8 @@ "failed_reload": "Failed to reload Reticulum!", "interface_not_found": "The selected interface for editing could not be found.", "discovery_settings_saved": "Discovery settings saved", + "discovery_list_refreshed": "Discovered interfaces refreshed.", + "discovery_list_refresh_failed": "Could not refresh discovered interfaces.", "discovery_default_bootstrap_only": "Default bootstrap-only for new outbound TCP", "discovery_default_bootstrap_only_hint": "When enabled, new TCP client (and backbone connector) interfaces get bootstrap_only so Reticulum can detach them once autoconnect_discovered_interfaces is satisfied.", "discovery_default_bootstrap_docs_link": "See Reticulum bootstrapping connectivity.", @@ -926,7 +937,6 @@ "uploading": "Uploading...", "upload_success": "Map uploaded successfully", "upload_failed": "Failed to upload map", - "no_map_loaded": "No offline map loaded. Upload an .mbtiles file to enable offline mode.", "invalid_file": "Invalid MBTiles file. Only raster tiles are supported.", "default_view": "Default View", "set_as_default": "Set as Default View", @@ -1079,7 +1089,10 @@ "tx": "TX", "rx": "RX", "noise": "Noise", - "clients": "Clients" + "clients": "Clients", + "link_up": "Link up", + "link_down": "Link down", + "link_unknown": "Link status unknown" }, "messages": { "title": "Messages", @@ -1292,7 +1305,12 @@ "folders_exported": "Folders exported", "failed_export_folders": "Failed to export folders", "folders_imported": "Folders and mappings imported successfully", - "failed_import_folders": "Failed to import folders" + "failed_import_folders": "Failed to import folders", + "share_apk_heading": "Share this install", + "share_apk_desc": "Send the installed MeshChatX package over Bluetooth, Nearby Share, or another app. Only available in the Android app.", + "share_apk_short_hint": "Opens the system share sheet for this APK.", + "share_apk": "Share app (APK)", + "share_apk_failed": "Could not open the share sheet for the APK." }, "debug": { "title": "Debug Logs", @@ -1421,6 +1439,9 @@ "remove": "Remove", "no_favourites": "No favourites", "add_nodes_from_announces": "Add nodes from the announces tab.", + "favourites_search_no_results": "No favourites match your search", + "favourites_search_try_other": "Try a different search term.", + "no_favourites_in_section": "No favourites in this section.", "search_announces": "Search announces", "announced_time_ago": "Announced {time} ago", "block_node": "Banish Node", @@ -1464,7 +1485,19 @@ "path_finder_archive_loading": "Looking for archive snapshot...", "export_section_favourites": "Export section favourites", "section_favourites_exported": "Section favourites exported", - "section_favourites_export_failed": "Could not export section favourites" + "section_favourites_export_failed": "Could not export section favourites", + "sidebar_selection_mode": "Selection mode", + "bulk_selected_count": "{count} selected", + "bulk_remove": "Remove", + "bulk_move_to_section": "Move to section", + "bulk_remove_favourites_confirm": "Remove {count} favourites from this device?", + "bulk_remove_favourites_done": "Removed {count} favourites", + "bulk_block_confirm": "Banish {count} nodes from the announce list?", + "bulk_block_done": "Banished {count} nodes", + "bulk_add_to_favourites": "Add to favourites", + "bulk_add_favourites_done": "Added {count} nodes to favourites", + "bulk_block_nodes": "Banish", + "bulk_nothing_to_add_favourites": "Nothing to add (already favourites or none selected)" }, "forwarder": { "title": "LXMF Forwarder", @@ -2135,7 +2168,10 @@ "argos_translate": "Argos Translate", "libretranslate": "LibreTranslate", "api_server": "LibreTranslate API Server", - "api_server_description": "Enter the base URL of your LibreTranslate server (e.g., http://localhost:5000)", + "api_server_description": "Enter the base URL of your LibreTranslate server (e.g., https://libretranslate.com or http://localhost:5000).", + "api_key_optional": "LibreTranslate API key (optional)", + "api_key_placeholder": "Leave empty unless your provider requires one", + "api_key_description": "If required, LibreTranslate expects this as api_key in the JSON translate body and optionally on the languages request. Omit for typical self-hosted instances.", "source_language": "Source Language", "auto_detect": "Auto-detect", "target_language": "Target Language", diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json index 84778f1..03512f9 100644 --- a/meshchatx/src/frontend/locales/es.json +++ b/meshchatx/src/frontend/locales/es.json @@ -39,7 +39,16 @@ "rename_failed": "No podía salvar el nombre.", "name_required": "Introduzca un nombre", "announce_triggered": "Anuncio solicitado", - "announce_failed": "No se puede solicitar el anuncio" + "announce_failed": "No se puede solicitar el anuncio", + "last_error_heading": "Último error", + "view_process_log": "Registro del proceso (depuración)", + "process_log_title": "Registro del proceso del bot", + "process_log_empty": "Aún no hay salida de registro para este bot.", + "process_log_truncated": "Solo se muestra el final del registro; el archivo en disco es más grande.", + "process_log_loading": "Cargando registro…", + "process_log_failed": "No se pudo cargar el registro del proceso", + "process_log_copied": "Registro copiado al portapapeles", + "copy_process_log": "Copiar registro" }, "app": { "name": "Reticulum MeshChatX", @@ -846,6 +855,8 @@ "failed_reload": "¡Failed to reload Reticulum!", "interface_not_found": "No se pudo encontrar la interfaz seleccionada para la edición.", "discovery_settings_saved": "Ajustes de descubrimiento guardados", + "discovery_list_refreshed": "Interfaces descubiertas actualizadas.", + "discovery_list_refresh_failed": "No se pudieron actualizar las interfaces descubiertas.", "discovery_default_bootstrap_only": "Bootstrap-only por defecto para nuevo TCP saliente", "discovery_default_bootstrap_only_hint": "Las nuevas interfaces TCP cliente (y conector backbone) usan bootstrap_only para que Reticulum las desactive al alcanzar autoconnect_discovered_interfaces.", "discovery_default_bootstrap_docs_link": "Ver conectividad de arranque de Reticulum.", @@ -926,7 +937,6 @@ "uploading": "Subiendo...", "upload_success": "Mapa subido con éxito", "upload_failed": "Failed to upload map", - "no_map_loaded": "No hay mapa sin conexión cargado. Cargue un archivo .mbtiles para habilitar el modo offline.", "invalid_file": "Archivo de MBTiles inválido. Sólo las baldosas de raster son soportadas.", "default_view": "Vista predeterminada", "set_as_default": "Establecer como vista predeterminada", @@ -1079,7 +1089,10 @@ "tx": "TX", "rx": "RX", "noise": "Noise", - "clients": "Clientes" + "clients": "Clientes", + "link_up": "Enlace activo", + "link_down": "Enlace inactivo", + "link_unknown": "Estado del enlace desconocido" }, "messages": { "title": "Mensajes", @@ -1292,7 +1305,12 @@ "folders_exported": "Carpetas exportadas", "failed_export_folders": "Failed to export folders", "folders_imported": "Carpetas y cartografías importadas con éxito", - "failed_import_folders": "Failed to import folders" + "failed_import_folders": "Failed to import folders", + "share_apk_heading": "Compartir esta instalación", + "share_apk_desc": "Envía el paquete instalado de MeshChatX por Bluetooth, Nearby Share u otra app. Solo en la app de Android.", + "share_apk_short_hint": "Abre el menú del sistema para compartir este APK.", + "share_apk": "Compartir app (APK)", + "share_apk_failed": "No se pudo compartir el APK." }, "debug": { "title": "Debug Logs", @@ -1421,6 +1439,9 @@ "remove": "Retirar", "no_favourites": "Sin favoritos", "add_nodes_from_announces": "Agregue nodos de la pestaña anuncia.", + "favourites_search_no_results": "Ningún favorito coincide con su búsqueda", + "favourites_search_try_other": "Pruebe con otro término de búsqueda.", + "no_favourites_in_section": "No hay favoritos en esta sección.", "search_announces": "Búsqueda anuncia", "announced_time_ago": "Anunciado hace {time}", "block_node": "Destierro", @@ -1464,7 +1485,19 @@ "path_finder_archive_loading": "Buscando instantánea de archivo...", "export_section_favourites": "Exportar favoritos de la sección", "section_favourites_exported": "Favoritos de la sección exportados", - "section_favourites_export_failed": "No se pudieron exportar los favoritos de la sección" + "section_favourites_export_failed": "No se pudieron exportar los favoritos de la sección", + "sidebar_selection_mode": "Modo de selección", + "bulk_selected_count": "{count} seleccionados", + "bulk_remove": "Eliminar", + "bulk_move_to_section": "Mover a la sección", + "bulk_remove_favourites_confirm": "¿Eliminar {count} favoritos de este dispositivo?", + "bulk_remove_favourites_done": "Se eliminaron {count} favoritos", + "bulk_block_confirm": "¿Desterrar {count} nodos de la lista de anuncios?", + "bulk_block_done": "Se desterraron {count} nodos", + "bulk_add_to_favourites": "Añadir a favoritos", + "bulk_add_favourites_done": "Se añadieron {count} nodos a favoritos", + "bulk_block_nodes": "Desterrar", + "bulk_nothing_to_add_favourites": "Nada que añadir (ya son favoritos o no hay selección)" }, "forwarder": { "title": "LXMF Forwarder", diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json index 8f50ea2..8621b0e 100644 --- a/meshchatx/src/frontend/locales/fr.json +++ b/meshchatx/src/frontend/locales/fr.json @@ -39,7 +39,16 @@ "rename_failed": "Impossible d'enregistrer le nom", "name_required": "Saisissez un nom", "announce_triggered": "Annoncer la demande", - "announce_failed": "Impossible de demander l'annonce" + "announce_failed": "Impossible de demander l'annonce", + "last_error_heading": "Dernière erreur", + "view_process_log": "Journal de processus (débogage)", + "process_log_title": "Journal du processus du bot", + "process_log_empty": "Pas encore de sortie journal pour ce bot.", + "process_log_truncated": "Seule la fin du journal est affichée ; le fichier sur disque est plus grand.", + "process_log_loading": "Chargement du journal…", + "process_log_failed": "Impossible de charger le journal du processus", + "process_log_copied": "Journal copié dans le presse-papiers", + "copy_process_log": "Copier le journal" }, "app": { "name": "Réticulum MeshChatX", @@ -846,6 +855,8 @@ "failed_reload": "Impossible de recharger Reticulum !", "interface_not_found": "L'interface sélectionnée pour l'édition n'a pas pu être trouvée.", "discovery_settings_saved": "Paramètres de découverte enregistrés", + "discovery_list_refreshed": "Interfaces découvertes actualisées.", + "discovery_list_refresh_failed": "Impossible d'actualiser les interfaces découvertes.", "discovery_default_bootstrap_only": "Bootstrap-only par défaut pour nouveau TCP sortant", "discovery_default_bootstrap_only_hint": "Les nouvelles interfaces client TCP (et connecteur backbone) reçoivent bootstrap_only pour que Reticulum les détache une fois autoconnect_discovered_interfaces atteint.", "discovery_default_bootstrap_docs_link": "Voir la connectivité de démarrage Reticulum.", @@ -926,7 +937,6 @@ "uploading": "Envoi...", "upload_success": "Carte téléchargée avec succès", "upload_failed": "Impossible de télécharger la carte", - "no_map_loaded": "Pas de carte hors ligne chargée. Télécharger un fichier .mbtiles pour activer le mode hors ligne.", "invalid_file": "Fichier MBTiles non valide. Seules les tuiles raster sont supportées.", "default_view": "Affichage par défaut", "set_as_default": "Définir comme vue par défaut", @@ -1079,7 +1089,10 @@ "tx": "TX", "rx": "RX", "noise": "Bruit", - "clients": "Clients" + "clients": "Clients", + "link_up": "Liaison active", + "link_down": "Liaison inactive", + "link_unknown": "État de la liaison inconnu" }, "messages": { "title": "Messages", @@ -1292,7 +1305,12 @@ "folders_exported": "Dossiers exportés", "failed_export_folders": "Impossible d'exporter les dossiers", "folders_imported": "Dossiers et cartes importés avec succès", - "failed_import_folders": "Impossible d'importer des dossiers" + "failed_import_folders": "Impossible d'importer des dossiers", + "share_apk_heading": "Partager cette installation", + "share_apk_desc": "Envoyez le paquet MeshChatX installé via Bluetooth, Nearby Share ou une autre application. Uniquement dans l'application Android.", + "share_apk_short_hint": "Ouvre la feuille de partage système pour cet APK.", + "share_apk": "Partager l'app (APK)", + "share_apk_failed": "Impossible de partager l'APK." }, "debug": { "title": "Débogues", @@ -1421,6 +1439,9 @@ "remove": "Supprimer", "no_favourites": "Pas de favoris", "add_nodes_from_announces": "Ajouter des nœuds de l'onglet Annonces.", + "favourites_search_no_results": "Aucun favori ne correspond à votre recherche", + "favourites_search_try_other": "Essayez un autre terme de recherche.", + "no_favourites_in_section": "Aucun favori dans cette section.", "search_announces": "La recherche annonce", "announced_time_ago": "Annoncé il y a {time}", "block_node": "Nœud baigné", @@ -1464,7 +1485,19 @@ "path_finder_archive_loading": "Recherche d'un instantané d'archive...", "export_section_favourites": "Exporter les favoris de la section", "section_favourites_exported": "Favoris de la section exportés", - "section_favourites_export_failed": "Impossible d'exporter les favoris de la section" + "section_favourites_export_failed": "Impossible d'exporter les favoris de la section", + "sidebar_selection_mode": "Mode sélection", + "bulk_selected_count": "{count} sélectionné(s)", + "bulk_remove": "Supprimer", + "bulk_move_to_section": "Déplacer vers la section", + "bulk_remove_favourites_confirm": "Supprimer {count} favoris sur cet appareil ?", + "bulk_remove_favourites_done": "{count} favoris supprimés", + "bulk_block_confirm": "Bannir {count} nœuds de la liste d'annonces ?", + "bulk_block_done": "{count} nœuds bannis", + "bulk_add_to_favourites": "Ajouter aux favoris", + "bulk_add_favourites_done": "{count} nœuds ajoutés aux favoris", + "bulk_block_nodes": "Bannir", + "bulk_nothing_to_add_favourites": "Rien à ajouter (déjà favoris ou aucune sélection)" }, "forwarder": { "title": "Expéditeur LXMF", diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json index 8b87708..899cf43 100644 --- a/meshchatx/src/frontend/locales/it.json +++ b/meshchatx/src/frontend/locales/it.json @@ -39,7 +39,16 @@ "rename_failed": "Impossibile salvare il nome", "name_required": "Inserisci un nome", "announce_triggered": "Annuncio richiesto", - "announce_failed": "Impossibile richiedere l'annuncio" + "announce_failed": "Impossibile richiedere l'annuncio", + "last_error_heading": "Ultimo errore", + "view_process_log": "Log di processo (debug)", + "process_log_title": "Log di processo del bot", + "process_log_empty": "Nessun output di log per questo bot.", + "process_log_truncated": "Viene mostrata solo la fine del log; il file su disco è più grande.", + "process_log_loading": "Caricamento log…", + "process_log_failed": "Impossibile caricare il log di processo", + "process_log_copied": "Log copiato negli appunti", + "copy_process_log": "Copia log" }, "app": { "name": "Reticulum MeshChatX", @@ -898,6 +907,8 @@ "failed_reload": "Impossibile ricaricare Reticulum!", "interface_not_found": "L'interfaccia selezionata per la modifica non è stata trovata.", "discovery_settings_saved": "Impostazioni di scoperta salvate", + "discovery_list_refreshed": "Interfacce rilevate aggiornate.", + "discovery_list_refresh_failed": "Impossibile aggiornare le interfacce rilevate.", "discovery_default_bootstrap_only": "Predefinito bootstrap-only per nuovo TCP in uscita", "discovery_default_bootstrap_only_hint": "Le nuove interfacce TCP client (e connettore backbone) usano bootstrap_only così Reticulum può staccarle quando autoconnect_discovered_interfaces è soddisfatto.", "discovery_default_bootstrap_docs_link": "Vedi connettività di bootstrap Reticulum.", @@ -978,7 +989,6 @@ "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", @@ -1131,7 +1141,10 @@ "tx": "TX", "rx": "RX", "noise": "Rumore", - "clients": "Client" + "clients": "Client", + "link_up": "Collegamento attivo", + "link_down": "Collegamento non attivo", + "link_unknown": "Stato del collegamento sconosciuto" }, "messages": { "title": "Messaggi", @@ -1344,7 +1357,12 @@ "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" + "failed_import_folders": "Impossibile importare le cartelle", + "share_apk_heading": "Condividi questa installazione", + "share_apk_desc": "Invia il pacchetto MeshChatX installato tramite Bluetooth, Nearby Share o un'altra app. Solo nell'app Android.", + "share_apk_short_hint": "Apre la condivisione di sistema per questo APK.", + "share_apk": "Condividi app (APK)", + "share_apk_failed": "Impossibile condividere l'APK." }, "debug": { "title": "Log di Debug", @@ -1473,6 +1491,9 @@ "remove": "Rimuovi", "no_favourites": "Nessun preferito", "add_nodes_from_announces": "Aggiungi nodi dalla scheda annunci.", + "favourites_search_no_results": "Nessun preferito corrisponde alla ricerca", + "favourites_search_try_other": "Prova un altro termine di ricerca.", + "no_favourites_in_section": "Nessun preferito in questa sezione.", "search_announces": "Cerca annunci", "announced_time_ago": "Annunciato {time} fa", "block_node": "Esilia Nodo", @@ -1516,7 +1537,19 @@ "path_finder_archive_loading": "Ricerca dello snapshot d'archivio...", "export_section_favourites": "Esporta preferiti della sezione", "section_favourites_exported": "Preferiti della sezione esportati", - "section_favourites_export_failed": "Impossibile esportare i preferiti della sezione" + "section_favourites_export_failed": "Impossibile esportare i preferiti della sezione", + "sidebar_selection_mode": "Modalità selezione", + "bulk_selected_count": "{count} selezionati", + "bulk_remove": "Rimuovi", + "bulk_move_to_section": "Sposta nella sezione", + "bulk_remove_favourites_confirm": "Rimuovere {count} preferiti da questo dispositivo?", + "bulk_remove_favourites_done": "Rimossi {count} preferiti", + "bulk_block_confirm": "Bandire {count} nodi dall'elenco annunci?", + "bulk_block_done": "Banditi {count} nodi", + "bulk_add_to_favourites": "Aggiungi ai preferiti", + "bulk_add_favourites_done": "Aggiunti {count} nodi ai preferiti", + "bulk_block_nodes": "Bandisci", + "bulk_nothing_to_add_favourites": "Niente da aggiungere (già preferiti o nessuna selezione)" }, "forwarder": { "title": "Inoltro LXMF", diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json index 790b728..920c315 100644 --- a/meshchatx/src/frontend/locales/nl.json +++ b/meshchatx/src/frontend/locales/nl.json @@ -39,7 +39,16 @@ "rename_failed": "Kon naam niet opslaan", "name_required": "Geef een naam", "announce_triggered": "Aanmelding gevraagd", - "announce_failed": "Kon niet aankondigen" + "announce_failed": "Kon niet aankondigen", + "last_error_heading": "Laatste fout", + "view_process_log": "Proceslog (debug)", + "process_log_title": "Bot-proceslog", + "process_log_empty": "Nog geen loguitvoer voor deze bot.", + "process_log_truncated": "Alleen het einde van het logbestand wordt getoond; het bestand op schijf is groter.", + "process_log_loading": "Log laden…", + "process_log_failed": "Proceslog kon niet worden geladen", + "process_log_copied": "Log naar klembord gekopieerd", + "copy_process_log": "Log kopiëren" }, "app": { "name": "Reticulum MeshChatX", @@ -846,6 +855,8 @@ "failed_reload": "Herladen van Reticulum is mislukt!", "interface_not_found": "De geselecteerde interface voor bewerken kon niet gevonden worden.", "discovery_settings_saved": "Opgeslagen zoekinstellingen", + "discovery_list_refreshed": "Ontdekte interfaces vernieuwd.", + "discovery_list_refresh_failed": "Ontdekte interfaces niet vernieuwd.", "discovery_default_bootstrap_only": "Standaard bootstrap-only voor nieuwe uitgaande TCP", "discovery_default_bootstrap_only_hint": "Nieuwe TCP-client- (en backbone-connector)interfaces krijgen bootstrap_only zodat Reticulum ze loskoppelt zodra autoconnect_discovered_interfaces is bereikt.", "discovery_default_bootstrap_docs_link": "Zie Reticulum bootstrap-connectiviteit.", @@ -926,7 +937,6 @@ "uploading": "Uploaden...", "upload_success": "Kaart met succes geüpload", "upload_failed": "Uploaden van kaart is mislukt", - "no_map_loaded": "Geen offline kaart geladen. Upload een .mbtiles bestand om offline modus in te schakelen.", "invalid_file": "Ongeldig MBTiles-bestand. Alleen rastertegels worden ondersteund.", "default_view": "Standaardweergave", "set_as_default": "Als standaardweergave instellen", @@ -1079,7 +1089,10 @@ "tx": "TX", "rx": "RX", "noise": "Geluid", - "clients": "Klanten" + "clients": "Klanten", + "link_up": "Verbinding actief", + "link_down": "Geen actieve verbinding", + "link_unknown": "Verbindingsstatus onbekend" }, "messages": { "title": "Berichten", @@ -1292,7 +1305,12 @@ "folders_exported": "Mappen geëxporteerd", "failed_export_folders": "Exporteren van mappen is mislukt", "folders_imported": "Mappen en mappen succesvol geïmporteerd", - "failed_import_folders": "Kon mappen niet importeren" + "failed_import_folders": "Kon mappen niet importeren", + "share_apk_heading": "Deze installatie delen", + "share_apk_desc": "Stuur het geïnstalleerde MeshChatX-pakket via Bluetooth, Nearby Share of een andere app. Alleen in de Android-app.", + "share_apk_short_hint": "Opent het systeemdeelvenster voor deze APK.", + "share_apk": "App delen (APK)", + "share_apk_failed": "APK kan niet worden gedeeld." }, "debug": { "title": "Debuglogs", @@ -1421,6 +1439,9 @@ "remove": "Verwijderen", "no_favourites": "Geen favorieten", "add_nodes_from_announces": "Voeg nodes toe vanaf het tabblad kondigt.", + "favourites_search_no_results": "Geen favorieten komen overeen met uw zoekopdracht", + "favourites_search_try_other": "Probeer een andere zoekterm.", + "no_favourites_in_section": "Geen favorieten in deze sectie.", "search_announces": "Zoekopdracht kondigt aan", "announced_time_ago": "Aangekondigd {time} geleden", "block_node": "Knooppunt verwijderen", @@ -1464,7 +1485,19 @@ "path_finder_archive_loading": "Zoeken naar archief-snapshot...", "export_section_favourites": "Favorieten van sectie exporteren", "section_favourites_exported": "Favorieten van sectie geëxporteerd", - "section_favourites_export_failed": "Favorieten van sectie konden niet worden geëxporteerd" + "section_favourites_export_failed": "Favorieten van sectie konden niet worden geëxporteerd", + "sidebar_selection_mode": "Selectiemodus", + "bulk_selected_count": "{count} geselecteerd", + "bulk_remove": "Verwijderen", + "bulk_move_to_section": "Verplaats naar sectie", + "bulk_remove_favourites_confirm": "{count} favorieten van dit apparaat verwijderen?", + "bulk_remove_favourites_done": "{count} favorieten verwijderd", + "bulk_block_confirm": "{count} nodes uit de aankondigingslijst verbannen?", + "bulk_block_done": "{count} nodes verbannen", + "bulk_add_to_favourites": "Toevoegen aan favorieten", + "bulk_add_favourites_done": "{count} nodes toegevoegd aan favorieten", + "bulk_block_nodes": "Verbannen", + "bulk_nothing_to_add_favourites": "Niets toe te voegen (al favoriet of geen selectie)" }, "forwarder": { "title": "LXMF Forwarder", diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json index 2242d9d..34d30d0 100644 --- a/meshchatx/src/frontend/locales/ru.json +++ b/meshchatx/src/frontend/locales/ru.json @@ -39,7 +39,16 @@ "rename_failed": "Не удалось сохранить имя", "name_required": "Введите имя", "announce_triggered": "Запрос announce отправлен", - "announce_failed": "Не удалось запросить announce" + "announce_failed": "Не удалось запросить announce", + "last_error_heading": "Последняя ошибка", + "view_process_log": "Лог процесса (отладка)", + "process_log_title": "Лог процесса бота", + "process_log_empty": "Для этого бота пока нет вывода в лог.", + "process_log_truncated": "Показан только конец лог-файла; файл на диске больше.", + "process_log_loading": "Загрузка лога…", + "process_log_failed": "Не удалось загрузить лог процесса", + "process_log_copied": "Лог скопирован в буфер обмена", + "copy_process_log": "Копировать лог" }, "app": { "name": "Reticulum MeshChatX", @@ -898,6 +907,8 @@ "failed_reload": "Failed to reload Reticulum!", "interface_not_found": "The selected interface for editing could not be found.", "discovery_settings_saved": "Discovery settings saved", + "discovery_list_refreshed": "Список обнаруженных интерфейсов обновлён.", + "discovery_list_refresh_failed": "Не удалось обновить список обнаруженных интерфейсов.", "discovery_default_bootstrap_only": "По умолчанию только bootstrap для нового исходящего TCP", "discovery_default_bootstrap_only_hint": "Новые TCP-клиент и backbone-коннектор получают bootstrap_only, чтобы Reticulum отключил их при достижении autoconnect_discovered_interfaces.", "discovery_default_bootstrap_docs_link": "См. раздел о bootstrap-подключении Reticulum.", @@ -978,7 +989,6 @@ "uploading": "Загрузка...", "upload_success": "Карта успешно загружена", "upload_failed": "Ошибка загрузки карты", - "no_map_loaded": "Офлайн-карта не загружена. Загрузите файл .mbtiles для включения офлайн-режима.", "invalid_file": "Неверный файл MBTiles. Поддерживаются только растровые карты.", "default_view": "Вид по умолчанию", "set_as_default": "Установить как вид по умолчанию", @@ -1131,7 +1141,10 @@ "tx": "TX", "rx": "RX", "noise": "Шум", - "clients": "Клиенты" + "clients": "Клиенты", + "link_up": "Связь установлена", + "link_down": "Нет связи", + "link_unknown": "Состояние связи неизвестно" }, "messages": { "title": "Сообщения", @@ -1361,6 +1374,9 @@ "remove": "Удалить", "no_favourites": "Нет избранного", "add_nodes_from_announces": "Добавляйте узлы из вкладки анонсов.", + "favourites_search_no_results": "Нет избранного по вашему запросу", + "favourites_search_try_other": "Попробуйте другой поисковый запрос.", + "no_favourites_in_section": "В этом разделе нет избранного.", "search_announces": "Поиск анонсов", "announced_time_ago": "Анонсировано {time} назад", "block_node": "Заблокировать узел", @@ -1404,7 +1420,19 @@ "path_finder_archive_loading": "Поиск снимка архива...", "export_section_favourites": "Экспорт избранного раздела", "section_favourites_exported": "Избранное раздела экспортировано", - "section_favourites_export_failed": "Не удалось экспортировать избранное раздела" + "section_favourites_export_failed": "Не удалось экспортировать избранное раздела", + "sidebar_selection_mode": "Режим выбора", + "bulk_selected_count": "Выбрано: {count}", + "bulk_remove": "Удалить", + "bulk_move_to_section": "Переместить в раздел", + "bulk_remove_favourites_confirm": "Удалить {count} избранных с этого устройства?", + "bulk_remove_favourites_done": "Удалено избранных: {count}", + "bulk_block_confirm": "Изгнать {count} узлов из списка объявлений?", + "bulk_block_done": "Изгнано узлов: {count}", + "bulk_add_to_favourites": "В избранное", + "bulk_add_favourites_done": "Добавлено узлов в избранное: {count}", + "bulk_block_nodes": "Изгнать", + "bulk_nothing_to_add_favourites": "Нечего добавлять (уже в избранном или нет выбора)" }, "forwarder": { "title": "LXMF Форвардер", @@ -2466,7 +2494,12 @@ "folders_exported": "Folders exported", "failed_export_folders": "Failed to export folders", "folders_imported": "Folders and mappings imported successfully", - "failed_import_folders": "Failed to import folders" + "failed_import_folders": "Failed to import folders", + "share_apk_heading": "Поделиться этой установкой", + "share_apk_desc": "Отправьте установленный пакет MeshChatX по Bluetooth, Nearby Share или другому приложению. Только в Android-приложении.", + "share_apk_short_hint": "Открывает системное меню для отправки этого APK.", + "share_apk": "Поделиться приложением (APK)", + "share_apk_failed": "Не удалось поделиться APK." }, "debug": { "title": "Журнал отладки", diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json index 57e744c..fa34d5b 100644 --- a/meshchatx/src/frontend/locales/zh.json +++ b/meshchatx/src/frontend/locales/zh.json @@ -39,7 +39,16 @@ "rename_failed": "无法保存名称", "name_required": "请输入名称", "announce_triggered": "广播请求已发送", - "announce_failed": "无法请求广播" + "announce_failed": "无法请求广播", + "last_error_heading": "上次错误", + "view_process_log": "进程日志(调试)", + "process_log_title": "机器人进程日志", + "process_log_empty": "此机器人尚无日志输出。", + "process_log_truncated": "仅显示日志末尾;磁盘上的文件更大。", + "process_log_loading": "正在加载日志…", + "process_log_failed": "无法加载进程日志", + "process_log_copied": "日志已复制到剪贴板", + "copy_process_log": "复制日志" }, "app": { "name": "Reticulum MeshChatX", @@ -846,6 +855,8 @@ "failed_reload": "重新加载 Reticulum 失败!", "interface_not_found": "未找到要编辑的选定接口。", "discovery_settings_saved": "发现设置已保存", + "discovery_list_refreshed": "已刷新发现的接口列表。", + "discovery_list_refresh_failed": "无法刷新发现的接口列表。", "discovery_default_bootstrap_only": "新建出站 TCP 默认仅作引导", "discovery_default_bootstrap_only_hint": "启用后,新建的 TCP 客户端(与 backbone 连接器)接口会设置 bootstrap_only,在达到 autoconnect_discovered_interfaces 后由 Reticulum 自动断开。", "discovery_default_bootstrap_docs_link": "参阅 Reticulum 引导连接说明。", @@ -926,7 +937,6 @@ "uploading": "正在上传...", "upload_success": "地图上传成功", "upload_failed": "地图上传失败", - "no_map_loaded": "未加载离线地图。上传 .mbtiles 文件以启用离线模式。", "invalid_file": "无效的 MBTiles 文件。仅支持栅格瓦片。", "default_view": "默认视图", "set_as_default": "设为默认视图", @@ -1079,7 +1089,10 @@ "tx": "TX 主题", "rx": "RX 自动调用", "noise": "噪声", - "clients": "客户" + "clients": "客户", + "link_up": "链路已连通", + "link_down": "链路未连通", + "link_unknown": "链路状态未知" }, "messages": { "title": "消息", @@ -1292,7 +1305,12 @@ "folders_exported": "导出文件夹", "failed_export_folders": "导出文件夹失败", "folders_imported": "成功导入文件夹和绘图", - "failed_import_folders": "导入文件夹失败" + "failed_import_folders": "导入文件夹失败", + "share_apk_heading": "分享当前安装包", + "share_apk_desc": "通过蓝牙、附近分享或其他应用发送已安装的 MeshChatX 安装包。仅限 Android 应用。", + "share_apk_short_hint": "打开系统分享面板以发送此 APK。", + "share_apk": "分享应用(APK)", + "share_apk_failed": "无法打开 APK 分享。" }, "debug": { "title": "调试日志", @@ -1421,6 +1439,9 @@ "remove": "移除", "no_favourites": "无收藏", "add_nodes_from_announces": "从广播标签中添加节点。", + "favourites_search_no_results": "没有收藏匹配您的搜索", + "favourites_search_try_other": "请尝试其他搜索词。", + "no_favourites_in_section": "此分区中尚无收藏。", "search_announces": "搜索广播", "announced_time_ago": "{time} 前广播", "block_node": "放逐节点", @@ -1464,7 +1485,19 @@ "path_finder_archive_loading": "正在查找归档快照...", "export_section_favourites": "导出此分组的收藏", "section_favourites_exported": "分组收藏已导出", - "section_favourites_export_failed": "无法导出分组收藏" + "section_favourites_export_failed": "无法导出分组收藏", + "sidebar_selection_mode": "选择模式", + "bulk_selected_count": "已选 {count} 项", + "bulk_remove": "移除", + "bulk_move_to_section": "移动到分组", + "bulk_remove_favourites_confirm": "是否从此设备移除 {count} 个收藏?", + "bulk_remove_favourites_done": "已移除 {count} 个收藏", + "bulk_block_confirm": "是否将 {count} 个节点移出宣告列表?", + "bulk_block_done": "已移出 {count} 个节点", + "bulk_add_to_favourites": "加入收藏", + "bulk_add_favourites_done": "已将 {count} 个节点加入收藏", + "bulk_block_nodes": "移出", + "bulk_nothing_to_add_favourites": "无需添加(已在收藏或未选择)" }, "forwarder": { "title": "LXMF 转发器",