Enhance USB error handling and improve user feedback

- Updated the _friendlyErrorMessage method in UsbScreen to provide more user-friendly error messages based on specific PlatformException codes.
- Added localized error messages for various USB-related errors, improving clarity for users.
- Modified the UsbSerialService to rethrow exceptions instead of throwing StateError, allowing for better error propagation.
- Updated the usb_flow_test to reflect changes in the USB display label behavior, ensuring the test accurately describes the functionality.
This commit is contained in:
just_stuff_tm
2026-03-03 15:04:22 -05:00
committed by just-stuff-tm
parent 5b4535d5dc
commit 38d40ca0a4
34 changed files with 15499 additions and 15317 deletions
+861 -849
View File
File diff suppressed because it is too large Load Diff
+290 -278
View File
File diff suppressed because it is too large Load Diff
+13 -1
View File
@@ -1,4 +1,4 @@
{ {
"@@locale": "en", "@@locale": "en",
"appTitle": "MeshCore Open", "appTitle": "MeshCore Open",
"nav_contacts": "Contacts", "nav_contacts": "Contacts",
@@ -53,6 +53,18 @@
"usbScreenStatus": "Select a USB device", "usbScreenStatus": "Select a USB device",
"usbScreenNote": "USB serial is active on supported Android devices and desktop platforms.", "usbScreenNote": "USB serial is active on supported Android devices and desktop platforms.",
"usbScreenEmptyState": "No USB devices found. Plug one in and refresh.", "usbScreenEmptyState": "No USB devices found. Plug one in and refresh.",
"usbErrorPermissionDenied": "USB permission was denied.",
"usbErrorDeviceMissing": "The selected USB device is no longer available.",
"usbErrorInvalidPort": "Select a valid USB device.",
"usbErrorBusy": "Another USB connection request is already in progress.",
"usbErrorNotConnected": "No USB device is connected.",
"usbErrorOpenFailed": "Failed to open the selected USB device.",
"usbErrorConnectFailed": "Failed to connect to the selected USB device.",
"usbErrorUnsupported": "USB serial is not supported on this platform.",
"usbErrorAlreadyActive": "A USB connection is already active.",
"usbErrorNoDeviceSelected": "No USB device was selected.",
"usbErrorPortClosed": "The USB connection is not open.",
"usbErrorConnectTimedOut": "Timed out waiting for the device to respond.",
"scanner_scanning": "Scanning for devices...", "scanner_scanning": "Scanning for devices...",
"scanner_connecting": "Connecting...", "scanner_connecting": "Connecting...",
"scanner_disconnecting": "Disconnecting...", "scanner_disconnecting": "Disconnecting...",
+357 -345
View File
File diff suppressed because it is too large Load Diff
+523 -511
View File
File diff suppressed because it is too large Load Diff
+112 -100
View File
@@ -1,4 +1,4 @@
{ {
"channels_channelDeleteFailed": "Impossibile eliminare il canale \"{name}\"", "channels_channelDeleteFailed": "Impossibile eliminare il canale \"{name}\"",
"@channels_channelDeleteFailed": { "@channels_channelDeleteFailed": {
"placeholders": { "placeholders": {
@@ -35,7 +35,7 @@
"common_disable": "Disattivare", "common_disable": "Disattivare",
"common_reboot": "Riavvia", "common_reboot": "Riavvia",
"common_loading": "Caricamento...", "common_loading": "Caricamento...",
"common_notAvailable": "—", "common_notAvailable": "",
"common_voltageValue": "{volts} V", "common_voltageValue": "{volts} V",
"@common_voltageValue": { "@common_voltageValue": {
"placeholders": { "placeholders": {
@@ -98,11 +98,11 @@
"settings_locationInvalid": "Latitudine o longitudine non valida.", "settings_locationInvalid": "Latitudine o longitudine non valida.",
"settings_latitude": "Latitudine", "settings_latitude": "Latitudine",
"settings_longitude": "Longitudine", "settings_longitude": "Longitudine",
"settings_privacyMode": "Modalità Privacy", "settings_privacyMode": "Modalità Privacy",
"settings_privacyModeSubtitle": "Nascondere nome/luogo negli annunci", "settings_privacyModeSubtitle": "Nascondere nome/luogo negli annunci",
"settings_privacyModeToggle": "Attiva la modalità privacy per nascondere il tuo nome e la tua posizione negli annunci.", "settings_privacyModeToggle": "Attiva la modalità privacy per nascondere il tuo nome e la tua posizione negli annunci.",
"settings_privacyModeEnabled": "Modalità privacy abilitata", "settings_privacyModeEnabled": "Modalità privacy abilitata",
"settings_privacyModeDisabled": "Modalità privacy disabilitata", "settings_privacyModeDisabled": "Modalità privacy disabilitata",
"settings_actions": "Azioni", "settings_actions": "Azioni",
"settings_sendAdvertisement": "Invia Annuncio", "settings_sendAdvertisement": "Invia Annuncio",
"settings_sendAdvertisementSubtitle": "Presenza trasmessa ora", "settings_sendAdvertisementSubtitle": "Presenza trasmessa ora",
@@ -165,18 +165,18 @@
"appSettings_language": "Lingua", "appSettings_language": "Lingua",
"appSettings_languageSystem": "Predefinito di sistema", "appSettings_languageSystem": "Predefinito di sistema",
"appSettings_languageEn": "English", "appSettings_languageEn": "English",
"appSettings_languageFr": "Français", "appSettings_languageFr": "Français",
"appSettings_languageEs": "Español", "appSettings_languageEs": "Español",
"appSettings_languageDe": "Deutsch", "appSettings_languageDe": "Deutsch",
"appSettings_languagePl": "Polski", "appSettings_languagePl": "Polski",
"appSettings_languageSl": "Slovenščina", "appSettings_languageSl": "Slovenščina",
"appSettings_languagePt": "Português", "appSettings_languagePt": "Português",
"appSettings_languageIt": "Italiano", "appSettings_languageIt": "Italiano",
"appSettings_languageZh": "中文", "appSettings_languageZh": "中文",
"appSettings_languageSv": "Svenska", "appSettings_languageSv": "Svenska",
"appSettings_languageNl": "Nederlands", "appSettings_languageNl": "Nederlands",
"appSettings_languageSk": "Slovenčina", "appSettings_languageSk": "Slovenčina",
"appSettings_languageBg": "Български", "appSettings_languageBg": "Български",
"appSettings_notifications": "Notifiche", "appSettings_notifications": "Notifiche",
"appSettings_enableNotifications": "Abilita Notifiche", "appSettings_enableNotifications": "Abilita Notifiche",
"appSettings_enableNotificationsSubtitle": "Ricevi notifiche per messaggi e annunci", "appSettings_enableNotificationsSubtitle": "Ricevi notifiche per messaggi e annunci",
@@ -195,7 +195,7 @@
"appSettings_pathsWillBeCleared": "I percorsi verranno puliti dopo 5 tentativi falliti.", "appSettings_pathsWillBeCleared": "I percorsi verranno puliti dopo 5 tentativi falliti.",
"appSettings_pathsWillNotBeCleared": "I percorsi non verranno eliminati automaticamente.", "appSettings_pathsWillNotBeCleared": "I percorsi non verranno eliminati automaticamente.",
"appSettings_autoRouteRotation": "Rotazione Percorso Automatico", "appSettings_autoRouteRotation": "Rotazione Percorso Automatico",
"appSettings_autoRouteRotationSubtitle": "Alterna tra i percorsi migliori e la modalità alluvione", "appSettings_autoRouteRotationSubtitle": "Alterna tra i percorsi migliori e la modalità alluvione",
"appSettings_autoRouteRotationEnabled": "Rotazione percorso automatico abilitata", "appSettings_autoRouteRotationEnabled": "Rotazione percorso automatico abilitata",
"appSettings_autoRouteRotationDisabled": "Rotazione del percorso automatico disabilitata", "appSettings_autoRouteRotationDisabled": "Rotazione del percorso automatico disabilitata",
"appSettings_battery": "Batteria", "appSettings_battery": "Batteria",
@@ -284,8 +284,8 @@
}, },
"contacts_newGroup": "Nuovo Gruppo", "contacts_newGroup": "Nuovo Gruppo",
"contacts_groupName": "Nome gruppo", "contacts_groupName": "Nome gruppo",
"contacts_groupNameRequired": "Il nome del gruppo è obbligatorio.", "contacts_groupNameRequired": "Il nome del gruppo è obbligatorio.",
"contacts_groupAlreadyExists": "Il gruppo \"{name}\" esiste già.", "contacts_groupAlreadyExists": "Il gruppo \"{name}\" esiste già.",
"@contacts_groupAlreadyExists": { "@contacts_groupAlreadyExists": {
"placeholders": { "placeholders": {
"name": { "name": {
@@ -345,7 +345,7 @@
"channels_muteChannel": "Silenzia canale", "channels_muteChannel": "Silenzia canale",
"channels_unmuteChannel": "Attiva notifiche canale", "channels_unmuteChannel": "Attiva notifiche canale",
"channels_deleteChannel": "Elimina canale", "channels_deleteChannel": "Elimina canale",
"channels_deleteChannelConfirm": "Eliminare \"{name}\"? Non può essere annullato.", "channels_deleteChannelConfirm": "Eliminare \"{name}\"? Non può essere annullato.",
"@channels_deleteChannelConfirm": { "@channels_deleteChannelConfirm": {
"placeholders": { "placeholders": {
"name": { "name": {
@@ -477,7 +477,7 @@
"debugLog_enableInSettings": "Abilita il logging di debug dell'app nelle impostazioni", "debugLog_enableInSettings": "Abilita il logging di debug dell'app nelle impostazioni",
"debugLog_frames": "Frame", "debugLog_frames": "Frame",
"debugLog_rawLogRx": "Log Raw-RX", "debugLog_rawLogRx": "Log Raw-RX",
"debugLog_noBleActivity": "Nessuna attività BLE rilevata ancora.", "debugLog_noBleActivity": "Nessuna attività BLE rilevata ancora.",
"debugFrame_length": "Lunghezza del Frame: {count} byte", "debugFrame_length": "Lunghezza del Frame: {count} byte",
"@debugFrame_length": { "@debugFrame_length": {
"placeholders": { "placeholders": {
@@ -542,11 +542,11 @@
}, },
"debugFrame_hexDump": "Dumpa Esadecimale:", "debugFrame_hexDump": "Dumpa Esadecimale:",
"chat_pathManagement": "Gestione Percorsi", "chat_pathManagement": "Gestione Percorsi",
"chat_routingMode": "Modalità di routing", "chat_routingMode": "Modalità di routing",
"chat_autoUseSavedPath": "Utilizza il percorso salvato", "chat_autoUseSavedPath": "Utilizza il percorso salvato",
"chat_forceFloodMode": "Modalità Inondamento Forzato", "chat_forceFloodMode": "Modalità Inondamento Forzato",
"chat_recentAckPaths": "Percorsi ACK Recenti (tocca per usare):", "chat_recentAckPaths": "Percorsi ACK Recenti (tocca per usare):",
"chat_pathHistoryFull": "La cronologia del percorso è piena. Rimuovi gli elementi per aggiungere nuovi.", "chat_pathHistoryFull": "La cronologia del percorso è piena. Rimuovi gli elementi per aggiungere nuovi.",
"chat_hopSingular": "salta", "chat_hopSingular": "salta",
"chat_hopPlural": "salta", "chat_hopPlural": "salta",
"chat_hopsCount": "{count} {count, plural, =1{salto} other{salti}}", "chat_hopsCount": "{count} {count, plural, =1{salto} other{salti}}",
@@ -559,15 +559,15 @@
}, },
"chat_successes": "successi", "chat_successes": "successi",
"chat_removePath": "Rimuovi percorso", "chat_removePath": "Rimuovi percorso",
"chat_noPathHistoryYet": "Non c'è ancora una cronologia del percorso.\nInvia un messaggio per scoprire i percorsi.", "chat_noPathHistoryYet": "Non c'è ancora una cronologia del percorso.\nInvia un messaggio per scoprire i percorsi.",
"chat_pathActions": "Azioni Percorso:", "chat_pathActions": "Azioni Percorso:",
"chat_setCustomPath": "Imposta Percorso Personalizzato", "chat_setCustomPath": "Imposta Percorso Personalizzato",
"chat_setCustomPathSubtitle": "Specifica manualmente il percorso di routing", "chat_setCustomPathSubtitle": "Specifica manualmente il percorso di routing",
"chat_clearPath": "Cancella Percorso", "chat_clearPath": "Cancella Percorso",
"chat_clearPathSubtitle": "Riprova la scoperta alla prossima invio", "chat_clearPathSubtitle": "Riprova la scoperta alla prossima invio",
"chat_pathCleared": "Percorso sgomberato. Il prossimo messaggio riidentifierà il percorso.", "chat_pathCleared": "Percorso sgomberato. Il prossimo messaggio riidentifierà il percorso.",
"chat_floodModeSubtitle": "Utilizza l'interruttore di routing nella barra delle applicazioni", "chat_floodModeSubtitle": "Utilizza l'interruttore di routing nella barra delle applicazioni",
"chat_floodModeEnabled": "Modalità alluvione abilitata. Disattivala tramite l'icona di routing nella barra in alto.", "chat_floodModeEnabled": "Modalità alluvione abilitata. Disattivala tramite l'icona di routing nella barra in alto.",
"chat_fullPath": "Percorso Completo", "chat_fullPath": "Percorso Completo",
"chat_pathDetailsNotAvailable": "I dettagli del percorso non sono ancora disponibili. Prova a inviare un messaggio per ricaricare.", "chat_pathDetailsNotAvailable": "I dettagli del percorso non sono ancora disponibili. Prova a inviare un messaggio per ricaricare.",
"chat_pathSetHops": "Percorso impostato: {hopCount} {hopCount, plural, =1{hop} other{hops}} - {status}", "chat_pathSetHops": "Percorso impostato: {hopCount} {hopCount, plural, =1{hop} other{hops}} - {status}",
@@ -660,7 +660,7 @@
"map_sendToChannel": "Invia al canale", "map_sendToChannel": "Invia al canale",
"map_noChannelsAvailable": "Nessun canale disponibile", "map_noChannelsAvailable": "Nessun canale disponibile",
"map_publicLocationShare": "Condividi in una posizione pubblica", "map_publicLocationShare": "Condividi in una posizione pubblica",
"map_publicLocationShareConfirm": "Stai per condividere una posizione in {channelLabel}. Questo canale è pubblico e chiunque abbia la PSK può vederlo.", "map_publicLocationShareConfirm": "Stai per condividere una posizione in {channelLabel}. Questo canale è pubblico e chiunque abbia la PSK può vederlo.",
"@map_publicLocationShareConfirm": { "@map_publicLocationShareConfirm": {
"placeholders": { "placeholders": {
"channelLabel": { "channelLabel": {
@@ -810,13 +810,13 @@
"login_password": "Password", "login_password": "Password",
"login_enterPassword": "Inserisci password", "login_enterPassword": "Inserisci password",
"login_savePassword": "Salva password", "login_savePassword": "Salva password",
"login_savePasswordSubtitle": "La password verrà memorizzata in modo sicuro su questo dispositivo.", "login_savePasswordSubtitle": "La password verrà memorizzata in modo sicuro su questo dispositivo.",
"login_repeaterDescription": "Inserisci la password del ripetitore per accedere alle impostazioni e allo stato.", "login_repeaterDescription": "Inserisci la password del ripetitore per accedere alle impostazioni e allo stato.",
"login_roomDescription": "Inserisci la password della stanza per accedere alle impostazioni e allo stato.", "login_roomDescription": "Inserisci la password della stanza per accedere alle impostazioni e allo stato.",
"login_routing": "Instradamento", "login_routing": "Instradamento",
"login_routingMode": "Modalità di routing", "login_routingMode": "Modalità di routing",
"login_autoUseSavedPath": "Utilizza il percorso salvato", "login_autoUseSavedPath": "Utilizza il percorso salvato",
"login_forceFloodMode": "Modalità Inondamento Forzato", "login_forceFloodMode": "Modalità Inondamento Forzato",
"login_managePaths": "Gestisci Percorsi", "login_managePaths": "Gestisci Percorsi",
"login_login": "Accedi", "login_login": "Accedi",
"login_attempt": "Prova {current}/{max}", "login_attempt": "Prova {current}/{max}",
@@ -838,7 +838,7 @@
} }
} }
}, },
"login_failedMessage": "Accesso fallito. La password non è corretta oppure il ripetitore non è raggiungibile.", "login_failedMessage": "Accesso fallito. La password non è corretta oppure il ripetitore non è raggiungibile.",
"common_reload": "Ricaricare", "common_reload": "Ricaricare",
"common_clear": "Cancella", "common_clear": "Cancella",
"path_currentPath": "Percorso corrente: {path}", "path_currentPath": "Percorso corrente: {path}",
@@ -862,7 +862,7 @@
"path_hexPrefixInstructions": "Inserire i prefissi esadecimali a 2 caratteri per ogni salto, separati da virgole.", "path_hexPrefixInstructions": "Inserire i prefissi esadecimali a 2 caratteri per ogni salto, separati da virgole.",
"path_hexPrefixExample": "Esempio: A1,F2,3C (ogni nodo utilizza il primo byte della sua chiave pubblica)", "path_hexPrefixExample": "Esempio: A1,F2,3C (ogni nodo utilizza il primo byte della sua chiave pubblica)",
"path_labelHexPrefixes": "Prefisso esadecimale (percorso)", "path_labelHexPrefixes": "Prefisso esadecimale (percorso)",
"path_helperMaxHops": "Massimo 64 salti. Ogni prefisso è composto da 2 caratteri esadecimali (1 byte)", "path_helperMaxHops": "Massimo 64 salti. Ogni prefisso è composto da 2 caratteri esadecimali (1 byte)",
"path_selectFromContacts": "Seleziona da contatti:", "path_selectFromContacts": "Seleziona da contatti:",
"path_noRepeatersFound": "Non sono stati trovati ripetitori o server di stanza.", "path_noRepeatersFound": "Non sono stati trovati ripetitori o server di stanza.",
"path_customPathsRequire": "I percorsi personalizzati richiedono salti intermedi che possono inoltrare messaggi.", "path_customPathsRequire": "I percorsi personalizzati richiedono salti intermedi che possono inoltrare messaggi.",
@@ -874,7 +874,7 @@
} }
} }
}, },
"path_tooLong": "Il percorso è troppo lungo. Massimo 64 salti consentiti.", "path_tooLong": "Il percorso è troppo lungo. Massimo 64 salti consentiti.",
"path_setPath": "Imposta Percorso", "path_setPath": "Imposta Percorso",
"repeater_management": "Gestione Ripetitori", "repeater_management": "Gestione Ripetitori",
"repeater_managementTools": "Strumenti di Gestione", "repeater_managementTools": "Strumenti di Gestione",
@@ -887,9 +887,9 @@
"repeater_settings": "Impostazioni", "repeater_settings": "Impostazioni",
"repeater_settingsSubtitle": "Configura i parametri del ripetitore", "repeater_settingsSubtitle": "Configura i parametri del ripetitore",
"repeater_statusTitle": "Stato del Ripetitore", "repeater_statusTitle": "Stato del Ripetitore",
"repeater_routingMode": "Modalità di routing", "repeater_routingMode": "Modalità di routing",
"repeater_autoUseSavedPath": "Percorso salvato automatico", "repeater_autoUseSavedPath": "Percorso salvato automatico",
"repeater_forceFloodMode": "Modalità Inondamento Forzato", "repeater_forceFloodMode": "Modalità Inondamento Forzato",
"repeater_pathManagement": "Gestione dei percorsi", "repeater_pathManagement": "Gestione dei percorsi",
"repeater_refresh": "Aggiorna", "repeater_refresh": "Aggiorna",
"repeater_statusRequestTimeout": "Richiesta stato scaduta.", "repeater_statusRequestTimeout": "Richiesta stato scaduta.",
@@ -904,7 +904,7 @@
"repeater_systemInformation": "Informazioni di sistema", "repeater_systemInformation": "Informazioni di sistema",
"repeater_battery": "Batteria", "repeater_battery": "Batteria",
"repeater_clockAtLogin": "Orologio (all'accesso)", "repeater_clockAtLogin": "Orologio (all'accesso)",
"repeater_uptime": "Disponibilità", "repeater_uptime": "Disponibilità",
"repeater_queueLength": "Lunghezza della coda", "repeater_queueLength": "Lunghezza della coda",
"repeater_debugFlags": "Impostazioni Debug", "repeater_debugFlags": "Impostazioni Debug",
"repeater_radioStatistics": "Statistiche Radio", "repeater_radioStatistics": "Statistiche Radio",
@@ -1007,10 +1007,10 @@
"repeater_packetForwardingSubtitle": "Abilita il ripetitore per inoltrare i pacchetti", "repeater_packetForwardingSubtitle": "Abilita il ripetitore per inoltrare i pacchetti",
"repeater_guestAccess": "Accesso Ospite", "repeater_guestAccess": "Accesso Ospite",
"repeater_guestAccessSubtitle": "Consenti l'accesso ospite in sola lettura", "repeater_guestAccessSubtitle": "Consenti l'accesso ospite in sola lettura",
"repeater_privacyMode": "Modalità Privacy", "repeater_privacyMode": "Modalità Privacy",
"repeater_privacyModeSubtitle": "Nascondere nome/luogo negli annunci", "repeater_privacyModeSubtitle": "Nascondere nome/luogo negli annunci",
"repeater_advertisementSettings": "Impostazioni Annuncio", "repeater_advertisementSettings": "Impostazioni Annuncio",
"repeater_localAdvertInterval": "Intervallo Pubblicità Locale", "repeater_localAdvertInterval": "Intervallo Pubblicità Locale",
"repeater_localAdvertIntervalMinutes": "{minutes} minuti", "repeater_localAdvertIntervalMinutes": "{minutes} minuti",
"@repeater_localAdvertIntervalMinutes": { "@repeater_localAdvertIntervalMinutes": {
"placeholders": { "placeholders": {
@@ -1019,7 +1019,7 @@
} }
} }
}, },
"repeater_floodAdvertInterval": "Intervallo Pubblicità Inondazione", "repeater_floodAdvertInterval": "Intervallo Pubblicità Inondazione",
"repeater_floodAdvertIntervalHours": "{hours} ore", "repeater_floodAdvertIntervalHours": "{hours} ore",
"@repeater_floodAdvertIntervalHours": { "@repeater_floodAdvertIntervalHours": {
"placeholders": { "placeholders": {
@@ -1033,13 +1033,13 @@
"repeater_rebootRepeater": "Riavvia Ripetitore", "repeater_rebootRepeater": "Riavvia Ripetitore",
"repeater_rebootRepeaterSubtitle": "Riavvia il dispositivo ripetitore", "repeater_rebootRepeaterSubtitle": "Riavvia il dispositivo ripetitore",
"repeater_rebootRepeaterConfirm": "Sei sicuro di voler riavviare questo ripetitore?", "repeater_rebootRepeaterConfirm": "Sei sicuro di voler riavviare questo ripetitore?",
"repeater_regenerateIdentityKey": "Rigenera Chiave Identità", "repeater_regenerateIdentityKey": "Rigenera Chiave Identità",
"repeater_regenerateIdentityKeySubtitle": "Genera una nuova coppia di chiavi pubblica/privata", "repeater_regenerateIdentityKeySubtitle": "Genera una nuova coppia di chiavi pubblica/privata",
"repeater_regenerateIdentityKeyConfirm": "Questo genererà una nuova identità per il ripetitore. Procedere?", "repeater_regenerateIdentityKeyConfirm": "Questo genererà una nuova identità per il ripetitore. Procedere?",
"repeater_eraseFileSystem": "Elimina File System", "repeater_eraseFileSystem": "Elimina File System",
"repeater_eraseFileSystemSubtitle": "Formatta il file system del ripetitore", "repeater_eraseFileSystemSubtitle": "Formatta il file system del ripetitore",
"repeater_eraseFileSystemConfirm": "ATTENZIONE: Ciò cancellerà tutti i dati sul ripetitore. Non può essere annullato!", "repeater_eraseFileSystemConfirm": "ATTENZIONE: Ciò cancellerà tutti i dati sul ripetitore. Non può essere annullato!",
"repeater_eraseSerialOnly": "Elimina è disponibile solo tramite console seriale.", "repeater_eraseSerialOnly": "Elimina è disponibile solo tramite console seriale.",
"repeater_commandSent": "Comando inviato: {command}", "repeater_commandSent": "Comando inviato: {command}",
"@repeater_commandSent": { "@repeater_commandSent": {
"placeholders": { "placeholders": {
@@ -1072,7 +1072,7 @@
"repeater_refreshLocationSettings": "Aggiorna le Impostazioni della Posizione", "repeater_refreshLocationSettings": "Aggiorna le Impostazioni della Posizione",
"repeater_refreshPacketForwarding": "Aggiorna il inoltro pacchetti", "repeater_refreshPacketForwarding": "Aggiorna il inoltro pacchetti",
"repeater_refreshGuestAccess": "Aggiorna Accesso Ospite", "repeater_refreshGuestAccess": "Aggiorna Accesso Ospite",
"repeater_refreshPrivacyMode": "Aggiorna Modalità Privacy", "repeater_refreshPrivacyMode": "Aggiorna Modalità Privacy",
"repeater_refreshAdvertisementSettings": "Aggiorna le Impostazioni dell'Annuncio", "repeater_refreshAdvertisementSettings": "Aggiorna le Impostazioni dell'Annuncio",
"repeater_refreshed": "{label} aggiornato", "repeater_refreshed": "{label} aggiornato",
"@repeater_refreshed": { "@repeater_refreshed": {
@@ -1117,7 +1117,7 @@
"repeater_cliQuickAdvertise": "Pubblicare", "repeater_cliQuickAdvertise": "Pubblicare",
"repeater_cliQuickClock": "Orologio", "repeater_cliQuickClock": "Orologio",
"repeater_cliHelpAdvert": "Invia un pacchetto pubblicitario", "repeater_cliHelpAdvert": "Invia un pacchetto pubblicitario",
"repeater_cliHelpReboot": "Riavvia il dispositivo. (nota, potresti ottenere 'Timeout' che è normale)", "repeater_cliHelpReboot": "Riavvia il dispositivo. (nota, potresti ottenere 'Timeout' che è normale)",
"repeater_cliHelpClock": "Mostra l'ora corrente per l'orologio di ciascun dispositivo.", "repeater_cliHelpClock": "Mostra l'ora corrente per l'orologio di ciascun dispositivo.",
"repeater_cliHelpPassword": "Imposta una nuova password di amministratore per il dispositivo.", "repeater_cliHelpPassword": "Imposta una nuova password di amministratore per il dispositivo.",
"repeater_cliHelpVersion": "Mostra la versione del dispositivo e la data di costruzione del firmware.", "repeater_cliHelpVersion": "Mostra la versione del dispositivo e la data di costruzione del firmware.",
@@ -1125,12 +1125,12 @@
"repeater_cliHelpSetAf": "Imposta il fattore di tempo di trasmissione.", "repeater_cliHelpSetAf": "Imposta il fattore di tempo di trasmissione.",
"repeater_cliHelpSetTx": "Imposta la potenza di trasmissione LoRa in dBm (riavvia per applicare).", "repeater_cliHelpSetTx": "Imposta la potenza di trasmissione LoRa in dBm (riavvia per applicare).",
"repeater_cliHelpSetRepeat": "Abilita o disabilita il ruolo del ripetitore per questo nodo.", "repeater_cliHelpSetRepeat": "Abilita o disabilita il ruolo del ripetitore per questo nodo.",
"repeater_cliHelpSetAllowReadOnly": "(Server della stanza) Se 'on', allora l'accesso con una password vuota sarà consentito, ma non sarà possibile pubblicare nella stanza. (solo lettura).", "repeater_cliHelpSetAllowReadOnly": "(Server della stanza) Se 'on', allora l'accesso con una password vuota sarà consentito, ma non sarà possibile pubblicare nella stanza. (solo lettura).",
"repeater_cliHelpSetFloodMax": "Imposta il numero massimo di salti per i pacchetti di inondazione in entrata (se >= max, il pacchetto non viene inoltrato)", "repeater_cliHelpSetFloodMax": "Imposta il numero massimo di salti per i pacchetti di inondazione in entrata (se >= max, il pacchetto non viene inoltrato)",
"repeater_cliHelpSetIntThresh": "Imposta il Limite di Interferenza (in dB). Il valore predefinito è 14. Imposta su 0 per disabilitare il rilevamento delle interferenze del canale.", "repeater_cliHelpSetIntThresh": "Imposta il Limite di Interferenza (in dB). Il valore predefinito è 14. Imposta su 0 per disabilitare il rilevamento delle interferenze del canale.",
"repeater_cliHelpSetAgcResetInterval": "Imposta l'intervallo per resettare il controllore Automatico del Guadagno. Imposta su 0 per disabilitare.", "repeater_cliHelpSetAgcResetInterval": "Imposta l'intervallo per resettare il controllore Automatico del Guadagno. Imposta su 0 per disabilitare.",
"repeater_cliHelpSetMultiAcks": "Abilita o disabilita la funzione 'double ACKs'.", "repeater_cliHelpSetMultiAcks": "Abilita o disabilita la funzione 'double ACKs'.",
"repeater_cliHelpSetAdvertInterval": "Imposta l'intervallo del timer in minuti per inviare un pacchetto di pubblicità locale (senza salto). Imposta su 0 per disabilitare.", "repeater_cliHelpSetAdvertInterval": "Imposta l'intervallo del timer in minuti per inviare un pacchetto di pubblicità locale (senza salto). Imposta su 0 per disabilitare.",
"repeater_cliHelpSetFloodAdvertInterval": "Imposta l'intervallo del timer in ore per inviare un pacchetto pubblicitario di massa. Imposta su 0 per disabilitare.", "repeater_cliHelpSetFloodAdvertInterval": "Imposta l'intervallo del timer in ore per inviare un pacchetto pubblicitario di massa. Imposta su 0 per disabilitare.",
"repeater_cliHelpSetGuestPassword": "Imposta/aggiorna la password dell'ospite. (per ripetitori, gli accessi degli ospiti possono inviare la richiesta \"Get Stats\")", "repeater_cliHelpSetGuestPassword": "Imposta/aggiorna la password dell'ospite. (per ripetitori, gli accessi degli ospiti possono inviare la richiesta \"Get Stats\")",
"repeater_cliHelpSetName": "Imposta il nome dell'annuncio.", "repeater_cliHelpSetName": "Imposta il nome dell'annuncio.",
@@ -1138,33 +1138,33 @@
"repeater_cliHelpSetLon": "Imposta la longitudine della mappa pubblicitaria. (gradi decimali)", "repeater_cliHelpSetLon": "Imposta la longitudine della mappa pubblicitaria. (gradi decimali)",
"repeater_cliHelpSetRadio": "Imposta completamente nuovi parametri radio e li salva nelle preferenze. Richiede un comando \"reboot\" per l'applicazione.", "repeater_cliHelpSetRadio": "Imposta completamente nuovi parametri radio e li salva nelle preferenze. Richiede un comando \"reboot\" per l'applicazione.",
"repeater_cliHelpSetRxDelay": "Impostazioni (experimental) base (deve essere > 1 per l'effetto) per applicare un leggero ritardo ai pacchetti ricevuti, in base alla forza del segnale/punteggio. Imposta a 0 per disabilitare.", "repeater_cliHelpSetRxDelay": "Impostazioni (experimental) base (deve essere > 1 per l'effetto) per applicare un leggero ritardo ai pacchetti ricevuti, in base alla forza del segnale/punteggio. Imposta a 0 per disabilitare.",
"repeater_cliHelpSetTxDelay": "Imposta un fattore moltiplicato con il tempo di mantenimento per un pacchetto di modalità allagamento e con un sistema di slot casuale, per ritardarne la trasmissione (per diminuire la probabilità di collisioni).", "repeater_cliHelpSetTxDelay": "Imposta un fattore moltiplicato con il tempo di mantenimento per un pacchetto di modalità allagamento e con un sistema di slot casuale, per ritardarne la trasmissione (per diminuire la probabilità di collisioni).",
"repeater_cliHelpSetDirectTxDelay": "Uguale a txdelay, ma per applicare un ritardo casuale alla inoltrata di pacchetti in modalità diretta.", "repeater_cliHelpSetDirectTxDelay": "Uguale a txdelay, ma per applicare un ritardo casuale alla inoltrata di pacchetti in modalità diretta.",
"repeater_cliHelpSetBridgeEnabled": "Abilita/Disabilita ponte.", "repeater_cliHelpSetBridgeEnabled": "Abilita/Disabilita ponte.",
"repeater_cliHelpSetBridgeDelay": "Imposta il ritardo prima di ritrasmettere i pacchetti.", "repeater_cliHelpSetBridgeDelay": "Imposta il ritardo prima di ritrasmettere i pacchetti.",
"repeater_cliHelpSetBridgeSource": "Scegliere se il ponte dovrà ritrasmettere i pacchetti ricevuti o i pacchetti trasmessi.", "repeater_cliHelpSetBridgeSource": "Scegliere se il ponte dovrà ritrasmettere i pacchetti ricevuti o i pacchetti trasmessi.",
"repeater_cliHelpSetBridgeBaud": "Imposta la velocità di trasmissione per i ponti rs232.", "repeater_cliHelpSetBridgeBaud": "Imposta la velocità di trasmissione per i ponti rs232.",
"repeater_cliHelpSetBridgeSecret": "Imposta il segreto per i ponti espnow.", "repeater_cliHelpSetBridgeSecret": "Imposta il segreto per i ponti espnow.",
"repeater_cliHelpSetAdcMultiplier": "Imposta un fattore personalizzato per regolare la tensione della batteria riportata (supportato solo su schede selezionate).", "repeater_cliHelpSetAdcMultiplier": "Imposta un fattore personalizzato per regolare la tensione della batteria riportata (supportato solo su schede selezionate).",
"repeater_cliHelpTempRadio": "Imposta parametri radio temporanei per il numero specificato di minuti, per poi tornare ai parametri radio originali. (non salva nelle preferenze).", "repeater_cliHelpTempRadio": "Imposta parametri radio temporanei per il numero specificato di minuti, per poi tornare ai parametri radio originali. (non salva nelle preferenze).",
"repeater_cliHelpSetPerm": "Modifica l'ACL. Rimuove l'entrata corrispondente (per prefisso di pubkey) se \"permissions\" è zero. Aggiunge una nuova entrata se il pubkey-hex ha lunghezza completa e non è attualmente nell'ACL. Aggiorna l'entrata per corrispondenza del prefisso di pubkey. I bit di permesso variano per ogni ruolo di firmware, ma i primi 2 bit sono: 0 (Guest), 1 (solo lettura), 2 (lettura/scrittura), 3 (Admin)", "repeater_cliHelpSetPerm": "Modifica l'ACL. Rimuove l'entrata corrispondente (per prefisso di pubkey) se \"permissions\" è zero. Aggiunge una nuova entrata se il pubkey-hex ha lunghezza completa e non è attualmente nell'ACL. Aggiorna l'entrata per corrispondenza del prefisso di pubkey. I bit di permesso variano per ogni ruolo di firmware, ma i primi 2 bit sono: 0 (Guest), 1 (solo lettura), 2 (lettura/scrittura), 3 (Admin)",
"repeater_cliHelpGetBridgeType": "Ottiene tipo ponte nessuno, rs232, espnow", "repeater_cliHelpGetBridgeType": "Ottiene tipo ponte nessuno, rs232, espnow",
"repeater_cliHelpLogStart": "Avvia registrazione pacchetti nel file system.", "repeater_cliHelpLogStart": "Avvia registrazione pacchetti nel file system.",
"repeater_cliHelpLogStop": "Interrompi la registrazione dei pacchetti al file system.", "repeater_cliHelpLogStop": "Interrompi la registrazione dei pacchetti al file system.",
"repeater_cliHelpLogErase": "Elimina i log del pacchetto dal file system.", "repeater_cliHelpLogErase": "Elimina i log del pacchetto dal file system.",
"repeater_cliHelpNeighbors": "Mostra un elenco di altri nodi repeater ricevuti tramite annunci zero-hop. Ogni riga è id-prefisso-esadecimale:timestamp:snr-volte-4", "repeater_cliHelpNeighbors": "Mostra un elenco di altri nodi repeater ricevuti tramite annunci zero-hop. Ogni riga è id-prefisso-esadecimale:timestamp:snr-volte-4",
"repeater_cliHelpNeighborRemove": "Rimuove la prima corrispondenza in base al prefisso (esadecimale) della pubkey, dalla lista dei vicini.", "repeater_cliHelpNeighborRemove": "Rimuove la prima corrispondenza in base al prefisso (esadecimale) della pubkey, dalla lista dei vicini.",
"repeater_cliHelpRegion": "(solo serie) Elenca tutte le regioni definite e le autorizzazioni di allagamento correnti.", "repeater_cliHelpRegion": "(solo serie) Elenca tutte le regioni definite e le autorizzazioni di allagamento correnti.",
"repeater_cliHelpRegionLoad": "NOTA: questo è un'invocazione multi-comando speciale. Ogni comando successivo è un nome di regione (indentato con spazi per indicare la gerarchia parentale, con almeno uno spazio). Terminata inviando una riga vuota/comando.", "repeater_cliHelpRegionLoad": "NOTA: questo è un'invocazione multi-comando speciale. Ogni comando successivo è un nome di regione (indentato con spazi per indicare la gerarchia parentale, con almeno uno spazio). Terminata inviando una riga vuota/comando.",
"repeater_cliHelpRegionGet": "Cerca la regione con il prefisso del nome dato (o \"\" per l'ambito globale). Risponde con \"-> nome-regione (nome-genitore) 'F'\"", "repeater_cliHelpRegionGet": "Cerca la regione con il prefisso del nome dato (o \"\" per l'ambito globale). Risponde con \"-> nome-regione (nome-genitore) 'F'\"",
"repeater_cliHelpRegionPut": "Aggiunge o aggiorna una definizione di regione con il nome specificato.", "repeater_cliHelpRegionPut": "Aggiunge o aggiorna una definizione di regione con il nome specificato.",
"repeater_cliHelpRegionRemove": "Rimuove una definizione di regione con il dato nome. (deve corrispondere esattamente e non avere regioni figlio)", "repeater_cliHelpRegionRemove": "Rimuove una definizione di regione con il dato nome. (deve corrispondere esattamente e non avere regioni figlio)",
"repeater_cliHelpRegionAllowf": "Imposta il permesso di 'F'lood per la regione specificata. ('' per lo scope globale/legacy)", "repeater_cliHelpRegionAllowf": "Imposta il permesso di 'F'lood per la regione specificata. ('' per lo scope globale/legacy)",
"repeater_cliHelpRegionDenyf": "Rimuove il permesso 'F'lood per la regione specificata. (NOTA: a questo stadio non è consigliato utilizzarlo sullo scope globale/legacy!!).", "repeater_cliHelpRegionDenyf": "Rimuove il permesso 'F'lood per la regione specificata. (NOTA: a questo stadio non è consigliato utilizzarlo sullo scope globale/legacy!!).",
"repeater_cliHelpRegionHome": "Risposte con la regione 'home' corrente. (Nota applicata finora, riservata per il futuro)", "repeater_cliHelpRegionHome": "Risposte con la regione 'home' corrente. (Nota applicata finora, riservata per il futuro)",
"repeater_cliHelpRegionHomeSet": "Imposta la regione 'home'.", "repeater_cliHelpRegionHomeSet": "Imposta la regione 'home'.",
"repeater_cliHelpRegionSave": "Persiste l'elenco/mappa delle regioni all'archiviazione.", "repeater_cliHelpRegionSave": "Persiste l'elenco/mappa delle regioni all'archiviazione.",
"repeater_cliHelpGps": "Mostra lo stato del GPS. Quando il GPS è spento, risponde solo \"spento\", se è acceso risponde con \"acceso\", \"stato\", \"fix\" e numero di satelliti.", "repeater_cliHelpGps": "Mostra lo stato del GPS. Quando il GPS è spento, risponde solo \"spento\", se è acceso risponde con \"acceso\", \"stato\", \"fix\" e numero di satelliti.",
"repeater_cliHelpGpsOnOff": "Attiva/disattiva l'alimentazione del GPS.", "repeater_cliHelpGpsOnOff": "Attiva/disattiva l'alimentazione del GPS.",
"repeater_cliHelpGpsSync": "Sincronizza l'orario del nodo con l'orologio GPS.", "repeater_cliHelpGpsSync": "Sincronizza l'orario del nodo con l'orologio GPS.",
"repeater_cliHelpGpsSetLoc": "Imposta la posizione del nodo alle coordinate GPS e salva le preferenze.", "repeater_cliHelpGpsSetLoc": "Imposta la posizione del nodo alle coordinate GPS e salva le preferenze.",
@@ -1180,7 +1180,7 @@
"repeater_regionManagementRepeaterOnly": "Gestione Regione (solo Ripetitore)", "repeater_regionManagementRepeaterOnly": "Gestione Regione (solo Ripetitore)",
"repeater_regionNote": "Sono state introdotte le comandi di regione per gestire le definizioni e le autorizzazioni delle regioni.", "repeater_regionNote": "Sono state introdotte le comandi di regione per gestire le definizioni e le autorizzazioni delle regioni.",
"repeater_gpsManagement": "Gestione GPS", "repeater_gpsManagement": "Gestione GPS",
"repeater_gpsNote": "è stata introdotta una funzione gps per gestire le tematiche relative alla posizione.", "repeater_gpsNote": "è stata introdotta una funzione gps per gestire le tematiche relative alla posizione.",
"telemetry_receivedData": "Dati Telemetria Ricevuti", "telemetry_receivedData": "Dati Telemetria Ricevuti",
"telemetry_requestTimeout": "Richiesta di telemetria scaduta.", "telemetry_requestTimeout": "Richiesta di telemetria scaduta.",
"telemetry_errorLoading": "Errore nel caricamento della telemetria: {error}", "telemetry_errorLoading": "Errore nel caricamento della telemetria: {error}",
@@ -1232,7 +1232,7 @@
} }
} }
}, },
"telemetry_temperatureValue": "{celsius}°C / {fahrenheit}°F", "telemetry_temperatureValue": "{celsius}°C / {fahrenheit}°F",
"@telemetry_temperatureValue": { "@telemetry_temperatureValue": {
"placeholders": { "placeholders": {
"celsius": { "celsius": {
@@ -1254,7 +1254,7 @@
"channelPath_repeatsLabel": "Ripeti", "channelPath_repeatsLabel": "Ripeti",
"channelPath_pathLabel": "Percorso {index}", "channelPath_pathLabel": "Percorso {index}",
"channelPath_observedLabel": "Osservato", "channelPath_observedLabel": "Osservato",
"channelPath_observedPathTitle": "Percorso osservato {index} • {hops}", "channelPath_observedPathTitle": "Percorso osservato {index} {hops}",
"@channelPath_observedPathTitle": { "@channelPath_observedPathTitle": {
"placeholders": { "placeholders": {
"index": { "index": {
@@ -1329,7 +1329,7 @@
}, },
"channelPath_pathLabelTitle": "Percorso", "channelPath_pathLabelTitle": "Percorso",
"channelPath_observedPathHeader": "Percorso Osservato", "channelPath_observedPathHeader": "Percorso Osservato",
"channelPath_selectedPathLabel": "{label} • {prefixes}", "channelPath_selectedPathLabel": "{label} {prefixes}",
"@channelPath_selectedPathLabel": { "@channelPath_selectedPathLabel": {
"placeholders": { "placeholders": {
"label": { "label": {
@@ -1373,11 +1373,11 @@
"channels_joinPrivateChannel": "Unisciti a un Canale Privato", "channels_joinPrivateChannel": "Unisciti a un Canale Privato",
"channels_joinPrivateChannelDesc": "Inserire manualmente una chiave segreta.", "channels_joinPrivateChannelDesc": "Inserire manualmente una chiave segreta.",
"channels_joinPublicChannel": "Unisciti al Canale Pubblico", "channels_joinPublicChannel": "Unisciti al Canale Pubblico",
"channels_joinPublicChannelDesc": "Chiunque può unirsi a questo canale.", "channels_joinPublicChannelDesc": "Chiunque può unirsi a questo canale.",
"channels_joinHashtagChannel": "Unisciti a un Canale con Hashtag", "channels_joinHashtagChannel": "Unisciti a un Canale con Hashtag",
"channels_joinHashtagChannelDesc": "Chiunque può unirsi ai canali hashtag.", "channels_joinHashtagChannelDesc": "Chiunque può unirsi ai canali hashtag.",
"channels_scanQrCode": "Scansiona un codice QR", "channels_scanQrCode": "Scansiona un codice QR",
"channels_scanQrCodeComingSoon": "Arriverà presto", "channels_scanQrCodeComingSoon": "Arriverà presto",
"channels_enterHashtag": "Inserisci hashtag", "channels_enterHashtag": "Inserisci hashtag",
"channels_hashtagHint": "es. #team", "channels_hashtagHint": "es. #team",
"@neighbors_unknownContact": { "@neighbors_unknownContact": {
@@ -1459,35 +1459,35 @@
} }
}, },
"common_ok": "OK", "common_ok": "OK",
"community_title": "Comunità", "community_title": "Comunità",
"community_create": "Crea Comunità", "community_create": "Crea Comunità",
"community_createDesc": "Crea una nuova comunità e condividila tramite codice QR.", "community_createDesc": "Crea una nuova comunità e condividila tramite codice QR.",
"community_join": "Unisciti", "community_join": "Unisciti",
"community_joinTitle": "Unisciti alla Community", "community_joinTitle": "Unisciti alla Community",
"community_joinConfirmation": "Vuoi unirti alla community \"{name}\"?", "community_joinConfirmation": "Vuoi unirti alla community \"{name}\"?",
"community_scanQr": "Scansiona il QR Code della Community", "community_scanQr": "Scansiona il QR Code della Community",
"community_scanInstructions": "Punta la fotocamera su un codice QR della comunità", "community_scanInstructions": "Punta la fotocamera su un codice QR della comunità",
"community_showQr": "Mostra il codice QR", "community_showQr": "Mostra il codice QR",
"community_publicChannel": "Comunità Pubblica", "community_publicChannel": "Comunità Pubblica",
"community_hashtagChannel": "Hashtag della Comunità", "community_hashtagChannel": "Hashtag della Comunità",
"community_name": "Nome della Comunità", "community_name": "Nome della Comunità",
"community_enterName": "Inserisci il nome della comunità", "community_enterName": "Inserisci il nome della comunità",
"community_created": "Comunità \"{name}\" creata", "community_created": "Comunità \"{name}\" creata",
"community_joined": "Unito alla comunità \"{name}\"", "community_joined": "Unito alla comunità \"{name}\"",
"community_qrTitle": "Condividi Comunità", "community_qrTitle": "Condividi Comunità",
"community_qrInstructions": "Scansiona questo codice QR per unirti a {name}", "community_qrInstructions": "Scansiona questo codice QR per unirti a {name}",
"community_hashtagPrivacyHint": "I canali hashtag della community sono accessibili solo ai membri della community", "community_hashtagPrivacyHint": "I canali hashtag della community sono accessibili solo ai membri della community",
"community_invalidQrCode": "Codice QR della community non valido", "community_invalidQrCode": "Codice QR della community non valido",
"community_alreadyMember": "Già membro", "community_alreadyMember": "Già membro",
"community_alreadyMemberMessage": "Sei già un membro di \"{name}\".", "community_alreadyMemberMessage": "Sei già un membro di \"{name}\".",
"community_addPublicChannel": "Aggiungi Canale Pubblico della Comunità", "community_addPublicChannel": "Aggiungi Canale Pubblico della Comunità",
"community_addPublicChannelHint": "Aggiungi automaticamente il canale pubblico per questa community", "community_addPublicChannelHint": "Aggiungi automaticamente il canale pubblico per questa community",
"community_noCommunities": "Nessun gruppo aggiunto finora", "community_noCommunities": "Nessun gruppo aggiunto finora",
"community_scanOrCreate": "Scansiona un codice QR o crea una community per iniziare.", "community_scanOrCreate": "Scansiona un codice QR o crea una community per iniziare.",
"community_manageCommunities": "Gestisci Comunità", "community_manageCommunities": "Gestisci Comunità",
"community_delete": "Lascia la Comunità", "community_delete": "Lascia la Comunità",
"community_deleteConfirm": "Uscire da \"{name}\"?", "community_deleteConfirm": "Uscire da \"{name}\"?",
"community_deleteChannelsWarning": "Questo eliminerà anche {count} canale/i e i loro messaggi.", "community_deleteChannelsWarning": "Questo eliminerà anche {count} canale/i e i loro messaggi.",
"@community_deleteChannelsWarning": { "@community_deleteChannelsWarning": {
"placeholders": { "placeholders": {
"count": { "count": {
@@ -1495,14 +1495,14 @@
} }
} }
}, },
"community_deleted": "Hai lasciato la comunità \"{name}\"", "community_deleted": "Hai lasciato la comunità \"{name}\"",
"community_addHashtagChannel": "Aggiungi Hashtag della Community", "community_addHashtagChannel": "Aggiungi Hashtag della Community",
"community_addHashtagChannelDesc": "Aggiungi un canale con hashtag per questa community", "community_addHashtagChannelDesc": "Aggiungi un canale con hashtag per questa community",
"community_selectCommunity": "Seleziona Comunità", "community_selectCommunity": "Seleziona Comunità",
"community_regularHashtag": "Hashtag regolare", "community_regularHashtag": "Hashtag regolare",
"community_regularHashtagDesc": "Hashtag pubblico (chiunque può unirsi)", "community_regularHashtagDesc": "Hashtag pubblico (chiunque può unirsi)",
"community_communityHashtag": "Hashtag della Comunità", "community_communityHashtag": "Hashtag della Comunità",
"community_communityHashtagDesc": "Visibile solo ai membri della comunità", "community_communityHashtagDesc": "Visibile solo ai membri della comunità",
"community_forCommunity": "Per {name}", "community_forCommunity": "Per {name}",
"@community_regenerateSecretConfirm": { "@community_regenerateSecretConfirm": {
"placeholders": { "placeholders": {
@@ -1567,16 +1567,16 @@
"contacts_floodAdvert": "Annuncio alluvionale", "contacts_floodAdvert": "Annuncio alluvionale",
"contacts_copyAdvertToClipboard": "Copia Annuncio negli Appunti", "contacts_copyAdvertToClipboard": "Copia Annuncio negli Appunti",
"contacts_addContactFromClipboard": "Aggiungere contatto dalla clipboard", "contacts_addContactFromClipboard": "Aggiungere contatto dalla clipboard",
"contacts_clipboardEmpty": "La clipboard è vuota.", "contacts_clipboardEmpty": "La clipboard è vuota.",
"contacts_ShareContact": "Copia contatto negli Appunti", "contacts_ShareContact": "Copia contatto negli Appunti",
"contacts_contactImported": "Il contatto è stato importato.", "contacts_contactImported": "Il contatto è stato importato.",
"contacts_contactImportFailed": "Contatto non importato con successo.", "contacts_contactImportFailed": "Contatto non importato con successo.",
"contacts_zeroHopContactAdvertSent": "Inviato contatto tramite annuncio.", "contacts_zeroHopContactAdvertSent": "Inviato contatto tramite annuncio.",
"contacts_contactAdvertCopyFailed": "Copia dell'annuncio nella Clipboard non riuscita.", "contacts_contactAdvertCopyFailed": "Copia dell'annuncio nella Clipboard non riuscita.",
"contacts_ShareContactZeroHop": "Condividi contatto tramite annuncio", "contacts_ShareContactZeroHop": "Condividi contatto tramite annuncio",
"contacts_zeroHopContactAdvertFailed": "Invio del contatto non riuscito.", "contacts_zeroHopContactAdvertFailed": "Invio del contatto non riuscito.",
"contacts_contactAdvertCopied": "Annuncio copiato negli Appunti.", "contacts_contactAdvertCopied": "Annuncio copiato negli Appunti.",
"notification_activityTitle": "Attività MeshCore", "notification_activityTitle": "Attività MeshCore",
"notification_messagesCount": "{count} {count, plural, =1{messaggio} other{messaggi}}", "notification_messagesCount": "{count} {count, plural, =1{messaggio} other{messaggi}}",
"notification_channelMessagesCount": "{count} {count, plural, =1{messaggio del canale} other{messaggi del canale}}", "notification_channelMessagesCount": "{count} {count, plural, =1{messaggio del canale} other{messaggi del canale}}",
"notification_newNodesCount": "{count} {count, plural, =1{nuovo nodo} other{nuovi nodi}}", "notification_newNodesCount": "{count} {count, plural, =1{nuovo nodo} other{nuovi nodi}}",
@@ -1587,7 +1587,7 @@
"settings_gpxExportSuccess": "Esportazione del file GPX completata con successo.", "settings_gpxExportSuccess": "Esportazione del file GPX completata con successo.",
"settings_gpxExportNoContacts": "Nessun contatto da esportare.", "settings_gpxExportNoContacts": "Nessun contatto da esportare.",
"settings_gpxExportNotAvailable": "Non supportato sul tuo dispositivo/Sistema Operativo", "settings_gpxExportNotAvailable": "Non supportato sul tuo dispositivo/Sistema Operativo",
"settings_gpxExportError": "Si è verificato un errore durante l'esportazione.", "settings_gpxExportError": "Si è verificato un errore durante l'esportazione.",
"settings_gpxExportRepeatersSubtitle": "Esporta ripetitori / roomserver con una posizione in un file GPX.", "settings_gpxExportRepeatersSubtitle": "Esporta ripetitori / roomserver con una posizione in un file GPX.",
"settings_gpxExportContactsSubtitle": "Esporta i compagni con una posizione in un file GPX.", "settings_gpxExportContactsSubtitle": "Esporta i compagni con una posizione in un file GPX.",
"settings_gpxExportAll": "Esporta tutti i contatti in GPX", "settings_gpxExportAll": "Esporta tutti i contatti in GPX",
@@ -1597,13 +1597,13 @@
"settings_gpxExportAllContacts": "Tutte le posizioni dei contatti", "settings_gpxExportAllContacts": "Tutte le posizioni dei contatti",
"settings_gpxExportShareText": "Dati mappa esportati da meshcore-open", "settings_gpxExportShareText": "Dati mappa esportati da meshcore-open",
"settings_gpxExportShareSubject": "meshcore-open esportazione dati mappa GPX", "settings_gpxExportShareSubject": "meshcore-open esportazione dati mappa GPX",
"pathTrace_someHopsNoLocation": "Uno o più dei luppoli mancano di una posizione!", "pathTrace_someHopsNoLocation": "Uno o più dei luppoli mancano di una posizione!",
"map_removeLast": "Rimuovi ultimo", "map_removeLast": "Rimuovi ultimo",
"map_pathTraceCancelled": "Tracciamento del percorso annullato.", "map_pathTraceCancelled": "Tracciamento del percorso annullato.",
"pathTrace_clearTooltip": "Pulisci percorso", "pathTrace_clearTooltip": "Pulisci percorso",
"map_runTrace": "Esegui Path Trace", "map_runTrace": "Esegui Path Trace",
"map_tapToAdd": "Tocca i nodi per aggiungerli al percorso.", "map_tapToAdd": "Tocca i nodi per aggiungerli al percorso.",
"scanner_bluetoothOff": "Il Bluetooth è disattivato.", "scanner_bluetoothOff": "Il Bluetooth è disattivato.",
"scanner_bluetoothOffMessage": "Si prega di attivare il Bluetooth per effettuare la scansione dei dispositivi.", "scanner_bluetoothOffMessage": "Si prega di attivare il Bluetooth per effettuare la scansione dei dispositivi.",
"scanner_chromeRequired": "Browser Chrome richiesto", "scanner_chromeRequired": "Browser Chrome richiesto",
"scanner_chromeRequiredMessage": "Questa applicazione web richiede Google Chrome o un browser basato su Chromium per il supporto Bluetooth.", "scanner_chromeRequiredMessage": "Questa applicazione web richiede Google Chrome o un browser basato su Chromium per il supporto Bluetooth.",
@@ -1612,10 +1612,10 @@
"snrIndicator_lastSeen": "Ultimo accesso", "snrIndicator_lastSeen": "Ultimo accesso",
"chat_ShowAllPaths": "Mostra tutti i percorsi", "chat_ShowAllPaths": "Mostra tutti i percorsi",
"settings_clientRepeat": "Ripetizione \"fuori dalla rete\"", "settings_clientRepeat": "Ripetizione \"fuori dalla rete\"",
"settings_clientRepeatFreqWarning": "Per la comunicazione fuori rete, è necessario utilizzare frequenze di 433, 869 o 918 MHz.", "settings_clientRepeatFreqWarning": "Per la comunicazione fuori rete, è necessario utilizzare frequenze di 433, 869 o 918 MHz.",
"settings_clientRepeatSubtitle": "Permetti a questo dispositivo di ripetere i pacchetti di rete per gli altri.", "settings_clientRepeatSubtitle": "Permetti a questo dispositivo di ripetere i pacchetti di rete per gli altri.",
"settings_aboutOpenMeteoAttribution": "Dati di elevazione LOS: Open-Meteo (CC BY 4.0)", "settings_aboutOpenMeteoAttribution": "Dati di elevazione LOS: Open-Meteo (CC BY 4.0)",
"appSettings_unitsTitle": "Unità", "appSettings_unitsTitle": "Unità",
"appSettings_unitsMetric": "Metrico (m/km)", "appSettings_unitsMetric": "Metrico (m/km)",
"appSettings_unitsImperial": "Imperiale (ft / mi)", "appSettings_unitsImperial": "Imperiale (ft / mi)",
"map_lineOfSight": "Linea di vista", "map_lineOfSight": "Linea di vista",
@@ -1631,7 +1631,7 @@
}, },
"losClearAllPoints": "Cancella tutti i punti", "losClearAllPoints": "Cancella tutti i punti",
"losRunToViewElevationProfile": "Eseguire LOS per visualizzare il profilo altimetrico", "losRunToViewElevationProfile": "Eseguire LOS per visualizzare il profilo altimetrico",
"losMenuTitle": "Menù LOS", "losMenuTitle": "Menù LOS",
"losMenuSubtitle": "Tocca i nodi o premi a lungo la mappa per punti personalizzati", "losMenuSubtitle": "Tocca i nodi o premi a lungo la mappa per punti personalizzati",
"losShowDisplayNodes": "Mostra i nodi di visualizzazione", "losShowDisplayNodes": "Mostra i nodi di visualizzazione",
"losCustomPoints": "Punti personalizzati", "losCustomPoints": "Punti personalizzati",
@@ -1722,7 +1722,7 @@
} }
} }
}, },
"losErrorElevationUnavailable": "Dati di elevazione non disponibili per uno o più campioni.", "losErrorElevationUnavailable": "Dati di elevazione non disponibili per uno o più campioni.",
"losErrorInvalidInput": "Dati punti/elevazione non validi per il calcolo della LOS.", "losErrorInvalidInput": "Dati punti/elevazione non validi per il calcolo della LOS.",
"losRenameCustomPoint": "Rinomina punto personalizzato", "losRenameCustomPoint": "Rinomina punto personalizzato",
"losPointName": "Nome del punto", "losPointName": "Nome del punto",
@@ -1734,7 +1734,7 @@
"losLegendTerrain": "Terreno", "losLegendTerrain": "Terreno",
"losFrequencyLabel": "Frequenza", "losFrequencyLabel": "Frequenza",
"losFrequencyInfoTooltip": "Visualizza i dettagli del calcolo", "losFrequencyInfoTooltip": "Visualizza i dettagli del calcolo",
"losFrequencyDialogTitle": "Calcolo dell’orizzonte radio", "losFrequencyDialogTitle": "Calcolo dellorizzonte radio",
"losFrequencyDialogDescription": "Partendo da k={baselineK} a {baselineFreq} MHz, il calcolo regola il fattore k per l'attuale banda {frequencyMHz} MHz, che definisce il limite curvo dell'orizzonte radio.", "losFrequencyDialogDescription": "Partendo da k={baselineK} a {baselineFreq} MHz, il calcolo regola il fattore k per l'attuale banda {frequencyMHz} MHz, che definisce il limite curvo dell'orizzonte radio.",
"@losFrequencyDialogDescription": { "@losFrequencyDialogDescription": {
"description": "Explain how the calculation uses the baseline frequency and derived k-factor.", "description": "Explain how the calculation uses the baseline frequency and derived k-factor.",
@@ -1802,11 +1802,23 @@
"contacts_unread": "Non letti", "contacts_unread": "Non letti",
"contacts_searchRepeaters": "Cerca {number}{str} Ripetitori...", "contacts_searchRepeaters": "Cerca {number}{str} Ripetitori...",
"contacts_searchRoomServers": "Cerca {number}{str} server Room...", "contacts_searchRoomServers": "Cerca {number}{str} server Room...",
"connectionChoiceBluetoothLabel": "Bluetooth", "usbScreenNote": "La comunicazione seriale USB è attiva sui dispositivi Android supportati e sulle piattaforme desktop.",
"connectionChoiceUsbLabel": "USB",
"usbScreenNote": "La comunicazione seriale USB è attiva sui dispositivi Android supportati e sulle piattaforme desktop.",
"usbScreenStatus": "Seleziona un dispositivo USB",
"usbScreenSubtitle": "Seleziona il dispositivo seriale rilevato e connettilo direttamente al tuo nodo MeshCore.", "usbScreenSubtitle": "Seleziona il dispositivo seriale rilevato e connettilo direttamente al tuo nodo MeshCore.",
"usbScreenStatus": "Seleziona un dispositivo USB",
"usbScreenTitle": "Connessione tramite USB", "usbScreenTitle": "Connessione tramite USB",
"usbScreenEmptyState": "Nessun dispositivo USB rilevato. Collegare uno e riavviare." "usbScreenEmptyState": "Nessun dispositivo USB rilevato. Collegare uno e riavviare.",
"usbErrorPermissionDenied": "È stato negato l'accesso tramite USB.",
"usbErrorDeviceMissing": "Il dispositivo USB selezionato non è più disponibile.",
"usbErrorInvalidPort": "Seleziona un dispositivo USB valido.",
"usbErrorBusy": "Un'altra richiesta di connessione tramite USB è già in corso.",
"usbErrorNotConnected": "Non è collegato alcun dispositivo USB.",
"usbErrorOpenFailed": "Impossibile aprire il dispositivo USB selezionato.",
"usbErrorConnectFailed": "Impossibile connettersi al dispositivo USB selezionato.",
"usbErrorUnsupported": "La comunicazione seriale tramite USB non è supportata su questa piattaforma.",
"usbErrorAlreadyActive": "La connessione USB è già attiva.",
"usbErrorNoDeviceSelected": "Non è stato selezionato alcun dispositivo USB.",
"usbErrorPortClosed": "La connessione USB non è attiva.",
"usbErrorConnectTimedOut": "Attesa superata, in attesa di una risposta dal dispositivo.",
"connectionChoiceUsbLabel": "USB",
"connectionChoiceBluetoothLabel": "Bluetooth"
} }
+72
View File
@@ -358,6 +358,78 @@ abstract class AppLocalizations {
/// **'No USB devices found. Plug one in and refresh.'** /// **'No USB devices found. Plug one in and refresh.'**
String get usbScreenEmptyState; String get usbScreenEmptyState;
/// No description provided for @usbErrorPermissionDenied.
///
/// In en, this message translates to:
/// **'USB permission was denied.'**
String get usbErrorPermissionDenied;
/// No description provided for @usbErrorDeviceMissing.
///
/// In en, this message translates to:
/// **'The selected USB device is no longer available.'**
String get usbErrorDeviceMissing;
/// No description provided for @usbErrorInvalidPort.
///
/// In en, this message translates to:
/// **'Select a valid USB device.'**
String get usbErrorInvalidPort;
/// No description provided for @usbErrorBusy.
///
/// In en, this message translates to:
/// **'Another USB connection request is already in progress.'**
String get usbErrorBusy;
/// No description provided for @usbErrorNotConnected.
///
/// In en, this message translates to:
/// **'No USB device is connected.'**
String get usbErrorNotConnected;
/// No description provided for @usbErrorOpenFailed.
///
/// In en, this message translates to:
/// **'Failed to open the selected USB device.'**
String get usbErrorOpenFailed;
/// No description provided for @usbErrorConnectFailed.
///
/// In en, this message translates to:
/// **'Failed to connect to the selected USB device.'**
String get usbErrorConnectFailed;
/// No description provided for @usbErrorUnsupported.
///
/// In en, this message translates to:
/// **'USB serial is not supported on this platform.'**
String get usbErrorUnsupported;
/// No description provided for @usbErrorAlreadyActive.
///
/// In en, this message translates to:
/// **'A USB connection is already active.'**
String get usbErrorAlreadyActive;
/// No description provided for @usbErrorNoDeviceSelected.
///
/// In en, this message translates to:
/// **'No USB device was selected.'**
String get usbErrorNoDeviceSelected;
/// No description provided for @usbErrorPortClosed.
///
/// In en, this message translates to:
/// **'The USB connection is not open.'**
String get usbErrorPortClosed;
/// No description provided for @usbErrorConnectTimedOut.
///
/// In en, this message translates to:
/// **'Timed out waiting for the device to respond.'**
String get usbErrorConnectTimedOut;
/// No description provided for @scanner_scanning. /// No description provided for @scanner_scanning.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+41
View File
@@ -132,6 +132,47 @@ class AppLocalizationsEn extends AppLocalizations {
String get usbScreenEmptyState => String get usbScreenEmptyState =>
'No USB devices found. Plug one in and refresh.'; 'No USB devices found. Plug one in and refresh.';
@override
String get usbErrorPermissionDenied => 'USB permission was denied.';
@override
String get usbErrorDeviceMissing =>
'The selected USB device is no longer available.';
@override
String get usbErrorInvalidPort => 'Select a valid USB device.';
@override
String get usbErrorBusy =>
'Another USB connection request is already in progress.';
@override
String get usbErrorNotConnected => 'No USB device is connected.';
@override
String get usbErrorOpenFailed => 'Failed to open the selected USB device.';
@override
String get usbErrorConnectFailed =>
'Failed to connect to the selected USB device.';
@override
String get usbErrorUnsupported =>
'USB serial is not supported on this platform.';
@override
String get usbErrorAlreadyActive => 'A USB connection is already active.';
@override
String get usbErrorNoDeviceSelected => 'No USB device was selected.';
@override
String get usbErrorPortClosed => 'The USB connection is not open.';
@override
String get usbErrorConnectTimedOut =>
'Timed out waiting for the device to respond.';
@override @override
String get scanner_scanning => 'Scanning for devices...'; String get scanner_scanning => 'Scanning for devices...';
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+139 -96
View File
@@ -93,7 +93,7 @@ class AppLocalizationsIt extends AppLocalizations {
String get common_loading => 'Caricamento...'; String get common_loading => 'Caricamento...';
@override @override
String get common_notAvailable => '—'; String get common_notAvailable => '';
@override @override
String common_voltageValue(String volts) { String common_voltageValue(String volts) {
@@ -126,12 +126,56 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get usbScreenNote => String get usbScreenNote =>
'La comunicazione seriale USB è attiva sui dispositivi Android supportati e sulle piattaforme desktop.'; 'La comunicazione seriale USB è attiva sui dispositivi Android supportati e sulle piattaforme desktop.';
@override @override
String get usbScreenEmptyState => String get usbScreenEmptyState =>
'Nessun dispositivo USB rilevato. Collegare uno e riavviare.'; 'Nessun dispositivo USB rilevato. Collegare uno e riavviare.';
@override
String get usbErrorPermissionDenied =>
'È stato negato l\'accesso tramite USB.';
@override
String get usbErrorDeviceMissing =>
'Il dispositivo USB selezionato non è più disponibile.';
@override
String get usbErrorInvalidPort => 'Seleziona un dispositivo USB valido.';
@override
String get usbErrorBusy =>
'Un\'altra richiesta di connessione tramite USB è già in corso.';
@override
String get usbErrorNotConnected => 'Non è collegato alcun dispositivo USB.';
@override
String get usbErrorOpenFailed =>
'Impossibile aprire il dispositivo USB selezionato.';
@override
String get usbErrorConnectFailed =>
'Impossibile connettersi al dispositivo USB selezionato.';
@override
String get usbErrorUnsupported =>
'La comunicazione seriale tramite USB non è supportata su questa piattaforma.';
@override
String get usbErrorAlreadyActive => 'La connessione USB è già attiva.';
@override
String get usbErrorNoDeviceSelected =>
'Non è stato selezionato alcun dispositivo USB.';
@override
String get usbErrorPortClosed => 'La connessione USB non è attiva.';
@override
String get usbErrorConnectTimedOut =>
'Attesa superata, in attesa di una risposta dal dispositivo.';
@override @override
String get scanner_scanning => 'Scansione in corso per i dispositivi...'; String get scanner_scanning => 'Scansione in corso per i dispositivi...';
@@ -168,7 +212,7 @@ class AppLocalizationsIt extends AppLocalizations {
String get scanner_scan => 'Scansiona'; String get scanner_scan => 'Scansiona';
@override @override
String get scanner_bluetoothOff => 'Il Bluetooth è disattivato.'; String get scanner_bluetoothOff => 'Il Bluetooth è disattivato.';
@override @override
String get scanner_bluetoothOffMessage => String get scanner_bluetoothOffMessage =>
@@ -265,7 +309,7 @@ class AppLocalizationsIt extends AppLocalizations {
String get settings_longitude => 'Longitudine'; String get settings_longitude => 'Longitudine';
@override @override
String get settings_privacyMode => 'Modalità Privacy'; String get settings_privacyMode => 'Modalità Privacy';
@override @override
String get settings_privacyModeSubtitle => String get settings_privacyModeSubtitle =>
@@ -273,13 +317,13 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get settings_privacyModeToggle => String get settings_privacyModeToggle =>
'Attiva la modalità privacy per nascondere il tuo nome e la tua posizione negli annunci.'; 'Attiva la modalità privacy per nascondere il tuo nome e la tua posizione negli annunci.';
@override @override
String get settings_privacyModeEnabled => 'Modalità privacy abilitata'; String get settings_privacyModeEnabled => 'Modalità privacy abilitata';
@override @override
String get settings_privacyModeDisabled => 'Modalità privacy disabilitata'; String get settings_privacyModeDisabled => 'Modalità privacy disabilitata';
@override @override
String get settings_actions => 'Azioni'; String get settings_actions => 'Azioni';
@@ -417,7 +461,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get settings_clientRepeatFreqWarning => String get settings_clientRepeatFreqWarning =>
'Per la comunicazione fuori rete, è necessario utilizzare frequenze di 433, 869 o 918 MHz.'; 'Per la comunicazione fuori rete, è necessario utilizzare frequenze di 433, 869 o 918 MHz.';
@override @override
String settings_error(String message) { String settings_error(String message) {
@@ -452,10 +496,10 @@ class AppLocalizationsIt extends AppLocalizations {
String get appSettings_languageEn => 'English'; String get appSettings_languageEn => 'English';
@override @override
String get appSettings_languageFr => 'Français'; String get appSettings_languageFr => 'Français';
@override @override
String get appSettings_languageEs => 'Español'; String get appSettings_languageEs => 'Español';
@override @override
String get appSettings_languageDe => 'Deutsch'; String get appSettings_languageDe => 'Deutsch';
@@ -464,16 +508,16 @@ class AppLocalizationsIt extends AppLocalizations {
String get appSettings_languagePl => 'Polski'; String get appSettings_languagePl => 'Polski';
@override @override
String get appSettings_languageSl => 'Slovenščina'; String get appSettings_languageSl => 'Slovenščina';
@override @override
String get appSettings_languagePt => 'Português'; String get appSettings_languagePt => 'Português';
@override @override
String get appSettings_languageIt => 'Italiano'; String get appSettings_languageIt => 'Italiano';
@override @override
String get appSettings_languageZh => '中文'; String get appSettings_languageZh => '中文';
@override @override
String get appSettings_languageSv => 'Svenska'; String get appSettings_languageSv => 'Svenska';
@@ -482,10 +526,10 @@ class AppLocalizationsIt extends AppLocalizations {
String get appSettings_languageNl => 'Nederlands'; String get appSettings_languageNl => 'Nederlands';
@override @override
String get appSettings_languageSk => 'Slovenčina'; String get appSettings_languageSk => 'Slovenčina';
@override @override
String get appSettings_languageBg => 'Български'; String get appSettings_languageBg => 'Български';
@override @override
String get appSettings_languageRu => 'Russo'; String get appSettings_languageRu => 'Russo';
@@ -568,7 +612,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get appSettings_autoRouteRotationSubtitle => String get appSettings_autoRouteRotationSubtitle =>
'Alterna tra i percorsi migliori e la modalità alluvione'; 'Alterna tra i percorsi migliori e la modalità alluvione';
@override @override
String get appSettings_autoRouteRotationEnabled => String get appSettings_autoRouteRotationEnabled =>
@@ -663,7 +707,7 @@ class AppLocalizationsIt extends AppLocalizations {
String get appSettings_offlineMapCache => 'Cache Mappa Offline'; String get appSettings_offlineMapCache => 'Cache Mappa Offline';
@override @override
String get appSettings_unitsTitle => 'Unità'; String get appSettings_unitsTitle => 'Unità';
@override @override
String get appSettings_unitsMetric => 'Metrico (m/km)'; String get appSettings_unitsMetric => 'Metrico (m/km)';
@@ -782,12 +826,11 @@ class AppLocalizationsIt extends AppLocalizations {
String get contacts_groupName => 'Nome gruppo'; String get contacts_groupName => 'Nome gruppo';
@override @override
String get contacts_groupNameRequired => String get contacts_groupNameRequired => 'Il nome del gruppo è obbligatorio.';
'Il nome del gruppo è obbligatorio.';
@override @override
String contacts_groupAlreadyExists(String name) { String contacts_groupAlreadyExists(String name) {
return 'Il gruppo \"$name\" esiste già.'; return 'Il gruppo \"$name\" esiste già.';
} }
@override @override
@@ -873,7 +916,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String channels_deleteChannelConfirm(String name) { String channels_deleteChannelConfirm(String name) {
return 'Eliminare \"$name\"? Non può essere annullato.'; return 'Eliminare \"$name\"? Non può essere annullato.';
} }
@override @override
@@ -970,20 +1013,20 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get channels_joinPublicChannelDesc => String get channels_joinPublicChannelDesc =>
'Chiunque può unirsi a questo canale.'; 'Chiunque può unirsi a questo canale.';
@override @override
String get channels_joinHashtagChannel => 'Unisciti a un Canale con Hashtag'; String get channels_joinHashtagChannel => 'Unisciti a un Canale con Hashtag';
@override @override
String get channels_joinHashtagChannelDesc => String get channels_joinHashtagChannelDesc =>
'Chiunque può unirsi ai canali hashtag.'; 'Chiunque può unirsi ai canali hashtag.';
@override @override
String get channels_scanQrCode => 'Scansiona un codice QR'; String get channels_scanQrCode => 'Scansiona un codice QR';
@override @override
String get channels_scanQrCodeComingSoon => 'Arriverà presto'; String get channels_scanQrCodeComingSoon => 'Arriverà presto';
@override @override
String get channels_enterHashtag => 'Inserisci hashtag'; String get channels_enterHashtag => 'Inserisci hashtag';
@@ -1117,7 +1160,7 @@ class AppLocalizationsIt extends AppLocalizations {
String get debugLog_rawLogRx => 'Log Raw-RX'; String get debugLog_rawLogRx => 'Log Raw-RX';
@override @override
String get debugLog_noBleActivity => 'Nessuna attività BLE rilevata ancora.'; String get debugLog_noBleActivity => 'Nessuna attività BLE rilevata ancora.';
@override @override
String debugFrame_length(int count) { String debugFrame_length(int count) {
@@ -1173,20 +1216,20 @@ class AppLocalizationsIt extends AppLocalizations {
String get chat_ShowAllPaths => 'Mostra tutti i percorsi'; String get chat_ShowAllPaths => 'Mostra tutti i percorsi';
@override @override
String get chat_routingMode => 'Modalità di routing'; String get chat_routingMode => 'Modalità di routing';
@override @override
String get chat_autoUseSavedPath => 'Utilizza il percorso salvato'; String get chat_autoUseSavedPath => 'Utilizza il percorso salvato';
@override @override
String get chat_forceFloodMode => 'Modalità Inondamento Forzato'; String get chat_forceFloodMode => 'Modalità Inondamento Forzato';
@override @override
String get chat_recentAckPaths => 'Percorsi ACK Recenti (tocca per usare):'; String get chat_recentAckPaths => 'Percorsi ACK Recenti (tocca per usare):';
@override @override
String get chat_pathHistoryFull => String get chat_pathHistoryFull =>
'La cronologia del percorso è piena. Rimuovi gli elementi per aggiungere nuovi.'; 'La cronologia del percorso è piena. Rimuovi gli elementi per aggiungere nuovi.';
@override @override
String get chat_hopSingular => 'salta'; String get chat_hopSingular => 'salta';
@@ -1213,7 +1256,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get chat_noPathHistoryYet => String get chat_noPathHistoryYet =>
'Non c\'è ancora una cronologia del percorso.\nInvia un messaggio per scoprire i percorsi.'; 'Non c\'è ancora una cronologia del percorso.\nInvia un messaggio per scoprire i percorsi.';
@override @override
String get chat_pathActions => 'Azioni Percorso:'; String get chat_pathActions => 'Azioni Percorso:';
@@ -1234,7 +1277,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get chat_pathCleared => String get chat_pathCleared =>
'Percorso sgomberato. Il prossimo messaggio riidentifierà il percorso.'; 'Percorso sgomberato. Il prossimo messaggio riidentifierà il percorso.';
@override @override
String get chat_floodModeSubtitle => String get chat_floodModeSubtitle =>
@@ -1242,7 +1285,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get chat_floodModeEnabled => String get chat_floodModeEnabled =>
'Modalità alluvione abilitata. Disattivala tramite l\'icona di routing nella barra in alto.'; 'Modalità alluvione abilitata. Disattivala tramite l\'icona di routing nella barra in alto.';
@override @override
String get chat_fullPath => 'Percorso Completo'; String get chat_fullPath => 'Percorso Completo';
@@ -1417,7 +1460,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String map_publicLocationShareConfirm(String channelLabel) { String map_publicLocationShareConfirm(String channelLabel) {
return 'Stai per condividere una posizione in $channelLabel. Questo canale è pubblico e chiunque abbia la PSK può vederlo.'; return 'Stai per condividere una posizione in $channelLabel. Questo canale è pubblico e chiunque abbia la PSK può vederlo.';
} }
@override @override
@@ -1635,7 +1678,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get login_savePasswordSubtitle => String get login_savePasswordSubtitle =>
'La password verrà memorizzata in modo sicuro su questo dispositivo.'; 'La password verrà memorizzata in modo sicuro su questo dispositivo.';
@override @override
String get login_repeaterDescription => String get login_repeaterDescription =>
@@ -1649,13 +1692,13 @@ class AppLocalizationsIt extends AppLocalizations {
String get login_routing => 'Instradamento'; String get login_routing => 'Instradamento';
@override @override
String get login_routingMode => 'Modalità di routing'; String get login_routingMode => 'Modalità di routing';
@override @override
String get login_autoUseSavedPath => 'Utilizza il percorso salvato'; String get login_autoUseSavedPath => 'Utilizza il percorso salvato';
@override @override
String get login_forceFloodMode => 'Modalità Inondamento Forzato'; String get login_forceFloodMode => 'Modalità Inondamento Forzato';
@override @override
String get login_managePaths => 'Gestisci Percorsi'; String get login_managePaths => 'Gestisci Percorsi';
@@ -1675,7 +1718,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get login_failedMessage => String get login_failedMessage =>
'Accesso fallito. La password non è corretta oppure il ripetitore non è raggiungibile.'; 'Accesso fallito. La password non è corretta oppure il ripetitore non è raggiungibile.';
@override @override
String get common_reload => 'Ricaricare'; String get common_reload => 'Ricaricare';
@@ -1718,7 +1761,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get path_helperMaxHops => String get path_helperMaxHops =>
'Massimo 64 salti. Ogni prefisso è composto da 2 caratteri esadecimali (1 byte)'; 'Massimo 64 salti. Ogni prefisso è composto da 2 caratteri esadecimali (1 byte)';
@override @override
String get path_selectFromContacts => 'Seleziona da contatti:'; String get path_selectFromContacts => 'Seleziona da contatti:';
@@ -1738,7 +1781,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get path_tooLong => String get path_tooLong =>
'Il percorso è troppo lungo. Massimo 64 salti consentiti.'; 'Il percorso è troppo lungo. Massimo 64 salti consentiti.';
@override @override
String get path_setPath => 'Imposta Percorso'; String get path_setPath => 'Imposta Percorso';
@@ -1790,13 +1833,13 @@ class AppLocalizationsIt extends AppLocalizations {
String get repeater_statusTitle => 'Stato del Ripetitore'; String get repeater_statusTitle => 'Stato del Ripetitore';
@override @override
String get repeater_routingMode => 'Modalità di routing'; String get repeater_routingMode => 'Modalità di routing';
@override @override
String get repeater_autoUseSavedPath => 'Percorso salvato automatico'; String get repeater_autoUseSavedPath => 'Percorso salvato automatico';
@override @override
String get repeater_forceFloodMode => 'Modalità Inondamento Forzato'; String get repeater_forceFloodMode => 'Modalità Inondamento Forzato';
@override @override
String get repeater_pathManagement => 'Gestione dei percorsi'; String get repeater_pathManagement => 'Gestione dei percorsi';
@@ -1822,7 +1865,7 @@ class AppLocalizationsIt extends AppLocalizations {
String get repeater_clockAtLogin => 'Orologio (all\'accesso)'; String get repeater_clockAtLogin => 'Orologio (all\'accesso)';
@override @override
String get repeater_uptime => 'Disponibilità'; String get repeater_uptime => 'Disponibilità';
@override @override
String get repeater_queueLength => 'Lunghezza della coda'; String get repeater_queueLength => 'Lunghezza della coda';
@@ -1974,7 +2017,7 @@ class AppLocalizationsIt extends AppLocalizations {
'Consenti l\'accesso ospite in sola lettura'; 'Consenti l\'accesso ospite in sola lettura';
@override @override
String get repeater_privacyMode => 'Modalità Privacy'; String get repeater_privacyMode => 'Modalità Privacy';
@override @override
String get repeater_privacyModeSubtitle => String get repeater_privacyModeSubtitle =>
@@ -1984,7 +2027,7 @@ class AppLocalizationsIt extends AppLocalizations {
String get repeater_advertisementSettings => 'Impostazioni Annuncio'; String get repeater_advertisementSettings => 'Impostazioni Annuncio';
@override @override
String get repeater_localAdvertInterval => 'Intervallo Pubblicità Locale'; String get repeater_localAdvertInterval => 'Intervallo Pubblicità Locale';
@override @override
String repeater_localAdvertIntervalMinutes(int minutes) { String repeater_localAdvertIntervalMinutes(int minutes) {
@@ -1993,7 +2036,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_floodAdvertInterval => String get repeater_floodAdvertInterval =>
'Intervallo Pubblicità Inondazione'; 'Intervallo Pubblicità Inondazione';
@override @override
String repeater_floodAdvertIntervalHours(int hours) { String repeater_floodAdvertIntervalHours(int hours) {
@@ -2019,7 +2062,7 @@ class AppLocalizationsIt extends AppLocalizations {
'Sei sicuro di voler riavviare questo ripetitore?'; 'Sei sicuro di voler riavviare questo ripetitore?';
@override @override
String get repeater_regenerateIdentityKey => 'Rigenera Chiave Identità'; String get repeater_regenerateIdentityKey => 'Rigenera Chiave Identità';
@override @override
String get repeater_regenerateIdentityKeySubtitle => String get repeater_regenerateIdentityKeySubtitle =>
@@ -2027,7 +2070,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_regenerateIdentityKeyConfirm => String get repeater_regenerateIdentityKeyConfirm =>
'Questo genererà una nuova identità per il ripetitore. Procedere?'; 'Questo genererà una nuova identità per il ripetitore. Procedere?';
@override @override
String get repeater_eraseFileSystem => 'Elimina File System'; String get repeater_eraseFileSystem => 'Elimina File System';
@@ -2038,11 +2081,11 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_eraseFileSystemConfirm => String get repeater_eraseFileSystemConfirm =>
'ATTENZIONE: Ciò cancellerà tutti i dati sul ripetitore. Non può essere annullato!'; 'ATTENZIONE: Ciò cancellerà tutti i dati sul ripetitore. Non può essere annullato!';
@override @override
String get repeater_eraseSerialOnly => String get repeater_eraseSerialOnly =>
'Elimina è disponibile solo tramite console seriale.'; 'Elimina è disponibile solo tramite console seriale.';
@override @override
String repeater_commandSent(String command) { String repeater_commandSent(String command) {
@@ -2086,7 +2129,7 @@ class AppLocalizationsIt extends AppLocalizations {
String get repeater_refreshGuestAccess => 'Aggiorna Accesso Ospite'; String get repeater_refreshGuestAccess => 'Aggiorna Accesso Ospite';
@override @override
String get repeater_refreshPrivacyMode => 'Aggiorna Modalità Privacy'; String get repeater_refreshPrivacyMode => 'Aggiorna Modalità Privacy';
@override @override
String get repeater_refreshAdvertisementSettings => String get repeater_refreshAdvertisementSettings =>
@@ -2167,7 +2210,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_cliHelpReboot => String get repeater_cliHelpReboot =>
'Riavvia il dispositivo. (nota, potresti ottenere \'Timeout\' che è normale)'; 'Riavvia il dispositivo. (nota, potresti ottenere \'Timeout\' che è normale)';
@override @override
String get repeater_cliHelpClock => String get repeater_cliHelpClock =>
@@ -2199,7 +2242,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_cliHelpSetAllowReadOnly => String get repeater_cliHelpSetAllowReadOnly =>
'(Server della stanza) Se \'on\', allora l\'accesso con una password vuota sarà consentito, ma non sarà possibile pubblicare nella stanza. (solo lettura).'; '(Server della stanza) Se \'on\', allora l\'accesso con una password vuota sarà consentito, ma non sarà possibile pubblicare nella stanza. (solo lettura).';
@override @override
String get repeater_cliHelpSetFloodMax => String get repeater_cliHelpSetFloodMax =>
@@ -2207,7 +2250,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_cliHelpSetIntThresh => String get repeater_cliHelpSetIntThresh =>
'Imposta il Limite di Interferenza (in dB). Il valore predefinito è 14. Imposta su 0 per disabilitare il rilevamento delle interferenze del canale.'; 'Imposta il Limite di Interferenza (in dB). Il valore predefinito è 14. Imposta su 0 per disabilitare il rilevamento delle interferenze del canale.';
@override @override
String get repeater_cliHelpSetAgcResetInterval => String get repeater_cliHelpSetAgcResetInterval =>
@@ -2219,7 +2262,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_cliHelpSetAdvertInterval => String get repeater_cliHelpSetAdvertInterval =>
'Imposta l\'intervallo del timer in minuti per inviare un pacchetto di pubblicità locale (senza salto). Imposta su 0 per disabilitare.'; 'Imposta l\'intervallo del timer in minuti per inviare un pacchetto di pubblicità locale (senza salto). Imposta su 0 per disabilitare.';
@override @override
String get repeater_cliHelpSetFloodAdvertInterval => String get repeater_cliHelpSetFloodAdvertInterval =>
@@ -2250,11 +2293,11 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_cliHelpSetTxDelay => String get repeater_cliHelpSetTxDelay =>
'Imposta un fattore moltiplicato con il tempo di mantenimento per un pacchetto di modalità allagamento e con un sistema di slot casuale, per ritardarne la trasmissione (per diminuire la probabilità di collisioni).'; 'Imposta un fattore moltiplicato con il tempo di mantenimento per un pacchetto di modalità allagamento e con un sistema di slot casuale, per ritardarne la trasmissione (per diminuire la probabilità di collisioni).';
@override @override
String get repeater_cliHelpSetDirectTxDelay => String get repeater_cliHelpSetDirectTxDelay =>
'Uguale a txdelay, ma per applicare un ritardo casuale alla inoltrata di pacchetti in modalità diretta.'; 'Uguale a txdelay, ma per applicare un ritardo casuale alla inoltrata di pacchetti in modalità diretta.';
@override @override
String get repeater_cliHelpSetBridgeEnabled => 'Abilita/Disabilita ponte.'; String get repeater_cliHelpSetBridgeEnabled => 'Abilita/Disabilita ponte.';
@@ -2265,11 +2308,11 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_cliHelpSetBridgeSource => String get repeater_cliHelpSetBridgeSource =>
'Scegliere se il ponte dovrà ritrasmettere i pacchetti ricevuti o i pacchetti trasmessi.'; 'Scegliere se il ponte dovrà ritrasmettere i pacchetti ricevuti o i pacchetti trasmessi.';
@override @override
String get repeater_cliHelpSetBridgeBaud => String get repeater_cliHelpSetBridgeBaud =>
'Imposta la velocità di trasmissione per i ponti rs232.'; 'Imposta la velocità di trasmissione per i ponti rs232.';
@override @override
String get repeater_cliHelpSetBridgeSecret => String get repeater_cliHelpSetBridgeSecret =>
@@ -2285,7 +2328,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_cliHelpSetPerm => String get repeater_cliHelpSetPerm =>
'Modifica l\'ACL. Rimuove l\'entrata corrispondente (per prefisso di pubkey) se \"permissions\" è zero. Aggiunge una nuova entrata se il pubkey-hex ha lunghezza completa e non è attualmente nell\'ACL. Aggiorna l\'entrata per corrispondenza del prefisso di pubkey. I bit di permesso variano per ogni ruolo di firmware, ma i primi 2 bit sono: 0 (Guest), 1 (solo lettura), 2 (lettura/scrittura), 3 (Admin)'; 'Modifica l\'ACL. Rimuove l\'entrata corrispondente (per prefisso di pubkey) se \"permissions\" è zero. Aggiunge una nuova entrata se il pubkey-hex ha lunghezza completa e non è attualmente nell\'ACL. Aggiorna l\'entrata per corrispondenza del prefisso di pubkey. I bit di permesso variano per ogni ruolo di firmware, ma i primi 2 bit sono: 0 (Guest), 1 (solo lettura), 2 (lettura/scrittura), 3 (Admin)';
@override @override
String get repeater_cliHelpGetBridgeType => String get repeater_cliHelpGetBridgeType =>
@@ -2305,7 +2348,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_cliHelpNeighbors => String get repeater_cliHelpNeighbors =>
'Mostra un elenco di altri nodi repeater ricevuti tramite annunci zero-hop. Ogni riga è id-prefisso-esadecimale:timestamp:snr-volte-4'; 'Mostra un elenco di altri nodi repeater ricevuti tramite annunci zero-hop. Ogni riga è id-prefisso-esadecimale:timestamp:snr-volte-4';
@override @override
String get repeater_cliHelpNeighborRemove => String get repeater_cliHelpNeighborRemove =>
@@ -2317,7 +2360,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_cliHelpRegionLoad => String get repeater_cliHelpRegionLoad =>
'NOTA: questo è un\'invocazione multi-comando speciale. Ogni comando successivo è un nome di regione (indentato con spazi per indicare la gerarchia parentale, con almeno uno spazio). Terminata inviando una riga vuota/comando.'; 'NOTA: questo è un\'invocazione multi-comando speciale. Ogni comando successivo è un nome di regione (indentato con spazi per indicare la gerarchia parentale, con almeno uno spazio). Terminata inviando una riga vuota/comando.';
@override @override
String get repeater_cliHelpRegionGet => String get repeater_cliHelpRegionGet =>
@@ -2337,7 +2380,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_cliHelpRegionDenyf => String get repeater_cliHelpRegionDenyf =>
'Rimuove il permesso \'F\'lood per la regione specificata. (NOTA: a questo stadio non è consigliato utilizzarlo sullo scope globale/legacy!!).'; 'Rimuove il permesso \'F\'lood per la regione specificata. (NOTA: a questo stadio non è consigliato utilizzarlo sullo scope globale/legacy!!).';
@override @override
String get repeater_cliHelpRegionHome => String get repeater_cliHelpRegionHome =>
@@ -2352,7 +2395,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_cliHelpGps => String get repeater_cliHelpGps =>
'Mostra lo stato del GPS. Quando il GPS è spento, risponde solo \"spento\", se è acceso risponde con \"acceso\", \"stato\", \"fix\" e numero di satelliti.'; 'Mostra lo stato del GPS. Quando il GPS è spento, risponde solo \"spento\", se è acceso risponde con \"acceso\", \"stato\", \"fix\" e numero di satelliti.';
@override @override
String get repeater_cliHelpGpsOnOff => String get repeater_cliHelpGpsOnOff =>
@@ -2409,7 +2452,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get repeater_gpsNote => String get repeater_gpsNote =>
'è stata introdotta una funzione gps per gestire le tematiche relative alla posizione.'; 'è stata introdotta una funzione gps per gestire le tematiche relative alla posizione.';
@override @override
String get telemetry_receivedData => 'Dati Telemetria Ricevuti'; String get telemetry_receivedData => 'Dati Telemetria Ricevuti';
@@ -2462,7 +2505,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String telemetry_temperatureValue(String celsius, String fahrenheit) { String telemetry_temperatureValue(String celsius, String fahrenheit) {
return '$celsius°C / $fahrenheit°F'; return '$celsius°C / $fahrenheit°F';
} }
@override @override
@@ -2530,7 +2573,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String channelPath_observedPathTitle(int index, String hops) { String channelPath_observedPathTitle(int index, String hops) {
return 'Percorso osservato $index • $hops'; return 'Percorso osservato $index $hops';
} }
@override @override
@@ -2585,7 +2628,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String channelPath_selectedPathLabel(String label, String prefixes) { String channelPath_selectedPathLabel(String label, String prefixes) {
return '$label • $prefixes'; return '$label $prefixes';
} }
@override @override
@@ -2596,14 +2639,14 @@ class AppLocalizationsIt extends AppLocalizations {
String get channelPath_unknownRepeater => 'Ripetitore sconosciuto'; String get channelPath_unknownRepeater => 'Ripetitore sconosciuto';
@override @override
String get community_title => 'Comunità'; String get community_title => 'Comunità';
@override @override
String get community_create => 'Crea Comunità'; String get community_create => 'Crea Comunità';
@override @override
String get community_createDesc => String get community_createDesc =>
'Crea una nuova comunità e condividila tramite codice QR.'; 'Crea una nuova comunità e condividila tramite codice QR.';
@override @override
String get community_join => 'Unisciti'; String get community_join => 'Unisciti';
@@ -2621,35 +2664,35 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get community_scanInstructions => String get community_scanInstructions =>
'Punta la fotocamera su un codice QR della comunità'; 'Punta la fotocamera su un codice QR della comunità';
@override @override
String get community_showQr => 'Mostra il codice QR'; String get community_showQr => 'Mostra il codice QR';
@override @override
String get community_publicChannel => 'Comunità Pubblica'; String get community_publicChannel => 'Comunità Pubblica';
@override @override
String get community_hashtagChannel => 'Hashtag della Comunità'; String get community_hashtagChannel => 'Hashtag della Comunità';
@override @override
String get community_name => 'Nome della Comunità'; String get community_name => 'Nome della Comunità';
@override @override
String get community_enterName => 'Inserisci il nome della comunità'; String get community_enterName => 'Inserisci il nome della comunità';
@override @override
String community_created(String name) { String community_created(String name) {
return 'Comunità \"$name\" creata'; return 'Comunità \"$name\" creata';
} }
@override @override
String community_joined(String name) { String community_joined(String name) {
return 'Unito alla comunità \"$name\"'; return 'Unito alla comunità \"$name\"';
} }
@override @override
String get community_qrTitle => 'Condividi Comunità'; String get community_qrTitle => 'Condividi Comunità';
@override @override
String community_qrInstructions(String name) { String community_qrInstructions(String name) {
@@ -2664,16 +2707,16 @@ class AppLocalizationsIt extends AppLocalizations {
String get community_invalidQrCode => 'Codice QR della community non valido'; String get community_invalidQrCode => 'Codice QR della community non valido';
@override @override
String get community_alreadyMember => 'Già membro'; String get community_alreadyMember => 'Già membro';
@override @override
String community_alreadyMemberMessage(String name) { String community_alreadyMemberMessage(String name) {
return 'Sei già un membro di \"$name\".'; return 'Sei già un membro di \"$name\".';
} }
@override @override
String get community_addPublicChannel => String get community_addPublicChannel =>
'Aggiungi Canale Pubblico della Comunità'; 'Aggiungi Canale Pubblico della Comunità';
@override @override
String get community_addPublicChannelHint => String get community_addPublicChannelHint =>
@@ -2687,10 +2730,10 @@ class AppLocalizationsIt extends AppLocalizations {
'Scansiona un codice QR o crea una community per iniziare.'; 'Scansiona un codice QR o crea una community per iniziare.';
@override @override
String get community_manageCommunities => 'Gestisci Comunità'; String get community_manageCommunities => 'Gestisci Comunità';
@override @override
String get community_delete => 'Lascia la Comunità'; String get community_delete => 'Lascia la Comunità';
@override @override
String community_deleteConfirm(String name) { String community_deleteConfirm(String name) {
@@ -2699,12 +2742,12 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String community_deleteChannelsWarning(int count) { String community_deleteChannelsWarning(int count) {
return 'Questo eliminerà anche $count canale/i e i loro messaggi.'; return 'Questo eliminerà anche $count canale/i e i loro messaggi.';
} }
@override @override
String community_deleted(String name) { String community_deleted(String name) {
return 'Hai lasciato la comunità \"$name\"'; return 'Hai lasciato la comunità \"$name\"';
} }
@override @override
@@ -2744,21 +2787,21 @@ class AppLocalizationsIt extends AppLocalizations {
'Aggiungi un canale con hashtag per questa community'; 'Aggiungi un canale con hashtag per questa community';
@override @override
String get community_selectCommunity => 'Seleziona Comunità'; String get community_selectCommunity => 'Seleziona Comunità';
@override @override
String get community_regularHashtag => 'Hashtag regolare'; String get community_regularHashtag => 'Hashtag regolare';
@override @override
String get community_regularHashtagDesc => String get community_regularHashtagDesc =>
'Hashtag pubblico (chiunque può unirsi)'; 'Hashtag pubblico (chiunque può unirsi)';
@override @override
String get community_communityHashtag => 'Hashtag della Comunità'; String get community_communityHashtag => 'Hashtag della Comunità';
@override @override
String get community_communityHashtagDesc => String get community_communityHashtagDesc =>
'Visibile solo ai membri della comunità'; 'Visibile solo ai membri della comunità';
@override @override
String community_forCommunity(String name) { String community_forCommunity(String name) {
@@ -2825,7 +2868,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get pathTrace_someHopsNoLocation => String get pathTrace_someHopsNoLocation =>
'Uno o più dei luppoli mancano di una posizione!'; 'Uno o più dei luppoli mancano di una posizione!';
@override @override
String get pathTrace_clearTooltip => 'Pulisci percorso'; String get pathTrace_clearTooltip => 'Pulisci percorso';
@@ -2847,7 +2890,7 @@ class AppLocalizationsIt extends AppLocalizations {
'Eseguire LOS per visualizzare il profilo altimetrico'; 'Eseguire LOS per visualizzare il profilo altimetrico';
@override @override
String get losMenuTitle => 'Menù LOS'; String get losMenuTitle => 'Menù LOS';
@override @override
String get losMenuSubtitle => String get losMenuSubtitle =>
@@ -2919,7 +2962,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get losErrorElevationUnavailable => String get losErrorElevationUnavailable =>
'Dati di elevazione non disponibili per uno o più campioni.'; 'Dati di elevazione non disponibili per uno o più campioni.';
@override @override
String get losErrorInvalidInput => String get losErrorInvalidInput =>
@@ -2957,7 +3000,7 @@ class AppLocalizationsIt extends AppLocalizations {
String get losFrequencyInfoTooltip => 'Visualizza i dettagli del calcolo'; String get losFrequencyInfoTooltip => 'Visualizza i dettagli del calcolo';
@override @override
String get losFrequencyDialogTitle => 'Calcolo dell’orizzonte radio'; String get losFrequencyDialogTitle => 'Calcolo dellorizzonte radio';
@override @override
String losFrequencyDialogDescription( String losFrequencyDialogDescription(
@@ -2997,13 +3040,13 @@ class AppLocalizationsIt extends AppLocalizations {
} }
@override @override
String get contacts_clipboardEmpty => 'La clipboard è vuota.'; String get contacts_clipboardEmpty => 'La clipboard è vuota.';
@override @override
String get contacts_invalidAdvertFormat => 'Dati di contatto non validi'; String get contacts_invalidAdvertFormat => 'Dati di contatto non validi';
@override @override
String get contacts_contactImported => 'Il contatto è stato importato.'; String get contacts_contactImported => 'Il contatto è stato importato.';
@override @override
String get contacts_contactImportFailed => String get contacts_contactImportFailed =>
@@ -3045,7 +3088,7 @@ class AppLocalizationsIt extends AppLocalizations {
'Copia dell\'annuncio nella Clipboard non riuscita.'; 'Copia dell\'annuncio nella Clipboard non riuscita.';
@override @override
String get notification_activityTitle => 'Attività MeshCore'; String get notification_activityTitle => 'Attività MeshCore';
@override @override
String notification_messagesCount(int count) { String notification_messagesCount(int count) {
@@ -3123,7 +3166,7 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get settings_gpxExportError => String get settings_gpxExportError =>
'Si è verificato un errore durante l\'esportazione.'; 'Si è verificato un errore durante l\'esportazione.';
@override @override
String get settings_gpxExportRepeatersRoom => String get settings_gpxExportRepeatersRoom =>
+76 -35
View File
@@ -69,7 +69,7 @@ class AppLocalizationsNl extends AppLocalizations {
String get common_share => 'Delen'; String get common_share => 'Delen';
@override @override
String get common_copy => 'Kopiëren'; String get common_copy => 'Kopiëren';
@override @override
String get common_retry => 'Nogmaals proberen'; String get common_retry => 'Nogmaals proberen';
@@ -93,7 +93,7 @@ class AppLocalizationsNl extends AppLocalizations {
String get common_loading => 'Laden...'; String get common_loading => 'Laden...';
@override @override
String get common_notAvailable => '—'; String get common_notAvailable => '';
@override @override
String common_voltageValue(String volts) { String common_voltageValue(String volts) {
@@ -119,7 +119,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String get usbScreenSubtitle => String get usbScreenSubtitle =>
'Kies een gedetecteerd seriële apparaat en verbind deze direct met uw MeshCore-node.'; 'Kies een gedetecteerd seriële apparaat en verbind deze direct met uw MeshCore-node.';
@override @override
String get usbScreenStatus => 'Selecteer een USB-apparaat'; String get usbScreenStatus => 'Selecteer een USB-apparaat';
@@ -132,6 +132,48 @@ class AppLocalizationsNl extends AppLocalizations {
String get usbScreenEmptyState => String get usbScreenEmptyState =>
'Geen USB-apparaten gevonden. Sluit er een aan en herlaad.'; 'Geen USB-apparaten gevonden. Sluit er een aan en herlaad.';
@override
String get usbErrorPermissionDenied => 'Toegang via USB is geweigerd.';
@override
String get usbErrorDeviceMissing =>
'Het geselecteerde USB-apparaat is niet meer beschikbaar.';
@override
String get usbErrorInvalidPort => 'Selecteer een geldig USB-apparaat.';
@override
String get usbErrorBusy =>
'Een andere verzoek om een USB-verbinding is al in behandeling.';
@override
String get usbErrorNotConnected => 'Er is geen USB-apparaat aangesloten.';
@override
String get usbErrorOpenFailed =>
'Kon het geselecteerde USB-apparaat niet openen.';
@override
String get usbErrorConnectFailed =>
'Kon niet verbinding maken met het geselecteerde USB-apparaat.';
@override
String get usbErrorUnsupported =>
'USB-serieel is niet ondersteund op deze platform.';
@override
String get usbErrorAlreadyActive => 'Een USB-verbinding is al actief.';
@override
String get usbErrorNoDeviceSelected => 'Geen USB-apparaat is geselecteerd.';
@override
String get usbErrorPortClosed => 'De USB-verbinding is niet actief.';
@override
String get usbErrorConnectTimedOut =>
'Wachtperiode is verlopen, er is geen reactie ontvangen van het apparaat.';
@override @override
String get scanner_scanning => 'Scannen naar apparaten...'; String get scanner_scanning => 'Scannen naar apparaten...';
@@ -231,7 +273,7 @@ class AppLocalizationsNl extends AppLocalizations {
String get settings_location => 'Locatie'; String get settings_location => 'Locatie';
@override @override
String get settings_locationSubtitle => 'GPS coördinaten'; String get settings_locationSubtitle => 'GPS coördinaten';
@override @override
String get settings_locationUpdated => 'Locatie bijgewerkt'; String get settings_locationUpdated => 'Locatie bijgewerkt';
@@ -450,10 +492,10 @@ class AppLocalizationsNl extends AppLocalizations {
String get appSettings_languageEn => 'English'; String get appSettings_languageEn => 'English';
@override @override
String get appSettings_languageFr => 'Français'; String get appSettings_languageFr => 'Français';
@override @override
String get appSettings_languageEs => 'Español'; String get appSettings_languageEs => 'Español';
@override @override
String get appSettings_languageDe => 'Deutsch'; String get appSettings_languageDe => 'Deutsch';
@@ -462,16 +504,16 @@ class AppLocalizationsNl extends AppLocalizations {
String get appSettings_languagePl => 'Polski'; String get appSettings_languagePl => 'Polski';
@override @override
String get appSettings_languageSl => 'Slovenščina'; String get appSettings_languageSl => 'Slovenščina';
@override @override
String get appSettings_languagePt => 'Português'; String get appSettings_languagePt => 'Português';
@override @override
String get appSettings_languageIt => 'Italiano'; String get appSettings_languageIt => 'Italiano';
@override @override
String get appSettings_languageZh => '中文'; String get appSettings_languageZh => '中文';
@override @override
String get appSettings_languageSv => 'Svenska'; String get appSettings_languageSv => 'Svenska';
@@ -480,16 +522,16 @@ class AppLocalizationsNl extends AppLocalizations {
String get appSettings_languageNl => 'Nederlands'; String get appSettings_languageNl => 'Nederlands';
@override @override
String get appSettings_languageSk => 'Slovenčina'; String get appSettings_languageSk => 'Slovenčina';
@override @override
String get appSettings_languageBg => 'Български'; String get appSettings_languageBg => 'Български';
@override @override
String get appSettings_languageRu => 'Russisch'; String get appSettings_languageRu => 'Russisch';
@override @override
String get appSettings_languageUk => 'Oekraïens'; String get appSettings_languageUk => 'Oekraïens';
@override @override
String get appSettings_enableMessageTracing => 'Berichttracking inschakelen'; String get appSettings_enableMessageTracing => 'Berichttracking inschakelen';
@@ -847,7 +889,7 @@ class AppLocalizationsNl extends AppLocalizations {
String get channels_public => 'Openbaar'; String get channels_public => 'Openbaar';
@override @override
String get channels_private => 'Privé'; String get channels_private => 'Privé';
@override @override
String get channels_publicChannel => 'Open kanaal'; String get channels_publicChannel => 'Open kanaal';
@@ -947,14 +989,14 @@ class AppLocalizationsNl extends AppLocalizations {
String get channels_sortUnread => 'Ongelezen'; String get channels_sortUnread => 'Ongelezen';
@override @override
String get channels_createPrivateChannel => 'Maak een Privé Kanaal'; String get channels_createPrivateChannel => 'Maak een Privé Kanaal';
@override @override
String get channels_createPrivateChannelDesc => String get channels_createPrivateChannelDesc =>
'Beveiligd met een geheime sleutel.'; 'Beveiligd met een geheime sleutel.';
@override @override
String get channels_joinPrivateChannel => 'Sluit een Privé Kanaal aan'; String get channels_joinPrivateChannel => 'Sluit een Privé Kanaal aan';
@override @override
String get channels_joinPrivateChannelDesc => String get channels_joinPrivateChannelDesc =>
@@ -1336,7 +1378,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String get map_nodesNeedGps => String get map_nodesNeedGps =>
'Nodes moeten hun GPS-coördinaten delen\nom op de kaart te verschijnen'; 'Nodes moeten hun GPS-coördinaten delen\nom op de kaart te verschijnen';
@override @override
String map_nodesCount(int count) { String map_nodesCount(int count) {
@@ -1364,7 +1406,7 @@ class AppLocalizationsNl extends AppLocalizations {
String get map_pinDm => 'Verzenden als bericht (DM)'; String get map_pinDm => 'Verzenden als bericht (DM)';
@override @override
String get map_pinPrivate => 'Beveiligd (Privé)'; String get map_pinPrivate => 'Beveiligd (Privé)';
@override @override
String get map_pinPublic => 'Openbaar spikken'; String get map_pinPublic => 'Openbaar spikken';
@@ -2031,7 +2073,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String get repeater_eraseSerialOnly => String get repeater_eraseSerialOnly =>
'Verwijderen is alleen beschikbaar via de seriële console.'; 'Verwijderen is alleen beschikbaar via de seriële console.';
@override @override
String repeater_commandSent(String command) { String repeater_commandSent(String command) {
@@ -2259,7 +2301,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String get repeater_cliHelpSetBridgeBaud => String get repeater_cliHelpSetBridgeBaud =>
'Stel de seriële link baudrate in voor rs232 bruggen.'; 'Stel de seriële link baudrate in voor rs232 bruggen.';
@override @override
String get repeater_cliHelpSetBridgeSecret => String get repeater_cliHelpSetBridgeSecret =>
@@ -2275,7 +2317,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String get repeater_cliHelpSetPerm => String get repeater_cliHelpSetPerm =>
'Wijzigt de ACL. Verwijder de overeenkomstige entry (door pubkey prefix) als \"permissions\" 0 is. Voeg een nieuwe entry toe als pubkey-hex volledig is en niet momenteel in de ACL staat. Update de entry door matching pubkey prefix. Toestemming bits variëren per firmware rol, maar de onderste 2 bits zijn: 0 (Gast), 1 (Alleen lezen), 2 (Lezen/schrijven), 3 (Admin)'; 'Wijzigt de ACL. Verwijder de overeenkomstige entry (door pubkey prefix) als \"permissions\" 0 is. Voeg een nieuwe entry toe als pubkey-hex volledig is en niet momenteel in de ACL staat. Update de entry door matching pubkey prefix. Toestemming bits variëren per firmware rol, maar de onderste 2 bits zijn: 0 (Gast), 1 (Alleen lezen), 2 (Lezen/schrijven), 3 (Admin)';
@override @override
String get repeater_cliHelpGetBridgeType => String get repeater_cliHelpGetBridgeType =>
@@ -2307,7 +2349,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String get repeater_cliHelpRegionLoad => String get repeater_cliHelpRegionLoad =>
'LET OP: dit is een speciale multi-command aanroep. Elke volgende opdracht is een regiortaak (uitgelijnd met spaties om de ouderhiërarchie aan te duiden, met minimaal één spatie). Beëindigd door een lege regel/opdracht te sturen.'; 'LET OP: dit is een speciale multi-command aanroep. Elke volgende opdracht is een regiortaak (uitgelijnd met spaties om de ouderhiërarchie aan te duiden, met minimaal één spatie). Beëindigd door een lege regel/opdracht te sturen.';
@override @override
String get repeater_cliHelpRegionGet => String get repeater_cliHelpRegionGet =>
@@ -2352,7 +2394,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String get repeater_cliHelpGpsSetLoc => String get repeater_cliHelpGpsSetLoc =>
'Stel de positie van de node vast als GPS-coördinaten en sla de voorkeuren op.'; 'Stel de positie van de node vast als GPS-coördinaten en sla de voorkeuren op.';
@override @override
String get repeater_cliHelpGpsAdvert => String get repeater_cliHelpGpsAdvert =>
@@ -2390,14 +2432,14 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String get repeater_regionNote => String get repeater_regionNote =>
'Regio-commando\'s zijn geïntroduceerd om regio-definities en permissies te beheren.'; 'Regio-commando\'s zijn geïntroduceerd om regio-definities en permissies te beheren.';
@override @override
String get repeater_gpsManagement => 'Beheer GPS'; String get repeater_gpsManagement => 'Beheer GPS';
@override @override
String get repeater_gpsNote => String get repeater_gpsNote =>
'De GPS-commando is geïntroduceerd om locatiegerelateerde onderwerpen te beheren.'; 'De GPS-commando is geïntroduceerd om locatiegerelateerde onderwerpen te beheren.';
@override @override
String get telemetry_receivedData => 'Ontvangen Telemetriedata'; String get telemetry_receivedData => 'Ontvangen Telemetriedata';
@@ -2450,7 +2492,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String telemetry_temperatureValue(String celsius, String fahrenheit) { String telemetry_temperatureValue(String celsius, String fahrenheit) {
return '$celsius°C / $fahrenheit°F'; return '$celsius°C / $fahrenheit°F';
} }
@override @override
@@ -2519,7 +2561,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String channelPath_observedPathTitle(int index, String hops) { String channelPath_observedPathTitle(int index, String hops) {
return 'Waargenomen pad $index • $hops'; return 'Waargenomen pad $index $hops';
} }
@override @override
@@ -2574,7 +2616,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String channelPath_selectedPathLabel(String label, String prefixes) { String channelPath_selectedPathLabel(String label, String prefixes) {
return '$label • $prefixes'; return '$label $prefixes';
} }
@override @override
@@ -2991,11 +3033,11 @@ class AppLocalizationsNl extends AppLocalizations {
String get contacts_invalidAdvertFormat => 'Ongeldige contactgegevens'; String get contacts_invalidAdvertFormat => 'Ongeldige contactgegevens';
@override @override
String get contacts_contactImported => 'Contact is geïmporteerd.'; String get contacts_contactImported => 'Contact is geïmporteerd.';
@override @override
String get contacts_contactImportFailed => String get contacts_contactImportFailed =>
'Contact kon niet geïmporteerd worden.'; 'Contact kon niet geïmporteerd worden.';
@override @override
String get contacts_zeroHopAdvert => 'Zero Hop Reclame'; String get contacts_zeroHopAdvert => 'Zero Hop Reclame';
@@ -3004,14 +3046,14 @@ class AppLocalizationsNl extends AppLocalizations {
String get contacts_floodAdvert => 'Overstromingsadvertentie'; String get contacts_floodAdvert => 'Overstromingsadvertentie';
@override @override
String get contacts_copyAdvertToClipboard => 'Advert naar klembord kopiëren'; String get contacts_copyAdvertToClipboard => 'Advert naar klembord kopiëren';
@override @override
String get contacts_addContactFromClipboard => String get contacts_addContactFromClipboard =>
'Contact uit klembord toevoegen'; 'Contact uit klembord toevoegen';
@override @override
String get contacts_ShareContact => 'Kontakt naar Klembord kopiëren'; String get contacts_ShareContact => 'Kontakt naar Klembord kopiëren';
@override @override
String get contacts_ShareContactZeroHop => 'Contact delen via advertentie'; String get contacts_ShareContactZeroHop => 'Contact delen via advertentie';
@@ -3030,7 +3072,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String get contacts_contactAdvertCopyFailed => String get contacts_contactAdvertCopyFailed =>
'Kopiëren van advertentie naar Clipboard is mislukt.'; 'Kopiëren van advertentie naar Clipboard is mislukt.';
@override @override
String get notification_activityTitle => 'MeshCore Activiteit'; String get notification_activityTitle => 'MeshCore Activiteit';
@@ -3099,8 +3141,7 @@ class AppLocalizationsNl extends AppLocalizations {
'Exporteert alle contacten met een locatie naar een GPX-bestand.'; 'Exporteert alle contacten met een locatie naar een GPX-bestand.';
@override @override
String get settings_gpxExportSuccess => String get settings_gpxExportSuccess => 'Succesvol GPX-bestand geëxporteerd.';
'Succesvol GPX-bestand geëxporteerd.';
@override @override
String get settings_gpxExportNoContacts => 'Geen contacten om te exporteren.'; String get settings_gpxExportNoContacts => 'Geen contacten om te exporteren.';
@@ -3124,7 +3165,7 @@ class AppLocalizationsNl extends AppLocalizations {
@override @override
String get settings_gpxExportShareText => String get settings_gpxExportShareText =>
'Kaartgegevens geëxporteerd uit meshcore-open'; 'Kaartgegevens geëxporteerd uit meshcore-open';
@override @override
String get settings_gpxExportShareSubject => String get settings_gpxExportShareSubject =>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+51 -39
View File
@@ -1,4 +1,4 @@
{ {
"channels_channelDeleteFailed": "Kan kanaal {name} niet verwijderen", "channels_channelDeleteFailed": "Kan kanaal {name} niet verwijderen",
"@channels_channelDeleteFailed": { "@channels_channelDeleteFailed": {
"placeholders": { "placeholders": {
@@ -27,7 +27,7 @@
"common_create": "Maak", "common_create": "Maak",
"common_continue": "Doorgaan", "common_continue": "Doorgaan",
"common_share": "Delen", "common_share": "Delen",
"common_copy": "Kopiëren", "common_copy": "Kopiëren",
"common_retry": "Nogmaals proberen", "common_retry": "Nogmaals proberen",
"common_hide": "Verbergen", "common_hide": "Verbergen",
"common_remove": "Verwijderen", "common_remove": "Verwijderen",
@@ -35,7 +35,7 @@
"common_disable": "Uitschakelen", "common_disable": "Uitschakelen",
"common_reboot": "Herstarten", "common_reboot": "Herstarten",
"common_loading": "Laden...", "common_loading": "Laden...",
"common_notAvailable": "—", "common_notAvailable": "",
"common_voltageValue": "{volts} V", "common_voltageValue": "{volts} V",
"@common_voltageValue": { "@common_voltageValue": {
"placeholders": { "placeholders": {
@@ -92,7 +92,7 @@
"settings_radioSettingsSubtitle": "Frequentie, vermogen, spredfactor", "settings_radioSettingsSubtitle": "Frequentie, vermogen, spredfactor",
"settings_radioSettingsUpdated": "Radio instellingen bijgewerkt", "settings_radioSettingsUpdated": "Radio instellingen bijgewerkt",
"settings_location": "Locatie", "settings_location": "Locatie",
"settings_locationSubtitle": "GPS coördinaten", "settings_locationSubtitle": "GPS coördinaten",
"settings_locationUpdated": "Locatie bijgewerkt", "settings_locationUpdated": "Locatie bijgewerkt",
"settings_locationBothRequired": "Voer zowel breedte- als lengtegraad in.", "settings_locationBothRequired": "Voer zowel breedte- als lengtegraad in.",
"settings_locationInvalid": "Ongeldige breedtegraad of lengtegraad.", "settings_locationInvalid": "Ongeldige breedtegraad of lengtegraad.",
@@ -165,18 +165,18 @@
"appSettings_language": "Taal", "appSettings_language": "Taal",
"appSettings_languageSystem": "Standaardinstelling", "appSettings_languageSystem": "Standaardinstelling",
"appSettings_languageEn": "English", "appSettings_languageEn": "English",
"appSettings_languageFr": "Français", "appSettings_languageFr": "Français",
"appSettings_languageEs": "Español", "appSettings_languageEs": "Español",
"appSettings_languageDe": "Deutsch", "appSettings_languageDe": "Deutsch",
"appSettings_languagePl": "Polski", "appSettings_languagePl": "Polski",
"appSettings_languageSl": "Slovenščina", "appSettings_languageSl": "Slovenščina",
"appSettings_languagePt": "Português", "appSettings_languagePt": "Português",
"appSettings_languageIt": "Italiano", "appSettings_languageIt": "Italiano",
"appSettings_languageZh": "中文", "appSettings_languageZh": "中文",
"appSettings_languageSv": "Svenska", "appSettings_languageSv": "Svenska",
"appSettings_languageNl": "Nederlands", "appSettings_languageNl": "Nederlands",
"appSettings_languageSk": "Slovenčina", "appSettings_languageSk": "Slovenčina",
"appSettings_languageBg": "Български", "appSettings_languageBg": "Български",
"appSettings_notifications": "Notificaties", "appSettings_notifications": "Notificaties",
"appSettings_enableNotifications": "Notificaties inschakelen", "appSettings_enableNotifications": "Notificaties inschakelen",
"appSettings_enableNotificationsSubtitle": "Ontvang meldingen voor berichten en advertenties", "appSettings_enableNotificationsSubtitle": "Ontvang meldingen voor berichten en advertenties",
@@ -338,7 +338,7 @@
}, },
"channels_hashtagChannel": "Hashtag kanaal", "channels_hashtagChannel": "Hashtag kanaal",
"channels_public": "Openbaar", "channels_public": "Openbaar",
"channels_private": "Privé", "channels_private": "Privé",
"channels_publicChannel": "Open kanaal", "channels_publicChannel": "Open kanaal",
"channels_privateChannel": "Private kanaal", "channels_privateChannel": "Private kanaal",
"channels_editChannel": "Kanaal bewerken", "channels_editChannel": "Kanaal bewerken",
@@ -623,7 +623,7 @@
"chat_invalidLink": "Ongeldig linkformaat", "chat_invalidLink": "Ongeldig linkformaat",
"map_title": "Node Map", "map_title": "Node Map",
"map_noNodesWithLocation": "Geen nodes met locatiegegevens", "map_noNodesWithLocation": "Geen nodes met locatiegegevens",
"map_nodesNeedGps": "Nodes moeten hun GPS-coördinaten delen\nom op de kaart te verschijnen", "map_nodesNeedGps": "Nodes moeten hun GPS-coördinaten delen\nom op de kaart te verschijnen",
"map_nodesCount": "Nodes: {count}", "map_nodesCount": "Nodes: {count}",
"@map_nodesCount": { "@map_nodesCount": {
"placeholders": { "placeholders": {
@@ -645,7 +645,7 @@
"map_room": "Ruimte", "map_room": "Ruimte",
"map_sensor": "Sensor", "map_sensor": "Sensor",
"map_pinDm": "Verzenden als bericht (DM)", "map_pinDm": "Verzenden als bericht (DM)",
"map_pinPrivate": "Beveiligd (Privé)", "map_pinPrivate": "Beveiligd (Privé)",
"map_pinPublic": "Openbaar spikken", "map_pinPublic": "Openbaar spikken",
"map_lastSeen": "Laaste keer gezien", "map_lastSeen": "Laaste keer gezien",
"map_disconnectConfirm": "Ben je er zeker van dat je verbinding met dit apparaat wilt verbreken?", "map_disconnectConfirm": "Ben je er zeker van dat je verbinding met dit apparaat wilt verbreken?",
@@ -1039,7 +1039,7 @@
"repeater_eraseFileSystem": "Verwijder Besturingssysteem", "repeater_eraseFileSystem": "Verwijder Besturingssysteem",
"repeater_eraseFileSystemSubtitle": "Formateer het bestandsysteem van de repeater", "repeater_eraseFileSystemSubtitle": "Formateer het bestandsysteem van de repeater",
"repeater_eraseFileSystemConfirm": "WAARSCHUWING: Dit zal alle gegevens op de repeater wissen. Dit kan niet worden teruggedraaid!", "repeater_eraseFileSystemConfirm": "WAARSCHUWING: Dit zal alle gegevens op de repeater wissen. Dit kan niet worden teruggedraaid!",
"repeater_eraseSerialOnly": "Verwijderen is alleen beschikbaar via de seriële console.", "repeater_eraseSerialOnly": "Verwijderen is alleen beschikbaar via de seriële console.",
"repeater_commandSent": "Commando verzonden: {command}", "repeater_commandSent": "Commando verzonden: {command}",
"@repeater_commandSent": { "@repeater_commandSent": {
"placeholders": { "placeholders": {
@@ -1143,11 +1143,11 @@
"repeater_cliHelpSetBridgeEnabled": "Poort inschakelen/uitschakelen.", "repeater_cliHelpSetBridgeEnabled": "Poort inschakelen/uitschakelen.",
"repeater_cliHelpSetBridgeDelay": "Verzend vertraging instellen voor pakketten.", "repeater_cliHelpSetBridgeDelay": "Verzend vertraging instellen voor pakketten.",
"repeater_cliHelpSetBridgeSource": "Kies of de brug ontvangen pakketten of verzonden pakketten opnieuw moet versturen.", "repeater_cliHelpSetBridgeSource": "Kies of de brug ontvangen pakketten of verzonden pakketten opnieuw moet versturen.",
"repeater_cliHelpSetBridgeBaud": "Stel de seriële link baudrate in voor rs232 bruggen.", "repeater_cliHelpSetBridgeBaud": "Stel de seriële link baudrate in voor rs232 bruggen.",
"repeater_cliHelpSetBridgeSecret": "Stel bridge-geheim in voor espnow bridges.", "repeater_cliHelpSetBridgeSecret": "Stel bridge-geheim in voor espnow bridges.",
"repeater_cliHelpSetAdcMultiplier": "Stelt een aangepaste factor in om de gerapporteerde batterijspanning aan te passen (alleen ondersteund op selecte borden).", "repeater_cliHelpSetAdcMultiplier": "Stelt een aangepaste factor in om de gerapporteerde batterijspanning aan te passen (alleen ondersteund op selecte borden).",
"repeater_cliHelpTempRadio": "Stelt tijdelijke radio parameters in voor het opgegeven aantal minuten, en keert daarna terug naar de originele radio parameters. (wordt niet opgeslagen in de voorkeuren).", "repeater_cliHelpTempRadio": "Stelt tijdelijke radio parameters in voor het opgegeven aantal minuten, en keert daarna terug naar de originele radio parameters. (wordt niet opgeslagen in de voorkeuren).",
"repeater_cliHelpSetPerm": "Wijzigt de ACL. Verwijder de overeenkomstige entry (door pubkey prefix) als \"permissions\" 0 is. Voeg een nieuwe entry toe als pubkey-hex volledig is en niet momenteel in de ACL staat. Update de entry door matching pubkey prefix. Toestemming bits variëren per firmware rol, maar de onderste 2 bits zijn: 0 (Gast), 1 (Alleen lezen), 2 (Lezen/schrijven), 3 (Admin)", "repeater_cliHelpSetPerm": "Wijzigt de ACL. Verwijder de overeenkomstige entry (door pubkey prefix) als \"permissions\" 0 is. Voeg een nieuwe entry toe als pubkey-hex volledig is en niet momenteel in de ACL staat. Update de entry door matching pubkey prefix. Toestemming bits variëren per firmware rol, maar de onderste 2 bits zijn: 0 (Gast), 1 (Alleen lezen), 2 (Lezen/schrijven), 3 (Admin)",
"repeater_cliHelpGetBridgeType": "Ontvang brugtype: geen, rs232, espnow", "repeater_cliHelpGetBridgeType": "Ontvang brugtype: geen, rs232, espnow",
"repeater_cliHelpLogStart": "Start pakketlogging naar het bestandssysteem.", "repeater_cliHelpLogStart": "Start pakketlogging naar het bestandssysteem.",
"repeater_cliHelpLogStop": "Stoppen met het loggen van pakketten naar het bestandssysteem.", "repeater_cliHelpLogStop": "Stoppen met het loggen van pakketten naar het bestandssysteem.",
@@ -1155,7 +1155,7 @@
"repeater_cliHelpNeighbors": "Toont een lijst met andere repeater nodes die via nul-hop advertenties zijn gehoord. Elke regel is id-prefix-hex:timestamp:snr-times-4", "repeater_cliHelpNeighbors": "Toont een lijst met andere repeater nodes die via nul-hop advertenties zijn gehoord. Elke regel is id-prefix-hex:timestamp:snr-times-4",
"repeater_cliHelpNeighborRemove": "Verwijdert de eerste overeenkomende vermelding (via pubkey prefix (hex)) uit de lijst van buren.", "repeater_cliHelpNeighborRemove": "Verwijdert de eerste overeenkomende vermelding (via pubkey prefix (hex)) uit de lijst van buren.",
"repeater_cliHelpRegion": "(Alleen Serieel) Lijst alle gedefinieerde regio's en huidige floodrechten.", "repeater_cliHelpRegion": "(Alleen Serieel) Lijst alle gedefinieerde regio's en huidige floodrechten.",
"repeater_cliHelpRegionLoad": "LET OP: dit is een speciale multi-command aanroep. Elke volgende opdracht is een regiortaak (uitgelijnd met spaties om de ouderhiërarchie aan te duiden, met minimaal één spatie). Beëindigd door een lege regel/opdracht te sturen.", "repeater_cliHelpRegionLoad": "LET OP: dit is een speciale multi-command aanroep. Elke volgende opdracht is een regiortaak (uitgelijnd met spaties om de ouderhiërarchie aan te duiden, met minimaal één spatie). Beëindigd door een lege regel/opdracht te sturen.",
"repeater_cliHelpRegionGet": "Zoekt naar regio met gegeven naam voorvoegsel (of \"\" voor de globale scope). Antwoordt met \"-> regio-naam (ouder-naam) 'F'\"", "repeater_cliHelpRegionGet": "Zoekt naar regio met gegeven naam voorvoegsel (of \"\" voor de globale scope). Antwoordt met \"-> regio-naam (ouder-naam) 'F'\"",
"repeater_cliHelpRegionPut": "Voegt of wijzigt een regio-definitie met de gegeven naam.", "repeater_cliHelpRegionPut": "Voegt of wijzigt een regio-definitie met de gegeven naam.",
"repeater_cliHelpRegionRemove": "Verwijdert een regio-definitie met de gegeven naam. (moet exact overeenkomen en geen kindregio's hebben)", "repeater_cliHelpRegionRemove": "Verwijdert een regio-definitie met de gegeven naam. (moet exact overeenkomen en geen kindregio's hebben)",
@@ -1167,7 +1167,7 @@
"repeater_cliHelpGps": "Geeft de status van de GPS. Wanneer de GPS uit staat, antwoordt het alleen met \"uit\", als het aan staat, antwoordt het met \"aan\", status, fix, sat count.", "repeater_cliHelpGps": "Geeft de status van de GPS. Wanneer de GPS uit staat, antwoordt het alleen met \"uit\", als het aan staat, antwoordt het met \"aan\", status, fix, sat count.",
"repeater_cliHelpGpsOnOff": "Schakel de GPS-standby aan/uit.", "repeater_cliHelpGpsOnOff": "Schakel de GPS-standby aan/uit.",
"repeater_cliHelpGpsSync": "Synchroniseer node met GPS-klok.", "repeater_cliHelpGpsSync": "Synchroniseer node met GPS-klok.",
"repeater_cliHelpGpsSetLoc": "Stel de positie van de node vast als GPS-coördinaten en sla de voorkeuren op.", "repeater_cliHelpGpsSetLoc": "Stel de positie van de node vast als GPS-coördinaten en sla de voorkeuren op.",
"repeater_cliHelpGpsAdvert": "Geeft de locatie advertentieconfiguratie van de node:\n- none: locatie niet in advertenties opnemen\n- share: gps locatie delen (van SensorManager)\n- prefs: locatie adverteren die in de voorkeuren is opgeslagen", "repeater_cliHelpGpsAdvert": "Geeft de locatie advertentieconfiguratie van de node:\n- none: locatie niet in advertenties opnemen\n- share: gps locatie delen (van SensorManager)\n- prefs: locatie adverteren die in de voorkeuren is opgeslagen",
"repeater_cliHelpGpsAdvertSet": "Stelt advertentie locatie configuratie in.", "repeater_cliHelpGpsAdvertSet": "Stelt advertentie locatie configuratie in.",
"repeater_commandsListTitle": "Commandenlijst", "repeater_commandsListTitle": "Commandenlijst",
@@ -1178,9 +1178,9 @@
"repeater_logging": "Logging", "repeater_logging": "Logging",
"repeater_neighborsRepeaterOnly": "Buren (Alleen repeaters)", "repeater_neighborsRepeaterOnly": "Buren (Alleen repeaters)",
"repeater_regionManagementRepeaterOnly": "Regiobeheer (Alleen Repeater)", "repeater_regionManagementRepeaterOnly": "Regiobeheer (Alleen Repeater)",
"repeater_regionNote": "Regio-commando's zijn geïntroduceerd om regio-definities en permissies te beheren.", "repeater_regionNote": "Regio-commando's zijn geïntroduceerd om regio-definities en permissies te beheren.",
"repeater_gpsManagement": "Beheer GPS", "repeater_gpsManagement": "Beheer GPS",
"repeater_gpsNote": "De GPS-commando is geïntroduceerd om locatiegerelateerde onderwerpen te beheren.", "repeater_gpsNote": "De GPS-commando is geïntroduceerd om locatiegerelateerde onderwerpen te beheren.",
"telemetry_receivedData": "Ontvangen Telemetriedata", "telemetry_receivedData": "Ontvangen Telemetriedata",
"telemetry_requestTimeout": "Telemetryverzoek is uitgevallen.", "telemetry_requestTimeout": "Telemetryverzoek is uitgevallen.",
"telemetry_errorLoading": "Fout bij het laden van de telemetrie: {error}", "telemetry_errorLoading": "Fout bij het laden van de telemetrie: {error}",
@@ -1232,7 +1232,7 @@
} }
} }
}, },
"telemetry_temperatureValue": "{celsius}°C / {fahrenheit}°F", "telemetry_temperatureValue": "{celsius}°C / {fahrenheit}°F",
"@telemetry_temperatureValue": { "@telemetry_temperatureValue": {
"placeholders": { "placeholders": {
"celsius": { "celsius": {
@@ -1254,7 +1254,7 @@
"channelPath_repeatsLabel": "Repeats", "channelPath_repeatsLabel": "Repeats",
"channelPath_pathLabel": "Pad {index}", "channelPath_pathLabel": "Pad {index}",
"channelPath_observedLabel": "Waargenomen", "channelPath_observedLabel": "Waargenomen",
"channelPath_observedPathTitle": "Waargenomen pad {index} • {hops}", "channelPath_observedPathTitle": "Waargenomen pad {index} {hops}",
"@channelPath_observedPathTitle": { "@channelPath_observedPathTitle": {
"placeholders": { "placeholders": {
"index": { "index": {
@@ -1329,7 +1329,7 @@
}, },
"channelPath_pathLabelTitle": "Pad", "channelPath_pathLabelTitle": "Pad",
"channelPath_observedPathHeader": "Waargenomen Pad", "channelPath_observedPathHeader": "Waargenomen Pad",
"channelPath_selectedPathLabel": "{label} • {prefixes}", "channelPath_selectedPathLabel": "{label} {prefixes}",
"@channelPath_selectedPathLabel": { "@channelPath_selectedPathLabel": {
"placeholders": { "placeholders": {
"label": { "label": {
@@ -1369,8 +1369,8 @@
"neighbors_repeatersNeighbors": "Herhalingen Buren", "neighbors_repeatersNeighbors": "Herhalingen Buren",
"neighbors_noData": "Geen gegevens van buren beschikbaar.", "neighbors_noData": "Geen gegevens van buren beschikbaar.",
"channels_createPrivateChannelDesc": "Beveiligd met een geheime sleutel.", "channels_createPrivateChannelDesc": "Beveiligd met een geheime sleutel.",
"channels_createPrivateChannel": "Maak een Privé Kanaal", "channels_createPrivateChannel": "Maak een Privé Kanaal",
"channels_joinPrivateChannel": "Sluit een Privé Kanaal aan", "channels_joinPrivateChannel": "Sluit een Privé Kanaal aan",
"channels_joinPrivateChannelDesc": "Handmatig een geheime sleutel invoeren.", "channels_joinPrivateChannelDesc": "Handmatig een geheime sleutel invoeren.",
"channels_joinPublicChannel": "Sluit het Open Kanaal", "channels_joinPublicChannel": "Sluit het Open Kanaal",
"channels_joinPublicChannelDesc": "Iedereen kan dit kanaal aanmelden.", "channels_joinPublicChannelDesc": "Iedereen kan dit kanaal aanmelden.",
@@ -1558,22 +1558,22 @@
"contacts_roomPing": "Ping kamer server", "contacts_roomPing": "Ping kamer server",
"contacts_chatTraceRoute": "Route traceren", "contacts_chatTraceRoute": "Route traceren",
"contacts_pathTraceTo": "Trace route to {name}", "contacts_pathTraceTo": "Trace route to {name}",
"appSettings_languageUk": "Oekraïens", "appSettings_languageUk": "Oekraïens",
"contacts_invalidAdvertFormat": "Ongeldige contactgegevens", "contacts_invalidAdvertFormat": "Ongeldige contactgegevens",
"contacts_contactImportFailed": "Contact kon niet geïmporteerd worden.", "contacts_contactImportFailed": "Contact kon niet geïmporteerd worden.",
"contacts_zeroHopAdvert": "Zero Hop Reclame", "contacts_zeroHopAdvert": "Zero Hop Reclame",
"contacts_floodAdvert": "Overstromingsadvertentie", "contacts_floodAdvert": "Overstromingsadvertentie",
"contacts_copyAdvertToClipboard": "Advert naar klembord kopiëren", "contacts_copyAdvertToClipboard": "Advert naar klembord kopiëren",
"appSettings_languageRu": "Russisch", "appSettings_languageRu": "Russisch",
"appSettings_enableMessageTracing": "Berichttracking inschakelen", "appSettings_enableMessageTracing": "Berichttracking inschakelen",
"appSettings_enableMessageTracingSubtitle": "Gedetailleerde routerings- en timing-metadata voor berichten weergeven", "appSettings_enableMessageTracingSubtitle": "Gedetailleerde routerings- en timing-metadata voor berichten weergeven",
"contacts_clipboardEmpty": "Knipbord is leeg.", "contacts_clipboardEmpty": "Knipbord is leeg.",
"contacts_addContactFromClipboard": "Contact uit klembord toevoegen", "contacts_addContactFromClipboard": "Contact uit klembord toevoegen",
"contacts_contactImported": "Contact is geïmporteerd.", "contacts_contactImported": "Contact is geïmporteerd.",
"contacts_zeroHopContactAdvertSent": "Contact verzonden via advertentie", "contacts_zeroHopContactAdvertSent": "Contact verzonden via advertentie",
"contacts_contactAdvertCopied": "Reclame gekopieerd naar Klembord.", "contacts_contactAdvertCopied": "Reclame gekopieerd naar Klembord.",
"contacts_contactAdvertCopyFailed": "Kopiëren van advertentie naar Clipboard is mislukt.", "contacts_contactAdvertCopyFailed": "Kopiëren van advertentie naar Clipboard is mislukt.",
"contacts_ShareContact": "Kontakt naar Klembord kopiëren", "contacts_ShareContact": "Kontakt naar Klembord kopiëren",
"contacts_ShareContactZeroHop": "Contact delen via advertentie", "contacts_ShareContactZeroHop": "Contact delen via advertentie",
"contacts_zeroHopContactAdvertFailed": "Mislukt om contact te verzenden", "contacts_zeroHopContactAdvertFailed": "Mislukt om contact te verzenden",
"notification_activityTitle": "MeshCore Activiteit", "notification_activityTitle": "MeshCore Activiteit",
@@ -1584,7 +1584,7 @@
"notification_receivedNewMessage": "Nieuw bericht ontvangen", "notification_receivedNewMessage": "Nieuw bericht ontvangen",
"settings_gpxExportRepeatersSubtitle": "Exporteert repeaters / roomserver met een locatie naar GPX-bestand.", "settings_gpxExportRepeatersSubtitle": "Exporteert repeaters / roomserver met een locatie naar GPX-bestand.",
"settings_gpxExportRepeaters": "Exporteer repeaters / roomserver naar GPX", "settings_gpxExportRepeaters": "Exporteer repeaters / roomserver naar GPX",
"settings_gpxExportSuccess": "Succesvol GPX-bestand geëxporteerd.", "settings_gpxExportSuccess": "Succesvol GPX-bestand geëxporteerd.",
"settings_gpxExportNoContacts": "Geen contacten om te exporteren.", "settings_gpxExportNoContacts": "Geen contacten om te exporteren.",
"settings_gpxExportNotAvailable": "Niet ondersteund op uw apparaat/besturingssysteem", "settings_gpxExportNotAvailable": "Niet ondersteund op uw apparaat/besturingssysteem",
"settings_gpxExportError": "Er was een fout bij het exporteren.", "settings_gpxExportError": "Er was een fout bij het exporteren.",
@@ -1595,7 +1595,7 @@
"settings_gpxExportRepeatersRoom": "Repeater- en kamer servers locaties", "settings_gpxExportRepeatersRoom": "Repeater- en kamer servers locaties",
"settings_gpxExportChat": "Locaties van metgezellen", "settings_gpxExportChat": "Locaties van metgezellen",
"settings_gpxExportAllContacts": "Alle contactlocaties", "settings_gpxExportAllContacts": "Alle contactlocaties",
"settings_gpxExportShareText": "Kaartgegevens geëxporteerd uit meshcore-open", "settings_gpxExportShareText": "Kaartgegevens geëxporteerd uit meshcore-open",
"settings_gpxExportShareSubject": "meshcore-open GPX kaartgegevens exporteren", "settings_gpxExportShareSubject": "meshcore-open GPX kaartgegevens exporteren",
"pathTrace_someHopsNoLocation": "Een of meer van de hops ontbreken een locatie!", "pathTrace_someHopsNoLocation": "Een of meer van de hops ontbreken een locatie!",
"map_removeLast": "Verwijder Laatste", "map_removeLast": "Verwijder Laatste",
@@ -1802,11 +1802,23 @@
"contacts_searchUsers": "Zoek {number}{str} gebruikers...", "contacts_searchUsers": "Zoek {number}{str} gebruikers...",
"contacts_searchFavorites": "Zoek {number}{str} favorieten...", "contacts_searchFavorites": "Zoek {number}{str} favorieten...",
"contacts_searchRoomServers": "Zoek {number}{str} Room servers...", "contacts_searchRoomServers": "Zoek {number}{str} Room servers...",
"connectionChoiceUsbLabel": "USB", "usbScreenTitle": "Verbind via USB",
"connectionChoiceBluetoothLabel": "Bluetooth",
"usbScreenSubtitle": "Kies een gedetecteerd seriële apparaat en verbind deze direct met uw MeshCore-node.",
"usbScreenStatus": "Selecteer een USB-apparaat", "usbScreenStatus": "Selecteer een USB-apparaat",
"usbScreenNote": "USB-serieel is actief op ondersteunde Android-apparaten en desktop-platforms.", "usbScreenNote": "USB-serieel is actief op ondersteunde Android-apparaten en desktop-platforms.",
"usbScreenTitle": "Verbind via USB", "usbScreenSubtitle": "Kies een gedetecteerd seriële apparaat en verbind deze direct met uw MeshCore-node.",
"usbScreenEmptyState": "Geen USB-apparaten gevonden. Sluit er een aan en herlaad." "usbScreenEmptyState": "Geen USB-apparaten gevonden. Sluit er een aan en herlaad.",
"usbErrorPermissionDenied": "Toegang via USB is geweigerd.",
"usbErrorDeviceMissing": "Het geselecteerde USB-apparaat is niet meer beschikbaar.",
"usbErrorInvalidPort": "Selecteer een geldig USB-apparaat.",
"usbErrorBusy": "Een andere verzoek om een USB-verbinding is al in behandeling.",
"usbErrorNotConnected": "Er is geen USB-apparaat aangesloten.",
"usbErrorOpenFailed": "Kon het geselecteerde USB-apparaat niet openen.",
"usbErrorConnectFailed": "Kon niet verbinding maken met het geselecteerde USB-apparaat.",
"usbErrorUnsupported": "USB-serieel is niet ondersteund op deze platform.",
"usbErrorAlreadyActive": "Een USB-verbinding is al actief.",
"usbErrorNoDeviceSelected": "Geen USB-apparaat is geselecteerd.",
"usbErrorPortClosed": "De USB-verbinding is niet actief.",
"usbErrorConnectTimedOut": "Wachtperiode is verlopen, er is geen reactie ontvangen van het apparaat.",
"connectionChoiceUsbLabel": "USB",
"connectionChoiceBluetoothLabel": "Bluetooth"
} }
+607 -595
View File
File diff suppressed because it is too large Load Diff
+401 -389
View File
File diff suppressed because it is too large Load Diff
+881 -869
View File
File diff suppressed because it is too large Load Diff
+740 -728
View File
File diff suppressed because it is too large Load Diff
+399 -387
View File
File diff suppressed because it is too large Load Diff
+463 -451
View File
File diff suppressed because it is too large Load Diff
+874 -862
View File
File diff suppressed because it is too large Load Diff
+878 -866
View File
File diff suppressed because it is too large Load Diff
+45 -4
View File
@@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:math' as math; import 'dart:math' as math;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../connector/meshcore_connector.dart'; import '../connector/meshcore_connector.dart';
@@ -481,7 +482,7 @@ class _UsbScreenState extends State<UsbScreen> {
setState(() { setState(() {
_ports.clear(); _ports.clear();
_selectedPort = null; _selectedPort = null;
_errorText = error.toString(); _errorText = _friendlyErrorMessage(error);
_isLoadingPorts = false; _isLoadingPorts = false;
}); });
} }
@@ -523,16 +524,56 @@ class _UsbScreenState extends State<UsbScreen> {
} }
} }
/// Strips the Dart runtime prefix (e.g. "Bad state: ", "Exception: ")
/// from error messages before showing them in the UI.
String _friendlyErrorMessage(Object error) { String _friendlyErrorMessage(Object error) {
final l10n = context.l10n;
if (error is PlatformException) {
switch (error.code) {
case 'usb_permission_denied':
return l10n.usbErrorPermissionDenied;
case 'usb_device_missing':
case 'usb_device_detached':
return l10n.usbErrorDeviceMissing;
case 'usb_invalid_port':
return l10n.usbErrorInvalidPort;
case 'usb_busy':
return l10n.usbErrorBusy;
case 'usb_not_connected':
return l10n.usbErrorNotConnected;
case 'usb_driver_missing':
case 'usb_open_failed':
return l10n.usbErrorOpenFailed;
case 'usb_connect_failed':
case 'usb_write_failed':
case 'usb_io_error':
return l10n.usbErrorConnectFailed;
}
}
var msg = error.toString(); var msg = error.toString();
// StateError surfaces as "Bad state: <message>"
if (msg.startsWith('Bad state: ')) { if (msg.startsWith('Bad state: ')) {
msg = msg.substring('Bad state: '.length); msg = msg.substring('Bad state: '.length);
} else if (msg.startsWith('Exception: ')) { } else if (msg.startsWith('Exception: ')) {
msg = msg.substring('Exception: '.length); msg = msg.substring('Exception: '.length);
} }
switch (msg) {
case 'USB serial transport is already active':
return l10n.usbErrorAlreadyActive;
case 'No USB serial device selected':
return l10n.usbErrorNoDeviceSelected;
case 'USB serial port is not open':
return l10n.usbErrorPortClosed;
case 'USB serial is not supported on this platform.':
case 'Web Serial is not supported by this browser.':
return l10n.usbErrorUnsupported;
case 'Timed out waiting for SELF_INFO during connect':
return l10n.usbErrorConnectTimedOut;
}
if (msg.startsWith('Failed to open USB port ')) {
return l10n.usbErrorOpenFailed;
}
return msg; return msg;
} }
+1 -1
View File
@@ -140,7 +140,7 @@ class UsbSerialService {
'Android connect failed: $msg', 'Android connect failed: $msg',
tag: 'USB Serial', tag: 'USB Serial',
); );
throw StateError(msg); rethrow;
} }
} else { } else {
// Hot-restart guard // Hot-restart guard
+1 -3
View File
@@ -105,7 +105,7 @@ void main() {
); );
testWidgets( testWidgets(
'UsbScreen keeps raw selection while showing connector USB display label', 'UsbScreen keeps raw selection when connector USB display label changes',
(tester) async { (tester) async {
final connector = _FakeMeshCoreConnector( final connector = _FakeMeshCoreConnector(
ports: <String>['COM6 - USB Serial Device (COM6)'], ports: <String>['COM6 - USB Serial Device (COM6)'],
@@ -121,8 +121,6 @@ void main() {
connector.notifyListeners(); connector.notifyListeners();
await tester.pump(); await tester.pump();
expect(find.text('KD3CGK mesh-utility.org'), findsOneWidget);
await tester.tap(find.widgetWithText(FilledButton, 'Connect')); await tester.tap(find.widgetWithText(FilledButton, 'Connect'));
await tester.pump(); await tester.pump();