diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 4813556..84156ab 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -1638,5 +1638,252 @@ "contactFailedToClearRoute": "Pfad konnte nicht gelöscht werden: {error}", "contactRouteCleared": "Pfad gelöscht", "contactRouteSet": "Pfad gesetzt: {route}", - "contactFailedToSetRoute": "Pfad konnte nicht gesetzt werden: {error}" + "contactFailedToSetRoute": "Pfad konnte nicht gesetzt werden: {error}", + "rssi": "RSSI", + "snr": "SNR", + "ackTimeout": "ACK-Zeitüberschreitung", + "opcode": "Opcode", + "payload": "Nutzlast", + "hops": "Hops", + "hashSize": "Hash-Größe", + "pathBytes": "Pfad-Bytes", + "selectedPath": "Ausgewählter Pfad", + "estimatedTx": "Geschätzte Sendung", + "senderToReceipt": "Sender bis Empfang", + "receivedCopies": "Empfangene Kopien", + "retryCause": "Wiederholungsursache", + "retryMode": "Wiederholungsmodus", + "retryResult": "Wiederholungsergebnis", + "lastRetry": "Letzter Versuch", + "rxPackets": "RX-Pakete", + "mesh": "Mesh", + "rate": "Rate", + "window": "Fenster", + "posttxDelay": "Sendeverzögerung", + "bandpass": "Bandpass", + "bandpassFilterVoice": "Bandpassfilter Sprache", + "frequency": "Frequenz", + "australia": "Australien", + "australiaNarrow": "Australien (Schmal)", + "australiaQld": "Australien: QLD", + "australiaSaWa": "Australien: SA, WA", + "newZealand": "Neuseeland", + "newZealandNarrow": "Neuseeland (Schmal)", + "switzerland": "Schweiz", + "portugal433": "Portugal 433", + "portugal868": "Portugal 868", + "czechRepublicNarrow": "Tschechien (Schmal)", + "eu433mhzLongRange": "EU 433MHz (Langstrecke)", + "euukDeprecated": "EU/UK (Veraltet)", + "euukNarrow": "EU/UK (Schmal)", + "usacanadaRecommended": "USA/Kanada (Empfohlen)", + "vietnamDeprecated": "Vietnam (Veraltet)", + "vietnamNarrow": "Vietnam (Schmal)", + "active": "Aktiv", + "addContact": "Kontakt hinzufügen", + "all": "Alle", + "autoResolve": "Automatisch auflösen", + "clearAllLabel": "Alle löschen", + "clearRelays": "Relais löschen", + "clearFilters": "Filter löschen", + "clearRoute": "Route löschen", + "clearMessages": "Nachrichten löschen", + "clearScale": "Maßstab löschen", + "clearDiscoveries": "Entdeckungen löschen", + "clearOnlineTraceDatabase": "Online-Trace-Datenbank löschen", + "clearAllChannels": "Alle Kanäle löschen", + "clearAllContacts": "Alle Kontakte löschen", + "clearChannels": "Kanäle löschen", + "clearContacts": "Kontakte löschen", + "clearPathOnMaxRetry": "Pfad bei max. Wiederholung löschen", + "create": "Erstellen", + "custom": "Benutzerdefiniert", + "defaultValue": "Standard", + "duplicate": "Duplizieren", + "editName": "Name bearbeiten", + "open": "Öffnen", + "paste": "Einfügen", + "preview": "Vorschau", + "remove": "Entfernen", + "rename": "Umbenennen", + "resolveAll": "Alle auflösen", + "send": "Senden", + "sendAnyway": "Trotzdem senden", + "share": "Teilen", + "shareContact": "Kontakt teilen", + "trace": "Trace", + "use": "Verwenden", + "useSelectedFrequency": "Ausgewählte Frequenz verwenden", + "discovery": "Erkennung", + "discoverRepeaters": "Repeater entdecken", + "discoverSensors": "Sensoren entdecken", + "repeaterDiscoverySent": "Repeater-Erkennung gesendet", + "sensorDiscoverySent": "Sensor-Erkennung gesendet", + "clearedPendingDiscoveries": "Ausstehende Entdeckungen gelöscht.", + "autoDiscovery": "Automatische Erkennung", + "enableAutomaticAdding": "Automatisches Hinzufügen aktivieren", + "autoaddRepeaters": "Repeater automatisch hinzufügen", + "autoaddRoomServers": "Raumserver automatisch hinzufügen", + "autoaddSensors": "Sensoren automatisch hinzufügen", + "autoaddUsers": "Benutzer automatisch hinzufügen", + "overwriteOldestWhenFull": "Älteste bei vollem Speicher überschreiben", + "storage": "Speicher", + "dangerZone": "Gefahrenbereich", + "profiles": "Profile", + "favourites": "Favoriten", + "sensors": "Sensoren", + "others": "Andere", + "gpsModule": "GPS-Modul", + "liveTraffic": "Live-Verkehr", + "repeatersMap": "Repeater-Karte", + "spectrumScan": "Spektrum-Scan", + "blePacketLogs": "BLE-Paketprotokolle", + "onlineTraceDatabase": "Online-Trace-Datenbank", + "routePathByteSize": "Pfad-Bytegröße", + "messageNotifications": "Nachrichtenbenachrichtigungen", + "sarAlerts": "SAR-Alarme", + "discoveryNotifications": "Erkennungsbenachrichtigungen", + "updateNotifications": "Updatebenachrichtigungen", + "muteWhileAppIsOpen": "Stumm bei geöffneter App", + "disableContacts": "Kontakte deaktivieren", + "enableSensorsTab": "Sensoren-Tab aktivieren", + "enableProfiles": "Profile aktivieren", + "autoRouteRotation": "Automatische Routenrotation", + "nearestRepeaterFallback": "Nächster Repeater als Fallback", + "deleteAllStoredMessageHistory": "Gesamten Nachrichtenverlauf löschen", + "messageFontSize": "Nachrichtenschriftgröße", + "rotateMapWithHeading": "Karte mit Richtung drehen", + "showMapDebugInfo": "Karten-Debug-Info anzeigen", + "openMapInFullscreen": "Karte im Vollbild öffnen", + "showSarMarkersLabel": "SAR-Markierungen anzeigen", + "displaySarMarkersOnTheMainMap": "SAR-Markierungen auf der Hauptkarte anzeigen", + "showAllContactTrailsLabel": "Alle Kontaktpfade anzeigen", + "hideRepeatersOnMap": "Repeater auf Karte ausblenden", + "setMapScale": "Kartenmaßstab einstellen", + "customMapScaleSaved": "Benutzerdefinierter Kartenmaßstab gespeichert", + "voiceBitrate": "Sprach-Bitrate", + "voiceCompressor": "Sprachkompressor", + "balancesQuietAndLoudSpeechLevels": "Gleicht leise und laute Sprache aus", + "voiceLimiter": "Sprach-Limiter", + "preventsClippingPeaksBeforeEncoding": "Verhindert Clipping-Spitzen vor der Kodierung", + "micAutoGain": "Mikrofon-Automatik", + "letsTheRecorderAdjustInputLevel": "Lässt den Rekorder den Eingangspegel anpassen", + "echoCancellation": "Echounterdrückung", + "noiseSuppression": "Rauschunterdrückung", + "trimSilenceInVoiceMessages": "Stille in Sprachnachrichten trimmen", + "compressor": "Kompressor", + "limiter": "Limiter", + "autoGain": "Automatische Verstärkung", + "echoCancel": "Echo", + "noiseSuppress": "Rauschen", + "silenceTrim": "Stille", + "maxImageSize": "Maximale Bildgröße", + "imageCompression": "Bildkomprimierung", + "grayscale": "Graustufen", + "ultraMode": "Ultra-Modus", + "fastPrivateGpsUpdates": "Schnelle private GPS-Updates", + "movementThreshold": "Bewegungsschwelle", + "fastGpsMovementThreshold": "Schneller GPS-Bewegungsschwellenwert", + "fastGpsActiveuseInterval": "Schnelles GPS aktive Nutzung Intervall", + "activeuseUpdateInterval": "Aktive Nutzung Updateintervall", + "repeatNearbyTraffic": "Nahverkehr wiederholen", + "relayThroughRepeatersAcrossTheMesh": "Über Repeater im Mesh weiterleiten", + "nearbyOnlyWithoutRepeaterFlooding": "Nur in der Nähe, ohne Repeater-Flooding", + "multihop": "Multi-Hop", + "createProfile": "Profil erstellen", + "renameProfile": "Profil umbenennen", + "newProfile": "Neues Profil", + "manageProfiles": "Profile verwalten", + "enableProfilesToStartManagingThem": "Aktivieren Sie Profile, um sie zu verwalten.", + "openMessage": "Nachricht öffnen", + "jumpToTheRelatedSarMessage": "Zur zugehörigen SAR-Nachricht springen", + "removeSarMarker": "SAR-Markierung entfernen", + "pleaseSelectADestinationToSendSarMarker": "Bitte wählen Sie ein Ziel zum Senden der SAR-Markierung", + "sarMarkerBroadcastToPublicChannel": "SAR-Markierung an öffentlichen Kanal gesendet", + "sarMarkerSentToRoom": "SAR-Markierung an Raum gesendet", + "loadFromGallery": "Aus Galerie laden", + "replaceImage": "Bild ersetzen", + "selectFromGallery": "Aus Galerie auswählen", + "team": "Team", + "found": "Gefunden", + "staging": "Sammelpunkt", + "object": "Objekt", + "quiet": "Ruhig", + "moderate": "Mäßig", + "busy": "Beschäftigt", + "spectrumScanReturnedNoCandidateFrequencies": "Spektrum-Scan hat keine Kandidatenfrequenzen gefunden", + "searchMessages": "Nachrichten suchen", + "sendImageFromGallery": "Bild aus Galerie senden", + "takePhoto": "Foto aufnehmen", + "dmOnly": "Nur Direktnachricht", + "allMessages": "Alle Nachrichten", + "sendToPublicChannel": "An öffentlichen Kanal senden?", + "selectMarkerTypeAndDestination": "Markierungstyp und Ziel auswählen", + "noDestinationsAvailableLabel": "Keine Ziele verfügbar", + "image": "Bild", + "format": "Format", + "dimensions": "Abmessungen", + "segments": "Segmente", + "transfers": "Übertragungen", + "downloadedBy": "Heruntergeladen von", + "saveDiscoverySettings": "Erkennungseinstellungen speichern", + "savePublicInfo": "Öffentliche Info speichern", + "saveRadioSettings": "Funkeinstellungen speichern", + "savePath": "Pfad speichern", + "wipeDeviceData": "Gerätedaten löschen", + "wipeDevice": "Gerät löschen", + "destructiveDeviceActions": "Destruktive Geräteaktionen.", + "chooseAPresetOrFinetuneCustomRadioSettings": "Wählen Sie eine Voreinstellung oder passen Sie die Funkeinstellungen an.", + "chooseTheNameAndLocationThisDeviceShares": "Wählen Sie den Namen und Standort, den dieses Gerät teilt.", + "availableSpaceOnThisDevice": "Verfügbarer Speicherplatz auf diesem Gerät.", + "used": "Belegt", + "total": "Gesamt", + "renameValue": "Wert umbenennen", + "customizeFields": "Felder anpassen", + "livePreview": "Live-Vorschau", + "refreshSchedule": "Aktualisierungsplan", + "noResponse": "Keine Antwort", + "refreshing": "Wird aktualisiert", + "unavailable": "Nicht verfügbar", + "pickARelayOrNodeToWatchInSensors": "Wählen Sie einen Relay oder Knoten zur Beobachtung.", + "publicKeyLabel": "Öffentlicher Schlüssel", + "alreadyInContacts": "Bereits in Kontakten", + "connectToADeviceBeforeAddingContacts": "Verbinden Sie sich mit einem Gerät, bevor Sie Kontakte hinzufügen", + "fromContacts": "Aus Kontakten", + "onlineOnly": "Nur online", + "inBoth": "In beiden", + "source": "Quelle", + "manualRouteEdit": "Manuelle Routenbearbeitung", + "observedMeshRoute": "Beobachtete Mesh-Route", + "allMessagesCleared": "Alle Nachrichten gelöscht", + "onlineTraceDatabaseCleared": "Online-Trace-Datenbank gelöscht", + "packetLogsCleared": "Paketprotokolle gelöscht", + "hexDataCopiedToClipboard": "Hex-Daten in die Zwischenablage kopiert", + "developerModeEnabled": "Entwicklermodus aktiviert", + "developerModeDisabled": "Entwicklermodus deaktiviert", + "clipboardIsEmpty": "Zwischenablage ist leer", + "contactImported": "Kontakt importiert", + "contactLinkCopiedToClipboard": "Kontaktlink in Zwischenablage kopiert", + "failedToExportContact": "Kontaktexport fehlgeschlagen", + "noLogsToExport": "Keine Protokolle zum Exportieren", + "exportAsCsv": "Als CSV exportieren", + "exportAsText": "Als Text exportieren", + "receivedRfc3339": "Empfangen (RFC3339)", + "buildTime": "Build-Zeit", + "downloadUrlNotAvailable": "Download-URL nicht verfügbar", + "cannotOpenDownloadUrl": "Download-URL kann nicht geöffnet werden", + "updateCheckIsOnlyAvailableOnAndroid": "Update-Prüfung nur auf Android verfügbar", + "youAreRunningTheLatestVersion": "Sie verwenden die neueste Version", + "updateAvailableButDownloadUrlNotFound": "Update verfügbar, aber Download-URL nicht gefunden", + "startTictactoe": "Tic-Tac-Toe starten", + "tictactoeUnavailable": "Tic-Tac-Toe nicht verfügbar", + "tictactoeOpponentUnknown": "Tic-Tac-Toe: Gegner unbekannt", + "tictactoeWaitingForStart": "Tic-Tac-Toe: Warten auf Start", + "acceptsShareLinks": "Akzeptiert freigegebene Links", + "supportsRawHex": "Unterstützt rohes Hex", + "clipboardfriendly": "Zwischenablage-freundlich", + "captured": "Erfasst", + "size": "Größe", + "noCustomChannelsToClear": "Keine benutzerdefinierten Kanäle zum Löschen.", + "noDeviceContactsToClear": "Keine Gerätekontakte zum Löschen." } diff --git a/lib/l10n/app_el.arb b/lib/l10n/app_el.arb index 12e99f8..ad933f5 100644 --- a/lib/l10n/app_el.arb +++ b/lib/l10n/app_el.arb @@ -2303,5 +2303,252 @@ "contactFailedToClearRoute": "Αποτυχία εκκαθάρισης διαδρομής: {error}", "contactRouteCleared": "Η διαδρομή εκκαθαρίστηκε", "contactRouteSet": "Ορίστηκε διαδρομή: {route}", - "contactFailedToSetRoute": "Αποτυχία ορισμού διαδρομής: {error}" + "contactFailedToSetRoute": "Αποτυχία ορισμού διαδρομής: {error}", + "rssi": "RSSI", + "snr": "SNR", + "ackTimeout": "Λήξη χρόνου ACK", + "opcode": "Opcode", + "payload": "Ωφέλιμο φορτίο", + "hops": "Αναπηδήσεις", + "hashSize": "Μέγεθος hash", + "pathBytes": "Bytes διαδρομής", + "selectedPath": "Επιλεγμένη διαδρομή", + "estimatedTx": "Εκτιμώμενη εκπομπή", + "senderToReceipt": "Αποστολέας σε απόδειξη", + "receivedCopies": "Ληφθέντα αντίγραφα", + "retryCause": "Αιτία επανάληψης", + "retryMode": "Λειτουργία επανάληψης", + "retryResult": "Αποτέλεσμα επανάληψης", + "lastRetry": "Τελευταία επανάληψη", + "rxPackets": "Πακέτα RX", + "mesh": "Mesh", + "rate": "Ρυθμός", + "window": "Παράθυρο", + "posttxDelay": "Καθυστέρηση μετά-tx", + "bandpass": "Ζωνοπερατό", + "bandpassFilterVoice": "Ζωνοπερατό φίλτρο φωνής", + "frequency": "Συχνότητα", + "australia": "Αυστραλία", + "australiaNarrow": "Αυστραλία (Στενό)", + "australiaQld": "Αυστραλία: QLD", + "australiaSaWa": "Αυστραλία: SA, WA", + "newZealand": "Νέα Ζηλανδία", + "newZealandNarrow": "Νέα Ζηλανδία (Στενό)", + "switzerland": "Ελβετία", + "portugal433": "Πορτογαλία 433", + "portugal868": "Πορτογαλία 868", + "czechRepublicNarrow": "Τσεχία (Στενό)", + "eu433mhzLongRange": "ΕΕ 433MHz (Μεγάλη Εμβέλεια)", + "euukDeprecated": "ΕΕ/ΗΒ (Παρωχημένο)", + "euukNarrow": "ΕΕ/ΗΒ (Στενό)", + "usacanadaRecommended": "ΗΠΑ/Καναδάς (Προτεινόμενο)", + "vietnamDeprecated": "Βιετνάμ (Παρωχημένο)", + "vietnamNarrow": "Βιετνάμ (Στενό)", + "active": "Ενεργό", + "addContact": "Προσθήκη επαφής", + "all": "Όλα", + "autoResolve": "Αυτόματη επίλυση", + "clearAllLabel": "Εκκαθάριση όλων", + "clearRelays": "Εκκαθάριση αναμεταδοτών", + "clearFilters": "Εκκαθάριση φίλτρων", + "clearRoute": "Εκκαθάριση διαδρομής", + "clearMessages": "Εκκαθάριση μηνυμάτων", + "clearScale": "Εκκαθάριση κλίμακας", + "clearDiscoveries": "Εκκαθάριση ανακαλύψεων", + "clearOnlineTraceDatabase": "Εκκαθάριση βάσης ιχνών", + "clearAllChannels": "Εκκαθάριση όλων των καναλιών", + "clearAllContacts": "Εκκαθάριση όλων των επαφών", + "clearChannels": "Εκκαθάριση καναλιών", + "clearContacts": "Εκκαθάριση επαφών", + "clearPathOnMaxRetry": "Εκκαθάριση μονοπατιού στο μέγιστο", + "create": "Δημιουργία", + "custom": "Προσαρμοσμένο", + "defaultValue": "Προεπιλογή", + "duplicate": "Αντιγραφή", + "editName": "Επεξεργασία ονόματος", + "open": "Άνοιγμα", + "paste": "Επικόλληση", + "preview": "Προεπισκόπηση", + "remove": "Αφαίρεση", + "rename": "Μετονομασία", + "resolveAll": "Επίλυση όλων", + "send": "Αποστολή", + "sendAnyway": "Αποστολή ούτως ή άλλως", + "share": "Κοινοποίηση", + "shareContact": "Κοινοποίηση επαφής", + "trace": "Ίχνος", + "use": "Χρήση", + "useSelectedFrequency": "Χρήση επιλεγμένης συχνότητας", + "discovery": "Ανακάλυψη", + "discoverRepeaters": "Ανακάλυψη αναμεταδοτών", + "discoverSensors": "Ανακάλυψη αισθητήρων", + "repeaterDiscoverySent": "Αποστολή ανακάλυψης αναμεταδοτών", + "sensorDiscoverySent": "Αποστολή ανακάλυψης αισθητήρων", + "clearedPendingDiscoveries": "Εκκαθάριση εκκρεμών ανακαλύψεων.", + "autoDiscovery": "Αυτόματη ανακάλυψη", + "enableAutomaticAdding": "Ενεργοποίηση αυτόματης προσθήκης", + "autoaddRepeaters": "Αυτόματη προσθήκη αναμεταδοτών", + "autoaddRoomServers": "Αυτόματη προσθήκη διακομιστών δωματίου", + "autoaddSensors": "Αυτόματη προσθήκη αισθητήρων", + "autoaddUsers": "Αυτόματη προσθήκη χρηστών", + "overwriteOldestWhenFull": "Αντικατάσταση παλαιότερων όταν γεμίσει", + "storage": "Αποθήκευση", + "dangerZone": "Ζώνη κινδύνου", + "profiles": "Προφίλ", + "favourites": "Αγαπημένα", + "sensors": "Αισθητήρες", + "others": "Άλλοι", + "gpsModule": "Μονάδα GPS", + "liveTraffic": "Ζωντανή κίνηση", + "repeatersMap": "Χάρτης αναμεταδοτών", + "spectrumScan": "Σάρωση φάσματος", + "blePacketLogs": "Αρχεία πακέτων BLE", + "onlineTraceDatabase": "Βάση δεδομένων ιχνών", + "routePathByteSize": "Μέγεθος διαδρομής σε bytes", + "messageNotifications": "Ειδοποιήσεις μηνυμάτων", + "sarAlerts": "Ειδοποιήσεις SAR", + "discoveryNotifications": "Ειδοποιήσεις ανακάλυψης", + "updateNotifications": "Ειδοποιήσεις ενημερώσεων", + "muteWhileAppIsOpen": "Σίγαση με ανοιχτή εφαρμογή", + "disableContacts": "Απενεργοποίηση επαφών", + "enableSensorsTab": "Ενεργοποίηση καρτέλας Αισθητήρων", + "enableProfiles": "Ενεργοποίηση προφίλ", + "autoRouteRotation": "Αυτόματη εναλλαγή διαδρομής", + "nearestRepeaterFallback": "Πλησιέστερος αναμεταδότης ως εφεδρεία", + "deleteAllStoredMessageHistory": "Διαγραφή όλου του ιστορικού", + "messageFontSize": "Μέγεθος γραμματοσειράς μηνυμάτων", + "rotateMapWithHeading": "Περιστροφή χάρτη με κατεύθυνση", + "showMapDebugInfo": "Εμφάνιση πληροφοριών αποσφαλμάτωσης", + "openMapInFullscreen": "Άνοιγμα χάρτη σε πλήρη οθόνη", + "showSarMarkersLabel": "Εμφάνιση δεικτών SAR", + "displaySarMarkersOnTheMainMap": "Εμφάνιση δεικτών SAR στον κύριο χάρτη", + "showAllContactTrailsLabel": "Εμφάνιση όλων των ιχνών επαφών", + "hideRepeatersOnMap": "Απόκρυψη αναμεταδοτών στον χάρτη", + "setMapScale": "Ρύθμιση κλίμακας χάρτη", + "customMapScaleSaved": "Προσαρμοσμένη κλίμακα χάρτη αποθηκεύτηκε", + "voiceBitrate": "Ρυθμός bit φωνής", + "voiceCompressor": "Συμπιεστής φωνής", + "balancesQuietAndLoudSpeechLevels": "Εξισορρόπηση χαμηλών και δυνατών επιπέδων", + "voiceLimiter": "Περιοριστής φωνής", + "preventsClippingPeaksBeforeEncoding": "Αποτρέπει κοπή κορυφών πριν την κωδικοποίηση", + "micAutoGain": "Αυτόματη ενίσχυση μικροφώνου", + "letsTheRecorderAdjustInputLevel": "Αφήνει τη συσκευή να ρυθμίσει την ένταση", + "echoCancellation": "Ακύρωση ηχούς", + "noiseSuppression": "Καταστολή θορύβου", + "trimSilenceInVoiceMessages": "Περικοπή σιωπής σε φωνητικά μηνύματα", + "compressor": "Συμπιεστής", + "limiter": "Περιοριστής", + "autoGain": "Αυτόματη ενίσχυση", + "echoCancel": "Ηχώ", + "noiseSuppress": "Θόρυβος", + "silenceTrim": "Σιωπή", + "maxImageSize": "Μέγιστο μέγεθος εικόνας", + "imageCompression": "Συμπίεση εικόνας", + "grayscale": "Κλίμακα του γκρι", + "ultraMode": "Λειτουργία ultra", + "fastPrivateGpsUpdates": "Γρήγορες ιδιωτικές ενημερώσεις GPS", + "movementThreshold": "Κατώφλι κίνησης", + "fastGpsMovementThreshold": "Κατώφλι κίνησης γρήγορου GPS", + "fastGpsActiveuseInterval": "Διάστημα ενεργής χρήσης γρήγορου GPS", + "activeuseUpdateInterval": "Διάστημα ενημέρωσης ενεργής χρήσης", + "repeatNearbyTraffic": "Επανάληψη κοντινής κίνησης", + "relayThroughRepeatersAcrossTheMesh": "Αναμετάδοση μέσω αναμεταδοτών στο δίκτυο", + "nearbyOnlyWithoutRepeaterFlooding": "Μόνο κοντά, χωρίς πλημμυρισμό", + "multihop": "Πολλαπλών αναπηδήσεων", + "createProfile": "Δημιουργία προφίλ", + "renameProfile": "Μετονομασία προφίλ", + "newProfile": "Νέο προφίλ", + "manageProfiles": "Διαχείριση προφίλ", + "enableProfilesToStartManagingThem": "Ενεργοποιήστε τα προφίλ για να τα διαχειριστείτε.", + "openMessage": "Άνοιγμα μηνύματος", + "jumpToTheRelatedSarMessage": "Μετάβαση στο σχετικό μήνυμα SAR", + "removeSarMarker": "Αφαίρεση δείκτη SAR", + "pleaseSelectADestinationToSendSarMarker": "Επιλέξτε προορισμό για αποστολή δείκτη SAR", + "sarMarkerBroadcastToPublicChannel": "Δείκτης SAR εκπεμπόμενος στο δημόσιο κανάλι", + "sarMarkerSentToRoom": "Δείκτης SAR εστάλη στο δωμάτιο", + "loadFromGallery": "Φόρτωση από τη γκαλερί", + "replaceImage": "Αντικατάσταση εικόνας", + "selectFromGallery": "Επιλογή από τη γκαλερί", + "team": "Ομάδα", + "found": "Βρέθηκε", + "staging": "Χώρος συγκέντρωσης", + "object": "Αντικείμενο", + "quiet": "Ήσυχο", + "moderate": "Μέτριο", + "busy": "Απασχολημένο", + "spectrumScanReturnedNoCandidateFrequencies": "Η σάρωση φάσματος δεν βρήκε υποψήφιες συχνότητες", + "searchMessages": "Αναζήτηση μηνυμάτων", + "sendImageFromGallery": "Αποστολή εικόνας από τη γκαλερί", + "takePhoto": "Λήψη φωτογραφίας", + "dmOnly": "Μόνο απευθείας", + "allMessages": "Όλα τα μηνύματα", + "sendToPublicChannel": "Αποστολή στο δημόσιο κανάλι;", + "selectMarkerTypeAndDestination": "Επιλέξτε τύπο δείκτη και προορισμό", + "noDestinationsAvailableLabel": "Δεν υπάρχουν διαθέσιμοι προορισμοί", + "image": "Εικόνα", + "format": "Μορφή", + "dimensions": "Διαστάσεις", + "segments": "Τμήματα", + "transfers": "Μεταφορές", + "downloadedBy": "Λήφθηκε από", + "saveDiscoverySettings": "Αποθήκευση ρυθμίσεων ανακάλυψης", + "savePublicInfo": "Αποθήκευση δημόσιων πληροφοριών", + "saveRadioSettings": "Αποθήκευση ρυθμίσεων ραδιοφώνου", + "savePath": "Αποθήκευση διαδρομής", + "wipeDeviceData": "Διαγραφή δεδομένων συσκευής", + "wipeDevice": "Διαγραφή συσκευής", + "destructiveDeviceActions": "Καταστροφικές ενέργειες συσκευής.", + "chooseAPresetOrFinetuneCustomRadioSettings": "Επιλέξτε μια προεπιλογή ή ρυθμίστε τις ρυθμίσεις ραδιοφώνου.", + "chooseTheNameAndLocationThisDeviceShares": "Επιλέξτε το όνομα και την τοποθεσία που μοιράζεται αυτή η συσκευή.", + "availableSpaceOnThisDevice": "Διαθέσιμος χώρος σε αυτή τη συσκευή.", + "used": "Χρησιμοποιήθηκε", + "total": "Σύνολο", + "renameValue": "Μετονομασία τιμής", + "customizeFields": "Προσαρμογή πεδίων", + "livePreview": "Ζωντανή προεπισκόπηση", + "refreshSchedule": "Χρονοδιάγραμμα ανανέωσης", + "noResponse": "Χωρίς απάντηση", + "refreshing": "Ανανέωση", + "unavailable": "Μη διαθέσιμο", + "pickARelayOrNodeToWatchInSensors": "Επιλέξτε ένα relay ή κόμβο για παρακολούθηση.", + "publicKeyLabel": "Δημόσιο κλειδί", + "alreadyInContacts": "Ήδη στις επαφές", + "connectToADeviceBeforeAddingContacts": "Συνδεθείτε σε μια συσκευή πριν προσθέσετε επαφές", + "fromContacts": "Από τις επαφές", + "onlineOnly": "Μόνο συνδεδεμένοι", + "inBoth": "Σε αμφότερα", + "source": "Πηγή", + "manualRouteEdit": "Χειροκίνητη επεξεργασία διαδρομής", + "observedMeshRoute": "Παρατηρούμενη διαδρομή δικτύου", + "allMessagesCleared": "Όλα τα μηνύματα διαγράφηκαν", + "onlineTraceDatabaseCleared": "Βάση δεδομένων ιχνών εκκαθαρίστηκε", + "packetLogsCleared": "Τα αρχεία πακέτων εκκαθαρίστηκαν", + "hexDataCopiedToClipboard": "Τα δεδομένα hex αντιγράφηκαν", + "developerModeEnabled": "Λειτουργία προγραμματιστή ενεργοποιήθηκε", + "developerModeDisabled": "Λειτουργία προγραμματιστή απενεργοποιήθηκε", + "clipboardIsEmpty": "Το πρόχειρο είναι κενό", + "contactImported": "Επαφή εισήχθη", + "contactLinkCopiedToClipboard": "Ο σύνδεσμος επαφής αντιγράφηκε", + "failedToExportContact": "Αποτυχία εξαγωγής επαφής", + "noLogsToExport": "Δεν υπάρχουν αρχεία για εξαγωγή", + "exportAsCsv": "Εξαγωγή ως CSV", + "exportAsText": "Εξαγωγή ως κείμενο", + "receivedRfc3339": "Ελήφθη (RFC3339)", + "buildTime": "Ώρα κατασκευής", + "downloadUrlNotAvailable": "Η URL λήψης δεν είναι διαθέσιμη", + "cannotOpenDownloadUrl": "Αδυναμία ανοίγματος URL λήψης", + "updateCheckIsOnlyAvailableOnAndroid": "Ο έλεγχος ενημερώσεων είναι διαθέσιμος μόνο σε Android", + "youAreRunningTheLatestVersion": "Χρησιμοποιείτε την πιο πρόσφατη έκδοση", + "updateAvailableButDownloadUrlNotFound": "Διαθέσιμη ενημέρωση αλλά η URL λήψης δεν βρέθηκε", + "startTictactoe": "Εκκίνηση Tic-Tac-Toe", + "tictactoeUnavailable": "Tic-Tac-Toe μη διαθέσιμο", + "tictactoeOpponentUnknown": "Tic-Tac-Toe: άγνωστος αντίπαλος", + "tictactoeWaitingForStart": "Tic-Tac-Toe: αναμονή για εκκίνηση", + "acceptsShareLinks": "Αποδέχεται κοινόχρηστους συνδέσμους", + "supportsRawHex": "Υποστηρίζει ακατέργαστο hex", + "clipboardfriendly": "Φιλικό προς πρόχειρο", + "captured": "Καταγράφηκε", + "size": "Μέγεθος", + "noCustomChannelsToClear": "Δεν υπάρχουν προσαρμοσμένα κανάλια.", + "noDeviceContactsToClear": "Δεν υπάρχουν επαφές συσκευής." } diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 215cfd3..d3c6985 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -2228,80 +2228,55 @@ "description": "Message when there are no chat contacts to send to" }, "reply": "Reply", - "@reply": { - }, + "@reply": {}, "technicalDetails": "Technical details", - "@technicalDetails": { - }, + "@technicalDetails": {}, "messageTechnicalDetails": "Message technical details", - "@messageTechnicalDetails": { - }, + "@messageTechnicalDetails": {}, "linkQuality": "Link quality", - "@linkQuality": { - }, + "@linkQuality": {}, "delivery": "Delivery", - "@delivery": { - }, + "@delivery": {}, "status": "Status", - "@status": { - }, + "@status": {}, "expectedAckTag": "Expected ACK tag", - "@expectedAckTag": { - }, + "@expectedAckTag": {}, "roundTrip": "Round-trip", - "@roundTrip": { - }, + "@roundTrip": {}, "retryAttempt": "Retry attempt", - "@retryAttempt": { - }, + "@retryAttempt": {}, "floodFallback": "Flood fallback", - "@floodFallback": { - }, + "@floodFallback": {}, "identity": "Identity", - "@identity": { - }, + "@identity": {}, "messageId": "Message ID", - "@messageId": { - }, + "@messageId": {}, "sender": "Sender", - "@sender": { - }, + "@sender": {}, "senderKey": "Sender key", - "@senderKey": { - }, + "@senderKey": {}, "recipient": "Recipient", - "@recipient": { - }, + "@recipient": {}, "recipientKey": "Recipient key", - "@recipientKey": { - }, + "@recipientKey": {}, "voice": "Voice", - "@voice": { - }, + "@voice": {}, "voiceId": "Voice ID", - "@voiceId": { - }, + "@voiceId": {}, "envelope": "Envelope", - "@envelope": { - }, + "@envelope": {}, "sessionProgress": "Session progress", - "@sessionProgress": { - }, + "@sessionProgress": {}, "complete": "Complete", - "@complete": { - }, + "@complete": {}, "rawDump": "Raw dump", - "@rawDump": { - }, + "@rawDump": {}, "cannotRetryMissingRecipient": "Cannot retry: recipient information missing", - "@cannotRetryMissingRecipient": { - }, + "@cannotRetryMissingRecipient": {}, "voiceUnavailable": "Voice unavailable right now", - "@voiceUnavailable": { - }, + "@voiceUnavailable": {}, "requestingVoice": "Requesting voice", - "@requestingVoice": { - }, + "@requestingVoice": {}, "device": "device", "@device": { "description": "Generic device label" @@ -2542,5 +2517,258 @@ "type": "String" } } - } + }, + "rssi": "RSSI", + "@rssi": { + "description": "Received signal strength indicator" + }, + "snr": "SNR", + "@snr": { + "description": "Signal-to-noise ratio" + }, + "ackTimeout": "ACK timeout", + "opcode": "Opcode", + "payload": "Payload", + "hops": "Hops", + "hashSize": "Hash size", + "pathBytes": "Path bytes", + "selectedPath": "Selected path", + "estimatedTx": "Estimated tx", + "senderToReceipt": "Sender to receipt", + "receivedCopies": "Received copies", + "retryCause": "Retry cause", + "retryMode": "Retry mode", + "retryResult": "Retry result", + "lastRetry": "Last retry", + "rxPackets": "RX packets", + "mesh": "Mesh", + "rate": "Rate", + "window": "Window", + "posttxDelay": "Post-tx delay", + "bandpass": "Band-pass", + "bandpassFilterVoice": "Band-pass filter voice", + "frequency": "Frequency", + "australia": "Australia", + "australiaNarrow": "Australia (Narrow)", + "australiaQld": "Australia: QLD", + "australiaSaWa": "Australia: SA, WA", + "newZealand": "New Zealand", + "newZealandNarrow": "New Zealand (Narrow)", + "switzerland": "Switzerland", + "portugal433": "Portugal 433", + "portugal868": "Portugal 868", + "czechRepublicNarrow": "Czech Republic (Narrow)", + "eu433mhzLongRange": "EU 433MHz (Long Range)", + "euukDeprecated": "EU/UK (Deprecated)", + "euukNarrow": "EU/UK (Narrow)", + "usacanadaRecommended": "USA/Canada (Recommended)", + "vietnamDeprecated": "Vietnam (Deprecated)", + "vietnamNarrow": "Vietnam (Narrow)", + "active": "Active", + "addContact": "Add Contact", + "all": "All", + "autoResolve": "Auto resolve", + "clearAllLabel": "Clear all", + "clearRelays": "Clear relays", + "clearFilters": "Clear filters", + "clearRoute": "Clear Route", + "clearMessages": "Clear Messages", + "clearScale": "Clear scale", + "clearDiscoveries": "Clear discoveries", + "clearOnlineTraceDatabase": "Clear online trace database", + "clearAllChannels": "Clear all channels", + "clearAllContacts": "Clear all contacts", + "clearChannels": "Clear channels", + "clearContacts": "Clear contacts", + "clearPathOnMaxRetry": "Clear path on max retry", + "create": "Create", + "custom": "Custom", + "defaultValue": "Default", + "duplicate": "Duplicate", + "editName": "Edit name", + "open": "Open", + "paste": "Paste", + "preview": "Preview", + "remove": "Remove", + "rename": "Rename", + "resolveAll": "Resolve all", + "send": "Send", + "sendAnyway": "Send anyway", + "share": "Share", + "shareContact": "Share Contact", + "trace": "Trace", + "use": "Use", + "useSelectedFrequency": "Use selected frequency", + "discovery": "Discovery", + "discoverRepeaters": "Discover repeaters", + "discoverSensors": "Discover sensors", + "repeaterDiscoverySent": "Repeater discovery sent", + "sensorDiscoverySent": "Sensor discovery sent", + "clearedPendingDiscoveries": "Cleared pending discoveries.", + "autoDiscovery": "Auto discovery", + "enableAutomaticAdding": "Enable automatic adding", + "autoaddRepeaters": "Auto-add repeaters", + "autoaddRoomServers": "Auto-add room servers", + "autoaddSensors": "Auto-add sensors", + "autoaddUsers": "Auto-add users", + "overwriteOldestWhenFull": "Overwrite oldest when full", + "storage": "Storage", + "dangerZone": "Danger zone", + "profiles": "Profiles", + "favourites": "Favourites", + "sensors": "Sensors", + "others": "Others", + "gpsModule": "GPS Module", + "liveTraffic": "Live Traffic", + "repeatersMap": "Repeaters Map", + "spectrumScan": "Spectrum Scan", + "blePacketLogs": "BLE Packet Logs", + "onlineTraceDatabase": "Online trace database", + "routePathByteSize": "Route path byte size", + "messageNotifications": "Message notifications", + "sarAlerts": "SAR alerts", + "discoveryNotifications": "Discovery notifications", + "updateNotifications": "Update notifications", + "muteWhileAppIsOpen": "Mute while app is open", + "disableContacts": "Disable Contacts", + "enableSensorsTab": "Enable Sensors tab", + "enableProfiles": "Enable Profiles", + "autoRouteRotation": "Auto route rotation", + "nearestRepeaterFallback": "Nearest repeater fallback", + "deleteAllStoredMessageHistory": "Delete all stored message history", + "messageFontSize": "Message font size", + "rotateMapWithHeading": "Rotate map with heading", + "showMapDebugInfo": "Show map debug info", + "openMapInFullscreen": "Open map in fullscreen", + "showSarMarkersLabel": "Show SAR markers", + "displaySarMarkersOnTheMainMap": "Display SAR markers on the main map", + "showAllContactTrailsLabel": "Show all contact trails", + "hideRepeatersOnMap": "Hide repeaters on map", + "setMapScale": "Set map scale", + "customMapScaleSaved": "Custom map scale saved", + "voiceBitrate": "Voice bitrate", + "voiceCompressor": "Voice compressor", + "balancesQuietAndLoudSpeechLevels": "Balances quiet and loud speech levels", + "voiceLimiter": "Voice limiter", + "preventsClippingPeaksBeforeEncoding": "Prevents clipping peaks before encoding", + "micAutoGain": "Mic auto gain", + "letsTheRecorderAdjustInputLevel": "Lets the recorder adjust input level", + "echoCancellation": "Echo cancellation", + "noiseSuppression": "Noise suppression", + "trimSilenceInVoiceMessages": "Trim silence in voice messages", + "compressor": "Compressor", + "limiter": "Limiter", + "autoGain": "Auto gain", + "echoCancel": "Echo cancel", + "noiseSuppress": "Noise suppress", + "silenceTrim": "Silence trim", + "maxImageSize": "Max image size", + "imageCompression": "Image compression", + "grayscale": "Grayscale", + "ultraMode": "Ultra mode", + "fastPrivateGpsUpdates": "Fast private GPS updates", + "movementThreshold": "Movement threshold", + "fastGpsMovementThreshold": "Fast GPS movement threshold", + "fastGpsActiveuseInterval": "Fast GPS active-use interval", + "activeuseUpdateInterval": "Active-use update interval", + "repeatNearbyTraffic": "Repeat nearby traffic", + "relayThroughRepeatersAcrossTheMesh": "Relay through repeaters across the mesh", + "nearbyOnlyWithoutRepeaterFlooding": "Nearby only, without repeater flooding", + "multihop": "Multi-hop", + "createProfile": "Create Profile", + "renameProfile": "Rename Profile", + "newProfile": "New Profile", + "manageProfiles": "Manage profiles", + "enableProfilesToStartManagingThem": "Enable profiles to start managing them.", + "openMessage": "Open message", + "jumpToTheRelatedSarMessage": "Jump to the related SAR message", + "removeSarMarker": "Remove SAR marker", + "pleaseSelectADestinationToSendSarMarker": "Please select a destination to send SAR marker", + "sarMarkerBroadcastToPublicChannel": "SAR marker broadcast to public channel", + "sarMarkerSentToRoom": "SAR marker sent to room", + "loadFromGallery": "Load from gallery", + "replaceImage": "Replace image", + "selectFromGallery": "Select from gallery", + "team": "Team", + "found": "Found", + "staging": "Staging", + "object": "Object", + "quiet": "Quiet", + "moderate": "Moderate", + "busy": "Busy", + "spectrumScanReturnedNoCandidateFrequencies": "Spectrum scan returned no candidate frequencies", + "searchMessages": "Search messages", + "sendImageFromGallery": "Send image from gallery", + "takePhoto": "Take photo", + "dmOnly": "DM only", + "allMessages": "All messages", + "sendToPublicChannel": "Send to Public Channel?", + "selectMarkerTypeAndDestination": "Select marker type and destination", + "noDestinationsAvailableLabel": "No destinations available", + "image": "Image", + "format": "Format", + "dimensions": "Dimensions", + "segments": "Segments", + "transfers": "Transfers", + "downloadedBy": "Downloaded by", + "saveDiscoverySettings": "Save discovery settings", + "savePublicInfo": "Save public info", + "saveRadioSettings": "Save radio settings", + "savePath": "Save Path", + "wipeDeviceData": "Wipe device data", + "wipeDevice": "Wipe device", + "destructiveDeviceActions": "Destructive device actions.", + "chooseAPresetOrFinetuneCustomRadioSettings": "Choose a preset or fine-tune custom radio settings.", + "chooseTheNameAndLocationThisDeviceShares": "Choose the name and location this device shares.", + "availableSpaceOnThisDevice": "Available space on this device.", + "used": "Used", + "total": "Total", + "renameValue": "Rename value", + "customizeFields": "Customize fields", + "livePreview": "Live preview", + "refreshSchedule": "Refresh schedule", + "noResponse": "No response", + "refreshing": "Refreshing", + "unavailable": "Unavailable", + "pickARelayOrNodeToWatchInSensors": "Pick a relay or node to watch in Sensors.", + "publicKeyLabel": "Public key", + "alreadyInContacts": "Already in contacts", + "connectToADeviceBeforeAddingContacts": "Connect to a device before adding contacts", + "fromContacts": "From contacts", + "onlineOnly": "Online only", + "inBoth": "In both", + "source": "Source", + "manualRouteEdit": "Manual route edit", + "observedMeshRoute": "Observed mesh route", + "allMessagesCleared": "All messages cleared", + "onlineTraceDatabaseCleared": "Online trace database cleared", + "packetLogsCleared": "Packet logs cleared", + "hexDataCopiedToClipboard": "Hex data copied to clipboard", + "developerModeEnabled": "Developer mode enabled", + "developerModeDisabled": "Developer mode disabled", + "clipboardIsEmpty": "Clipboard is empty", + "contactImported": "Contact imported", + "contactLinkCopiedToClipboard": "Contact link copied to clipboard", + "failedToExportContact": "Failed to export contact", + "noLogsToExport": "No logs to export", + "exportAsCsv": "Export as CSV", + "exportAsText": "Export as Text", + "receivedRfc3339": "Received (RFC3339)", + "buildTime": "Build Time", + "downloadUrlNotAvailable": "Download URL not available", + "cannotOpenDownloadUrl": "Cannot open download URL", + "updateCheckIsOnlyAvailableOnAndroid": "Update check is only available on Android", + "youAreRunningTheLatestVersion": "You are running the latest version", + "updateAvailableButDownloadUrlNotFound": "Update available but download URL not found", + "startTictactoe": "Start Tic-Tac-Toe", + "tictactoeUnavailable": "Tic-Tac-Toe unavailable", + "tictactoeOpponentUnknown": "Tic-Tac-Toe: opponent unknown", + "tictactoeWaitingForStart": "Tic-Tac-Toe: waiting for start", + "acceptsShareLinks": "Accepts share links", + "supportsRawHex": "Supports raw hex", + "clipboardfriendly": "Clipboard-friendly", + "captured": "Captured", + "size": "Size", + "noCustomChannelsToClear": "No custom channels to clear.", + "noDeviceContactsToClear": "No device contacts to clear." } diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index a8973ec..7afc39d 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -1638,5 +1638,252 @@ "contactFailedToClearRoute": "No se pudo borrar la ruta: {error}", "contactRouteCleared": "Ruta borrada", "contactRouteSet": "Ruta establecida: {route}", - "contactFailedToSetRoute": "No se pudo establecer la ruta: {error}" + "contactFailedToSetRoute": "No se pudo establecer la ruta: {error}", + "rssi": "RSSI", + "snr": "SNR", + "ackTimeout": "Tiempo de espera ACK", + "opcode": "Código de operación", + "payload": "Carga útil", + "hops": "Saltos", + "hashSize": "Tamaño del hash", + "pathBytes": "Bytes de ruta", + "selectedPath": "Ruta seleccionada", + "estimatedTx": "Transmisión estimada", + "senderToReceipt": "Del remitente al recibo", + "receivedCopies": "Copias recibidas", + "retryCause": "Causa del reintento", + "retryMode": "Modo de reintento", + "retryResult": "Resultado del reintento", + "lastRetry": "Último reintento", + "rxPackets": "Paquetes RX", + "mesh": "Mesh", + "rate": "Velocidad", + "window": "Ventana", + "posttxDelay": "Retardo post-tx", + "bandpass": "Paso de banda", + "bandpassFilterVoice": "Filtro de paso de banda de voz", + "frequency": "Frecuencia", + "australia": "Australia", + "australiaNarrow": "Australia (Estrecho)", + "australiaQld": "Australia: QLD", + "australiaSaWa": "Australia: SA, WA", + "newZealand": "Nueva Zelanda", + "newZealandNarrow": "Nueva Zelanda (Estrecho)", + "switzerland": "Suiza", + "portugal433": "Portugal 433", + "portugal868": "Portugal 868", + "czechRepublicNarrow": "República Checa (Estrecho)", + "eu433mhzLongRange": "EU 433MHz (Largo Alcance)", + "euukDeprecated": "UE/RU (Obsoleto)", + "euukNarrow": "UE/RU (Estrecho)", + "usacanadaRecommended": "EE.UU./Canadá (Recomendado)", + "vietnamDeprecated": "Vietnam (Obsoleto)", + "vietnamNarrow": "Vietnam (Estrecho)", + "active": "Activo", + "addContact": "Añadir contacto", + "all": "Todo", + "autoResolve": "Resolver automáticamente", + "clearAllLabel": "Borrar todo", + "clearRelays": "Borrar repetidores", + "clearFilters": "Borrar filtros", + "clearRoute": "Borrar ruta", + "clearMessages": "Borrar mensajes", + "clearScale": "Borrar escala", + "clearDiscoveries": "Borrar descubrimientos", + "clearOnlineTraceDatabase": "Borrar base de datos de trazas", + "clearAllChannels": "Borrar todos los canales", + "clearAllContacts": "Borrar todos los contactos", + "clearChannels": "Borrar canales", + "clearContacts": "Borrar contactos", + "clearPathOnMaxRetry": "Borrar ruta en máximo reintento", + "create": "Crear", + "custom": "Personalizado", + "defaultValue": "Predeterminado", + "duplicate": "Duplicar", + "editName": "Editar nombre", + "open": "Abrir", + "paste": "Pegar", + "preview": "Vista previa", + "remove": "Eliminar", + "rename": "Renombrar", + "resolveAll": "Resolver todo", + "send": "Enviar", + "sendAnyway": "Enviar de todos modos", + "share": "Compartir", + "shareContact": "Compartir contacto", + "trace": "Traza", + "use": "Usar", + "useSelectedFrequency": "Usar frecuencia seleccionada", + "discovery": "Descubrimiento", + "discoverRepeaters": "Descubrir repetidores", + "discoverSensors": "Descubrir sensores", + "repeaterDiscoverySent": "Descubrimiento de repetidores enviado", + "sensorDiscoverySent": "Descubrimiento de sensores enviado", + "clearedPendingDiscoveries": "Descubrimientos pendientes borrados.", + "autoDiscovery": "Descubrimiento automático", + "enableAutomaticAdding": "Habilitar adición automática", + "autoaddRepeaters": "Añadir repetidores automáticamente", + "autoaddRoomServers": "Añadir servidores de sala automáticamente", + "autoaddSensors": "Añadir sensores automáticamente", + "autoaddUsers": "Añadir usuarios automáticamente", + "overwriteOldestWhenFull": "Sobrescribir más antiguos cuando esté lleno", + "storage": "Almacenamiento", + "dangerZone": "Zona de peligro", + "profiles": "Perfiles", + "favourites": "Favoritos", + "sensors": "Sensores", + "others": "Otros", + "gpsModule": "Módulo GPS", + "liveTraffic": "Tráfico en vivo", + "repeatersMap": "Mapa de repetidores", + "spectrumScan": "Escaneo de espectro", + "blePacketLogs": "Registros de paquetes BLE", + "onlineTraceDatabase": "Base de datos de trazas", + "routePathByteSize": "Tamaño en bytes de la ruta", + "messageNotifications": "Notificaciones de mensajes", + "sarAlerts": "Alertas SAR", + "discoveryNotifications": "Notificaciones de descubrimiento", + "updateNotifications": "Notificaciones de actualización", + "muteWhileAppIsOpen": "Silenciar con la app abierta", + "disableContacts": "Desactivar contactos", + "enableSensorsTab": "Habilitar pestaña Sensores", + "enableProfiles": "Habilitar perfiles", + "autoRouteRotation": "Rotación automática de ruta", + "nearestRepeaterFallback": "Repetidor más cercano como reserva", + "deleteAllStoredMessageHistory": "Eliminar todo el historial de mensajes", + "messageFontSize": "Tamaño de fuente de mensajes", + "rotateMapWithHeading": "Rotar mapa con rumbo", + "showMapDebugInfo": "Mostrar info de depuración del mapa", + "openMapInFullscreen": "Abrir mapa en pantalla completa", + "showSarMarkersLabel": "Mostrar marcadores SAR", + "displaySarMarkersOnTheMainMap": "Mostrar marcadores SAR en el mapa principal", + "showAllContactTrailsLabel": "Mostrar todos los rastros de contactos", + "hideRepeatersOnMap": "Ocultar repetidores en el mapa", + "setMapScale": "Establecer escala del mapa", + "customMapScaleSaved": "Escala de mapa personalizada guardada", + "voiceBitrate": "Tasa de bits de voz", + "voiceCompressor": "Compresor de voz", + "balancesQuietAndLoudSpeechLevels": "Equilibra niveles de habla suaves y altos", + "voiceLimiter": "Limitador de voz", + "preventsClippingPeaksBeforeEncoding": "Previene recorte de picos antes de codificar", + "micAutoGain": "Ganancia automática del micrófono", + "letsTheRecorderAdjustInputLevel": "Permite al grabador ajustar el nivel de entrada", + "echoCancellation": "Cancelación de eco", + "noiseSuppression": "Supresión de ruido", + "trimSilenceInVoiceMessages": "Recortar silencio en mensajes de voz", + "compressor": "Compresor", + "limiter": "Limitador", + "autoGain": "Ganancia automática", + "echoCancel": "Eco", + "noiseSuppress": "Ruido", + "silenceTrim": "Silencio", + "maxImageSize": "Tamaño máximo de imagen", + "imageCompression": "Compresión de imagen", + "grayscale": "Escala de grises", + "ultraMode": "Modo ultra", + "fastPrivateGpsUpdates": "Actualizaciones GPS privadas rápidas", + "movementThreshold": "Umbral de movimiento", + "fastGpsMovementThreshold": "Umbral de movimiento GPS rápido", + "fastGpsActiveuseInterval": "Intervalo de uso activo GPS rápido", + "activeuseUpdateInterval": "Intervalo de actualización de uso activo", + "repeatNearbyTraffic": "Repetir tráfico cercano", + "relayThroughRepeatersAcrossTheMesh": "Retransmitir a través de repetidores en la red", + "nearbyOnlyWithoutRepeaterFlooding": "Solo cercanos, sin inundación de repetidores", + "multihop": "Multi-salto", + "createProfile": "Crear perfil", + "renameProfile": "Renombrar perfil", + "newProfile": "Nuevo perfil", + "manageProfiles": "Gestionar perfiles", + "enableProfilesToStartManagingThem": "Habilite los perfiles para comenzar a gestionarlos.", + "openMessage": "Abrir mensaje", + "jumpToTheRelatedSarMessage": "Ir al mensaje SAR relacionado", + "removeSarMarker": "Eliminar marcador SAR", + "pleaseSelectADestinationToSendSarMarker": "Seleccione un destino para enviar el marcador SAR", + "sarMarkerBroadcastToPublicChannel": "Marcador SAR transmitido al canal público", + "sarMarkerSentToRoom": "Marcador SAR enviado a la sala", + "loadFromGallery": "Cargar desde galería", + "replaceImage": "Reemplazar imagen", + "selectFromGallery": "Seleccionar de galería", + "team": "Equipo", + "found": "Encontrado", + "staging": "Área de reunión", + "object": "Objeto", + "quiet": "Silencioso", + "moderate": "Moderado", + "busy": "Ocupado", + "spectrumScanReturnedNoCandidateFrequencies": "El escaneo de espectro no encontró frecuencias candidatas", + "searchMessages": "Buscar mensajes", + "sendImageFromGallery": "Enviar imagen desde galería", + "takePhoto": "Tomar foto", + "dmOnly": "Solo mensaje directo", + "allMessages": "Todos los mensajes", + "sendToPublicChannel": "¿Enviar al canal público?", + "selectMarkerTypeAndDestination": "Seleccione tipo de marcador y destino", + "noDestinationsAvailableLabel": "No hay destinos disponibles", + "image": "Imagen", + "format": "Formato", + "dimensions": "Dimensiones", + "segments": "Segmentos", + "transfers": "Transferencias", + "downloadedBy": "Descargado por", + "saveDiscoverySettings": "Guardar ajustes de descubrimiento", + "savePublicInfo": "Guardar información pública", + "saveRadioSettings": "Guardar ajustes de radio", + "savePath": "Guardar ruta", + "wipeDeviceData": "Borrar datos del dispositivo", + "wipeDevice": "Borrar dispositivo", + "destructiveDeviceActions": "Acciones destructivas del dispositivo.", + "chooseAPresetOrFinetuneCustomRadioSettings": "Elija un preajuste o ajuste la configuración de radio.", + "chooseTheNameAndLocationThisDeviceShares": "Elija el nombre y la ubicación que comparte este dispositivo.", + "availableSpaceOnThisDevice": "Espacio disponible en este dispositivo.", + "used": "Usado", + "total": "Total", + "renameValue": "Renombrar valor", + "customizeFields": "Personalizar campos", + "livePreview": "Vista previa en vivo", + "refreshSchedule": "Programación de actualización", + "noResponse": "Sin respuesta", + "refreshing": "Actualizando", + "unavailable": "No disponible", + "pickARelayOrNodeToWatchInSensors": "Elija un relay o nodo para observar.", + "publicKeyLabel": "Clave pública", + "alreadyInContacts": "Ya en contactos", + "connectToADeviceBeforeAddingContacts": "Conéctese a un dispositivo antes de añadir contactos", + "fromContacts": "De contactos", + "onlineOnly": "Solo en línea", + "inBoth": "En ambos", + "source": "Fuente", + "manualRouteEdit": "Edición manual de ruta", + "observedMeshRoute": "Ruta mesh observada", + "allMessagesCleared": "Todos los mensajes borrados", + "onlineTraceDatabaseCleared": "Base de datos de trazas borrada", + "packetLogsCleared": "Registros de paquetes borrados", + "hexDataCopiedToClipboard": "Datos hex copiados al portapapeles", + "developerModeEnabled": "Modo desarrollador activado", + "developerModeDisabled": "Modo desarrollador desactivado", + "clipboardIsEmpty": "El portapapeles está vacío", + "contactImported": "Contacto importado", + "contactLinkCopiedToClipboard": "Enlace de contacto copiado al portapapeles", + "failedToExportContact": "Error al exportar el contacto", + "noLogsToExport": "No hay registros para exportar", + "exportAsCsv": "Exportar como CSV", + "exportAsText": "Exportar como texto", + "receivedRfc3339": "Recibido (RFC3339)", + "buildTime": "Hora de compilación", + "downloadUrlNotAvailable": "URL de descarga no disponible", + "cannotOpenDownloadUrl": "No se puede abrir la URL de descarga", + "updateCheckIsOnlyAvailableOnAndroid": "La comprobación de actualizaciones solo está disponible en Android", + "youAreRunningTheLatestVersion": "Está ejecutando la última versión", + "updateAvailableButDownloadUrlNotFound": "Actualización disponible pero URL de descarga no encontrada", + "startTictactoe": "Iniciar Tic-Tac-Toe", + "tictactoeUnavailable": "Tic-Tac-Toe no disponible", + "tictactoeOpponentUnknown": "Tic-Tac-Toe: oponente desconocido", + "tictactoeWaitingForStart": "Tic-Tac-Toe: esperando inicio", + "acceptsShareLinks": "Acepta enlaces compartidos", + "supportsRawHex": "Soporta hex sin procesar", + "clipboardfriendly": "Compatible con portapapeles", + "captured": "Capturado", + "size": "Tamaño", + "noCustomChannelsToClear": "No hay canales personalizados que borrar.", + "noDeviceContactsToClear": "No hay contactos del dispositivo que borrar." } diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 734baa6..54f6a83 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -1641,5 +1641,252 @@ "contactFailedToClearRoute": "Échec de l'effacement de la route : {error}", "contactRouteCleared": "Route effacée", "contactRouteSet": "Route définie : {route}", - "contactFailedToSetRoute": "Échec du réglage de la route : {error}" + "contactFailedToSetRoute": "Échec du réglage de la route : {error}", + "rssi": "RSSI", + "snr": "SNR", + "ackTimeout": "Délai ACK expiré", + "opcode": "Opcode", + "payload": "Charge utile", + "hops": "Sauts", + "hashSize": "Taille du hash", + "pathBytes": "Octets du chemin", + "selectedPath": "Chemin sélectionné", + "estimatedTx": "Émission estimée", + "senderToReceipt": "Émetteur au reçu", + "receivedCopies": "Copies reçues", + "retryCause": "Cause de la relance", + "retryMode": "Mode de relance", + "retryResult": "Résultat de la relance", + "lastRetry": "Dernière relance", + "rxPackets": "Paquets RX", + "mesh": "Mesh", + "rate": "Débit", + "window": "Fenêtre", + "posttxDelay": "Délai post-émission", + "bandpass": "Passe-bande", + "bandpassFilterVoice": "Filtre passe-bande voix", + "frequency": "Fréquence", + "australia": "Australie", + "australiaNarrow": "Australie (Étroit)", + "australiaQld": "Australie: QLD", + "australiaSaWa": "Australie: SA, WA", + "newZealand": "Nouvelle-Zélande", + "newZealandNarrow": "Nouvelle-Zélande (Étroit)", + "switzerland": "Suisse", + "portugal433": "Portugal 433", + "portugal868": "Portugal 868", + "czechRepublicNarrow": "République tchèque (Étroit)", + "eu433mhzLongRange": "UE 433MHz (Longue Portée)", + "euukDeprecated": "UE/RU (Obsolète)", + "euukNarrow": "UE/RU (Étroit)", + "usacanadaRecommended": "USA/Canada (Recommandé)", + "vietnamDeprecated": "Vietnam (Obsolète)", + "vietnamNarrow": "Vietnam (Étroit)", + "active": "Actif", + "addContact": "Ajouter un contact", + "all": "Tout", + "autoResolve": "Résolution automatique", + "clearAllLabel": "Tout effacer", + "clearRelays": "Effacer les relais", + "clearFilters": "Effacer les filtres", + "clearRoute": "Effacer la route", + "clearMessages": "Effacer les messages", + "clearScale": "Effacer l'échelle", + "clearDiscoveries": "Effacer les découvertes", + "clearOnlineTraceDatabase": "Effacer la base de traces", + "clearAllChannels": "Effacer tous les canaux", + "clearAllContacts": "Effacer tous les contacts", + "clearChannels": "Effacer les canaux", + "clearContacts": "Effacer les contacts", + "clearPathOnMaxRetry": "Effacer le chemin au max de relances", + "create": "Créer", + "custom": "Personnalisé", + "defaultValue": "Par défaut", + "duplicate": "Dupliquer", + "editName": "Modifier le nom", + "open": "Ouvrir", + "paste": "Coller", + "preview": "Aperçu", + "remove": "Supprimer", + "rename": "Renommer", + "resolveAll": "Résoudre tout", + "send": "Envoyer", + "sendAnyway": "Envoyer quand même", + "share": "Partager", + "shareContact": "Partager le contact", + "trace": "Trace", + "use": "Utiliser", + "useSelectedFrequency": "Utiliser la fréquence sélectionnée", + "discovery": "Découverte", + "discoverRepeaters": "Découvrir les répéteurs", + "discoverSensors": "Découvrir les capteurs", + "repeaterDiscoverySent": "Découverte de répéteurs envoyée", + "sensorDiscoverySent": "Découverte de capteurs envoyée", + "clearedPendingDiscoveries": "Découvertes en attente effacées.", + "autoDiscovery": "Découverte automatique", + "enableAutomaticAdding": "Activer l'ajout automatique", + "autoaddRepeaters": "Ajout auto des répéteurs", + "autoaddRoomServers": "Ajout auto des serveurs de salle", + "autoaddSensors": "Ajout auto des capteurs", + "autoaddUsers": "Ajout auto des utilisateurs", + "overwriteOldestWhenFull": "Écraser les plus anciens si plein", + "storage": "Stockage", + "dangerZone": "Zone de danger", + "profiles": "Profils", + "favourites": "Favoris", + "sensors": "Capteurs", + "others": "Autres", + "gpsModule": "Module GPS", + "liveTraffic": "Trafic en direct", + "repeatersMap": "Carte des répéteurs", + "spectrumScan": "Scan spectral", + "blePacketLogs": "Journaux de paquets BLE", + "onlineTraceDatabase": "Base de données de traces", + "routePathByteSize": "Taille en octets du chemin", + "messageNotifications": "Notifications de messages", + "sarAlerts": "Alertes SAR", + "discoveryNotifications": "Notifications de découverte", + "updateNotifications": "Notifications de mise à jour", + "muteWhileAppIsOpen": "Muet quand l'appli est ouverte", + "disableContacts": "Désactiver les contacts", + "enableSensorsTab": "Activer l'onglet Capteurs", + "enableProfiles": "Activer les profils", + "autoRouteRotation": "Rotation automatique de route", + "nearestRepeaterFallback": "Répéteur le plus proche en repli", + "deleteAllStoredMessageHistory": "Supprimer tout l'historique", + "messageFontSize": "Taille de police des messages", + "rotateMapWithHeading": "Tourner la carte avec le cap", + "showMapDebugInfo": "Afficher les infos de débogage", + "openMapInFullscreen": "Ouvrir la carte en plein écran", + "showSarMarkersLabel": "Afficher les marqueurs SAR", + "displaySarMarkersOnTheMainMap": "Afficher les marqueurs SAR sur la carte", + "showAllContactTrailsLabel": "Afficher toutes les traces de contacts", + "hideRepeatersOnMap": "Masquer les répéteurs sur la carte", + "setMapScale": "Définir l'échelle de la carte", + "customMapScaleSaved": "Échelle de carte personnalisée enregistrée", + "voiceBitrate": "Débit vocal", + "voiceCompressor": "Compresseur vocal", + "balancesQuietAndLoudSpeechLevels": "Équilibre les niveaux faibles et forts", + "voiceLimiter": "Limiteur vocal", + "preventsClippingPeaksBeforeEncoding": "Empêche l'écrêtage avant l'encodage", + "micAutoGain": "Gain auto du micro", + "letsTheRecorderAdjustInputLevel": "Laisse l'enregistreur ajuster le niveau d'entrée", + "echoCancellation": "Annulation d'écho", + "noiseSuppression": "Suppression du bruit", + "trimSilenceInVoiceMessages": "Couper le silence dans les messages vocaux", + "compressor": "Compresseur", + "limiter": "Limiteur", + "autoGain": "Gain automatique", + "echoCancel": "Écho", + "noiseSuppress": "Bruit", + "silenceTrim": "Silence", + "maxImageSize": "Taille d'image maximale", + "imageCompression": "Compression d'image", + "grayscale": "Niveaux de gris", + "ultraMode": "Mode ultra", + "fastPrivateGpsUpdates": "Mises à jour GPS privées rapides", + "movementThreshold": "Seuil de mouvement", + "fastGpsMovementThreshold": "Seuil de mouvement GPS rapide", + "fastGpsActiveuseInterval": "Intervalle d'utilisation active GPS rapide", + "activeuseUpdateInterval": "Intervalle de mise à jour en utilisation active", + "repeatNearbyTraffic": "Répéter le trafic proche", + "relayThroughRepeatersAcrossTheMesh": "Relayer via les répéteurs du réseau", + "nearbyOnlyWithoutRepeaterFlooding": "Proximité seulement, sans inondation", + "multihop": "Multi-saut", + "createProfile": "Créer un profil", + "renameProfile": "Renommer le profil", + "newProfile": "Nouveau profil", + "manageProfiles": "Gérer les profils", + "enableProfilesToStartManagingThem": "Activez les profils pour commencer à les gérer.", + "openMessage": "Ouvrir le message", + "jumpToTheRelatedSarMessage": "Aller au message SAR associé", + "removeSarMarker": "Supprimer le marqueur SAR", + "pleaseSelectADestinationToSendSarMarker": "Sélectionnez une destination pour envoyer le marqueur", + "sarMarkerBroadcastToPublicChannel": "Marqueur SAR diffusé sur le canal public", + "sarMarkerSentToRoom": "Marqueur SAR envoyé à la salle", + "loadFromGallery": "Charger depuis la galerie", + "replaceImage": "Remplacer l'image", + "selectFromGallery": "Sélectionner depuis la galerie", + "team": "Équipe", + "found": "Trouvé", + "staging": "Zone de regroupement", + "object": "Objet", + "quiet": "Calme", + "moderate": "Modéré", + "busy": "Occupé", + "spectrumScanReturnedNoCandidateFrequencies": "Le scan spectral n'a trouvé aucune fréquence candidate", + "searchMessages": "Rechercher des messages", + "sendImageFromGallery": "Envoyer une image de la galerie", + "takePhoto": "Prendre une photo", + "dmOnly": "Message direct uniquement", + "allMessages": "Tous les messages", + "sendToPublicChannel": "Envoyer au canal public ?", + "selectMarkerTypeAndDestination": "Sélectionnez le type de marqueur et la destination", + "noDestinationsAvailableLabel": "Aucune destination disponible", + "image": "Image", + "format": "Format", + "dimensions": "Dimensions", + "segments": "Segments", + "transfers": "Transferts", + "downloadedBy": "Téléchargé par", + "saveDiscoverySettings": "Enregistrer les paramètres de découverte", + "savePublicInfo": "Enregistrer les infos publiques", + "saveRadioSettings": "Enregistrer les paramètres radio", + "savePath": "Enregistrer le chemin", + "wipeDeviceData": "Effacer les données de l'appareil", + "wipeDevice": "Effacer l'appareil", + "destructiveDeviceActions": "Actions destructives de l'appareil.", + "chooseAPresetOrFinetuneCustomRadioSettings": "Choisissez un préréglage ou ajustez les paramètres radio.", + "chooseTheNameAndLocationThisDeviceShares": "Choisissez le nom et l'emplacement partagés par cet appareil.", + "availableSpaceOnThisDevice": "Espace disponible sur cet appareil.", + "used": "Utilisé", + "total": "Total", + "renameValue": "Renommer la valeur", + "customizeFields": "Personnaliser les champs", + "livePreview": "Aperçu en direct", + "refreshSchedule": "Planification d'actualisation", + "noResponse": "Pas de réponse", + "refreshing": "Actualisation", + "unavailable": "Indisponible", + "pickARelayOrNodeToWatchInSensors": "Choisissez un relais ou nœud à surveiller.", + "publicKeyLabel": "Clé publique", + "alreadyInContacts": "Déjà dans les contacts", + "connectToADeviceBeforeAddingContacts": "Connectez-vous à un appareil avant d'ajouter des contacts", + "fromContacts": "Des contacts", + "onlineOnly": "En ligne uniquement", + "inBoth": "Dans les deux", + "source": "Source", + "manualRouteEdit": "Édition manuelle de route", + "observedMeshRoute": "Route mesh observée", + "allMessagesCleared": "Tous les messages effacés", + "onlineTraceDatabaseCleared": "Base de données de traces effacée", + "packetLogsCleared": "Journaux de paquets effacés", + "hexDataCopiedToClipboard": "Données hex copiées dans le presse-papiers", + "developerModeEnabled": "Mode développeur activé", + "developerModeDisabled": "Mode développeur désactivé", + "clipboardIsEmpty": "Le presse-papiers est vide", + "contactImported": "Contact importé", + "contactLinkCopiedToClipboard": "Lien du contact copié dans le presse-papiers", + "failedToExportContact": "Échec de l'exportation du contact", + "noLogsToExport": "Aucun journal à exporter", + "exportAsCsv": "Exporter en CSV", + "exportAsText": "Exporter en texte", + "receivedRfc3339": "Reçu (RFC3339)", + "buildTime": "Heure de build", + "downloadUrlNotAvailable": "URL de téléchargement non disponible", + "cannotOpenDownloadUrl": "Impossible d'ouvrir l'URL de téléchargement", + "updateCheckIsOnlyAvailableOnAndroid": "La vérification des mises à jour n'est disponible que sur Android", + "youAreRunningTheLatestVersion": "Vous utilisez la dernière version", + "updateAvailableButDownloadUrlNotFound": "Mise à jour disponible mais URL de téléchargement introuvable", + "startTictactoe": "Démarrer Tic-Tac-Toe", + "tictactoeUnavailable": "Tic-Tac-Toe indisponible", + "tictactoeOpponentUnknown": "Tic-Tac-Toe: adversaire inconnu", + "tictactoeWaitingForStart": "Tic-Tac-Toe: en attente du début", + "acceptsShareLinks": "Accepte les liens partagés", + "supportsRawHex": "Supporte le hex brut", + "clipboardfriendly": "Compatible avec le presse-papiers", + "captured": "Capturé", + "size": "Taille", + "noCustomChannelsToClear": "Aucun canal personnalisé à effacer.", + "noDeviceContactsToClear": "Aucun contact de l'appareil à effacer." } diff --git a/lib/l10n/app_hr.arb b/lib/l10n/app_hr.arb index 5e19d56..7675efd 100644 --- a/lib/l10n/app_hr.arb +++ b/lib/l10n/app_hr.arb @@ -563,5 +563,252 @@ "contactFailedToClearRoute": "Brisanje rute nije uspjelo: {error}", "contactRouteCleared": "Ruta obrisana", "contactRouteSet": "Ruta postavljena: {route}", - "contactFailedToSetRoute": "Postavljanje rute nije uspjelo: {error}" + "contactFailedToSetRoute": "Postavljanje rute nije uspjelo: {error}", + "rssi": "RSSI", + "snr": "SNR", + "ackTimeout": "ACK istek vremena", + "opcode": "Opkod", + "payload": "Sadržaj", + "hops": "Skokovi", + "hashSize": "Veličina hash-a", + "pathBytes": "Bajtovi putanje", + "selectedPath": "Odabrana putanja", + "estimatedTx": "Procijenjeno slanje", + "senderToReceipt": "Od pošiljatelja do primitka", + "receivedCopies": "Primljene kopije", + "retryCause": "Razlog ponovnog pokušaja", + "retryMode": "Način ponovnog pokušaja", + "retryResult": "Rezultat ponovnog pokušaja", + "lastRetry": "Zadnji pokušaj", + "rxPackets": "RX paketi", + "mesh": "Mesh", + "rate": "Brzina", + "window": "Prozor", + "posttxDelay": "Kašnjenje nakon slanja", + "bandpass": "Pojasni filtar", + "bandpassFilterVoice": "Pojasni filtar glasa", + "frequency": "Frekvencija", + "australia": "Australija", + "australiaNarrow": "Australija (usko)", + "australiaQld": "Australija: QLD", + "australiaSaWa": "Australija: SA, WA", + "newZealand": "Novi Zeland", + "newZealandNarrow": "Novi Zeland (usko)", + "switzerland": "Švicarska", + "portugal433": "Portugal 433", + "portugal868": "Portugal 868", + "czechRepublicNarrow": "Češka (usko)", + "eu433mhzLongRange": "EU 433MHz (veliki domet)", + "euukDeprecated": "EU/UK (zastarjelo)", + "euukNarrow": "EU/UK (usko)", + "usacanadaRecommended": "SAD/Kanada (preporučeno)", + "vietnamDeprecated": "Vijetnam (zastarjelo)", + "vietnamNarrow": "Vijetnam (usko)", + "active": "Aktivno", + "addContact": "Dodaj kontakt", + "all": "Sve", + "autoResolve": "Automatski razriješi", + "clearAllLabel": "Očisti sve", + "clearRelays": "Očisti posrednike", + "clearFilters": "Očisti filtre", + "clearRoute": "Očisti putanju", + "clearMessages": "Očisti poruke", + "clearScale": "Očisti mjerilo", + "clearDiscoveries": "Očisti otkrića", + "clearOnlineTraceDatabase": "Očisti bazu mrežnih tragova", + "clearAllChannels": "Očisti sve kanale", + "clearAllContacts": "Očisti sve kontakte", + "clearChannels": "Očisti kanale", + "clearContacts": "Očisti kontakte", + "clearPathOnMaxRetry": "Očisti putanju kod maks. pokušaja", + "create": "Stvori", + "custom": "Prilagođeno", + "defaultValue": "Zadano", + "duplicate": "Dupliciraj", + "editName": "Uredi ime", + "open": "Otvori", + "paste": "Zalijepi", + "preview": "Pregled", + "remove": "Ukloni", + "rename": "Preimenuj", + "resolveAll": "Razriješi sve", + "send": "Pošalji", + "sendAnyway": "Svejedno pošalji", + "share": "Dijeli", + "shareContact": "Dijeli kontakt", + "trace": "Praćenje", + "use": "Koristi", + "useSelectedFrequency": "Koristi odabranu frekvenciju", + "discovery": "Otkrivanje", + "discoverRepeaters": "Otkrij posrednike", + "discoverSensors": "Otkrij senzore", + "repeaterDiscoverySent": "Otkrivanje posrednika poslano", + "sensorDiscoverySent": "Otkrivanje senzora poslano", + "clearedPendingDiscoveries": "Očišćena čekajuća otkrića.", + "autoDiscovery": "Automatsko otkrivanje", + "enableAutomaticAdding": "Omogući automatsko dodavanje", + "autoaddRepeaters": "Automatski dodaj posrednike", + "autoaddRoomServers": "Automatski dodaj poslužitelje soba", + "autoaddSensors": "Automatski dodaj senzore", + "autoaddUsers": "Automatski dodaj korisnike", + "overwriteOldestWhenFull": "Prepiši najstarije kad je puno", + "storage": "Pohrana", + "dangerZone": "Opasna zona", + "profiles": "Profili", + "favourites": "Favoriti", + "sensors": "Senzori", + "others": "Ostali", + "gpsModule": "GPS modul", + "liveTraffic": "Promet uživo", + "repeatersMap": "Karta posrednika", + "spectrumScan": "Spektralno skeniranje", + "blePacketLogs": "BLE zapisi paketa", + "onlineTraceDatabase": "Baza mrežnih tragova", + "routePathByteSize": "Veličina putanje u bajtima", + "messageNotifications": "Obavijesti o porukama", + "sarAlerts": "SAR upozorenja", + "discoveryNotifications": "Obavijesti o otkrivanju", + "updateNotifications": "Obavijesti o ažuriranju", + "muteWhileAppIsOpen": "Utišaj dok je aplikacija otvorena", + "disableContacts": "Onemogući kontakte", + "enableSensorsTab": "Omogući karticu Senzori", + "enableProfiles": "Omogući profile", + "autoRouteRotation": "Automatsko rotiranje putanje", + "nearestRepeaterFallback": "Najbliži posrednik kao rezerva", + "deleteAllStoredMessageHistory": "Izbriši svu pohranjenu povijest poruka", + "messageFontSize": "Veličina fonta poruka", + "rotateMapWithHeading": "Rotiraj kartu prema smjeru", + "showMapDebugInfo": "Prikaži debug info karte", + "openMapInFullscreen": "Otvori kartu na cijelom zaslonu", + "showSarMarkersLabel": "Prikaži SAR oznake", + "displaySarMarkersOnTheMainMap": "Prikaži SAR oznake na glavnoj karti", + "showAllContactTrailsLabel": "Prikaži sve tragove kontakata", + "hideRepeatersOnMap": "Sakrij posrednike na karti", + "setMapScale": "Postavi mjerilo karte", + "customMapScaleSaved": "Prilagođeno mjerilo karte spremljeno", + "voiceBitrate": "Bitna brzina glasa", + "voiceCompressor": "Kompresor glasa", + "balancesQuietAndLoudSpeechLevels": "Izravnava tihe i glasne razine govora", + "voiceLimiter": "Ograničivač glasa", + "preventsClippingPeaksBeforeEncoding": "Sprječava rezanje vrhova prije kodiranja", + "micAutoGain": "Automatsko pojačanje mikrofona", + "letsTheRecorderAdjustInputLevel": "Dopušta snimaču prilagodbu razine ulaza", + "echoCancellation": "Poništavanje odjeka", + "noiseSuppression": "Potiskivanje šuma", + "trimSilenceInVoiceMessages": "Izreži tišinu u glasovnim porukama", + "compressor": "Kompresor", + "limiter": "Ograničivač", + "autoGain": "Automatsko pojačanje", + "echoCancel": "Odjek", + "noiseSuppress": "Šum", + "silenceTrim": "Tišina", + "maxImageSize": "Maksimalna veličina slike", + "imageCompression": "Kompresija slike", + "grayscale": "Sivine", + "ultraMode": "Ultra način", + "fastPrivateGpsUpdates": "Brza privatna GPS ažuriranja", + "movementThreshold": "Prag kretanja", + "fastGpsMovementThreshold": "Prag kretanja za brzi GPS", + "fastGpsActiveuseInterval": "Interval aktivnog korištenja brzog GPS-a", + "activeuseUpdateInterval": "Interval ažuriranja pri aktivnom korištenju", + "repeatNearbyTraffic": "Ponovi obližnji promet", + "relayThroughRepeatersAcrossTheMesh": "Proslijedi kroz posrednike kroz mrežu", + "nearbyOnlyWithoutRepeaterFlooding": "Samo obližnji, bez preplavljivanja posrednika", + "multihop": "Višeskočno", + "createProfile": "Stvori profil", + "renameProfile": "Preimenuj profil", + "newProfile": "Novi profil", + "manageProfiles": "Upravljaj profilima", + "enableProfilesToStartManagingThem": "Omogućite profile da biste ih počeli upravljati.", + "openMessage": "Otvori poruku", + "jumpToTheRelatedSarMessage": "Skoči na povezanu SAR poruku", + "removeSarMarker": "Ukloni SAR oznaku", + "pleaseSelectADestinationToSendSarMarker": "Odaberite odredište za slanje SAR oznake", + "sarMarkerBroadcastToPublicChannel": "SAR oznaka emitirana na javni kanal", + "sarMarkerSentToRoom": "SAR oznaka poslana u sobu", + "loadFromGallery": "Učitaj iz galerije", + "replaceImage": "Zamijeni sliku", + "selectFromGallery": "Odaberi iz galerije", + "team": "Tim", + "found": "Pronađeno", + "staging": "Sabirno mjesto", + "object": "Objekt", + "quiet": "Tiho", + "moderate": "Umjereno", + "busy": "Zauzeto", + "spectrumScanReturnedNoCandidateFrequencies": "Spektralno skeniranje nije pronašlo prikladne frekvencije", + "searchMessages": "Pretraži poruke", + "sendImageFromGallery": "Pošalji sliku iz galerije", + "takePhoto": "Snimi fotografiju", + "dmOnly": "Samo izravno", + "allMessages": "Sve poruke", + "sendToPublicChannel": "Pošalji na javni kanal?", + "selectMarkerTypeAndDestination": "Odaberite vrstu oznake i odredište", + "noDestinationsAvailableLabel": "Nema dostupnih odredišta", + "image": "Slika", + "format": "Format", + "dimensions": "Dimenzije", + "segments": "Segmenti", + "transfers": "Prijenosi", + "downloadedBy": "Preuzeo", + "saveDiscoverySettings": "Spremi postavke otkrivanja", + "savePublicInfo": "Spremi javne podatke", + "saveRadioSettings": "Spremi radijske postavke", + "savePath": "Spremi putanju", + "wipeDeviceData": "Obriši podatke uređaja", + "wipeDevice": "Obriši uređaj", + "destructiveDeviceActions": "Destruktivne radnje na uređaju.", + "chooseAPresetOrFinetuneCustomRadioSettings": "Odaberite predefiniranu postavku ili fino podesite radijske postavke.", + "chooseTheNameAndLocationThisDeviceShares": "Odaberite ime i lokaciju koju ovaj uređaj dijeli.", + "availableSpaceOnThisDevice": "Raspoloživi prostor na ovom uređaju.", + "used": "Korišteno", + "total": "Ukupno", + "renameValue": "Preimenuj vrijednost", + "customizeFields": "Prilagodi polja", + "livePreview": "Pregled uživo", + "refreshSchedule": "Raspored osvježavanja", + "noResponse": "Nema odgovora", + "refreshing": "Osvježavam", + "unavailable": "Nedostupno", + "pickARelayOrNodeToWatchInSensors": "Odaberite posrednika ili čvor za praćenje.", + "publicKeyLabel": "Javni ključ", + "alreadyInContacts": "Već u kontaktima", + "connectToADeviceBeforeAddingContacts": "Povežite se s uređajem prije dodavanja kontakata", + "fromContacts": "Iz kontakata", + "onlineOnly": "Samo povezani", + "inBoth": "U oba", + "source": "Izvor", + "manualRouteEdit": "Ručno uređivanje putanje", + "observedMeshRoute": "Opažena mrežna putanja", + "allMessagesCleared": "Sve poruke očišćene", + "onlineTraceDatabaseCleared": "Baza mrežnih tragova očišćena", + "packetLogsCleared": "Zapisi paketa očišćeni", + "hexDataCopiedToClipboard": "Hex podaci kopirani u međuspremnik", + "developerModeEnabled": "Razvojni način omogućen", + "developerModeDisabled": "Razvojni način onemogućen", + "clipboardIsEmpty": "Međuspremnik je prazan", + "contactImported": "Kontakt uvezen", + "contactLinkCopiedToClipboard": "Poveznica na kontakt kopirana u međuspremnik", + "failedToExportContact": "Izvoz kontakta nije uspio", + "noLogsToExport": "Nema zapisa za izvoz", + "exportAsCsv": "Izvezi kao CSV", + "exportAsText": "Izvezi kao tekst", + "receivedRfc3339": "Primljeno (RFC3339)", + "buildTime": "Vrijeme gradnje", + "downloadUrlNotAvailable": "URL za preuzimanje nije dostupan", + "cannotOpenDownloadUrl": "Ne mogu otvoriti URL za preuzimanje", + "updateCheckIsOnlyAvailableOnAndroid": "Provjera ažuriranja dostupna je samo na Androidu", + "youAreRunningTheLatestVersion": "Koristite najnoviju verziju", + "updateAvailableButDownloadUrlNotFound": "Ažuriranje dostupno, ali URL za preuzimanje nije pronađen", + "startTictactoe": "Pokreni Tic-Tac-Toe", + "tictactoeUnavailable": "Tic-Tac-Toe nije dostupan", + "tictactoeOpponentUnknown": "Tic-Tac-Toe: protivnik nepoznat", + "tictactoeWaitingForStart": "Tic-Tac-Toe: čekanje na početak", + "acceptsShareLinks": "Prihvaća dijeljene veze", + "supportsRawHex": "Podržava sirovi hex", + "clipboardfriendly": "Pogodno za međuspremnik", + "captured": "Zabilježeno", + "size": "Veličina", + "noCustomChannelsToClear": "Nema prilagođenih kanala za brisanje.", + "noDeviceContactsToClear": "Nema kontakata uređaja za brisanje." } diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index f01f22d..88a8a98 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -1641,5 +1641,252 @@ "contactFailedToClearRoute": "Impossibile cancellare il percorso: {error}", "contactRouteCleared": "Percorso cancellato", "contactRouteSet": "Percorso impostato: {route}", - "contactFailedToSetRoute": "Impossibile impostare il percorso: {error}" + "contactFailedToSetRoute": "Impossibile impostare il percorso: {error}", + "rssi": "RSSI", + "snr": "SNR", + "ackTimeout": "Timeout ACK", + "opcode": "Opcode", + "payload": "Payload", + "hops": "Hop", + "hashSize": "Dimensione hash", + "pathBytes": "Byte percorso", + "selectedPath": "Percorso selezionato", + "estimatedTx": "Trasmissione stimata", + "senderToReceipt": "Mittente a ricevuta", + "receivedCopies": "Copie ricevute", + "retryCause": "Causa del ritentativo", + "retryMode": "Modalità ritentativo", + "retryResult": "Risultato ritentativo", + "lastRetry": "Ultimo ritentativo", + "rxPackets": "Pacchetti RX", + "mesh": "Mesh", + "rate": "Velocità", + "window": "Finestra", + "posttxDelay": "Ritardo post-tx", + "bandpass": "Passa-banda", + "bandpassFilterVoice": "Filtro passa-banda voce", + "frequency": "Frequenza", + "australia": "Australia", + "australiaNarrow": "Australia (Stretto)", + "australiaQld": "Australia: QLD", + "australiaSaWa": "Australia: SA, WA", + "newZealand": "Nuova Zelanda", + "newZealandNarrow": "Nuova Zelanda (Stretto)", + "switzerland": "Svizzera", + "portugal433": "Portogallo 433", + "portugal868": "Portogallo 868", + "czechRepublicNarrow": "Repubblica Ceca (Stretto)", + "eu433mhzLongRange": "UE 433MHz (Lungo Raggio)", + "euukDeprecated": "UE/UK (Deprecato)", + "euukNarrow": "UE/UK (Stretto)", + "usacanadaRecommended": "USA/Canada (Consigliato)", + "vietnamDeprecated": "Vietnam (Deprecato)", + "vietnamNarrow": "Vietnam (Stretto)", + "active": "Attivo", + "addContact": "Aggiungi contatto", + "all": "Tutto", + "autoResolve": "Risolvi automaticamente", + "clearAllLabel": "Cancella tutto", + "clearRelays": "Cancella relay", + "clearFilters": "Cancella filtri", + "clearRoute": "Cancella percorso", + "clearMessages": "Cancella messaggi", + "clearScale": "Cancella scala", + "clearDiscoveries": "Cancella scoperte", + "clearOnlineTraceDatabase": "Cancella database tracce", + "clearAllChannels": "Cancella tutti i canali", + "clearAllContacts": "Cancella tutti i contatti", + "clearChannels": "Cancella canali", + "clearContacts": "Cancella contatti", + "clearPathOnMaxRetry": "Cancella percorso al max ritentativo", + "create": "Crea", + "custom": "Personalizzato", + "defaultValue": "Predefinito", + "duplicate": "Duplica", + "editName": "Modifica nome", + "open": "Apri", + "paste": "Incolla", + "preview": "Anteprima", + "remove": "Rimuovi", + "rename": "Rinomina", + "resolveAll": "Risolvi tutto", + "send": "Invia", + "sendAnyway": "Invia comunque", + "share": "Condividi", + "shareContact": "Condividi contatto", + "trace": "Traccia", + "use": "Usa", + "useSelectedFrequency": "Usa frequenza selezionata", + "discovery": "Scoperta", + "discoverRepeaters": "Scopri ripetitori", + "discoverSensors": "Scopri sensori", + "repeaterDiscoverySent": "Scoperta ripetitori inviata", + "sensorDiscoverySent": "Scoperta sensori inviata", + "clearedPendingDiscoveries": "Scoperte in attesa cancellate.", + "autoDiscovery": "Scoperta automatica", + "enableAutomaticAdding": "Abilita aggiunta automatica", + "autoaddRepeaters": "Aggiungi ripetitori automaticamente", + "autoaddRoomServers": "Aggiungi server stanze automaticamente", + "autoaddSensors": "Aggiungi sensori automaticamente", + "autoaddUsers": "Aggiungi utenti automaticamente", + "overwriteOldestWhenFull": "Sovrascrivi i più vecchi quando pieno", + "storage": "Archiviazione", + "dangerZone": "Zona pericolosa", + "profiles": "Profili", + "favourites": "Preferiti", + "sensors": "Sensori", + "others": "Altri", + "gpsModule": "Modulo GPS", + "liveTraffic": "Traffico in tempo reale", + "repeatersMap": "Mappa ripetitori", + "spectrumScan": "Scansione spettro", + "blePacketLogs": "Log pacchetti BLE", + "onlineTraceDatabase": "Database tracce", + "routePathByteSize": "Dimensione percorso in byte", + "messageNotifications": "Notifiche messaggi", + "sarAlerts": "Avvisi SAR", + "discoveryNotifications": "Notifiche scoperte", + "updateNotifications": "Notifiche aggiornamenti", + "muteWhileAppIsOpen": "Silenzia con l'app aperta", + "disableContacts": "Disabilita contatti", + "enableSensorsTab": "Abilita scheda Sensori", + "enableProfiles": "Abilita profili", + "autoRouteRotation": "Rotazione automatica percorso", + "nearestRepeaterFallback": "Ripetitore più vicino come fallback", + "deleteAllStoredMessageHistory": "Elimina tutta la cronologia messaggi", + "messageFontSize": "Dimensione carattere messaggi", + "rotateMapWithHeading": "Ruota mappa con direzione", + "showMapDebugInfo": "Mostra info debug mappa", + "openMapInFullscreen": "Apri mappa a schermo intero", + "showSarMarkersLabel": "Mostra marcatori SAR", + "displaySarMarkersOnTheMainMap": "Mostra marcatori SAR sulla mappa principale", + "showAllContactTrailsLabel": "Mostra tutti i percorsi contatti", + "hideRepeatersOnMap": "Nascondi ripetitori sulla mappa", + "setMapScale": "Imposta scala mappa", + "customMapScaleSaved": "Scala mappa personalizzata salvata", + "voiceBitrate": "Bitrate voce", + "voiceCompressor": "Compressore voce", + "balancesQuietAndLoudSpeechLevels": "Bilancia i livelli di voce bassi e alti", + "voiceLimiter": "Limitatore voce", + "preventsClippingPeaksBeforeEncoding": "Previene il clipping prima della codifica", + "micAutoGain": "Guadagno automatico microfono", + "letsTheRecorderAdjustInputLevel": "Permette al registratore di regolare il livello", + "echoCancellation": "Cancellazione eco", + "noiseSuppression": "Soppressione rumore", + "trimSilenceInVoiceMessages": "Taglia silenzio nei messaggi vocali", + "compressor": "Compressore", + "limiter": "Limitatore", + "autoGain": "Guadagno automatico", + "echoCancel": "Eco", + "noiseSuppress": "Rumore", + "silenceTrim": "Silenzio", + "maxImageSize": "Dimensione massima immagine", + "imageCompression": "Compressione immagine", + "grayscale": "Scala di grigi", + "ultraMode": "Modalità ultra", + "fastPrivateGpsUpdates": "Aggiornamenti GPS privati veloci", + "movementThreshold": "Soglia di movimento", + "fastGpsMovementThreshold": "Soglia movimento GPS veloce", + "fastGpsActiveuseInterval": "Intervallo uso attivo GPS veloce", + "activeuseUpdateInterval": "Intervallo aggiornamento uso attivo", + "repeatNearbyTraffic": "Ripeti traffico vicino", + "relayThroughRepeatersAcrossTheMesh": "Inoltra tramite ripetitori nella rete", + "nearbyOnlyWithoutRepeaterFlooding": "Solo vicini, senza flood dei ripetitori", + "multihop": "Multi-hop", + "createProfile": "Crea profilo", + "renameProfile": "Rinomina profilo", + "newProfile": "Nuovo profilo", + "manageProfiles": "Gestisci profili", + "enableProfilesToStartManagingThem": "Abilita i profili per iniziare a gestirli.", + "openMessage": "Apri messaggio", + "jumpToTheRelatedSarMessage": "Vai al messaggio SAR correlato", + "removeSarMarker": "Rimuovi marcatore SAR", + "pleaseSelectADestinationToSendSarMarker": "Seleziona una destinazione per inviare il marcatore SAR", + "sarMarkerBroadcastToPublicChannel": "Marcatore SAR trasmesso al canale pubblico", + "sarMarkerSentToRoom": "Marcatore SAR inviato alla stanza", + "loadFromGallery": "Carica dalla galleria", + "replaceImage": "Sostituisci immagine", + "selectFromGallery": "Seleziona dalla galleria", + "team": "Squadra", + "found": "Trovato", + "staging": "Area di raccolta", + "object": "Oggetto", + "quiet": "Silenzioso", + "moderate": "Moderato", + "busy": "Occupato", + "spectrumScanReturnedNoCandidateFrequencies": "La scansione spettro non ha trovato frequenze candidate", + "searchMessages": "Cerca messaggi", + "sendImageFromGallery": "Invia immagine dalla galleria", + "takePhoto": "Scatta foto", + "dmOnly": "Solo messaggio diretto", + "allMessages": "Tutti i messaggi", + "sendToPublicChannel": "Inviare al canale pubblico?", + "selectMarkerTypeAndDestination": "Seleziona tipo marcatore e destinazione", + "noDestinationsAvailableLabel": "Nessuna destinazione disponibile", + "image": "Immagine", + "format": "Formato", + "dimensions": "Dimensioni", + "segments": "Segmenti", + "transfers": "Trasferimenti", + "downloadedBy": "Scaricato da", + "saveDiscoverySettings": "Salva impostazioni scoperta", + "savePublicInfo": "Salva info pubbliche", + "saveRadioSettings": "Salva impostazioni radio", + "savePath": "Salva percorso", + "wipeDeviceData": "Cancella dati dispositivo", + "wipeDevice": "Cancella dispositivo", + "destructiveDeviceActions": "Azioni distruttive del dispositivo.", + "chooseAPresetOrFinetuneCustomRadioSettings": "Scegli un preset o personalizza le impostazioni radio.", + "chooseTheNameAndLocationThisDeviceShares": "Scegli il nome e la posizione condivisi da questo dispositivo.", + "availableSpaceOnThisDevice": "Spazio disponibile su questo dispositivo.", + "used": "Usato", + "total": "Totale", + "renameValue": "Rinomina valore", + "customizeFields": "Personalizza campi", + "livePreview": "Anteprima dal vivo", + "refreshSchedule": "Programma aggiornamento", + "noResponse": "Nessuna risposta", + "refreshing": "Aggiornamento", + "unavailable": "Non disponibile", + "pickARelayOrNodeToWatchInSensors": "Scegli un relay o nodo da monitorare.", + "publicKeyLabel": "Chiave pubblica", + "alreadyInContacts": "Già nei contatti", + "connectToADeviceBeforeAddingContacts": "Connettiti a un dispositivo prima di aggiungere contatti", + "fromContacts": "Dai contatti", + "onlineOnly": "Solo online", + "inBoth": "In entrambi", + "source": "Origine", + "manualRouteEdit": "Modifica manuale percorso", + "observedMeshRoute": "Percorso mesh osservato", + "allMessagesCleared": "Tutti i messaggi cancellati", + "onlineTraceDatabaseCleared": "Database tracce cancellata", + "packetLogsCleared": "Log pacchetti cancellati", + "hexDataCopiedToClipboard": "Dati hex copiati negli appunti", + "developerModeEnabled": "Modalità sviluppatore attivata", + "developerModeDisabled": "Modalità sviluppatore disattivata", + "clipboardIsEmpty": "Gli appunti sono vuoti", + "contactImported": "Contatto importato", + "contactLinkCopiedToClipboard": "Link contatto copiato negli appunti", + "failedToExportContact": "Esportazione contatto fallita", + "noLogsToExport": "Nessun log da esportare", + "exportAsCsv": "Esporta come CSV", + "exportAsText": "Esporta come testo", + "receivedRfc3339": "Ricevuto (RFC3339)", + "buildTime": "Ora build", + "downloadUrlNotAvailable": "URL di download non disponibile", + "cannotOpenDownloadUrl": "Impossibile aprire URL di download", + "updateCheckIsOnlyAvailableOnAndroid": "Il controllo aggiornamenti è disponibile solo su Android", + "youAreRunningTheLatestVersion": "Stai utilizzando l'ultima versione", + "updateAvailableButDownloadUrlNotFound": "Aggiornamento disponibile ma URL di download non trovato", + "startTictactoe": "Avvia Tic-Tac-Toe", + "tictactoeUnavailable": "Tic-Tac-Toe non disponibile", + "tictactoeOpponentUnknown": "Tic-Tac-Toe: avversario sconosciuto", + "tictactoeWaitingForStart": "Tic-Tac-Toe: in attesa dell'inizio", + "acceptsShareLinks": "Accetta link condivisi", + "supportsRawHex": "Supporta hex grezzo", + "clipboardfriendly": "Compatibile con appunti", + "captured": "Catturato", + "size": "Dimensione", + "noCustomChannelsToClear": "Nessun canale personalizzato da cancellare.", + "noDeviceContactsToClear": "Nessun contatto dispositivo da cancellare." } diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 415656d..6a09a68 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -3515,6 +3515,1488 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Failed to set route: {error}'** String contactFailedToSetRoute(String error); + + /// Received signal strength indicator + /// + /// In en, this message translates to: + /// **'RSSI'** + String get rssi; + + /// Signal-to-noise ratio + /// + /// In en, this message translates to: + /// **'SNR'** + String get snr; + + /// No description provided for @ackTimeout. + /// + /// In en, this message translates to: + /// **'ACK timeout'** + String get ackTimeout; + + /// No description provided for @opcode. + /// + /// In en, this message translates to: + /// **'Opcode'** + String get opcode; + + /// No description provided for @payload. + /// + /// In en, this message translates to: + /// **'Payload'** + String get payload; + + /// No description provided for @hops. + /// + /// In en, this message translates to: + /// **'Hops'** + String get hops; + + /// No description provided for @hashSize. + /// + /// In en, this message translates to: + /// **'Hash size'** + String get hashSize; + + /// No description provided for @pathBytes. + /// + /// In en, this message translates to: + /// **'Path bytes'** + String get pathBytes; + + /// No description provided for @selectedPath. + /// + /// In en, this message translates to: + /// **'Selected path'** + String get selectedPath; + + /// No description provided for @estimatedTx. + /// + /// In en, this message translates to: + /// **'Estimated tx'** + String get estimatedTx; + + /// No description provided for @senderToReceipt. + /// + /// In en, this message translates to: + /// **'Sender to receipt'** + String get senderToReceipt; + + /// No description provided for @receivedCopies. + /// + /// In en, this message translates to: + /// **'Received copies'** + String get receivedCopies; + + /// No description provided for @retryCause. + /// + /// In en, this message translates to: + /// **'Retry cause'** + String get retryCause; + + /// No description provided for @retryMode. + /// + /// In en, this message translates to: + /// **'Retry mode'** + String get retryMode; + + /// No description provided for @retryResult. + /// + /// In en, this message translates to: + /// **'Retry result'** + String get retryResult; + + /// No description provided for @lastRetry. + /// + /// In en, this message translates to: + /// **'Last retry'** + String get lastRetry; + + /// No description provided for @rxPackets. + /// + /// In en, this message translates to: + /// **'RX packets'** + String get rxPackets; + + /// No description provided for @mesh. + /// + /// In en, this message translates to: + /// **'Mesh'** + String get mesh; + + /// No description provided for @rate. + /// + /// In en, this message translates to: + /// **'Rate'** + String get rate; + + /// No description provided for @window. + /// + /// In en, this message translates to: + /// **'Window'** + String get window; + + /// No description provided for @posttxDelay. + /// + /// In en, this message translates to: + /// **'Post-tx delay'** + String get posttxDelay; + + /// No description provided for @bandpass. + /// + /// In en, this message translates to: + /// **'Band-pass'** + String get bandpass; + + /// No description provided for @bandpassFilterVoice. + /// + /// In en, this message translates to: + /// **'Band-pass filter voice'** + String get bandpassFilterVoice; + + /// No description provided for @frequency. + /// + /// In en, this message translates to: + /// **'Frequency'** + String get frequency; + + /// No description provided for @australia. + /// + /// In en, this message translates to: + /// **'Australia'** + String get australia; + + /// No description provided for @australiaNarrow. + /// + /// In en, this message translates to: + /// **'Australia (Narrow)'** + String get australiaNarrow; + + /// No description provided for @australiaQld. + /// + /// In en, this message translates to: + /// **'Australia: QLD'** + String get australiaQld; + + /// No description provided for @australiaSaWa. + /// + /// In en, this message translates to: + /// **'Australia: SA, WA'** + String get australiaSaWa; + + /// No description provided for @newZealand. + /// + /// In en, this message translates to: + /// **'New Zealand'** + String get newZealand; + + /// No description provided for @newZealandNarrow. + /// + /// In en, this message translates to: + /// **'New Zealand (Narrow)'** + String get newZealandNarrow; + + /// No description provided for @switzerland. + /// + /// In en, this message translates to: + /// **'Switzerland'** + String get switzerland; + + /// No description provided for @portugal433. + /// + /// In en, this message translates to: + /// **'Portugal 433'** + String get portugal433; + + /// No description provided for @portugal868. + /// + /// In en, this message translates to: + /// **'Portugal 868'** + String get portugal868; + + /// No description provided for @czechRepublicNarrow. + /// + /// In en, this message translates to: + /// **'Czech Republic (Narrow)'** + String get czechRepublicNarrow; + + /// No description provided for @eu433mhzLongRange. + /// + /// In en, this message translates to: + /// **'EU 433MHz (Long Range)'** + String get eu433mhzLongRange; + + /// No description provided for @euukDeprecated. + /// + /// In en, this message translates to: + /// **'EU/UK (Deprecated)'** + String get euukDeprecated; + + /// No description provided for @euukNarrow. + /// + /// In en, this message translates to: + /// **'EU/UK (Narrow)'** + String get euukNarrow; + + /// No description provided for @usacanadaRecommended. + /// + /// In en, this message translates to: + /// **'USA/Canada (Recommended)'** + String get usacanadaRecommended; + + /// No description provided for @vietnamDeprecated. + /// + /// In en, this message translates to: + /// **'Vietnam (Deprecated)'** + String get vietnamDeprecated; + + /// No description provided for @vietnamNarrow. + /// + /// In en, this message translates to: + /// **'Vietnam (Narrow)'** + String get vietnamNarrow; + + /// No description provided for @active. + /// + /// In en, this message translates to: + /// **'Active'** + String get active; + + /// No description provided for @addContact. + /// + /// In en, this message translates to: + /// **'Add Contact'** + String get addContact; + + /// No description provided for @all. + /// + /// In en, this message translates to: + /// **'All'** + String get all; + + /// No description provided for @autoResolve. + /// + /// In en, this message translates to: + /// **'Auto resolve'** + String get autoResolve; + + /// No description provided for @clearAllLabel. + /// + /// In en, this message translates to: + /// **'Clear all'** + String get clearAllLabel; + + /// No description provided for @clearRelays. + /// + /// In en, this message translates to: + /// **'Clear relays'** + String get clearRelays; + + /// No description provided for @clearFilters. + /// + /// In en, this message translates to: + /// **'Clear filters'** + String get clearFilters; + + /// No description provided for @clearRoute. + /// + /// In en, this message translates to: + /// **'Clear Route'** + String get clearRoute; + + /// No description provided for @clearMessages. + /// + /// In en, this message translates to: + /// **'Clear Messages'** + String get clearMessages; + + /// No description provided for @clearScale. + /// + /// In en, this message translates to: + /// **'Clear scale'** + String get clearScale; + + /// No description provided for @clearDiscoveries. + /// + /// In en, this message translates to: + /// **'Clear discoveries'** + String get clearDiscoveries; + + /// No description provided for @clearOnlineTraceDatabase. + /// + /// In en, this message translates to: + /// **'Clear online trace database'** + String get clearOnlineTraceDatabase; + + /// No description provided for @clearAllChannels. + /// + /// In en, this message translates to: + /// **'Clear all channels'** + String get clearAllChannels; + + /// No description provided for @clearAllContacts. + /// + /// In en, this message translates to: + /// **'Clear all contacts'** + String get clearAllContacts; + + /// No description provided for @clearChannels. + /// + /// In en, this message translates to: + /// **'Clear channels'** + String get clearChannels; + + /// No description provided for @clearContacts. + /// + /// In en, this message translates to: + /// **'Clear contacts'** + String get clearContacts; + + /// No description provided for @clearPathOnMaxRetry. + /// + /// In en, this message translates to: + /// **'Clear path on max retry'** + String get clearPathOnMaxRetry; + + /// No description provided for @create. + /// + /// In en, this message translates to: + /// **'Create'** + String get create; + + /// No description provided for @custom. + /// + /// In en, this message translates to: + /// **'Custom'** + String get custom; + + /// No description provided for @defaultValue. + /// + /// In en, this message translates to: + /// **'Default'** + String get defaultValue; + + /// No description provided for @duplicate. + /// + /// In en, this message translates to: + /// **'Duplicate'** + String get duplicate; + + /// No description provided for @editName. + /// + /// In en, this message translates to: + /// **'Edit name'** + String get editName; + + /// No description provided for @open. + /// + /// In en, this message translates to: + /// **'Open'** + String get open; + + /// No description provided for @paste. + /// + /// In en, this message translates to: + /// **'Paste'** + String get paste; + + /// No description provided for @preview. + /// + /// In en, this message translates to: + /// **'Preview'** + String get preview; + + /// No description provided for @remove. + /// + /// In en, this message translates to: + /// **'Remove'** + String get remove; + + /// No description provided for @rename. + /// + /// In en, this message translates to: + /// **'Rename'** + String get rename; + + /// No description provided for @resolveAll. + /// + /// In en, this message translates to: + /// **'Resolve all'** + String get resolveAll; + + /// No description provided for @send. + /// + /// In en, this message translates to: + /// **'Send'** + String get send; + + /// No description provided for @sendAnyway. + /// + /// In en, this message translates to: + /// **'Send anyway'** + String get sendAnyway; + + /// No description provided for @share. + /// + /// In en, this message translates to: + /// **'Share'** + String get share; + + /// No description provided for @shareContact. + /// + /// In en, this message translates to: + /// **'Share Contact'** + String get shareContact; + + /// No description provided for @trace. + /// + /// In en, this message translates to: + /// **'Trace'** + String get trace; + + /// No description provided for @use. + /// + /// In en, this message translates to: + /// **'Use'** + String get use; + + /// No description provided for @useSelectedFrequency. + /// + /// In en, this message translates to: + /// **'Use selected frequency'** + String get useSelectedFrequency; + + /// No description provided for @discovery. + /// + /// In en, this message translates to: + /// **'Discovery'** + String get discovery; + + /// No description provided for @discoverRepeaters. + /// + /// In en, this message translates to: + /// **'Discover repeaters'** + String get discoverRepeaters; + + /// No description provided for @discoverSensors. + /// + /// In en, this message translates to: + /// **'Discover sensors'** + String get discoverSensors; + + /// No description provided for @repeaterDiscoverySent. + /// + /// In en, this message translates to: + /// **'Repeater discovery sent'** + String get repeaterDiscoverySent; + + /// No description provided for @sensorDiscoverySent. + /// + /// In en, this message translates to: + /// **'Sensor discovery sent'** + String get sensorDiscoverySent; + + /// No description provided for @clearedPendingDiscoveries. + /// + /// In en, this message translates to: + /// **'Cleared pending discoveries.'** + String get clearedPendingDiscoveries; + + /// No description provided for @autoDiscovery. + /// + /// In en, this message translates to: + /// **'Auto discovery'** + String get autoDiscovery; + + /// No description provided for @enableAutomaticAdding. + /// + /// In en, this message translates to: + /// **'Enable automatic adding'** + String get enableAutomaticAdding; + + /// No description provided for @autoaddRepeaters. + /// + /// In en, this message translates to: + /// **'Auto-add repeaters'** + String get autoaddRepeaters; + + /// No description provided for @autoaddRoomServers. + /// + /// In en, this message translates to: + /// **'Auto-add room servers'** + String get autoaddRoomServers; + + /// No description provided for @autoaddSensors. + /// + /// In en, this message translates to: + /// **'Auto-add sensors'** + String get autoaddSensors; + + /// No description provided for @autoaddUsers. + /// + /// In en, this message translates to: + /// **'Auto-add users'** + String get autoaddUsers; + + /// No description provided for @overwriteOldestWhenFull. + /// + /// In en, this message translates to: + /// **'Overwrite oldest when full'** + String get overwriteOldestWhenFull; + + /// No description provided for @storage. + /// + /// In en, this message translates to: + /// **'Storage'** + String get storage; + + /// No description provided for @dangerZone. + /// + /// In en, this message translates to: + /// **'Danger zone'** + String get dangerZone; + + /// No description provided for @profiles. + /// + /// In en, this message translates to: + /// **'Profiles'** + String get profiles; + + /// No description provided for @favourites. + /// + /// In en, this message translates to: + /// **'Favourites'** + String get favourites; + + /// No description provided for @sensors. + /// + /// In en, this message translates to: + /// **'Sensors'** + String get sensors; + + /// No description provided for @others. + /// + /// In en, this message translates to: + /// **'Others'** + String get others; + + /// No description provided for @gpsModule. + /// + /// In en, this message translates to: + /// **'GPS Module'** + String get gpsModule; + + /// No description provided for @liveTraffic. + /// + /// In en, this message translates to: + /// **'Live Traffic'** + String get liveTraffic; + + /// No description provided for @repeatersMap. + /// + /// In en, this message translates to: + /// **'Repeaters Map'** + String get repeatersMap; + + /// No description provided for @spectrumScan. + /// + /// In en, this message translates to: + /// **'Spectrum Scan'** + String get spectrumScan; + + /// No description provided for @blePacketLogs. + /// + /// In en, this message translates to: + /// **'BLE Packet Logs'** + String get blePacketLogs; + + /// No description provided for @onlineTraceDatabase. + /// + /// In en, this message translates to: + /// **'Online trace database'** + String get onlineTraceDatabase; + + /// No description provided for @routePathByteSize. + /// + /// In en, this message translates to: + /// **'Route path byte size'** + String get routePathByteSize; + + /// No description provided for @messageNotifications. + /// + /// In en, this message translates to: + /// **'Message notifications'** + String get messageNotifications; + + /// No description provided for @sarAlerts. + /// + /// In en, this message translates to: + /// **'SAR alerts'** + String get sarAlerts; + + /// No description provided for @discoveryNotifications. + /// + /// In en, this message translates to: + /// **'Discovery notifications'** + String get discoveryNotifications; + + /// No description provided for @updateNotifications. + /// + /// In en, this message translates to: + /// **'Update notifications'** + String get updateNotifications; + + /// No description provided for @muteWhileAppIsOpen. + /// + /// In en, this message translates to: + /// **'Mute while app is open'** + String get muteWhileAppIsOpen; + + /// No description provided for @disableContacts. + /// + /// In en, this message translates to: + /// **'Disable Contacts'** + String get disableContacts; + + /// No description provided for @enableSensorsTab. + /// + /// In en, this message translates to: + /// **'Enable Sensors tab'** + String get enableSensorsTab; + + /// No description provided for @enableProfiles. + /// + /// In en, this message translates to: + /// **'Enable Profiles'** + String get enableProfiles; + + /// No description provided for @autoRouteRotation. + /// + /// In en, this message translates to: + /// **'Auto route rotation'** + String get autoRouteRotation; + + /// No description provided for @nearestRepeaterFallback. + /// + /// In en, this message translates to: + /// **'Nearest repeater fallback'** + String get nearestRepeaterFallback; + + /// No description provided for @deleteAllStoredMessageHistory. + /// + /// In en, this message translates to: + /// **'Delete all stored message history'** + String get deleteAllStoredMessageHistory; + + /// No description provided for @messageFontSize. + /// + /// In en, this message translates to: + /// **'Message font size'** + String get messageFontSize; + + /// No description provided for @rotateMapWithHeading. + /// + /// In en, this message translates to: + /// **'Rotate map with heading'** + String get rotateMapWithHeading; + + /// No description provided for @showMapDebugInfo. + /// + /// In en, this message translates to: + /// **'Show map debug info'** + String get showMapDebugInfo; + + /// No description provided for @openMapInFullscreen. + /// + /// In en, this message translates to: + /// **'Open map in fullscreen'** + String get openMapInFullscreen; + + /// No description provided for @showSarMarkersLabel. + /// + /// In en, this message translates to: + /// **'Show SAR markers'** + String get showSarMarkersLabel; + + /// No description provided for @displaySarMarkersOnTheMainMap. + /// + /// In en, this message translates to: + /// **'Display SAR markers on the main map'** + String get displaySarMarkersOnTheMainMap; + + /// No description provided for @showAllContactTrailsLabel. + /// + /// In en, this message translates to: + /// **'Show all contact trails'** + String get showAllContactTrailsLabel; + + /// No description provided for @hideRepeatersOnMap. + /// + /// In en, this message translates to: + /// **'Hide repeaters on map'** + String get hideRepeatersOnMap; + + /// No description provided for @setMapScale. + /// + /// In en, this message translates to: + /// **'Set map scale'** + String get setMapScale; + + /// No description provided for @customMapScaleSaved. + /// + /// In en, this message translates to: + /// **'Custom map scale saved'** + String get customMapScaleSaved; + + /// No description provided for @voiceBitrate. + /// + /// In en, this message translates to: + /// **'Voice bitrate'** + String get voiceBitrate; + + /// No description provided for @voiceCompressor. + /// + /// In en, this message translates to: + /// **'Voice compressor'** + String get voiceCompressor; + + /// No description provided for @balancesQuietAndLoudSpeechLevels. + /// + /// In en, this message translates to: + /// **'Balances quiet and loud speech levels'** + String get balancesQuietAndLoudSpeechLevels; + + /// No description provided for @voiceLimiter. + /// + /// In en, this message translates to: + /// **'Voice limiter'** + String get voiceLimiter; + + /// No description provided for @preventsClippingPeaksBeforeEncoding. + /// + /// In en, this message translates to: + /// **'Prevents clipping peaks before encoding'** + String get preventsClippingPeaksBeforeEncoding; + + /// No description provided for @micAutoGain. + /// + /// In en, this message translates to: + /// **'Mic auto gain'** + String get micAutoGain; + + /// No description provided for @letsTheRecorderAdjustInputLevel. + /// + /// In en, this message translates to: + /// **'Lets the recorder adjust input level'** + String get letsTheRecorderAdjustInputLevel; + + /// No description provided for @echoCancellation. + /// + /// In en, this message translates to: + /// **'Echo cancellation'** + String get echoCancellation; + + /// No description provided for @noiseSuppression. + /// + /// In en, this message translates to: + /// **'Noise suppression'** + String get noiseSuppression; + + /// No description provided for @trimSilenceInVoiceMessages. + /// + /// In en, this message translates to: + /// **'Trim silence in voice messages'** + String get trimSilenceInVoiceMessages; + + /// No description provided for @compressor. + /// + /// In en, this message translates to: + /// **'Compressor'** + String get compressor; + + /// No description provided for @limiter. + /// + /// In en, this message translates to: + /// **'Limiter'** + String get limiter; + + /// No description provided for @autoGain. + /// + /// In en, this message translates to: + /// **'Auto gain'** + String get autoGain; + + /// No description provided for @echoCancel. + /// + /// In en, this message translates to: + /// **'Echo cancel'** + String get echoCancel; + + /// No description provided for @noiseSuppress. + /// + /// In en, this message translates to: + /// **'Noise suppress'** + String get noiseSuppress; + + /// No description provided for @silenceTrim. + /// + /// In en, this message translates to: + /// **'Silence trim'** + String get silenceTrim; + + /// No description provided for @maxImageSize. + /// + /// In en, this message translates to: + /// **'Max image size'** + String get maxImageSize; + + /// No description provided for @imageCompression. + /// + /// In en, this message translates to: + /// **'Image compression'** + String get imageCompression; + + /// No description provided for @grayscale. + /// + /// In en, this message translates to: + /// **'Grayscale'** + String get grayscale; + + /// No description provided for @ultraMode. + /// + /// In en, this message translates to: + /// **'Ultra mode'** + String get ultraMode; + + /// No description provided for @fastPrivateGpsUpdates. + /// + /// In en, this message translates to: + /// **'Fast private GPS updates'** + String get fastPrivateGpsUpdates; + + /// No description provided for @movementThreshold. + /// + /// In en, this message translates to: + /// **'Movement threshold'** + String get movementThreshold; + + /// No description provided for @fastGpsMovementThreshold. + /// + /// In en, this message translates to: + /// **'Fast GPS movement threshold'** + String get fastGpsMovementThreshold; + + /// No description provided for @fastGpsActiveuseInterval. + /// + /// In en, this message translates to: + /// **'Fast GPS active-use interval'** + String get fastGpsActiveuseInterval; + + /// No description provided for @activeuseUpdateInterval. + /// + /// In en, this message translates to: + /// **'Active-use update interval'** + String get activeuseUpdateInterval; + + /// No description provided for @repeatNearbyTraffic. + /// + /// In en, this message translates to: + /// **'Repeat nearby traffic'** + String get repeatNearbyTraffic; + + /// No description provided for @relayThroughRepeatersAcrossTheMesh. + /// + /// In en, this message translates to: + /// **'Relay through repeaters across the mesh'** + String get relayThroughRepeatersAcrossTheMesh; + + /// No description provided for @nearbyOnlyWithoutRepeaterFlooding. + /// + /// In en, this message translates to: + /// **'Nearby only, without repeater flooding'** + String get nearbyOnlyWithoutRepeaterFlooding; + + /// No description provided for @multihop. + /// + /// In en, this message translates to: + /// **'Multi-hop'** + String get multihop; + + /// No description provided for @createProfile. + /// + /// In en, this message translates to: + /// **'Create Profile'** + String get createProfile; + + /// No description provided for @renameProfile. + /// + /// In en, this message translates to: + /// **'Rename Profile'** + String get renameProfile; + + /// No description provided for @newProfile. + /// + /// In en, this message translates to: + /// **'New Profile'** + String get newProfile; + + /// No description provided for @manageProfiles. + /// + /// In en, this message translates to: + /// **'Manage profiles'** + String get manageProfiles; + + /// No description provided for @enableProfilesToStartManagingThem. + /// + /// In en, this message translates to: + /// **'Enable profiles to start managing them.'** + String get enableProfilesToStartManagingThem; + + /// No description provided for @openMessage. + /// + /// In en, this message translates to: + /// **'Open message'** + String get openMessage; + + /// No description provided for @jumpToTheRelatedSarMessage. + /// + /// In en, this message translates to: + /// **'Jump to the related SAR message'** + String get jumpToTheRelatedSarMessage; + + /// No description provided for @removeSarMarker. + /// + /// In en, this message translates to: + /// **'Remove SAR marker'** + String get removeSarMarker; + + /// No description provided for @pleaseSelectADestinationToSendSarMarker. + /// + /// In en, this message translates to: + /// **'Please select a destination to send SAR marker'** + String get pleaseSelectADestinationToSendSarMarker; + + /// No description provided for @sarMarkerBroadcastToPublicChannel. + /// + /// In en, this message translates to: + /// **'SAR marker broadcast to public channel'** + String get sarMarkerBroadcastToPublicChannel; + + /// No description provided for @sarMarkerSentToRoom. + /// + /// In en, this message translates to: + /// **'SAR marker sent to room'** + String get sarMarkerSentToRoom; + + /// No description provided for @loadFromGallery. + /// + /// In en, this message translates to: + /// **'Load from gallery'** + String get loadFromGallery; + + /// No description provided for @replaceImage. + /// + /// In en, this message translates to: + /// **'Replace image'** + String get replaceImage; + + /// No description provided for @selectFromGallery. + /// + /// In en, this message translates to: + /// **'Select from gallery'** + String get selectFromGallery; + + /// No description provided for @team. + /// + /// In en, this message translates to: + /// **'Team'** + String get team; + + /// No description provided for @found. + /// + /// In en, this message translates to: + /// **'Found'** + String get found; + + /// No description provided for @staging. + /// + /// In en, this message translates to: + /// **'Staging'** + String get staging; + + /// No description provided for @object. + /// + /// In en, this message translates to: + /// **'Object'** + String get object; + + /// No description provided for @quiet. + /// + /// In en, this message translates to: + /// **'Quiet'** + String get quiet; + + /// No description provided for @moderate. + /// + /// In en, this message translates to: + /// **'Moderate'** + String get moderate; + + /// No description provided for @busy. + /// + /// In en, this message translates to: + /// **'Busy'** + String get busy; + + /// No description provided for @spectrumScanReturnedNoCandidateFrequencies. + /// + /// In en, this message translates to: + /// **'Spectrum scan returned no candidate frequencies'** + String get spectrumScanReturnedNoCandidateFrequencies; + + /// No description provided for @searchMessages. + /// + /// In en, this message translates to: + /// **'Search messages'** + String get searchMessages; + + /// No description provided for @sendImageFromGallery. + /// + /// In en, this message translates to: + /// **'Send image from gallery'** + String get sendImageFromGallery; + + /// No description provided for @takePhoto. + /// + /// In en, this message translates to: + /// **'Take photo'** + String get takePhoto; + + /// No description provided for @dmOnly. + /// + /// In en, this message translates to: + /// **'DM only'** + String get dmOnly; + + /// No description provided for @allMessages. + /// + /// In en, this message translates to: + /// **'All messages'** + String get allMessages; + + /// No description provided for @sendToPublicChannel. + /// + /// In en, this message translates to: + /// **'Send to Public Channel?'** + String get sendToPublicChannel; + + /// No description provided for @selectMarkerTypeAndDestination. + /// + /// In en, this message translates to: + /// **'Select marker type and destination'** + String get selectMarkerTypeAndDestination; + + /// No description provided for @noDestinationsAvailableLabel. + /// + /// In en, this message translates to: + /// **'No destinations available'** + String get noDestinationsAvailableLabel; + + /// No description provided for @image. + /// + /// In en, this message translates to: + /// **'Image'** + String get image; + + /// No description provided for @format. + /// + /// In en, this message translates to: + /// **'Format'** + String get format; + + /// No description provided for @dimensions. + /// + /// In en, this message translates to: + /// **'Dimensions'** + String get dimensions; + + /// No description provided for @segments. + /// + /// In en, this message translates to: + /// **'Segments'** + String get segments; + + /// No description provided for @transfers. + /// + /// In en, this message translates to: + /// **'Transfers'** + String get transfers; + + /// No description provided for @downloadedBy. + /// + /// In en, this message translates to: + /// **'Downloaded by'** + String get downloadedBy; + + /// No description provided for @saveDiscoverySettings. + /// + /// In en, this message translates to: + /// **'Save discovery settings'** + String get saveDiscoverySettings; + + /// No description provided for @savePublicInfo. + /// + /// In en, this message translates to: + /// **'Save public info'** + String get savePublicInfo; + + /// No description provided for @saveRadioSettings. + /// + /// In en, this message translates to: + /// **'Save radio settings'** + String get saveRadioSettings; + + /// No description provided for @savePath. + /// + /// In en, this message translates to: + /// **'Save Path'** + String get savePath; + + /// No description provided for @wipeDeviceData. + /// + /// In en, this message translates to: + /// **'Wipe device data'** + String get wipeDeviceData; + + /// No description provided for @wipeDevice. + /// + /// In en, this message translates to: + /// **'Wipe device'** + String get wipeDevice; + + /// No description provided for @destructiveDeviceActions. + /// + /// In en, this message translates to: + /// **'Destructive device actions.'** + String get destructiveDeviceActions; + + /// No description provided for @chooseAPresetOrFinetuneCustomRadioSettings. + /// + /// In en, this message translates to: + /// **'Choose a preset or fine-tune custom radio settings.'** + String get chooseAPresetOrFinetuneCustomRadioSettings; + + /// No description provided for @chooseTheNameAndLocationThisDeviceShares. + /// + /// In en, this message translates to: + /// **'Choose the name and location this device shares.'** + String get chooseTheNameAndLocationThisDeviceShares; + + /// No description provided for @availableSpaceOnThisDevice. + /// + /// In en, this message translates to: + /// **'Available space on this device.'** + String get availableSpaceOnThisDevice; + + /// No description provided for @used. + /// + /// In en, this message translates to: + /// **'Used'** + String get used; + + /// No description provided for @total. + /// + /// In en, this message translates to: + /// **'Total'** + String get total; + + /// No description provided for @renameValue. + /// + /// In en, this message translates to: + /// **'Rename value'** + String get renameValue; + + /// No description provided for @customizeFields. + /// + /// In en, this message translates to: + /// **'Customize fields'** + String get customizeFields; + + /// No description provided for @livePreview. + /// + /// In en, this message translates to: + /// **'Live preview'** + String get livePreview; + + /// No description provided for @refreshSchedule. + /// + /// In en, this message translates to: + /// **'Refresh schedule'** + String get refreshSchedule; + + /// No description provided for @noResponse. + /// + /// In en, this message translates to: + /// **'No response'** + String get noResponse; + + /// No description provided for @refreshing. + /// + /// In en, this message translates to: + /// **'Refreshing'** + String get refreshing; + + /// No description provided for @unavailable. + /// + /// In en, this message translates to: + /// **'Unavailable'** + String get unavailable; + + /// No description provided for @pickARelayOrNodeToWatchInSensors. + /// + /// In en, this message translates to: + /// **'Pick a relay or node to watch in Sensors.'** + String get pickARelayOrNodeToWatchInSensors; + + /// No description provided for @publicKeyLabel. + /// + /// In en, this message translates to: + /// **'Public key'** + String get publicKeyLabel; + + /// No description provided for @alreadyInContacts. + /// + /// In en, this message translates to: + /// **'Already in contacts'** + String get alreadyInContacts; + + /// No description provided for @connectToADeviceBeforeAddingContacts. + /// + /// In en, this message translates to: + /// **'Connect to a device before adding contacts'** + String get connectToADeviceBeforeAddingContacts; + + /// No description provided for @fromContacts. + /// + /// In en, this message translates to: + /// **'From contacts'** + String get fromContacts; + + /// No description provided for @onlineOnly. + /// + /// In en, this message translates to: + /// **'Online only'** + String get onlineOnly; + + /// No description provided for @inBoth. + /// + /// In en, this message translates to: + /// **'In both'** + String get inBoth; + + /// No description provided for @source. + /// + /// In en, this message translates to: + /// **'Source'** + String get source; + + /// No description provided for @manualRouteEdit. + /// + /// In en, this message translates to: + /// **'Manual route edit'** + String get manualRouteEdit; + + /// No description provided for @observedMeshRoute. + /// + /// In en, this message translates to: + /// **'Observed mesh route'** + String get observedMeshRoute; + + /// No description provided for @allMessagesCleared. + /// + /// In en, this message translates to: + /// **'All messages cleared'** + String get allMessagesCleared; + + /// No description provided for @onlineTraceDatabaseCleared. + /// + /// In en, this message translates to: + /// **'Online trace database cleared'** + String get onlineTraceDatabaseCleared; + + /// No description provided for @packetLogsCleared. + /// + /// In en, this message translates to: + /// **'Packet logs cleared'** + String get packetLogsCleared; + + /// No description provided for @hexDataCopiedToClipboard. + /// + /// In en, this message translates to: + /// **'Hex data copied to clipboard'** + String get hexDataCopiedToClipboard; + + /// No description provided for @developerModeEnabled. + /// + /// In en, this message translates to: + /// **'Developer mode enabled'** + String get developerModeEnabled; + + /// No description provided for @developerModeDisabled. + /// + /// In en, this message translates to: + /// **'Developer mode disabled'** + String get developerModeDisabled; + + /// No description provided for @clipboardIsEmpty. + /// + /// In en, this message translates to: + /// **'Clipboard is empty'** + String get clipboardIsEmpty; + + /// No description provided for @contactImported. + /// + /// In en, this message translates to: + /// **'Contact imported'** + String get contactImported; + + /// No description provided for @contactLinkCopiedToClipboard. + /// + /// In en, this message translates to: + /// **'Contact link copied to clipboard'** + String get contactLinkCopiedToClipboard; + + /// No description provided for @failedToExportContact. + /// + /// In en, this message translates to: + /// **'Failed to export contact'** + String get failedToExportContact; + + /// No description provided for @noLogsToExport. + /// + /// In en, this message translates to: + /// **'No logs to export'** + String get noLogsToExport; + + /// No description provided for @exportAsCsv. + /// + /// In en, this message translates to: + /// **'Export as CSV'** + String get exportAsCsv; + + /// No description provided for @exportAsText. + /// + /// In en, this message translates to: + /// **'Export as Text'** + String get exportAsText; + + /// No description provided for @receivedRfc3339. + /// + /// In en, this message translates to: + /// **'Received (RFC3339)'** + String get receivedRfc3339; + + /// No description provided for @buildTime. + /// + /// In en, this message translates to: + /// **'Build Time'** + String get buildTime; + + /// No description provided for @downloadUrlNotAvailable. + /// + /// In en, this message translates to: + /// **'Download URL not available'** + String get downloadUrlNotAvailable; + + /// No description provided for @cannotOpenDownloadUrl. + /// + /// In en, this message translates to: + /// **'Cannot open download URL'** + String get cannotOpenDownloadUrl; + + /// No description provided for @updateCheckIsOnlyAvailableOnAndroid. + /// + /// In en, this message translates to: + /// **'Update check is only available on Android'** + String get updateCheckIsOnlyAvailableOnAndroid; + + /// No description provided for @youAreRunningTheLatestVersion. + /// + /// In en, this message translates to: + /// **'You are running the latest version'** + String get youAreRunningTheLatestVersion; + + /// No description provided for @updateAvailableButDownloadUrlNotFound. + /// + /// In en, this message translates to: + /// **'Update available but download URL not found'** + String get updateAvailableButDownloadUrlNotFound; + + /// No description provided for @startTictactoe. + /// + /// In en, this message translates to: + /// **'Start Tic-Tac-Toe'** + String get startTictactoe; + + /// No description provided for @tictactoeUnavailable. + /// + /// In en, this message translates to: + /// **'Tic-Tac-Toe unavailable'** + String get tictactoeUnavailable; + + /// No description provided for @tictactoeOpponentUnknown. + /// + /// In en, this message translates to: + /// **'Tic-Tac-Toe: opponent unknown'** + String get tictactoeOpponentUnknown; + + /// No description provided for @tictactoeWaitingForStart. + /// + /// In en, this message translates to: + /// **'Tic-Tac-Toe: waiting for start'** + String get tictactoeWaitingForStart; + + /// No description provided for @acceptsShareLinks. + /// + /// In en, this message translates to: + /// **'Accepts share links'** + String get acceptsShareLinks; + + /// No description provided for @supportsRawHex. + /// + /// In en, this message translates to: + /// **'Supports raw hex'** + String get supportsRawHex; + + /// No description provided for @clipboardfriendly. + /// + /// In en, this message translates to: + /// **'Clipboard-friendly'** + String get clipboardfriendly; + + /// No description provided for @captured. + /// + /// In en, this message translates to: + /// **'Captured'** + String get captured; + + /// No description provided for @size. + /// + /// In en, this message translates to: + /// **'Size'** + String get size; + + /// No description provided for @noCustomChannelsToClear. + /// + /// In en, this message translates to: + /// **'No custom channels to clear.'** + String get noCustomChannelsToClear; + + /// No description provided for @noDeviceContactsToClear. + /// + /// In en, this message translates to: + /// **'No device contacts to clear.'** + String get noDeviceContactsToClear; } class _AppLocalizationsDelegate diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart index 7cb4d62..2cf2288 100644 --- a/lib/l10n/app_localizations_de.dart +++ b/lib/l10n/app_localizations_de.dart @@ -1929,4 +1929,773 @@ class AppLocalizationsDe extends AppLocalizations { String contactFailedToSetRoute(String error) { return 'Pfad konnte nicht gesetzt werden: $error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'ACK-Zeitüberschreitung'; + + @override + String get opcode => 'Opcode'; + + @override + String get payload => 'Nutzlast'; + + @override + String get hops => 'Hops'; + + @override + String get hashSize => 'Hash-Größe'; + + @override + String get pathBytes => 'Pfad-Bytes'; + + @override + String get selectedPath => 'Ausgewählter Pfad'; + + @override + String get estimatedTx => 'Geschätzte Sendung'; + + @override + String get senderToReceipt => 'Sender bis Empfang'; + + @override + String get receivedCopies => 'Empfangene Kopien'; + + @override + String get retryCause => 'Wiederholungsursache'; + + @override + String get retryMode => 'Wiederholungsmodus'; + + @override + String get retryResult => 'Wiederholungsergebnis'; + + @override + String get lastRetry => 'Letzter Versuch'; + + @override + String get rxPackets => 'RX-Pakete'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => 'Rate'; + + @override + String get window => 'Fenster'; + + @override + String get posttxDelay => 'Sendeverzögerung'; + + @override + String get bandpass => 'Bandpass'; + + @override + String get bandpassFilterVoice => 'Bandpassfilter Sprache'; + + @override + String get frequency => 'Frequenz'; + + @override + String get australia => 'Australien'; + + @override + String get australiaNarrow => 'Australien (Schmal)'; + + @override + String get australiaQld => 'Australien: QLD'; + + @override + String get australiaSaWa => 'Australien: SA, WA'; + + @override + String get newZealand => 'Neuseeland'; + + @override + String get newZealandNarrow => 'Neuseeland (Schmal)'; + + @override + String get switzerland => 'Schweiz'; + + @override + String get portugal433 => 'Portugal 433'; + + @override + String get portugal868 => 'Portugal 868'; + + @override + String get czechRepublicNarrow => 'Tschechien (Schmal)'; + + @override + String get eu433mhzLongRange => 'EU 433MHz (Langstrecke)'; + + @override + String get euukDeprecated => 'EU/UK (Veraltet)'; + + @override + String get euukNarrow => 'EU/UK (Schmal)'; + + @override + String get usacanadaRecommended => 'USA/Kanada (Empfohlen)'; + + @override + String get vietnamDeprecated => 'Vietnam (Veraltet)'; + + @override + String get vietnamNarrow => 'Vietnam (Schmal)'; + + @override + String get active => 'Aktiv'; + + @override + String get addContact => 'Kontakt hinzufügen'; + + @override + String get all => 'Alle'; + + @override + String get autoResolve => 'Automatisch auflösen'; + + @override + String get clearAllLabel => 'Alle löschen'; + + @override + String get clearRelays => 'Relais löschen'; + + @override + String get clearFilters => 'Filter löschen'; + + @override + String get clearRoute => 'Route löschen'; + + @override + String get clearMessages => 'Nachrichten löschen'; + + @override + String get clearScale => 'Maßstab löschen'; + + @override + String get clearDiscoveries => 'Entdeckungen löschen'; + + @override + String get clearOnlineTraceDatabase => 'Online-Trace-Datenbank löschen'; + + @override + String get clearAllChannels => 'Alle Kanäle löschen'; + + @override + String get clearAllContacts => 'Alle Kontakte löschen'; + + @override + String get clearChannels => 'Kanäle löschen'; + + @override + String get clearContacts => 'Kontakte löschen'; + + @override + String get clearPathOnMaxRetry => 'Pfad bei max. Wiederholung löschen'; + + @override + String get create => 'Erstellen'; + + @override + String get custom => 'Benutzerdefiniert'; + + @override + String get defaultValue => 'Standard'; + + @override + String get duplicate => 'Duplizieren'; + + @override + String get editName => 'Name bearbeiten'; + + @override + String get open => 'Öffnen'; + + @override + String get paste => 'Einfügen'; + + @override + String get preview => 'Vorschau'; + + @override + String get remove => 'Entfernen'; + + @override + String get rename => 'Umbenennen'; + + @override + String get resolveAll => 'Alle auflösen'; + + @override + String get send => 'Senden'; + + @override + String get sendAnyway => 'Trotzdem senden'; + + @override + String get share => 'Teilen'; + + @override + String get shareContact => 'Kontakt teilen'; + + @override + String get trace => 'Trace'; + + @override + String get use => 'Verwenden'; + + @override + String get useSelectedFrequency => 'Ausgewählte Frequenz verwenden'; + + @override + String get discovery => 'Erkennung'; + + @override + String get discoverRepeaters => 'Repeater entdecken'; + + @override + String get discoverSensors => 'Sensoren entdecken'; + + @override + String get repeaterDiscoverySent => 'Repeater-Erkennung gesendet'; + + @override + String get sensorDiscoverySent => 'Sensor-Erkennung gesendet'; + + @override + String get clearedPendingDiscoveries => 'Ausstehende Entdeckungen gelöscht.'; + + @override + String get autoDiscovery => 'Automatische Erkennung'; + + @override + String get enableAutomaticAdding => 'Automatisches Hinzufügen aktivieren'; + + @override + String get autoaddRepeaters => 'Repeater automatisch hinzufügen'; + + @override + String get autoaddRoomServers => 'Raumserver automatisch hinzufügen'; + + @override + String get autoaddSensors => 'Sensoren automatisch hinzufügen'; + + @override + String get autoaddUsers => 'Benutzer automatisch hinzufügen'; + + @override + String get overwriteOldestWhenFull => + 'Älteste bei vollem Speicher überschreiben'; + + @override + String get storage => 'Speicher'; + + @override + String get dangerZone => 'Gefahrenbereich'; + + @override + String get profiles => 'Profile'; + + @override + String get favourites => 'Favoriten'; + + @override + String get sensors => 'Sensoren'; + + @override + String get others => 'Andere'; + + @override + String get gpsModule => 'GPS-Modul'; + + @override + String get liveTraffic => 'Live-Verkehr'; + + @override + String get repeatersMap => 'Repeater-Karte'; + + @override + String get spectrumScan => 'Spektrum-Scan'; + + @override + String get blePacketLogs => 'BLE-Paketprotokolle'; + + @override + String get onlineTraceDatabase => 'Online-Trace-Datenbank'; + + @override + String get routePathByteSize => 'Pfad-Bytegröße'; + + @override + String get messageNotifications => 'Nachrichtenbenachrichtigungen'; + + @override + String get sarAlerts => 'SAR-Alarme'; + + @override + String get discoveryNotifications => 'Erkennungsbenachrichtigungen'; + + @override + String get updateNotifications => 'Updatebenachrichtigungen'; + + @override + String get muteWhileAppIsOpen => 'Stumm bei geöffneter App'; + + @override + String get disableContacts => 'Kontakte deaktivieren'; + + @override + String get enableSensorsTab => 'Sensoren-Tab aktivieren'; + + @override + String get enableProfiles => 'Profile aktivieren'; + + @override + String get autoRouteRotation => 'Automatische Routenrotation'; + + @override + String get nearestRepeaterFallback => 'Nächster Repeater als Fallback'; + + @override + String get deleteAllStoredMessageHistory => + 'Gesamten Nachrichtenverlauf löschen'; + + @override + String get messageFontSize => 'Nachrichtenschriftgröße'; + + @override + String get rotateMapWithHeading => 'Karte mit Richtung drehen'; + + @override + String get showMapDebugInfo => 'Karten-Debug-Info anzeigen'; + + @override + String get openMapInFullscreen => 'Karte im Vollbild öffnen'; + + @override + String get showSarMarkersLabel => 'SAR-Markierungen anzeigen'; + + @override + String get displaySarMarkersOnTheMainMap => + 'SAR-Markierungen auf der Hauptkarte anzeigen'; + + @override + String get showAllContactTrailsLabel => 'Alle Kontaktpfade anzeigen'; + + @override + String get hideRepeatersOnMap => 'Repeater auf Karte ausblenden'; + + @override + String get setMapScale => 'Kartenmaßstab einstellen'; + + @override + String get customMapScaleSaved => + 'Benutzerdefinierter Kartenmaßstab gespeichert'; + + @override + String get voiceBitrate => 'Sprach-Bitrate'; + + @override + String get voiceCompressor => 'Sprachkompressor'; + + @override + String get balancesQuietAndLoudSpeechLevels => + 'Gleicht leise und laute Sprache aus'; + + @override + String get voiceLimiter => 'Sprach-Limiter'; + + @override + String get preventsClippingPeaksBeforeEncoding => + 'Verhindert Clipping-Spitzen vor der Kodierung'; + + @override + String get micAutoGain => 'Mikrofon-Automatik'; + + @override + String get letsTheRecorderAdjustInputLevel => + 'Lässt den Rekorder den Eingangspegel anpassen'; + + @override + String get echoCancellation => 'Echounterdrückung'; + + @override + String get noiseSuppression => 'Rauschunterdrückung'; + + @override + String get trimSilenceInVoiceMessages => + 'Stille in Sprachnachrichten trimmen'; + + @override + String get compressor => 'Kompressor'; + + @override + String get limiter => 'Limiter'; + + @override + String get autoGain => 'Automatische Verstärkung'; + + @override + String get echoCancel => 'Echo'; + + @override + String get noiseSuppress => 'Rauschen'; + + @override + String get silenceTrim => 'Stille'; + + @override + String get maxImageSize => 'Maximale Bildgröße'; + + @override + String get imageCompression => 'Bildkomprimierung'; + + @override + String get grayscale => 'Graustufen'; + + @override + String get ultraMode => 'Ultra-Modus'; + + @override + String get fastPrivateGpsUpdates => 'Schnelle private GPS-Updates'; + + @override + String get movementThreshold => 'Bewegungsschwelle'; + + @override + String get fastGpsMovementThreshold => 'Schneller GPS-Bewegungsschwellenwert'; + + @override + String get fastGpsActiveuseInterval => + 'Schnelles GPS aktive Nutzung Intervall'; + + @override + String get activeuseUpdateInterval => 'Aktive Nutzung Updateintervall'; + + @override + String get repeatNearbyTraffic => 'Nahverkehr wiederholen'; + + @override + String get relayThroughRepeatersAcrossTheMesh => + 'Über Repeater im Mesh weiterleiten'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => + 'Nur in der Nähe, ohne Repeater-Flooding'; + + @override + String get multihop => 'Multi-Hop'; + + @override + String get createProfile => 'Profil erstellen'; + + @override + String get renameProfile => 'Profil umbenennen'; + + @override + String get newProfile => 'Neues Profil'; + + @override + String get manageProfiles => 'Profile verwalten'; + + @override + String get enableProfilesToStartManagingThem => + 'Aktivieren Sie Profile, um sie zu verwalten.'; + + @override + String get openMessage => 'Nachricht öffnen'; + + @override + String get jumpToTheRelatedSarMessage => + 'Zur zugehörigen SAR-Nachricht springen'; + + @override + String get removeSarMarker => 'SAR-Markierung entfernen'; + + @override + String get pleaseSelectADestinationToSendSarMarker => + 'Bitte wählen Sie ein Ziel zum Senden der SAR-Markierung'; + + @override + String get sarMarkerBroadcastToPublicChannel => + 'SAR-Markierung an öffentlichen Kanal gesendet'; + + @override + String get sarMarkerSentToRoom => 'SAR-Markierung an Raum gesendet'; + + @override + String get loadFromGallery => 'Aus Galerie laden'; + + @override + String get replaceImage => 'Bild ersetzen'; + + @override + String get selectFromGallery => 'Aus Galerie auswählen'; + + @override + String get team => 'Team'; + + @override + String get found => 'Gefunden'; + + @override + String get staging => 'Sammelpunkt'; + + @override + String get object => 'Objekt'; + + @override + String get quiet => 'Ruhig'; + + @override + String get moderate => 'Mäßig'; + + @override + String get busy => 'Beschäftigt'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => + 'Spektrum-Scan hat keine Kandidatenfrequenzen gefunden'; + + @override + String get searchMessages => 'Nachrichten suchen'; + + @override + String get sendImageFromGallery => 'Bild aus Galerie senden'; + + @override + String get takePhoto => 'Foto aufnehmen'; + + @override + String get dmOnly => 'Nur Direktnachricht'; + + @override + String get allMessages => 'Alle Nachrichten'; + + @override + String get sendToPublicChannel => 'An öffentlichen Kanal senden?'; + + @override + String get selectMarkerTypeAndDestination => + 'Markierungstyp und Ziel auswählen'; + + @override + String get noDestinationsAvailableLabel => 'Keine Ziele verfügbar'; + + @override + String get image => 'Bild'; + + @override + String get format => 'Format'; + + @override + String get dimensions => 'Abmessungen'; + + @override + String get segments => 'Segmente'; + + @override + String get transfers => 'Übertragungen'; + + @override + String get downloadedBy => 'Heruntergeladen von'; + + @override + String get saveDiscoverySettings => 'Erkennungseinstellungen speichern'; + + @override + String get savePublicInfo => 'Öffentliche Info speichern'; + + @override + String get saveRadioSettings => 'Funkeinstellungen speichern'; + + @override + String get savePath => 'Pfad speichern'; + + @override + String get wipeDeviceData => 'Gerätedaten löschen'; + + @override + String get wipeDevice => 'Gerät löschen'; + + @override + String get destructiveDeviceActions => 'Destruktive Geräteaktionen.'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => + 'Wählen Sie eine Voreinstellung oder passen Sie die Funkeinstellungen an.'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => + 'Wählen Sie den Namen und Standort, den dieses Gerät teilt.'; + + @override + String get availableSpaceOnThisDevice => + 'Verfügbarer Speicherplatz auf diesem Gerät.'; + + @override + String get used => 'Belegt'; + + @override + String get total => 'Gesamt'; + + @override + String get renameValue => 'Wert umbenennen'; + + @override + String get customizeFields => 'Felder anpassen'; + + @override + String get livePreview => 'Live-Vorschau'; + + @override + String get refreshSchedule => 'Aktualisierungsplan'; + + @override + String get noResponse => 'Keine Antwort'; + + @override + String get refreshing => 'Wird aktualisiert'; + + @override + String get unavailable => 'Nicht verfügbar'; + + @override + String get pickARelayOrNodeToWatchInSensors => + 'Wählen Sie einen Relay oder Knoten zur Beobachtung.'; + + @override + String get publicKeyLabel => 'Öffentlicher Schlüssel'; + + @override + String get alreadyInContacts => 'Bereits in Kontakten'; + + @override + String get connectToADeviceBeforeAddingContacts => + 'Verbinden Sie sich mit einem Gerät, bevor Sie Kontakte hinzufügen'; + + @override + String get fromContacts => 'Aus Kontakten'; + + @override + String get onlineOnly => 'Nur online'; + + @override + String get inBoth => 'In beiden'; + + @override + String get source => 'Quelle'; + + @override + String get manualRouteEdit => 'Manuelle Routenbearbeitung'; + + @override + String get observedMeshRoute => 'Beobachtete Mesh-Route'; + + @override + String get allMessagesCleared => 'Alle Nachrichten gelöscht'; + + @override + String get onlineTraceDatabaseCleared => 'Online-Trace-Datenbank gelöscht'; + + @override + String get packetLogsCleared => 'Paketprotokolle gelöscht'; + + @override + String get hexDataCopiedToClipboard => + 'Hex-Daten in die Zwischenablage kopiert'; + + @override + String get developerModeEnabled => 'Entwicklermodus aktiviert'; + + @override + String get developerModeDisabled => 'Entwicklermodus deaktiviert'; + + @override + String get clipboardIsEmpty => 'Zwischenablage ist leer'; + + @override + String get contactImported => 'Kontakt importiert'; + + @override + String get contactLinkCopiedToClipboard => + 'Kontaktlink in Zwischenablage kopiert'; + + @override + String get failedToExportContact => 'Kontaktexport fehlgeschlagen'; + + @override + String get noLogsToExport => 'Keine Protokolle zum Exportieren'; + + @override + String get exportAsCsv => 'Als CSV exportieren'; + + @override + String get exportAsText => 'Als Text exportieren'; + + @override + String get receivedRfc3339 => 'Empfangen (RFC3339)'; + + @override + String get buildTime => 'Build-Zeit'; + + @override + String get downloadUrlNotAvailable => 'Download-URL nicht verfügbar'; + + @override + String get cannotOpenDownloadUrl => 'Download-URL kann nicht geöffnet werden'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => + 'Update-Prüfung nur auf Android verfügbar'; + + @override + String get youAreRunningTheLatestVersion => + 'Sie verwenden die neueste Version'; + + @override + String get updateAvailableButDownloadUrlNotFound => + 'Update verfügbar, aber Download-URL nicht gefunden'; + + @override + String get startTictactoe => 'Tic-Tac-Toe starten'; + + @override + String get tictactoeUnavailable => 'Tic-Tac-Toe nicht verfügbar'; + + @override + String get tictactoeOpponentUnknown => 'Tic-Tac-Toe: Gegner unbekannt'; + + @override + String get tictactoeWaitingForStart => 'Tic-Tac-Toe: Warten auf Start'; + + @override + String get acceptsShareLinks => 'Akzeptiert freigegebene Links'; + + @override + String get supportsRawHex => 'Unterstützt rohes Hex'; + + @override + String get clipboardfriendly => 'Zwischenablage-freundlich'; + + @override + String get captured => 'Erfasst'; + + @override + String get size => 'Größe'; + + @override + String get noCustomChannelsToClear => + 'Keine benutzerdefinierten Kanäle zum Löschen.'; + + @override + String get noDeviceContactsToClear => 'Keine Gerätekontakte zum Löschen.'; } diff --git a/lib/l10n/app_localizations_el.dart b/lib/l10n/app_localizations_el.dart index 490315f..911f7fa 100644 --- a/lib/l10n/app_localizations_el.dart +++ b/lib/l10n/app_localizations_el.dart @@ -1936,4 +1936,768 @@ class AppLocalizationsEl extends AppLocalizations { String contactFailedToSetRoute(String error) { return 'Αποτυχία ορισμού διαδρομής: $error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'Λήξη χρόνου ACK'; + + @override + String get opcode => 'Opcode'; + + @override + String get payload => 'Ωφέλιμο φορτίο'; + + @override + String get hops => 'Αναπηδήσεις'; + + @override + String get hashSize => 'Μέγεθος hash'; + + @override + String get pathBytes => 'Bytes διαδρομής'; + + @override + String get selectedPath => 'Επιλεγμένη διαδρομή'; + + @override + String get estimatedTx => 'Εκτιμώμενη εκπομπή'; + + @override + String get senderToReceipt => 'Αποστολέας σε απόδειξη'; + + @override + String get receivedCopies => 'Ληφθέντα αντίγραφα'; + + @override + String get retryCause => 'Αιτία επανάληψης'; + + @override + String get retryMode => 'Λειτουργία επανάληψης'; + + @override + String get retryResult => 'Αποτέλεσμα επανάληψης'; + + @override + String get lastRetry => 'Τελευταία επανάληψη'; + + @override + String get rxPackets => 'Πακέτα RX'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => 'Ρυθμός'; + + @override + String get window => 'Παράθυρο'; + + @override + String get posttxDelay => 'Καθυστέρηση μετά-tx'; + + @override + String get bandpass => 'Ζωνοπερατό'; + + @override + String get bandpassFilterVoice => 'Ζωνοπερατό φίλτρο φωνής'; + + @override + String get frequency => 'Συχνότητα'; + + @override + String get australia => 'Αυστραλία'; + + @override + String get australiaNarrow => 'Αυστραλία (Στενό)'; + + @override + String get australiaQld => 'Αυστραλία: QLD'; + + @override + String get australiaSaWa => 'Αυστραλία: SA, WA'; + + @override + String get newZealand => 'Νέα Ζηλανδία'; + + @override + String get newZealandNarrow => 'Νέα Ζηλανδία (Στενό)'; + + @override + String get switzerland => 'Ελβετία'; + + @override + String get portugal433 => 'Πορτογαλία 433'; + + @override + String get portugal868 => 'Πορτογαλία 868'; + + @override + String get czechRepublicNarrow => 'Τσεχία (Στενό)'; + + @override + String get eu433mhzLongRange => 'ΕΕ 433MHz (Μεγάλη Εμβέλεια)'; + + @override + String get euukDeprecated => 'ΕΕ/ΗΒ (Παρωχημένο)'; + + @override + String get euukNarrow => 'ΕΕ/ΗΒ (Στενό)'; + + @override + String get usacanadaRecommended => 'ΗΠΑ/Καναδάς (Προτεινόμενο)'; + + @override + String get vietnamDeprecated => 'Βιετνάμ (Παρωχημένο)'; + + @override + String get vietnamNarrow => 'Βιετνάμ (Στενό)'; + + @override + String get active => 'Ενεργό'; + + @override + String get addContact => 'Προσθήκη επαφής'; + + @override + String get all => 'Όλα'; + + @override + String get autoResolve => 'Αυτόματη επίλυση'; + + @override + String get clearAllLabel => 'Εκκαθάριση όλων'; + + @override + String get clearRelays => 'Εκκαθάριση αναμεταδοτών'; + + @override + String get clearFilters => 'Εκκαθάριση φίλτρων'; + + @override + String get clearRoute => 'Εκκαθάριση διαδρομής'; + + @override + String get clearMessages => 'Εκκαθάριση μηνυμάτων'; + + @override + String get clearScale => 'Εκκαθάριση κλίμακας'; + + @override + String get clearDiscoveries => 'Εκκαθάριση ανακαλύψεων'; + + @override + String get clearOnlineTraceDatabase => 'Εκκαθάριση βάσης ιχνών'; + + @override + String get clearAllChannels => 'Εκκαθάριση όλων των καναλιών'; + + @override + String get clearAllContacts => 'Εκκαθάριση όλων των επαφών'; + + @override + String get clearChannels => 'Εκκαθάριση καναλιών'; + + @override + String get clearContacts => 'Εκκαθάριση επαφών'; + + @override + String get clearPathOnMaxRetry => 'Εκκαθάριση μονοπατιού στο μέγιστο'; + + @override + String get create => 'Δημιουργία'; + + @override + String get custom => 'Προσαρμοσμένο'; + + @override + String get defaultValue => 'Προεπιλογή'; + + @override + String get duplicate => 'Αντιγραφή'; + + @override + String get editName => 'Επεξεργασία ονόματος'; + + @override + String get open => 'Άνοιγμα'; + + @override + String get paste => 'Επικόλληση'; + + @override + String get preview => 'Προεπισκόπηση'; + + @override + String get remove => 'Αφαίρεση'; + + @override + String get rename => 'Μετονομασία'; + + @override + String get resolveAll => 'Επίλυση όλων'; + + @override + String get send => 'Αποστολή'; + + @override + String get sendAnyway => 'Αποστολή ούτως ή άλλως'; + + @override + String get share => 'Κοινοποίηση'; + + @override + String get shareContact => 'Κοινοποίηση επαφής'; + + @override + String get trace => 'Ίχνος'; + + @override + String get use => 'Χρήση'; + + @override + String get useSelectedFrequency => 'Χρήση επιλεγμένης συχνότητας'; + + @override + String get discovery => 'Ανακάλυψη'; + + @override + String get discoverRepeaters => 'Ανακάλυψη αναμεταδοτών'; + + @override + String get discoverSensors => 'Ανακάλυψη αισθητήρων'; + + @override + String get repeaterDiscoverySent => 'Αποστολή ανακάλυψης αναμεταδοτών'; + + @override + String get sensorDiscoverySent => 'Αποστολή ανακάλυψης αισθητήρων'; + + @override + String get clearedPendingDiscoveries => 'Εκκαθάριση εκκρεμών ανακαλύψεων.'; + + @override + String get autoDiscovery => 'Αυτόματη ανακάλυψη'; + + @override + String get enableAutomaticAdding => 'Ενεργοποίηση αυτόματης προσθήκης'; + + @override + String get autoaddRepeaters => 'Αυτόματη προσθήκη αναμεταδοτών'; + + @override + String get autoaddRoomServers => 'Αυτόματη προσθήκη διακομιστών δωματίου'; + + @override + String get autoaddSensors => 'Αυτόματη προσθήκη αισθητήρων'; + + @override + String get autoaddUsers => 'Αυτόματη προσθήκη χρηστών'; + + @override + String get overwriteOldestWhenFull => + 'Αντικατάσταση παλαιότερων όταν γεμίσει'; + + @override + String get storage => 'Αποθήκευση'; + + @override + String get dangerZone => 'Ζώνη κινδύνου'; + + @override + String get profiles => 'Προφίλ'; + + @override + String get favourites => 'Αγαπημένα'; + + @override + String get sensors => 'Αισθητήρες'; + + @override + String get others => 'Άλλοι'; + + @override + String get gpsModule => 'Μονάδα GPS'; + + @override + String get liveTraffic => 'Ζωντανή κίνηση'; + + @override + String get repeatersMap => 'Χάρτης αναμεταδοτών'; + + @override + String get spectrumScan => 'Σάρωση φάσματος'; + + @override + String get blePacketLogs => 'Αρχεία πακέτων BLE'; + + @override + String get onlineTraceDatabase => 'Βάση δεδομένων ιχνών'; + + @override + String get routePathByteSize => 'Μέγεθος διαδρομής σε bytes'; + + @override + String get messageNotifications => 'Ειδοποιήσεις μηνυμάτων'; + + @override + String get sarAlerts => 'Ειδοποιήσεις SAR'; + + @override + String get discoveryNotifications => 'Ειδοποιήσεις ανακάλυψης'; + + @override + String get updateNotifications => 'Ειδοποιήσεις ενημερώσεων'; + + @override + String get muteWhileAppIsOpen => 'Σίγαση με ανοιχτή εφαρμογή'; + + @override + String get disableContacts => 'Απενεργοποίηση επαφών'; + + @override + String get enableSensorsTab => 'Ενεργοποίηση καρτέλας Αισθητήρων'; + + @override + String get enableProfiles => 'Ενεργοποίηση προφίλ'; + + @override + String get autoRouteRotation => 'Αυτόματη εναλλαγή διαδρομής'; + + @override + String get nearestRepeaterFallback => 'Πλησιέστερος αναμεταδότης ως εφεδρεία'; + + @override + String get deleteAllStoredMessageHistory => 'Διαγραφή όλου του ιστορικού'; + + @override + String get messageFontSize => 'Μέγεθος γραμματοσειράς μηνυμάτων'; + + @override + String get rotateMapWithHeading => 'Περιστροφή χάρτη με κατεύθυνση'; + + @override + String get showMapDebugInfo => 'Εμφάνιση πληροφοριών αποσφαλμάτωσης'; + + @override + String get openMapInFullscreen => 'Άνοιγμα χάρτη σε πλήρη οθόνη'; + + @override + String get showSarMarkersLabel => 'Εμφάνιση δεικτών SAR'; + + @override + String get displaySarMarkersOnTheMainMap => + 'Εμφάνιση δεικτών SAR στον κύριο χάρτη'; + + @override + String get showAllContactTrailsLabel => 'Εμφάνιση όλων των ιχνών επαφών'; + + @override + String get hideRepeatersOnMap => 'Απόκρυψη αναμεταδοτών στον χάρτη'; + + @override + String get setMapScale => 'Ρύθμιση κλίμακας χάρτη'; + + @override + String get customMapScaleSaved => 'Προσαρμοσμένη κλίμακα χάρτη αποθηκεύτηκε'; + + @override + String get voiceBitrate => 'Ρυθμός bit φωνής'; + + @override + String get voiceCompressor => 'Συμπιεστής φωνής'; + + @override + String get balancesQuietAndLoudSpeechLevels => + 'Εξισορρόπηση χαμηλών και δυνατών επιπέδων'; + + @override + String get voiceLimiter => 'Περιοριστής φωνής'; + + @override + String get preventsClippingPeaksBeforeEncoding => + 'Αποτρέπει κοπή κορυφών πριν την κωδικοποίηση'; + + @override + String get micAutoGain => 'Αυτόματη ενίσχυση μικροφώνου'; + + @override + String get letsTheRecorderAdjustInputLevel => + 'Αφήνει τη συσκευή να ρυθμίσει την ένταση'; + + @override + String get echoCancellation => 'Ακύρωση ηχούς'; + + @override + String get noiseSuppression => 'Καταστολή θορύβου'; + + @override + String get trimSilenceInVoiceMessages => + 'Περικοπή σιωπής σε φωνητικά μηνύματα'; + + @override + String get compressor => 'Συμπιεστής'; + + @override + String get limiter => 'Περιοριστής'; + + @override + String get autoGain => 'Αυτόματη ενίσχυση'; + + @override + String get echoCancel => 'Ηχώ'; + + @override + String get noiseSuppress => 'Θόρυβος'; + + @override + String get silenceTrim => 'Σιωπή'; + + @override + String get maxImageSize => 'Μέγιστο μέγεθος εικόνας'; + + @override + String get imageCompression => 'Συμπίεση εικόνας'; + + @override + String get grayscale => 'Κλίμακα του γκρι'; + + @override + String get ultraMode => 'Λειτουργία ultra'; + + @override + String get fastPrivateGpsUpdates => 'Γρήγορες ιδιωτικές ενημερώσεις GPS'; + + @override + String get movementThreshold => 'Κατώφλι κίνησης'; + + @override + String get fastGpsMovementThreshold => 'Κατώφλι κίνησης γρήγορου GPS'; + + @override + String get fastGpsActiveuseInterval => 'Διάστημα ενεργής χρήσης γρήγορου GPS'; + + @override + String get activeuseUpdateInterval => 'Διάστημα ενημέρωσης ενεργής χρήσης'; + + @override + String get repeatNearbyTraffic => 'Επανάληψη κοντινής κίνησης'; + + @override + String get relayThroughRepeatersAcrossTheMesh => + 'Αναμετάδοση μέσω αναμεταδοτών στο δίκτυο'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => + 'Μόνο κοντά, χωρίς πλημμυρισμό'; + + @override + String get multihop => 'Πολλαπλών αναπηδήσεων'; + + @override + String get createProfile => 'Δημιουργία προφίλ'; + + @override + String get renameProfile => 'Μετονομασία προφίλ'; + + @override + String get newProfile => 'Νέο προφίλ'; + + @override + String get manageProfiles => 'Διαχείριση προφίλ'; + + @override + String get enableProfilesToStartManagingThem => + 'Ενεργοποιήστε τα προφίλ για να τα διαχειριστείτε.'; + + @override + String get openMessage => 'Άνοιγμα μηνύματος'; + + @override + String get jumpToTheRelatedSarMessage => 'Μετάβαση στο σχετικό μήνυμα SAR'; + + @override + String get removeSarMarker => 'Αφαίρεση δείκτη SAR'; + + @override + String get pleaseSelectADestinationToSendSarMarker => + 'Επιλέξτε προορισμό για αποστολή δείκτη SAR'; + + @override + String get sarMarkerBroadcastToPublicChannel => + 'Δείκτης SAR εκπεμπόμενος στο δημόσιο κανάλι'; + + @override + String get sarMarkerSentToRoom => 'Δείκτης SAR εστάλη στο δωμάτιο'; + + @override + String get loadFromGallery => 'Φόρτωση από τη γκαλερί'; + + @override + String get replaceImage => 'Αντικατάσταση εικόνας'; + + @override + String get selectFromGallery => 'Επιλογή από τη γκαλερί'; + + @override + String get team => 'Ομάδα'; + + @override + String get found => 'Βρέθηκε'; + + @override + String get staging => 'Χώρος συγκέντρωσης'; + + @override + String get object => 'Αντικείμενο'; + + @override + String get quiet => 'Ήσυχο'; + + @override + String get moderate => 'Μέτριο'; + + @override + String get busy => 'Απασχολημένο'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => + 'Η σάρωση φάσματος δεν βρήκε υποψήφιες συχνότητες'; + + @override + String get searchMessages => 'Αναζήτηση μηνυμάτων'; + + @override + String get sendImageFromGallery => 'Αποστολή εικόνας από τη γκαλερί'; + + @override + String get takePhoto => 'Λήψη φωτογραφίας'; + + @override + String get dmOnly => 'Μόνο απευθείας'; + + @override + String get allMessages => 'Όλα τα μηνύματα'; + + @override + String get sendToPublicChannel => 'Αποστολή στο δημόσιο κανάλι;'; + + @override + String get selectMarkerTypeAndDestination => + 'Επιλέξτε τύπο δείκτη και προορισμό'; + + @override + String get noDestinationsAvailableLabel => + 'Δεν υπάρχουν διαθέσιμοι προορισμοί'; + + @override + String get image => 'Εικόνα'; + + @override + String get format => 'Μορφή'; + + @override + String get dimensions => 'Διαστάσεις'; + + @override + String get segments => 'Τμήματα'; + + @override + String get transfers => 'Μεταφορές'; + + @override + String get downloadedBy => 'Λήφθηκε από'; + + @override + String get saveDiscoverySettings => 'Αποθήκευση ρυθμίσεων ανακάλυψης'; + + @override + String get savePublicInfo => 'Αποθήκευση δημόσιων πληροφοριών'; + + @override + String get saveRadioSettings => 'Αποθήκευση ρυθμίσεων ραδιοφώνου'; + + @override + String get savePath => 'Αποθήκευση διαδρομής'; + + @override + String get wipeDeviceData => 'Διαγραφή δεδομένων συσκευής'; + + @override + String get wipeDevice => 'Διαγραφή συσκευής'; + + @override + String get destructiveDeviceActions => 'Καταστροφικές ενέργειες συσκευής.'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => + 'Επιλέξτε μια προεπιλογή ή ρυθμίστε τις ρυθμίσεις ραδιοφώνου.'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => + 'Επιλέξτε το όνομα και την τοποθεσία που μοιράζεται αυτή η συσκευή.'; + + @override + String get availableSpaceOnThisDevice => + 'Διαθέσιμος χώρος σε αυτή τη συσκευή.'; + + @override + String get used => 'Χρησιμοποιήθηκε'; + + @override + String get total => 'Σύνολο'; + + @override + String get renameValue => 'Μετονομασία τιμής'; + + @override + String get customizeFields => 'Προσαρμογή πεδίων'; + + @override + String get livePreview => 'Ζωντανή προεπισκόπηση'; + + @override + String get refreshSchedule => 'Χρονοδιάγραμμα ανανέωσης'; + + @override + String get noResponse => 'Χωρίς απάντηση'; + + @override + String get refreshing => 'Ανανέωση'; + + @override + String get unavailable => 'Μη διαθέσιμο'; + + @override + String get pickARelayOrNodeToWatchInSensors => + 'Επιλέξτε ένα relay ή κόμβο για παρακολούθηση.'; + + @override + String get publicKeyLabel => 'Δημόσιο κλειδί'; + + @override + String get alreadyInContacts => 'Ήδη στις επαφές'; + + @override + String get connectToADeviceBeforeAddingContacts => + 'Συνδεθείτε σε μια συσκευή πριν προσθέσετε επαφές'; + + @override + String get fromContacts => 'Από τις επαφές'; + + @override + String get onlineOnly => 'Μόνο συνδεδεμένοι'; + + @override + String get inBoth => 'Σε αμφότερα'; + + @override + String get source => 'Πηγή'; + + @override + String get manualRouteEdit => 'Χειροκίνητη επεξεργασία διαδρομής'; + + @override + String get observedMeshRoute => 'Παρατηρούμενη διαδρομή δικτύου'; + + @override + String get allMessagesCleared => 'Όλα τα μηνύματα διαγράφηκαν'; + + @override + String get onlineTraceDatabaseCleared => 'Βάση δεδομένων ιχνών εκκαθαρίστηκε'; + + @override + String get packetLogsCleared => 'Τα αρχεία πακέτων εκκαθαρίστηκαν'; + + @override + String get hexDataCopiedToClipboard => 'Τα δεδομένα hex αντιγράφηκαν'; + + @override + String get developerModeEnabled => 'Λειτουργία προγραμματιστή ενεργοποιήθηκε'; + + @override + String get developerModeDisabled => + 'Λειτουργία προγραμματιστή απενεργοποιήθηκε'; + + @override + String get clipboardIsEmpty => 'Το πρόχειρο είναι κενό'; + + @override + String get contactImported => 'Επαφή εισήχθη'; + + @override + String get contactLinkCopiedToClipboard => 'Ο σύνδεσμος επαφής αντιγράφηκε'; + + @override + String get failedToExportContact => 'Αποτυχία εξαγωγής επαφής'; + + @override + String get noLogsToExport => 'Δεν υπάρχουν αρχεία για εξαγωγή'; + + @override + String get exportAsCsv => 'Εξαγωγή ως CSV'; + + @override + String get exportAsText => 'Εξαγωγή ως κείμενο'; + + @override + String get receivedRfc3339 => 'Ελήφθη (RFC3339)'; + + @override + String get buildTime => 'Ώρα κατασκευής'; + + @override + String get downloadUrlNotAvailable => 'Η URL λήψης δεν είναι διαθέσιμη'; + + @override + String get cannotOpenDownloadUrl => 'Αδυναμία ανοίγματος URL λήψης'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => + 'Ο έλεγχος ενημερώσεων είναι διαθέσιμος μόνο σε Android'; + + @override + String get youAreRunningTheLatestVersion => + 'Χρησιμοποιείτε την πιο πρόσφατη έκδοση'; + + @override + String get updateAvailableButDownloadUrlNotFound => + 'Διαθέσιμη ενημέρωση αλλά η URL λήψης δεν βρέθηκε'; + + @override + String get startTictactoe => 'Εκκίνηση Tic-Tac-Toe'; + + @override + String get tictactoeUnavailable => 'Tic-Tac-Toe μη διαθέσιμο'; + + @override + String get tictactoeOpponentUnknown => 'Tic-Tac-Toe: άγνωστος αντίπαλος'; + + @override + String get tictactoeWaitingForStart => 'Tic-Tac-Toe: αναμονή για εκκίνηση'; + + @override + String get acceptsShareLinks => 'Αποδέχεται κοινόχρηστους συνδέσμους'; + + @override + String get supportsRawHex => 'Υποστηρίζει ακατέργαστο hex'; + + @override + String get clipboardfriendly => 'Φιλικό προς πρόχειρο'; + + @override + String get captured => 'Καταγράφηκε'; + + @override + String get size => 'Μέγεθος'; + + @override + String get noCustomChannelsToClear => 'Δεν υπάρχουν προσαρμοσμένα κανάλια.'; + + @override + String get noDeviceContactsToClear => 'Δεν υπάρχουν επαφές συσκευής.'; } diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index 8d4803c..d0041f8 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -1902,4 +1902,764 @@ class AppLocalizationsEn extends AppLocalizations { String contactFailedToSetRoute(String error) { return 'Failed to set route: $error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'ACK timeout'; + + @override + String get opcode => 'Opcode'; + + @override + String get payload => 'Payload'; + + @override + String get hops => 'Hops'; + + @override + String get hashSize => 'Hash size'; + + @override + String get pathBytes => 'Path bytes'; + + @override + String get selectedPath => 'Selected path'; + + @override + String get estimatedTx => 'Estimated tx'; + + @override + String get senderToReceipt => 'Sender to receipt'; + + @override + String get receivedCopies => 'Received copies'; + + @override + String get retryCause => 'Retry cause'; + + @override + String get retryMode => 'Retry mode'; + + @override + String get retryResult => 'Retry result'; + + @override + String get lastRetry => 'Last retry'; + + @override + String get rxPackets => 'RX packets'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => 'Rate'; + + @override + String get window => 'Window'; + + @override + String get posttxDelay => 'Post-tx delay'; + + @override + String get bandpass => 'Band-pass'; + + @override + String get bandpassFilterVoice => 'Band-pass filter voice'; + + @override + String get frequency => 'Frequency'; + + @override + String get australia => 'Australia'; + + @override + String get australiaNarrow => 'Australia (Narrow)'; + + @override + String get australiaQld => 'Australia: QLD'; + + @override + String get australiaSaWa => 'Australia: SA, WA'; + + @override + String get newZealand => 'New Zealand'; + + @override + String get newZealandNarrow => 'New Zealand (Narrow)'; + + @override + String get switzerland => 'Switzerland'; + + @override + String get portugal433 => 'Portugal 433'; + + @override + String get portugal868 => 'Portugal 868'; + + @override + String get czechRepublicNarrow => 'Czech Republic (Narrow)'; + + @override + String get eu433mhzLongRange => 'EU 433MHz (Long Range)'; + + @override + String get euukDeprecated => 'EU/UK (Deprecated)'; + + @override + String get euukNarrow => 'EU/UK (Narrow)'; + + @override + String get usacanadaRecommended => 'USA/Canada (Recommended)'; + + @override + String get vietnamDeprecated => 'Vietnam (Deprecated)'; + + @override + String get vietnamNarrow => 'Vietnam (Narrow)'; + + @override + String get active => 'Active'; + + @override + String get addContact => 'Add Contact'; + + @override + String get all => 'All'; + + @override + String get autoResolve => 'Auto resolve'; + + @override + String get clearAllLabel => 'Clear all'; + + @override + String get clearRelays => 'Clear relays'; + + @override + String get clearFilters => 'Clear filters'; + + @override + String get clearRoute => 'Clear Route'; + + @override + String get clearMessages => 'Clear Messages'; + + @override + String get clearScale => 'Clear scale'; + + @override + String get clearDiscoveries => 'Clear discoveries'; + + @override + String get clearOnlineTraceDatabase => 'Clear online trace database'; + + @override + String get clearAllChannels => 'Clear all channels'; + + @override + String get clearAllContacts => 'Clear all contacts'; + + @override + String get clearChannels => 'Clear channels'; + + @override + String get clearContacts => 'Clear contacts'; + + @override + String get clearPathOnMaxRetry => 'Clear path on max retry'; + + @override + String get create => 'Create'; + + @override + String get custom => 'Custom'; + + @override + String get defaultValue => 'Default'; + + @override + String get duplicate => 'Duplicate'; + + @override + String get editName => 'Edit name'; + + @override + String get open => 'Open'; + + @override + String get paste => 'Paste'; + + @override + String get preview => 'Preview'; + + @override + String get remove => 'Remove'; + + @override + String get rename => 'Rename'; + + @override + String get resolveAll => 'Resolve all'; + + @override + String get send => 'Send'; + + @override + String get sendAnyway => 'Send anyway'; + + @override + String get share => 'Share'; + + @override + String get shareContact => 'Share Contact'; + + @override + String get trace => 'Trace'; + + @override + String get use => 'Use'; + + @override + String get useSelectedFrequency => 'Use selected frequency'; + + @override + String get discovery => 'Discovery'; + + @override + String get discoverRepeaters => 'Discover repeaters'; + + @override + String get discoverSensors => 'Discover sensors'; + + @override + String get repeaterDiscoverySent => 'Repeater discovery sent'; + + @override + String get sensorDiscoverySent => 'Sensor discovery sent'; + + @override + String get clearedPendingDiscoveries => 'Cleared pending discoveries.'; + + @override + String get autoDiscovery => 'Auto discovery'; + + @override + String get enableAutomaticAdding => 'Enable automatic adding'; + + @override + String get autoaddRepeaters => 'Auto-add repeaters'; + + @override + String get autoaddRoomServers => 'Auto-add room servers'; + + @override + String get autoaddSensors => 'Auto-add sensors'; + + @override + String get autoaddUsers => 'Auto-add users'; + + @override + String get overwriteOldestWhenFull => 'Overwrite oldest when full'; + + @override + String get storage => 'Storage'; + + @override + String get dangerZone => 'Danger zone'; + + @override + String get profiles => 'Profiles'; + + @override + String get favourites => 'Favourites'; + + @override + String get sensors => 'Sensors'; + + @override + String get others => 'Others'; + + @override + String get gpsModule => 'GPS Module'; + + @override + String get liveTraffic => 'Live Traffic'; + + @override + String get repeatersMap => 'Repeaters Map'; + + @override + String get spectrumScan => 'Spectrum Scan'; + + @override + String get blePacketLogs => 'BLE Packet Logs'; + + @override + String get onlineTraceDatabase => 'Online trace database'; + + @override + String get routePathByteSize => 'Route path byte size'; + + @override + String get messageNotifications => 'Message notifications'; + + @override + String get sarAlerts => 'SAR alerts'; + + @override + String get discoveryNotifications => 'Discovery notifications'; + + @override + String get updateNotifications => 'Update notifications'; + + @override + String get muteWhileAppIsOpen => 'Mute while app is open'; + + @override + String get disableContacts => 'Disable Contacts'; + + @override + String get enableSensorsTab => 'Enable Sensors tab'; + + @override + String get enableProfiles => 'Enable Profiles'; + + @override + String get autoRouteRotation => 'Auto route rotation'; + + @override + String get nearestRepeaterFallback => 'Nearest repeater fallback'; + + @override + String get deleteAllStoredMessageHistory => + 'Delete all stored message history'; + + @override + String get messageFontSize => 'Message font size'; + + @override + String get rotateMapWithHeading => 'Rotate map with heading'; + + @override + String get showMapDebugInfo => 'Show map debug info'; + + @override + String get openMapInFullscreen => 'Open map in fullscreen'; + + @override + String get showSarMarkersLabel => 'Show SAR markers'; + + @override + String get displaySarMarkersOnTheMainMap => + 'Display SAR markers on the main map'; + + @override + String get showAllContactTrailsLabel => 'Show all contact trails'; + + @override + String get hideRepeatersOnMap => 'Hide repeaters on map'; + + @override + String get setMapScale => 'Set map scale'; + + @override + String get customMapScaleSaved => 'Custom map scale saved'; + + @override + String get voiceBitrate => 'Voice bitrate'; + + @override + String get voiceCompressor => 'Voice compressor'; + + @override + String get balancesQuietAndLoudSpeechLevels => + 'Balances quiet and loud speech levels'; + + @override + String get voiceLimiter => 'Voice limiter'; + + @override + String get preventsClippingPeaksBeforeEncoding => + 'Prevents clipping peaks before encoding'; + + @override + String get micAutoGain => 'Mic auto gain'; + + @override + String get letsTheRecorderAdjustInputLevel => + 'Lets the recorder adjust input level'; + + @override + String get echoCancellation => 'Echo cancellation'; + + @override + String get noiseSuppression => 'Noise suppression'; + + @override + String get trimSilenceInVoiceMessages => 'Trim silence in voice messages'; + + @override + String get compressor => 'Compressor'; + + @override + String get limiter => 'Limiter'; + + @override + String get autoGain => 'Auto gain'; + + @override + String get echoCancel => 'Echo cancel'; + + @override + String get noiseSuppress => 'Noise suppress'; + + @override + String get silenceTrim => 'Silence trim'; + + @override + String get maxImageSize => 'Max image size'; + + @override + String get imageCompression => 'Image compression'; + + @override + String get grayscale => 'Grayscale'; + + @override + String get ultraMode => 'Ultra mode'; + + @override + String get fastPrivateGpsUpdates => 'Fast private GPS updates'; + + @override + String get movementThreshold => 'Movement threshold'; + + @override + String get fastGpsMovementThreshold => 'Fast GPS movement threshold'; + + @override + String get fastGpsActiveuseInterval => 'Fast GPS active-use interval'; + + @override + String get activeuseUpdateInterval => 'Active-use update interval'; + + @override + String get repeatNearbyTraffic => 'Repeat nearby traffic'; + + @override + String get relayThroughRepeatersAcrossTheMesh => + 'Relay through repeaters across the mesh'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => + 'Nearby only, without repeater flooding'; + + @override + String get multihop => 'Multi-hop'; + + @override + String get createProfile => 'Create Profile'; + + @override + String get renameProfile => 'Rename Profile'; + + @override + String get newProfile => 'New Profile'; + + @override + String get manageProfiles => 'Manage profiles'; + + @override + String get enableProfilesToStartManagingThem => + 'Enable profiles to start managing them.'; + + @override + String get openMessage => 'Open message'; + + @override + String get jumpToTheRelatedSarMessage => 'Jump to the related SAR message'; + + @override + String get removeSarMarker => 'Remove SAR marker'; + + @override + String get pleaseSelectADestinationToSendSarMarker => + 'Please select a destination to send SAR marker'; + + @override + String get sarMarkerBroadcastToPublicChannel => + 'SAR marker broadcast to public channel'; + + @override + String get sarMarkerSentToRoom => 'SAR marker sent to room'; + + @override + String get loadFromGallery => 'Load from gallery'; + + @override + String get replaceImage => 'Replace image'; + + @override + String get selectFromGallery => 'Select from gallery'; + + @override + String get team => 'Team'; + + @override + String get found => 'Found'; + + @override + String get staging => 'Staging'; + + @override + String get object => 'Object'; + + @override + String get quiet => 'Quiet'; + + @override + String get moderate => 'Moderate'; + + @override + String get busy => 'Busy'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => + 'Spectrum scan returned no candidate frequencies'; + + @override + String get searchMessages => 'Search messages'; + + @override + String get sendImageFromGallery => 'Send image from gallery'; + + @override + String get takePhoto => 'Take photo'; + + @override + String get dmOnly => 'DM only'; + + @override + String get allMessages => 'All messages'; + + @override + String get sendToPublicChannel => 'Send to Public Channel?'; + + @override + String get selectMarkerTypeAndDestination => + 'Select marker type and destination'; + + @override + String get noDestinationsAvailableLabel => 'No destinations available'; + + @override + String get image => 'Image'; + + @override + String get format => 'Format'; + + @override + String get dimensions => 'Dimensions'; + + @override + String get segments => 'Segments'; + + @override + String get transfers => 'Transfers'; + + @override + String get downloadedBy => 'Downloaded by'; + + @override + String get saveDiscoverySettings => 'Save discovery settings'; + + @override + String get savePublicInfo => 'Save public info'; + + @override + String get saveRadioSettings => 'Save radio settings'; + + @override + String get savePath => 'Save Path'; + + @override + String get wipeDeviceData => 'Wipe device data'; + + @override + String get wipeDevice => 'Wipe device'; + + @override + String get destructiveDeviceActions => 'Destructive device actions.'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => + 'Choose a preset or fine-tune custom radio settings.'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => + 'Choose the name and location this device shares.'; + + @override + String get availableSpaceOnThisDevice => 'Available space on this device.'; + + @override + String get used => 'Used'; + + @override + String get total => 'Total'; + + @override + String get renameValue => 'Rename value'; + + @override + String get customizeFields => 'Customize fields'; + + @override + String get livePreview => 'Live preview'; + + @override + String get refreshSchedule => 'Refresh schedule'; + + @override + String get noResponse => 'No response'; + + @override + String get refreshing => 'Refreshing'; + + @override + String get unavailable => 'Unavailable'; + + @override + String get pickARelayOrNodeToWatchInSensors => + 'Pick a relay or node to watch in Sensors.'; + + @override + String get publicKeyLabel => 'Public key'; + + @override + String get alreadyInContacts => 'Already in contacts'; + + @override + String get connectToADeviceBeforeAddingContacts => + 'Connect to a device before adding contacts'; + + @override + String get fromContacts => 'From contacts'; + + @override + String get onlineOnly => 'Online only'; + + @override + String get inBoth => 'In both'; + + @override + String get source => 'Source'; + + @override + String get manualRouteEdit => 'Manual route edit'; + + @override + String get observedMeshRoute => 'Observed mesh route'; + + @override + String get allMessagesCleared => 'All messages cleared'; + + @override + String get onlineTraceDatabaseCleared => 'Online trace database cleared'; + + @override + String get packetLogsCleared => 'Packet logs cleared'; + + @override + String get hexDataCopiedToClipboard => 'Hex data copied to clipboard'; + + @override + String get developerModeEnabled => 'Developer mode enabled'; + + @override + String get developerModeDisabled => 'Developer mode disabled'; + + @override + String get clipboardIsEmpty => 'Clipboard is empty'; + + @override + String get contactImported => 'Contact imported'; + + @override + String get contactLinkCopiedToClipboard => 'Contact link copied to clipboard'; + + @override + String get failedToExportContact => 'Failed to export contact'; + + @override + String get noLogsToExport => 'No logs to export'; + + @override + String get exportAsCsv => 'Export as CSV'; + + @override + String get exportAsText => 'Export as Text'; + + @override + String get receivedRfc3339 => 'Received (RFC3339)'; + + @override + String get buildTime => 'Build Time'; + + @override + String get downloadUrlNotAvailable => 'Download URL not available'; + + @override + String get cannotOpenDownloadUrl => 'Cannot open download URL'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => + 'Update check is only available on Android'; + + @override + String get youAreRunningTheLatestVersion => + 'You are running the latest version'; + + @override + String get updateAvailableButDownloadUrlNotFound => + 'Update available but download URL not found'; + + @override + String get startTictactoe => 'Start Tic-Tac-Toe'; + + @override + String get tictactoeUnavailable => 'Tic-Tac-Toe unavailable'; + + @override + String get tictactoeOpponentUnknown => 'Tic-Tac-Toe: opponent unknown'; + + @override + String get tictactoeWaitingForStart => 'Tic-Tac-Toe: waiting for start'; + + @override + String get acceptsShareLinks => 'Accepts share links'; + + @override + String get supportsRawHex => 'Supports raw hex'; + + @override + String get clipboardfriendly => 'Clipboard-friendly'; + + @override + String get captured => 'Captured'; + + @override + String get size => 'Size'; + + @override + String get noCustomChannelsToClear => 'No custom channels to clear.'; + + @override + String get noDeviceContactsToClear => 'No device contacts to clear.'; } diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart index 1a4d814..33b37db 100644 --- a/lib/l10n/app_localizations_es.dart +++ b/lib/l10n/app_localizations_es.dart @@ -1932,4 +1932,774 @@ class AppLocalizationsEs extends AppLocalizations { String contactFailedToSetRoute(String error) { return 'No se pudo establecer la ruta: $error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'Tiempo de espera ACK'; + + @override + String get opcode => 'Código de operación'; + + @override + String get payload => 'Carga útil'; + + @override + String get hops => 'Saltos'; + + @override + String get hashSize => 'Tamaño del hash'; + + @override + String get pathBytes => 'Bytes de ruta'; + + @override + String get selectedPath => 'Ruta seleccionada'; + + @override + String get estimatedTx => 'Transmisión estimada'; + + @override + String get senderToReceipt => 'Del remitente al recibo'; + + @override + String get receivedCopies => 'Copias recibidas'; + + @override + String get retryCause => 'Causa del reintento'; + + @override + String get retryMode => 'Modo de reintento'; + + @override + String get retryResult => 'Resultado del reintento'; + + @override + String get lastRetry => 'Último reintento'; + + @override + String get rxPackets => 'Paquetes RX'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => 'Velocidad'; + + @override + String get window => 'Ventana'; + + @override + String get posttxDelay => 'Retardo post-tx'; + + @override + String get bandpass => 'Paso de banda'; + + @override + String get bandpassFilterVoice => 'Filtro de paso de banda de voz'; + + @override + String get frequency => 'Frecuencia'; + + @override + String get australia => 'Australia'; + + @override + String get australiaNarrow => 'Australia (Estrecho)'; + + @override + String get australiaQld => 'Australia: QLD'; + + @override + String get australiaSaWa => 'Australia: SA, WA'; + + @override + String get newZealand => 'Nueva Zelanda'; + + @override + String get newZealandNarrow => 'Nueva Zelanda (Estrecho)'; + + @override + String get switzerland => 'Suiza'; + + @override + String get portugal433 => 'Portugal 433'; + + @override + String get portugal868 => 'Portugal 868'; + + @override + String get czechRepublicNarrow => 'República Checa (Estrecho)'; + + @override + String get eu433mhzLongRange => 'EU 433MHz (Largo Alcance)'; + + @override + String get euukDeprecated => 'UE/RU (Obsoleto)'; + + @override + String get euukNarrow => 'UE/RU (Estrecho)'; + + @override + String get usacanadaRecommended => 'EE.UU./Canadá (Recomendado)'; + + @override + String get vietnamDeprecated => 'Vietnam (Obsoleto)'; + + @override + String get vietnamNarrow => 'Vietnam (Estrecho)'; + + @override + String get active => 'Activo'; + + @override + String get addContact => 'Añadir contacto'; + + @override + String get all => 'Todo'; + + @override + String get autoResolve => 'Resolver automáticamente'; + + @override + String get clearAllLabel => 'Borrar todo'; + + @override + String get clearRelays => 'Borrar repetidores'; + + @override + String get clearFilters => 'Borrar filtros'; + + @override + String get clearRoute => 'Borrar ruta'; + + @override + String get clearMessages => 'Borrar mensajes'; + + @override + String get clearScale => 'Borrar escala'; + + @override + String get clearDiscoveries => 'Borrar descubrimientos'; + + @override + String get clearOnlineTraceDatabase => 'Borrar base de datos de trazas'; + + @override + String get clearAllChannels => 'Borrar todos los canales'; + + @override + String get clearAllContacts => 'Borrar todos los contactos'; + + @override + String get clearChannels => 'Borrar canales'; + + @override + String get clearContacts => 'Borrar contactos'; + + @override + String get clearPathOnMaxRetry => 'Borrar ruta en máximo reintento'; + + @override + String get create => 'Crear'; + + @override + String get custom => 'Personalizado'; + + @override + String get defaultValue => 'Predeterminado'; + + @override + String get duplicate => 'Duplicar'; + + @override + String get editName => 'Editar nombre'; + + @override + String get open => 'Abrir'; + + @override + String get paste => 'Pegar'; + + @override + String get preview => 'Vista previa'; + + @override + String get remove => 'Eliminar'; + + @override + String get rename => 'Renombrar'; + + @override + String get resolveAll => 'Resolver todo'; + + @override + String get send => 'Enviar'; + + @override + String get sendAnyway => 'Enviar de todos modos'; + + @override + String get share => 'Compartir'; + + @override + String get shareContact => 'Compartir contacto'; + + @override + String get trace => 'Traza'; + + @override + String get use => 'Usar'; + + @override + String get useSelectedFrequency => 'Usar frecuencia seleccionada'; + + @override + String get discovery => 'Descubrimiento'; + + @override + String get discoverRepeaters => 'Descubrir repetidores'; + + @override + String get discoverSensors => 'Descubrir sensores'; + + @override + String get repeaterDiscoverySent => 'Descubrimiento de repetidores enviado'; + + @override + String get sensorDiscoverySent => 'Descubrimiento de sensores enviado'; + + @override + String get clearedPendingDiscoveries => + 'Descubrimientos pendientes borrados.'; + + @override + String get autoDiscovery => 'Descubrimiento automático'; + + @override + String get enableAutomaticAdding => 'Habilitar adición automática'; + + @override + String get autoaddRepeaters => 'Añadir repetidores automáticamente'; + + @override + String get autoaddRoomServers => 'Añadir servidores de sala automáticamente'; + + @override + String get autoaddSensors => 'Añadir sensores automáticamente'; + + @override + String get autoaddUsers => 'Añadir usuarios automáticamente'; + + @override + String get overwriteOldestWhenFull => + 'Sobrescribir más antiguos cuando esté lleno'; + + @override + String get storage => 'Almacenamiento'; + + @override + String get dangerZone => 'Zona de peligro'; + + @override + String get profiles => 'Perfiles'; + + @override + String get favourites => 'Favoritos'; + + @override + String get sensors => 'Sensores'; + + @override + String get others => 'Otros'; + + @override + String get gpsModule => 'Módulo GPS'; + + @override + String get liveTraffic => 'Tráfico en vivo'; + + @override + String get repeatersMap => 'Mapa de repetidores'; + + @override + String get spectrumScan => 'Escaneo de espectro'; + + @override + String get blePacketLogs => 'Registros de paquetes BLE'; + + @override + String get onlineTraceDatabase => 'Base de datos de trazas'; + + @override + String get routePathByteSize => 'Tamaño en bytes de la ruta'; + + @override + String get messageNotifications => 'Notificaciones de mensajes'; + + @override + String get sarAlerts => 'Alertas SAR'; + + @override + String get discoveryNotifications => 'Notificaciones de descubrimiento'; + + @override + String get updateNotifications => 'Notificaciones de actualización'; + + @override + String get muteWhileAppIsOpen => 'Silenciar con la app abierta'; + + @override + String get disableContacts => 'Desactivar contactos'; + + @override + String get enableSensorsTab => 'Habilitar pestaña Sensores'; + + @override + String get enableProfiles => 'Habilitar perfiles'; + + @override + String get autoRouteRotation => 'Rotación automática de ruta'; + + @override + String get nearestRepeaterFallback => 'Repetidor más cercano como reserva'; + + @override + String get deleteAllStoredMessageHistory => + 'Eliminar todo el historial de mensajes'; + + @override + String get messageFontSize => 'Tamaño de fuente de mensajes'; + + @override + String get rotateMapWithHeading => 'Rotar mapa con rumbo'; + + @override + String get showMapDebugInfo => 'Mostrar info de depuración del mapa'; + + @override + String get openMapInFullscreen => 'Abrir mapa en pantalla completa'; + + @override + String get showSarMarkersLabel => 'Mostrar marcadores SAR'; + + @override + String get displaySarMarkersOnTheMainMap => + 'Mostrar marcadores SAR en el mapa principal'; + + @override + String get showAllContactTrailsLabel => + 'Mostrar todos los rastros de contactos'; + + @override + String get hideRepeatersOnMap => 'Ocultar repetidores en el mapa'; + + @override + String get setMapScale => 'Establecer escala del mapa'; + + @override + String get customMapScaleSaved => 'Escala de mapa personalizada guardada'; + + @override + String get voiceBitrate => 'Tasa de bits de voz'; + + @override + String get voiceCompressor => 'Compresor de voz'; + + @override + String get balancesQuietAndLoudSpeechLevels => + 'Equilibra niveles de habla suaves y altos'; + + @override + String get voiceLimiter => 'Limitador de voz'; + + @override + String get preventsClippingPeaksBeforeEncoding => + 'Previene recorte de picos antes de codificar'; + + @override + String get micAutoGain => 'Ganancia automática del micrófono'; + + @override + String get letsTheRecorderAdjustInputLevel => + 'Permite al grabador ajustar el nivel de entrada'; + + @override + String get echoCancellation => 'Cancelación de eco'; + + @override + String get noiseSuppression => 'Supresión de ruido'; + + @override + String get trimSilenceInVoiceMessages => + 'Recortar silencio en mensajes de voz'; + + @override + String get compressor => 'Compresor'; + + @override + String get limiter => 'Limitador'; + + @override + String get autoGain => 'Ganancia automática'; + + @override + String get echoCancel => 'Eco'; + + @override + String get noiseSuppress => 'Ruido'; + + @override + String get silenceTrim => 'Silencio'; + + @override + String get maxImageSize => 'Tamaño máximo de imagen'; + + @override + String get imageCompression => 'Compresión de imagen'; + + @override + String get grayscale => 'Escala de grises'; + + @override + String get ultraMode => 'Modo ultra'; + + @override + String get fastPrivateGpsUpdates => 'Actualizaciones GPS privadas rápidas'; + + @override + String get movementThreshold => 'Umbral de movimiento'; + + @override + String get fastGpsMovementThreshold => 'Umbral de movimiento GPS rápido'; + + @override + String get fastGpsActiveuseInterval => 'Intervalo de uso activo GPS rápido'; + + @override + String get activeuseUpdateInterval => + 'Intervalo de actualización de uso activo'; + + @override + String get repeatNearbyTraffic => 'Repetir tráfico cercano'; + + @override + String get relayThroughRepeatersAcrossTheMesh => + 'Retransmitir a través de repetidores en la red'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => + 'Solo cercanos, sin inundación de repetidores'; + + @override + String get multihop => 'Multi-salto'; + + @override + String get createProfile => 'Crear perfil'; + + @override + String get renameProfile => 'Renombrar perfil'; + + @override + String get newProfile => 'Nuevo perfil'; + + @override + String get manageProfiles => 'Gestionar perfiles'; + + @override + String get enableProfilesToStartManagingThem => + 'Habilite los perfiles para comenzar a gestionarlos.'; + + @override + String get openMessage => 'Abrir mensaje'; + + @override + String get jumpToTheRelatedSarMessage => 'Ir al mensaje SAR relacionado'; + + @override + String get removeSarMarker => 'Eliminar marcador SAR'; + + @override + String get pleaseSelectADestinationToSendSarMarker => + 'Seleccione un destino para enviar el marcador SAR'; + + @override + String get sarMarkerBroadcastToPublicChannel => + 'Marcador SAR transmitido al canal público'; + + @override + String get sarMarkerSentToRoom => 'Marcador SAR enviado a la sala'; + + @override + String get loadFromGallery => 'Cargar desde galería'; + + @override + String get replaceImage => 'Reemplazar imagen'; + + @override + String get selectFromGallery => 'Seleccionar de galería'; + + @override + String get team => 'Equipo'; + + @override + String get found => 'Encontrado'; + + @override + String get staging => 'Área de reunión'; + + @override + String get object => 'Objeto'; + + @override + String get quiet => 'Silencioso'; + + @override + String get moderate => 'Moderado'; + + @override + String get busy => 'Ocupado'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => + 'El escaneo de espectro no encontró frecuencias candidatas'; + + @override + String get searchMessages => 'Buscar mensajes'; + + @override + String get sendImageFromGallery => 'Enviar imagen desde galería'; + + @override + String get takePhoto => 'Tomar foto'; + + @override + String get dmOnly => 'Solo mensaje directo'; + + @override + String get allMessages => 'Todos los mensajes'; + + @override + String get sendToPublicChannel => '¿Enviar al canal público?'; + + @override + String get selectMarkerTypeAndDestination => + 'Seleccione tipo de marcador y destino'; + + @override + String get noDestinationsAvailableLabel => 'No hay destinos disponibles'; + + @override + String get image => 'Imagen'; + + @override + String get format => 'Formato'; + + @override + String get dimensions => 'Dimensiones'; + + @override + String get segments => 'Segmentos'; + + @override + String get transfers => 'Transferencias'; + + @override + String get downloadedBy => 'Descargado por'; + + @override + String get saveDiscoverySettings => 'Guardar ajustes de descubrimiento'; + + @override + String get savePublicInfo => 'Guardar información pública'; + + @override + String get saveRadioSettings => 'Guardar ajustes de radio'; + + @override + String get savePath => 'Guardar ruta'; + + @override + String get wipeDeviceData => 'Borrar datos del dispositivo'; + + @override + String get wipeDevice => 'Borrar dispositivo'; + + @override + String get destructiveDeviceActions => + 'Acciones destructivas del dispositivo.'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => + 'Elija un preajuste o ajuste la configuración de radio.'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => + 'Elija el nombre y la ubicación que comparte este dispositivo.'; + + @override + String get availableSpaceOnThisDevice => + 'Espacio disponible en este dispositivo.'; + + @override + String get used => 'Usado'; + + @override + String get total => 'Total'; + + @override + String get renameValue => 'Renombrar valor'; + + @override + String get customizeFields => 'Personalizar campos'; + + @override + String get livePreview => 'Vista previa en vivo'; + + @override + String get refreshSchedule => 'Programación de actualización'; + + @override + String get noResponse => 'Sin respuesta'; + + @override + String get refreshing => 'Actualizando'; + + @override + String get unavailable => 'No disponible'; + + @override + String get pickARelayOrNodeToWatchInSensors => + 'Elija un relay o nodo para observar.'; + + @override + String get publicKeyLabel => 'Clave pública'; + + @override + String get alreadyInContacts => 'Ya en contactos'; + + @override + String get connectToADeviceBeforeAddingContacts => + 'Conéctese a un dispositivo antes de añadir contactos'; + + @override + String get fromContacts => 'De contactos'; + + @override + String get onlineOnly => 'Solo en línea'; + + @override + String get inBoth => 'En ambos'; + + @override + String get source => 'Fuente'; + + @override + String get manualRouteEdit => 'Edición manual de ruta'; + + @override + String get observedMeshRoute => 'Ruta mesh observada'; + + @override + String get allMessagesCleared => 'Todos los mensajes borrados'; + + @override + String get onlineTraceDatabaseCleared => 'Base de datos de trazas borrada'; + + @override + String get packetLogsCleared => 'Registros de paquetes borrados'; + + @override + String get hexDataCopiedToClipboard => 'Datos hex copiados al portapapeles'; + + @override + String get developerModeEnabled => 'Modo desarrollador activado'; + + @override + String get developerModeDisabled => 'Modo desarrollador desactivado'; + + @override + String get clipboardIsEmpty => 'El portapapeles está vacío'; + + @override + String get contactImported => 'Contacto importado'; + + @override + String get contactLinkCopiedToClipboard => + 'Enlace de contacto copiado al portapapeles'; + + @override + String get failedToExportContact => 'Error al exportar el contacto'; + + @override + String get noLogsToExport => 'No hay registros para exportar'; + + @override + String get exportAsCsv => 'Exportar como CSV'; + + @override + String get exportAsText => 'Exportar como texto'; + + @override + String get receivedRfc3339 => 'Recibido (RFC3339)'; + + @override + String get buildTime => 'Hora de compilación'; + + @override + String get downloadUrlNotAvailable => 'URL de descarga no disponible'; + + @override + String get cannotOpenDownloadUrl => 'No se puede abrir la URL de descarga'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => + 'La comprobación de actualizaciones solo está disponible en Android'; + + @override + String get youAreRunningTheLatestVersion => + 'Está ejecutando la última versión'; + + @override + String get updateAvailableButDownloadUrlNotFound => + 'Actualización disponible pero URL de descarga no encontrada'; + + @override + String get startTictactoe => 'Iniciar Tic-Tac-Toe'; + + @override + String get tictactoeUnavailable => 'Tic-Tac-Toe no disponible'; + + @override + String get tictactoeOpponentUnknown => 'Tic-Tac-Toe: oponente desconocido'; + + @override + String get tictactoeWaitingForStart => 'Tic-Tac-Toe: esperando inicio'; + + @override + String get acceptsShareLinks => 'Acepta enlaces compartidos'; + + @override + String get supportsRawHex => 'Soporta hex sin procesar'; + + @override + String get clipboardfriendly => 'Compatible con portapapeles'; + + @override + String get captured => 'Capturado'; + + @override + String get size => 'Tamaño'; + + @override + String get noCustomChannelsToClear => + 'No hay canales personalizados que borrar.'; + + @override + String get noDeviceContactsToClear => + 'No hay contactos del dispositivo que borrar.'; } diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart index 89048b6..bd925c7 100644 --- a/lib/l10n/app_localizations_fr.dart +++ b/lib/l10n/app_localizations_fr.dart @@ -1936,4 +1936,774 @@ class AppLocalizationsFr extends AppLocalizations { String contactFailedToSetRoute(String error) { return 'Échec du réglage de la route : $error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'Délai ACK expiré'; + + @override + String get opcode => 'Opcode'; + + @override + String get payload => 'Charge utile'; + + @override + String get hops => 'Sauts'; + + @override + String get hashSize => 'Taille du hash'; + + @override + String get pathBytes => 'Octets du chemin'; + + @override + String get selectedPath => 'Chemin sélectionné'; + + @override + String get estimatedTx => 'Émission estimée'; + + @override + String get senderToReceipt => 'Émetteur au reçu'; + + @override + String get receivedCopies => 'Copies reçues'; + + @override + String get retryCause => 'Cause de la relance'; + + @override + String get retryMode => 'Mode de relance'; + + @override + String get retryResult => 'Résultat de la relance'; + + @override + String get lastRetry => 'Dernière relance'; + + @override + String get rxPackets => 'Paquets RX'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => 'Débit'; + + @override + String get window => 'Fenêtre'; + + @override + String get posttxDelay => 'Délai post-émission'; + + @override + String get bandpass => 'Passe-bande'; + + @override + String get bandpassFilterVoice => 'Filtre passe-bande voix'; + + @override + String get frequency => 'Fréquence'; + + @override + String get australia => 'Australie'; + + @override + String get australiaNarrow => 'Australie (Étroit)'; + + @override + String get australiaQld => 'Australie: QLD'; + + @override + String get australiaSaWa => 'Australie: SA, WA'; + + @override + String get newZealand => 'Nouvelle-Zélande'; + + @override + String get newZealandNarrow => 'Nouvelle-Zélande (Étroit)'; + + @override + String get switzerland => 'Suisse'; + + @override + String get portugal433 => 'Portugal 433'; + + @override + String get portugal868 => 'Portugal 868'; + + @override + String get czechRepublicNarrow => 'République tchèque (Étroit)'; + + @override + String get eu433mhzLongRange => 'UE 433MHz (Longue Portée)'; + + @override + String get euukDeprecated => 'UE/RU (Obsolète)'; + + @override + String get euukNarrow => 'UE/RU (Étroit)'; + + @override + String get usacanadaRecommended => 'USA/Canada (Recommandé)'; + + @override + String get vietnamDeprecated => 'Vietnam (Obsolète)'; + + @override + String get vietnamNarrow => 'Vietnam (Étroit)'; + + @override + String get active => 'Actif'; + + @override + String get addContact => 'Ajouter un contact'; + + @override + String get all => 'Tout'; + + @override + String get autoResolve => 'Résolution automatique'; + + @override + String get clearAllLabel => 'Tout effacer'; + + @override + String get clearRelays => 'Effacer les relais'; + + @override + String get clearFilters => 'Effacer les filtres'; + + @override + String get clearRoute => 'Effacer la route'; + + @override + String get clearMessages => 'Effacer les messages'; + + @override + String get clearScale => 'Effacer l\'échelle'; + + @override + String get clearDiscoveries => 'Effacer les découvertes'; + + @override + String get clearOnlineTraceDatabase => 'Effacer la base de traces'; + + @override + String get clearAllChannels => 'Effacer tous les canaux'; + + @override + String get clearAllContacts => 'Effacer tous les contacts'; + + @override + String get clearChannels => 'Effacer les canaux'; + + @override + String get clearContacts => 'Effacer les contacts'; + + @override + String get clearPathOnMaxRetry => 'Effacer le chemin au max de relances'; + + @override + String get create => 'Créer'; + + @override + String get custom => 'Personnalisé'; + + @override + String get defaultValue => 'Par défaut'; + + @override + String get duplicate => 'Dupliquer'; + + @override + String get editName => 'Modifier le nom'; + + @override + String get open => 'Ouvrir'; + + @override + String get paste => 'Coller'; + + @override + String get preview => 'Aperçu'; + + @override + String get remove => 'Supprimer'; + + @override + String get rename => 'Renommer'; + + @override + String get resolveAll => 'Résoudre tout'; + + @override + String get send => 'Envoyer'; + + @override + String get sendAnyway => 'Envoyer quand même'; + + @override + String get share => 'Partager'; + + @override + String get shareContact => 'Partager le contact'; + + @override + String get trace => 'Trace'; + + @override + String get use => 'Utiliser'; + + @override + String get useSelectedFrequency => 'Utiliser la fréquence sélectionnée'; + + @override + String get discovery => 'Découverte'; + + @override + String get discoverRepeaters => 'Découvrir les répéteurs'; + + @override + String get discoverSensors => 'Découvrir les capteurs'; + + @override + String get repeaterDiscoverySent => 'Découverte de répéteurs envoyée'; + + @override + String get sensorDiscoverySent => 'Découverte de capteurs envoyée'; + + @override + String get clearedPendingDiscoveries => 'Découvertes en attente effacées.'; + + @override + String get autoDiscovery => 'Découverte automatique'; + + @override + String get enableAutomaticAdding => 'Activer l\'ajout automatique'; + + @override + String get autoaddRepeaters => 'Ajout auto des répéteurs'; + + @override + String get autoaddRoomServers => 'Ajout auto des serveurs de salle'; + + @override + String get autoaddSensors => 'Ajout auto des capteurs'; + + @override + String get autoaddUsers => 'Ajout auto des utilisateurs'; + + @override + String get overwriteOldestWhenFull => 'Écraser les plus anciens si plein'; + + @override + String get storage => 'Stockage'; + + @override + String get dangerZone => 'Zone de danger'; + + @override + String get profiles => 'Profils'; + + @override + String get favourites => 'Favoris'; + + @override + String get sensors => 'Capteurs'; + + @override + String get others => 'Autres'; + + @override + String get gpsModule => 'Module GPS'; + + @override + String get liveTraffic => 'Trafic en direct'; + + @override + String get repeatersMap => 'Carte des répéteurs'; + + @override + String get spectrumScan => 'Scan spectral'; + + @override + String get blePacketLogs => 'Journaux de paquets BLE'; + + @override + String get onlineTraceDatabase => 'Base de données de traces'; + + @override + String get routePathByteSize => 'Taille en octets du chemin'; + + @override + String get messageNotifications => 'Notifications de messages'; + + @override + String get sarAlerts => 'Alertes SAR'; + + @override + String get discoveryNotifications => 'Notifications de découverte'; + + @override + String get updateNotifications => 'Notifications de mise à jour'; + + @override + String get muteWhileAppIsOpen => 'Muet quand l\'appli est ouverte'; + + @override + String get disableContacts => 'Désactiver les contacts'; + + @override + String get enableSensorsTab => 'Activer l\'onglet Capteurs'; + + @override + String get enableProfiles => 'Activer les profils'; + + @override + String get autoRouteRotation => 'Rotation automatique de route'; + + @override + String get nearestRepeaterFallback => 'Répéteur le plus proche en repli'; + + @override + String get deleteAllStoredMessageHistory => 'Supprimer tout l\'historique'; + + @override + String get messageFontSize => 'Taille de police des messages'; + + @override + String get rotateMapWithHeading => 'Tourner la carte avec le cap'; + + @override + String get showMapDebugInfo => 'Afficher les infos de débogage'; + + @override + String get openMapInFullscreen => 'Ouvrir la carte en plein écran'; + + @override + String get showSarMarkersLabel => 'Afficher les marqueurs SAR'; + + @override + String get displaySarMarkersOnTheMainMap => + 'Afficher les marqueurs SAR sur la carte'; + + @override + String get showAllContactTrailsLabel => + 'Afficher toutes les traces de contacts'; + + @override + String get hideRepeatersOnMap => 'Masquer les répéteurs sur la carte'; + + @override + String get setMapScale => 'Définir l\'échelle de la carte'; + + @override + String get customMapScaleSaved => + 'Échelle de carte personnalisée enregistrée'; + + @override + String get voiceBitrate => 'Débit vocal'; + + @override + String get voiceCompressor => 'Compresseur vocal'; + + @override + String get balancesQuietAndLoudSpeechLevels => + 'Équilibre les niveaux faibles et forts'; + + @override + String get voiceLimiter => 'Limiteur vocal'; + + @override + String get preventsClippingPeaksBeforeEncoding => + 'Empêche l\'écrêtage avant l\'encodage'; + + @override + String get micAutoGain => 'Gain auto du micro'; + + @override + String get letsTheRecorderAdjustInputLevel => + 'Laisse l\'enregistreur ajuster le niveau d\'entrée'; + + @override + String get echoCancellation => 'Annulation d\'écho'; + + @override + String get noiseSuppression => 'Suppression du bruit'; + + @override + String get trimSilenceInVoiceMessages => + 'Couper le silence dans les messages vocaux'; + + @override + String get compressor => 'Compresseur'; + + @override + String get limiter => 'Limiteur'; + + @override + String get autoGain => 'Gain automatique'; + + @override + String get echoCancel => 'Écho'; + + @override + String get noiseSuppress => 'Bruit'; + + @override + String get silenceTrim => 'Silence'; + + @override + String get maxImageSize => 'Taille d\'image maximale'; + + @override + String get imageCompression => 'Compression d\'image'; + + @override + String get grayscale => 'Niveaux de gris'; + + @override + String get ultraMode => 'Mode ultra'; + + @override + String get fastPrivateGpsUpdates => 'Mises à jour GPS privées rapides'; + + @override + String get movementThreshold => 'Seuil de mouvement'; + + @override + String get fastGpsMovementThreshold => 'Seuil de mouvement GPS rapide'; + + @override + String get fastGpsActiveuseInterval => + 'Intervalle d\'utilisation active GPS rapide'; + + @override + String get activeuseUpdateInterval => + 'Intervalle de mise à jour en utilisation active'; + + @override + String get repeatNearbyTraffic => 'Répéter le trafic proche'; + + @override + String get relayThroughRepeatersAcrossTheMesh => + 'Relayer via les répéteurs du réseau'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => + 'Proximité seulement, sans inondation'; + + @override + String get multihop => 'Multi-saut'; + + @override + String get createProfile => 'Créer un profil'; + + @override + String get renameProfile => 'Renommer le profil'; + + @override + String get newProfile => 'Nouveau profil'; + + @override + String get manageProfiles => 'Gérer les profils'; + + @override + String get enableProfilesToStartManagingThem => + 'Activez les profils pour commencer à les gérer.'; + + @override + String get openMessage => 'Ouvrir le message'; + + @override + String get jumpToTheRelatedSarMessage => 'Aller au message SAR associé'; + + @override + String get removeSarMarker => 'Supprimer le marqueur SAR'; + + @override + String get pleaseSelectADestinationToSendSarMarker => + 'Sélectionnez une destination pour envoyer le marqueur'; + + @override + String get sarMarkerBroadcastToPublicChannel => + 'Marqueur SAR diffusé sur le canal public'; + + @override + String get sarMarkerSentToRoom => 'Marqueur SAR envoyé à la salle'; + + @override + String get loadFromGallery => 'Charger depuis la galerie'; + + @override + String get replaceImage => 'Remplacer l\'image'; + + @override + String get selectFromGallery => 'Sélectionner depuis la galerie'; + + @override + String get team => 'Équipe'; + + @override + String get found => 'Trouvé'; + + @override + String get staging => 'Zone de regroupement'; + + @override + String get object => 'Objet'; + + @override + String get quiet => 'Calme'; + + @override + String get moderate => 'Modéré'; + + @override + String get busy => 'Occupé'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => + 'Le scan spectral n\'a trouvé aucune fréquence candidate'; + + @override + String get searchMessages => 'Rechercher des messages'; + + @override + String get sendImageFromGallery => 'Envoyer une image de la galerie'; + + @override + String get takePhoto => 'Prendre une photo'; + + @override + String get dmOnly => 'Message direct uniquement'; + + @override + String get allMessages => 'Tous les messages'; + + @override + String get sendToPublicChannel => 'Envoyer au canal public ?'; + + @override + String get selectMarkerTypeAndDestination => + 'Sélectionnez le type de marqueur et la destination'; + + @override + String get noDestinationsAvailableLabel => 'Aucune destination disponible'; + + @override + String get image => 'Image'; + + @override + String get format => 'Format'; + + @override + String get dimensions => 'Dimensions'; + + @override + String get segments => 'Segments'; + + @override + String get transfers => 'Transferts'; + + @override + String get downloadedBy => 'Téléchargé par'; + + @override + String get saveDiscoverySettings => + 'Enregistrer les paramètres de découverte'; + + @override + String get savePublicInfo => 'Enregistrer les infos publiques'; + + @override + String get saveRadioSettings => 'Enregistrer les paramètres radio'; + + @override + String get savePath => 'Enregistrer le chemin'; + + @override + String get wipeDeviceData => 'Effacer les données de l\'appareil'; + + @override + String get wipeDevice => 'Effacer l\'appareil'; + + @override + String get destructiveDeviceActions => 'Actions destructives de l\'appareil.'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => + 'Choisissez un préréglage ou ajustez les paramètres radio.'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => + 'Choisissez le nom et l\'emplacement partagés par cet appareil.'; + + @override + String get availableSpaceOnThisDevice => + 'Espace disponible sur cet appareil.'; + + @override + String get used => 'Utilisé'; + + @override + String get total => 'Total'; + + @override + String get renameValue => 'Renommer la valeur'; + + @override + String get customizeFields => 'Personnaliser les champs'; + + @override + String get livePreview => 'Aperçu en direct'; + + @override + String get refreshSchedule => 'Planification d\'actualisation'; + + @override + String get noResponse => 'Pas de réponse'; + + @override + String get refreshing => 'Actualisation'; + + @override + String get unavailable => 'Indisponible'; + + @override + String get pickARelayOrNodeToWatchInSensors => + 'Choisissez un relais ou nœud à surveiller.'; + + @override + String get publicKeyLabel => 'Clé publique'; + + @override + String get alreadyInContacts => 'Déjà dans les contacts'; + + @override + String get connectToADeviceBeforeAddingContacts => + 'Connectez-vous à un appareil avant d\'ajouter des contacts'; + + @override + String get fromContacts => 'Des contacts'; + + @override + String get onlineOnly => 'En ligne uniquement'; + + @override + String get inBoth => 'Dans les deux'; + + @override + String get source => 'Source'; + + @override + String get manualRouteEdit => 'Édition manuelle de route'; + + @override + String get observedMeshRoute => 'Route mesh observée'; + + @override + String get allMessagesCleared => 'Tous les messages effacés'; + + @override + String get onlineTraceDatabaseCleared => 'Base de données de traces effacée'; + + @override + String get packetLogsCleared => 'Journaux de paquets effacés'; + + @override + String get hexDataCopiedToClipboard => + 'Données hex copiées dans le presse-papiers'; + + @override + String get developerModeEnabled => 'Mode développeur activé'; + + @override + String get developerModeDisabled => 'Mode développeur désactivé'; + + @override + String get clipboardIsEmpty => 'Le presse-papiers est vide'; + + @override + String get contactImported => 'Contact importé'; + + @override + String get contactLinkCopiedToClipboard => + 'Lien du contact copié dans le presse-papiers'; + + @override + String get failedToExportContact => 'Échec de l\'exportation du contact'; + + @override + String get noLogsToExport => 'Aucun journal à exporter'; + + @override + String get exportAsCsv => 'Exporter en CSV'; + + @override + String get exportAsText => 'Exporter en texte'; + + @override + String get receivedRfc3339 => 'Reçu (RFC3339)'; + + @override + String get buildTime => 'Heure de build'; + + @override + String get downloadUrlNotAvailable => 'URL de téléchargement non disponible'; + + @override + String get cannotOpenDownloadUrl => + 'Impossible d\'ouvrir l\'URL de téléchargement'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => + 'La vérification des mises à jour n\'est disponible que sur Android'; + + @override + String get youAreRunningTheLatestVersion => + 'Vous utilisez la dernière version'; + + @override + String get updateAvailableButDownloadUrlNotFound => + 'Mise à jour disponible mais URL de téléchargement introuvable'; + + @override + String get startTictactoe => 'Démarrer Tic-Tac-Toe'; + + @override + String get tictactoeUnavailable => 'Tic-Tac-Toe indisponible'; + + @override + String get tictactoeOpponentUnknown => 'Tic-Tac-Toe: adversaire inconnu'; + + @override + String get tictactoeWaitingForStart => 'Tic-Tac-Toe: en attente du début'; + + @override + String get acceptsShareLinks => 'Accepte les liens partagés'; + + @override + String get supportsRawHex => 'Supporte le hex brut'; + + @override + String get clipboardfriendly => 'Compatible avec le presse-papiers'; + + @override + String get captured => 'Capturé'; + + @override + String get size => 'Taille'; + + @override + String get noCustomChannelsToClear => 'Aucun canal personnalisé à effacer.'; + + @override + String get noDeviceContactsToClear => + 'Aucun contact de l\'appareil à effacer.'; } diff --git a/lib/l10n/app_localizations_hr.dart b/lib/l10n/app_localizations_hr.dart index 4504d0e..d9c4575 100644 --- a/lib/l10n/app_localizations_hr.dart +++ b/lib/l10n/app_localizations_hr.dart @@ -1912,4 +1912,767 @@ class AppLocalizationsHr extends AppLocalizations { String contactFailedToSetRoute(String error) { return 'Postavljanje rute nije uspjelo: $error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'ACK istek vremena'; + + @override + String get opcode => 'Opkod'; + + @override + String get payload => 'Sadržaj'; + + @override + String get hops => 'Skokovi'; + + @override + String get hashSize => 'Veličina hash-a'; + + @override + String get pathBytes => 'Bajtovi putanje'; + + @override + String get selectedPath => 'Odabrana putanja'; + + @override + String get estimatedTx => 'Procijenjeno slanje'; + + @override + String get senderToReceipt => 'Od pošiljatelja do primitka'; + + @override + String get receivedCopies => 'Primljene kopije'; + + @override + String get retryCause => 'Razlog ponovnog pokušaja'; + + @override + String get retryMode => 'Način ponovnog pokušaja'; + + @override + String get retryResult => 'Rezultat ponovnog pokušaja'; + + @override + String get lastRetry => 'Zadnji pokušaj'; + + @override + String get rxPackets => 'RX paketi'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => 'Brzina'; + + @override + String get window => 'Prozor'; + + @override + String get posttxDelay => 'Kašnjenje nakon slanja'; + + @override + String get bandpass => 'Pojasni filtar'; + + @override + String get bandpassFilterVoice => 'Pojasni filtar glasa'; + + @override + String get frequency => 'Frekvencija'; + + @override + String get australia => 'Australija'; + + @override + String get australiaNarrow => 'Australija (usko)'; + + @override + String get australiaQld => 'Australija: QLD'; + + @override + String get australiaSaWa => 'Australija: SA, WA'; + + @override + String get newZealand => 'Novi Zeland'; + + @override + String get newZealandNarrow => 'Novi Zeland (usko)'; + + @override + String get switzerland => 'Švicarska'; + + @override + String get portugal433 => 'Portugal 433'; + + @override + String get portugal868 => 'Portugal 868'; + + @override + String get czechRepublicNarrow => 'Češka (usko)'; + + @override + String get eu433mhzLongRange => 'EU 433MHz (veliki domet)'; + + @override + String get euukDeprecated => 'EU/UK (zastarjelo)'; + + @override + String get euukNarrow => 'EU/UK (usko)'; + + @override + String get usacanadaRecommended => 'SAD/Kanada (preporučeno)'; + + @override + String get vietnamDeprecated => 'Vijetnam (zastarjelo)'; + + @override + String get vietnamNarrow => 'Vijetnam (usko)'; + + @override + String get active => 'Aktivno'; + + @override + String get addContact => 'Dodaj kontakt'; + + @override + String get all => 'Sve'; + + @override + String get autoResolve => 'Automatski razriješi'; + + @override + String get clearAllLabel => 'Očisti sve'; + + @override + String get clearRelays => 'Očisti posrednike'; + + @override + String get clearFilters => 'Očisti filtre'; + + @override + String get clearRoute => 'Očisti putanju'; + + @override + String get clearMessages => 'Očisti poruke'; + + @override + String get clearScale => 'Očisti mjerilo'; + + @override + String get clearDiscoveries => 'Očisti otkrića'; + + @override + String get clearOnlineTraceDatabase => 'Očisti bazu mrežnih tragova'; + + @override + String get clearAllChannels => 'Očisti sve kanale'; + + @override + String get clearAllContacts => 'Očisti sve kontakte'; + + @override + String get clearChannels => 'Očisti kanale'; + + @override + String get clearContacts => 'Očisti kontakte'; + + @override + String get clearPathOnMaxRetry => 'Očisti putanju kod maks. pokušaja'; + + @override + String get create => 'Stvori'; + + @override + String get custom => 'Prilagođeno'; + + @override + String get defaultValue => 'Zadano'; + + @override + String get duplicate => 'Dupliciraj'; + + @override + String get editName => 'Uredi ime'; + + @override + String get open => 'Otvori'; + + @override + String get paste => 'Zalijepi'; + + @override + String get preview => 'Pregled'; + + @override + String get remove => 'Ukloni'; + + @override + String get rename => 'Preimenuj'; + + @override + String get resolveAll => 'Razriješi sve'; + + @override + String get send => 'Pošalji'; + + @override + String get sendAnyway => 'Svejedno pošalji'; + + @override + String get share => 'Dijeli'; + + @override + String get shareContact => 'Dijeli kontakt'; + + @override + String get trace => 'Praćenje'; + + @override + String get use => 'Koristi'; + + @override + String get useSelectedFrequency => 'Koristi odabranu frekvenciju'; + + @override + String get discovery => 'Otkrivanje'; + + @override + String get discoverRepeaters => 'Otkrij posrednike'; + + @override + String get discoverSensors => 'Otkrij senzore'; + + @override + String get repeaterDiscoverySent => 'Otkrivanje posrednika poslano'; + + @override + String get sensorDiscoverySent => 'Otkrivanje senzora poslano'; + + @override + String get clearedPendingDiscoveries => 'Očišćena čekajuća otkrića.'; + + @override + String get autoDiscovery => 'Automatsko otkrivanje'; + + @override + String get enableAutomaticAdding => 'Omogući automatsko dodavanje'; + + @override + String get autoaddRepeaters => 'Automatski dodaj posrednike'; + + @override + String get autoaddRoomServers => 'Automatski dodaj poslužitelje soba'; + + @override + String get autoaddSensors => 'Automatski dodaj senzore'; + + @override + String get autoaddUsers => 'Automatski dodaj korisnike'; + + @override + String get overwriteOldestWhenFull => 'Prepiši najstarije kad je puno'; + + @override + String get storage => 'Pohrana'; + + @override + String get dangerZone => 'Opasna zona'; + + @override + String get profiles => 'Profili'; + + @override + String get favourites => 'Favoriti'; + + @override + String get sensors => 'Senzori'; + + @override + String get others => 'Ostali'; + + @override + String get gpsModule => 'GPS modul'; + + @override + String get liveTraffic => 'Promet uživo'; + + @override + String get repeatersMap => 'Karta posrednika'; + + @override + String get spectrumScan => 'Spektralno skeniranje'; + + @override + String get blePacketLogs => 'BLE zapisi paketa'; + + @override + String get onlineTraceDatabase => 'Baza mrežnih tragova'; + + @override + String get routePathByteSize => 'Veličina putanje u bajtima'; + + @override + String get messageNotifications => 'Obavijesti o porukama'; + + @override + String get sarAlerts => 'SAR upozorenja'; + + @override + String get discoveryNotifications => 'Obavijesti o otkrivanju'; + + @override + String get updateNotifications => 'Obavijesti o ažuriranju'; + + @override + String get muteWhileAppIsOpen => 'Utišaj dok je aplikacija otvorena'; + + @override + String get disableContacts => 'Onemogući kontakte'; + + @override + String get enableSensorsTab => 'Omogući karticu Senzori'; + + @override + String get enableProfiles => 'Omogući profile'; + + @override + String get autoRouteRotation => 'Automatsko rotiranje putanje'; + + @override + String get nearestRepeaterFallback => 'Najbliži posrednik kao rezerva'; + + @override + String get deleteAllStoredMessageHistory => + 'Izbriši svu pohranjenu povijest poruka'; + + @override + String get messageFontSize => 'Veličina fonta poruka'; + + @override + String get rotateMapWithHeading => 'Rotiraj kartu prema smjeru'; + + @override + String get showMapDebugInfo => 'Prikaži debug info karte'; + + @override + String get openMapInFullscreen => 'Otvori kartu na cijelom zaslonu'; + + @override + String get showSarMarkersLabel => 'Prikaži SAR oznake'; + + @override + String get displaySarMarkersOnTheMainMap => + 'Prikaži SAR oznake na glavnoj karti'; + + @override + String get showAllContactTrailsLabel => 'Prikaži sve tragove kontakata'; + + @override + String get hideRepeatersOnMap => 'Sakrij posrednike na karti'; + + @override + String get setMapScale => 'Postavi mjerilo karte'; + + @override + String get customMapScaleSaved => 'Prilagođeno mjerilo karte spremljeno'; + + @override + String get voiceBitrate => 'Bitna brzina glasa'; + + @override + String get voiceCompressor => 'Kompresor glasa'; + + @override + String get balancesQuietAndLoudSpeechLevels => + 'Izravnava tihe i glasne razine govora'; + + @override + String get voiceLimiter => 'Ograničivač glasa'; + + @override + String get preventsClippingPeaksBeforeEncoding => + 'Sprječava rezanje vrhova prije kodiranja'; + + @override + String get micAutoGain => 'Automatsko pojačanje mikrofona'; + + @override + String get letsTheRecorderAdjustInputLevel => + 'Dopušta snimaču prilagodbu razine ulaza'; + + @override + String get echoCancellation => 'Poništavanje odjeka'; + + @override + String get noiseSuppression => 'Potiskivanje šuma'; + + @override + String get trimSilenceInVoiceMessages => 'Izreži tišinu u glasovnim porukama'; + + @override + String get compressor => 'Kompresor'; + + @override + String get limiter => 'Ograničivač'; + + @override + String get autoGain => 'Automatsko pojačanje'; + + @override + String get echoCancel => 'Odjek'; + + @override + String get noiseSuppress => 'Šum'; + + @override + String get silenceTrim => 'Tišina'; + + @override + String get maxImageSize => 'Maksimalna veličina slike'; + + @override + String get imageCompression => 'Kompresija slike'; + + @override + String get grayscale => 'Sivine'; + + @override + String get ultraMode => 'Ultra način'; + + @override + String get fastPrivateGpsUpdates => 'Brza privatna GPS ažuriranja'; + + @override + String get movementThreshold => 'Prag kretanja'; + + @override + String get fastGpsMovementThreshold => 'Prag kretanja za brzi GPS'; + + @override + String get fastGpsActiveuseInterval => + 'Interval aktivnog korištenja brzog GPS-a'; + + @override + String get activeuseUpdateInterval => + 'Interval ažuriranja pri aktivnom korištenju'; + + @override + String get repeatNearbyTraffic => 'Ponovi obližnji promet'; + + @override + String get relayThroughRepeatersAcrossTheMesh => + 'Proslijedi kroz posrednike kroz mrežu'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => + 'Samo obližnji, bez preplavljivanja posrednika'; + + @override + String get multihop => 'Višeskočno'; + + @override + String get createProfile => 'Stvori profil'; + + @override + String get renameProfile => 'Preimenuj profil'; + + @override + String get newProfile => 'Novi profil'; + + @override + String get manageProfiles => 'Upravljaj profilima'; + + @override + String get enableProfilesToStartManagingThem => + 'Omogućite profile da biste ih počeli upravljati.'; + + @override + String get openMessage => 'Otvori poruku'; + + @override + String get jumpToTheRelatedSarMessage => 'Skoči na povezanu SAR poruku'; + + @override + String get removeSarMarker => 'Ukloni SAR oznaku'; + + @override + String get pleaseSelectADestinationToSendSarMarker => + 'Odaberite odredište za slanje SAR oznake'; + + @override + String get sarMarkerBroadcastToPublicChannel => + 'SAR oznaka emitirana na javni kanal'; + + @override + String get sarMarkerSentToRoom => 'SAR oznaka poslana u sobu'; + + @override + String get loadFromGallery => 'Učitaj iz galerije'; + + @override + String get replaceImage => 'Zamijeni sliku'; + + @override + String get selectFromGallery => 'Odaberi iz galerije'; + + @override + String get team => 'Tim'; + + @override + String get found => 'Pronađeno'; + + @override + String get staging => 'Sabirno mjesto'; + + @override + String get object => 'Objekt'; + + @override + String get quiet => 'Tiho'; + + @override + String get moderate => 'Umjereno'; + + @override + String get busy => 'Zauzeto'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => + 'Spektralno skeniranje nije pronašlo prikladne frekvencije'; + + @override + String get searchMessages => 'Pretraži poruke'; + + @override + String get sendImageFromGallery => 'Pošalji sliku iz galerije'; + + @override + String get takePhoto => 'Snimi fotografiju'; + + @override + String get dmOnly => 'Samo izravno'; + + @override + String get allMessages => 'Sve poruke'; + + @override + String get sendToPublicChannel => 'Pošalji na javni kanal?'; + + @override + String get selectMarkerTypeAndDestination => + 'Odaberite vrstu oznake i odredište'; + + @override + String get noDestinationsAvailableLabel => 'Nema dostupnih odredišta'; + + @override + String get image => 'Slika'; + + @override + String get format => 'Format'; + + @override + String get dimensions => 'Dimenzije'; + + @override + String get segments => 'Segmenti'; + + @override + String get transfers => 'Prijenosi'; + + @override + String get downloadedBy => 'Preuzeo'; + + @override + String get saveDiscoverySettings => 'Spremi postavke otkrivanja'; + + @override + String get savePublicInfo => 'Spremi javne podatke'; + + @override + String get saveRadioSettings => 'Spremi radijske postavke'; + + @override + String get savePath => 'Spremi putanju'; + + @override + String get wipeDeviceData => 'Obriši podatke uređaja'; + + @override + String get wipeDevice => 'Obriši uređaj'; + + @override + String get destructiveDeviceActions => 'Destruktivne radnje na uređaju.'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => + 'Odaberite predefiniranu postavku ili fino podesite radijske postavke.'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => + 'Odaberite ime i lokaciju koju ovaj uređaj dijeli.'; + + @override + String get availableSpaceOnThisDevice => + 'Raspoloživi prostor na ovom uređaju.'; + + @override + String get used => 'Korišteno'; + + @override + String get total => 'Ukupno'; + + @override + String get renameValue => 'Preimenuj vrijednost'; + + @override + String get customizeFields => 'Prilagodi polja'; + + @override + String get livePreview => 'Pregled uživo'; + + @override + String get refreshSchedule => 'Raspored osvježavanja'; + + @override + String get noResponse => 'Nema odgovora'; + + @override + String get refreshing => 'Osvježavam'; + + @override + String get unavailable => 'Nedostupno'; + + @override + String get pickARelayOrNodeToWatchInSensors => + 'Odaberite posrednika ili čvor za praćenje.'; + + @override + String get publicKeyLabel => 'Javni ključ'; + + @override + String get alreadyInContacts => 'Već u kontaktima'; + + @override + String get connectToADeviceBeforeAddingContacts => + 'Povežite se s uređajem prije dodavanja kontakata'; + + @override + String get fromContacts => 'Iz kontakata'; + + @override + String get onlineOnly => 'Samo povezani'; + + @override + String get inBoth => 'U oba'; + + @override + String get source => 'Izvor'; + + @override + String get manualRouteEdit => 'Ručno uređivanje putanje'; + + @override + String get observedMeshRoute => 'Opažena mrežna putanja'; + + @override + String get allMessagesCleared => 'Sve poruke očišćene'; + + @override + String get onlineTraceDatabaseCleared => 'Baza mrežnih tragova očišćena'; + + @override + String get packetLogsCleared => 'Zapisi paketa očišćeni'; + + @override + String get hexDataCopiedToClipboard => 'Hex podaci kopirani u međuspremnik'; + + @override + String get developerModeEnabled => 'Razvojni način omogućen'; + + @override + String get developerModeDisabled => 'Razvojni način onemogućen'; + + @override + String get clipboardIsEmpty => 'Međuspremnik je prazan'; + + @override + String get contactImported => 'Kontakt uvezen'; + + @override + String get contactLinkCopiedToClipboard => + 'Poveznica na kontakt kopirana u međuspremnik'; + + @override + String get failedToExportContact => 'Izvoz kontakta nije uspio'; + + @override + String get noLogsToExport => 'Nema zapisa za izvoz'; + + @override + String get exportAsCsv => 'Izvezi kao CSV'; + + @override + String get exportAsText => 'Izvezi kao tekst'; + + @override + String get receivedRfc3339 => 'Primljeno (RFC3339)'; + + @override + String get buildTime => 'Vrijeme gradnje'; + + @override + String get downloadUrlNotAvailable => 'URL za preuzimanje nije dostupan'; + + @override + String get cannotOpenDownloadUrl => 'Ne mogu otvoriti URL za preuzimanje'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => + 'Provjera ažuriranja dostupna je samo na Androidu'; + + @override + String get youAreRunningTheLatestVersion => 'Koristite najnoviju verziju'; + + @override + String get updateAvailableButDownloadUrlNotFound => + 'Ažuriranje dostupno, ali URL za preuzimanje nije pronađen'; + + @override + String get startTictactoe => 'Pokreni Tic-Tac-Toe'; + + @override + String get tictactoeUnavailable => 'Tic-Tac-Toe nije dostupan'; + + @override + String get tictactoeOpponentUnknown => 'Tic-Tac-Toe: protivnik nepoznat'; + + @override + String get tictactoeWaitingForStart => 'Tic-Tac-Toe: čekanje na početak'; + + @override + String get acceptsShareLinks => 'Prihvaća dijeljene veze'; + + @override + String get supportsRawHex => 'Podržava sirovi hex'; + + @override + String get clipboardfriendly => 'Pogodno za međuspremnik'; + + @override + String get captured => 'Zabilježeno'; + + @override + String get size => 'Veličina'; + + @override + String get noCustomChannelsToClear => 'Nema prilagođenih kanala za brisanje.'; + + @override + String get noDeviceContactsToClear => 'Nema kontakata uređaja za brisanje.'; } diff --git a/lib/l10n/app_localizations_it.dart b/lib/l10n/app_localizations_it.dart index ed89960..7f35ce8 100644 --- a/lib/l10n/app_localizations_it.dart +++ b/lib/l10n/app_localizations_it.dart @@ -1927,4 +1927,769 @@ class AppLocalizationsIt extends AppLocalizations { String contactFailedToSetRoute(String error) { return 'Impossibile impostare il percorso: $error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'Timeout ACK'; + + @override + String get opcode => 'Opcode'; + + @override + String get payload => 'Payload'; + + @override + String get hops => 'Hop'; + + @override + String get hashSize => 'Dimensione hash'; + + @override + String get pathBytes => 'Byte percorso'; + + @override + String get selectedPath => 'Percorso selezionato'; + + @override + String get estimatedTx => 'Trasmissione stimata'; + + @override + String get senderToReceipt => 'Mittente a ricevuta'; + + @override + String get receivedCopies => 'Copie ricevute'; + + @override + String get retryCause => 'Causa del ritentativo'; + + @override + String get retryMode => 'Modalità ritentativo'; + + @override + String get retryResult => 'Risultato ritentativo'; + + @override + String get lastRetry => 'Ultimo ritentativo'; + + @override + String get rxPackets => 'Pacchetti RX'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => 'Velocità'; + + @override + String get window => 'Finestra'; + + @override + String get posttxDelay => 'Ritardo post-tx'; + + @override + String get bandpass => 'Passa-banda'; + + @override + String get bandpassFilterVoice => 'Filtro passa-banda voce'; + + @override + String get frequency => 'Frequenza'; + + @override + String get australia => 'Australia'; + + @override + String get australiaNarrow => 'Australia (Stretto)'; + + @override + String get australiaQld => 'Australia: QLD'; + + @override + String get australiaSaWa => 'Australia: SA, WA'; + + @override + String get newZealand => 'Nuova Zelanda'; + + @override + String get newZealandNarrow => 'Nuova Zelanda (Stretto)'; + + @override + String get switzerland => 'Svizzera'; + + @override + String get portugal433 => 'Portogallo 433'; + + @override + String get portugal868 => 'Portogallo 868'; + + @override + String get czechRepublicNarrow => 'Repubblica Ceca (Stretto)'; + + @override + String get eu433mhzLongRange => 'UE 433MHz (Lungo Raggio)'; + + @override + String get euukDeprecated => 'UE/UK (Deprecato)'; + + @override + String get euukNarrow => 'UE/UK (Stretto)'; + + @override + String get usacanadaRecommended => 'USA/Canada (Consigliato)'; + + @override + String get vietnamDeprecated => 'Vietnam (Deprecato)'; + + @override + String get vietnamNarrow => 'Vietnam (Stretto)'; + + @override + String get active => 'Attivo'; + + @override + String get addContact => 'Aggiungi contatto'; + + @override + String get all => 'Tutto'; + + @override + String get autoResolve => 'Risolvi automaticamente'; + + @override + String get clearAllLabel => 'Cancella tutto'; + + @override + String get clearRelays => 'Cancella relay'; + + @override + String get clearFilters => 'Cancella filtri'; + + @override + String get clearRoute => 'Cancella percorso'; + + @override + String get clearMessages => 'Cancella messaggi'; + + @override + String get clearScale => 'Cancella scala'; + + @override + String get clearDiscoveries => 'Cancella scoperte'; + + @override + String get clearOnlineTraceDatabase => 'Cancella database tracce'; + + @override + String get clearAllChannels => 'Cancella tutti i canali'; + + @override + String get clearAllContacts => 'Cancella tutti i contatti'; + + @override + String get clearChannels => 'Cancella canali'; + + @override + String get clearContacts => 'Cancella contatti'; + + @override + String get clearPathOnMaxRetry => 'Cancella percorso al max ritentativo'; + + @override + String get create => 'Crea'; + + @override + String get custom => 'Personalizzato'; + + @override + String get defaultValue => 'Predefinito'; + + @override + String get duplicate => 'Duplica'; + + @override + String get editName => 'Modifica nome'; + + @override + String get open => 'Apri'; + + @override + String get paste => 'Incolla'; + + @override + String get preview => 'Anteprima'; + + @override + String get remove => 'Rimuovi'; + + @override + String get rename => 'Rinomina'; + + @override + String get resolveAll => 'Risolvi tutto'; + + @override + String get send => 'Invia'; + + @override + String get sendAnyway => 'Invia comunque'; + + @override + String get share => 'Condividi'; + + @override + String get shareContact => 'Condividi contatto'; + + @override + String get trace => 'Traccia'; + + @override + String get use => 'Usa'; + + @override + String get useSelectedFrequency => 'Usa frequenza selezionata'; + + @override + String get discovery => 'Scoperta'; + + @override + String get discoverRepeaters => 'Scopri ripetitori'; + + @override + String get discoverSensors => 'Scopri sensori'; + + @override + String get repeaterDiscoverySent => 'Scoperta ripetitori inviata'; + + @override + String get sensorDiscoverySent => 'Scoperta sensori inviata'; + + @override + String get clearedPendingDiscoveries => 'Scoperte in attesa cancellate.'; + + @override + String get autoDiscovery => 'Scoperta automatica'; + + @override + String get enableAutomaticAdding => 'Abilita aggiunta automatica'; + + @override + String get autoaddRepeaters => 'Aggiungi ripetitori automaticamente'; + + @override + String get autoaddRoomServers => 'Aggiungi server stanze automaticamente'; + + @override + String get autoaddSensors => 'Aggiungi sensori automaticamente'; + + @override + String get autoaddUsers => 'Aggiungi utenti automaticamente'; + + @override + String get overwriteOldestWhenFull => 'Sovrascrivi i più vecchi quando pieno'; + + @override + String get storage => 'Archiviazione'; + + @override + String get dangerZone => 'Zona pericolosa'; + + @override + String get profiles => 'Profili'; + + @override + String get favourites => 'Preferiti'; + + @override + String get sensors => 'Sensori'; + + @override + String get others => 'Altri'; + + @override + String get gpsModule => 'Modulo GPS'; + + @override + String get liveTraffic => 'Traffico in tempo reale'; + + @override + String get repeatersMap => 'Mappa ripetitori'; + + @override + String get spectrumScan => 'Scansione spettro'; + + @override + String get blePacketLogs => 'Log pacchetti BLE'; + + @override + String get onlineTraceDatabase => 'Database tracce'; + + @override + String get routePathByteSize => 'Dimensione percorso in byte'; + + @override + String get messageNotifications => 'Notifiche messaggi'; + + @override + String get sarAlerts => 'Avvisi SAR'; + + @override + String get discoveryNotifications => 'Notifiche scoperte'; + + @override + String get updateNotifications => 'Notifiche aggiornamenti'; + + @override + String get muteWhileAppIsOpen => 'Silenzia con l\'app aperta'; + + @override + String get disableContacts => 'Disabilita contatti'; + + @override + String get enableSensorsTab => 'Abilita scheda Sensori'; + + @override + String get enableProfiles => 'Abilita profili'; + + @override + String get autoRouteRotation => 'Rotazione automatica percorso'; + + @override + String get nearestRepeaterFallback => 'Ripetitore più vicino come fallback'; + + @override + String get deleteAllStoredMessageHistory => + 'Elimina tutta la cronologia messaggi'; + + @override + String get messageFontSize => 'Dimensione carattere messaggi'; + + @override + String get rotateMapWithHeading => 'Ruota mappa con direzione'; + + @override + String get showMapDebugInfo => 'Mostra info debug mappa'; + + @override + String get openMapInFullscreen => 'Apri mappa a schermo intero'; + + @override + String get showSarMarkersLabel => 'Mostra marcatori SAR'; + + @override + String get displaySarMarkersOnTheMainMap => + 'Mostra marcatori SAR sulla mappa principale'; + + @override + String get showAllContactTrailsLabel => 'Mostra tutti i percorsi contatti'; + + @override + String get hideRepeatersOnMap => 'Nascondi ripetitori sulla mappa'; + + @override + String get setMapScale => 'Imposta scala mappa'; + + @override + String get customMapScaleSaved => 'Scala mappa personalizzata salvata'; + + @override + String get voiceBitrate => 'Bitrate voce'; + + @override + String get voiceCompressor => 'Compressore voce'; + + @override + String get balancesQuietAndLoudSpeechLevels => + 'Bilancia i livelli di voce bassi e alti'; + + @override + String get voiceLimiter => 'Limitatore voce'; + + @override + String get preventsClippingPeaksBeforeEncoding => + 'Previene il clipping prima della codifica'; + + @override + String get micAutoGain => 'Guadagno automatico microfono'; + + @override + String get letsTheRecorderAdjustInputLevel => + 'Permette al registratore di regolare il livello'; + + @override + String get echoCancellation => 'Cancellazione eco'; + + @override + String get noiseSuppression => 'Soppressione rumore'; + + @override + String get trimSilenceInVoiceMessages => + 'Taglia silenzio nei messaggi vocali'; + + @override + String get compressor => 'Compressore'; + + @override + String get limiter => 'Limitatore'; + + @override + String get autoGain => 'Guadagno automatico'; + + @override + String get echoCancel => 'Eco'; + + @override + String get noiseSuppress => 'Rumore'; + + @override + String get silenceTrim => 'Silenzio'; + + @override + String get maxImageSize => 'Dimensione massima immagine'; + + @override + String get imageCompression => 'Compressione immagine'; + + @override + String get grayscale => 'Scala di grigi'; + + @override + String get ultraMode => 'Modalità ultra'; + + @override + String get fastPrivateGpsUpdates => 'Aggiornamenti GPS privati veloci'; + + @override + String get movementThreshold => 'Soglia di movimento'; + + @override + String get fastGpsMovementThreshold => 'Soglia movimento GPS veloce'; + + @override + String get fastGpsActiveuseInterval => 'Intervallo uso attivo GPS veloce'; + + @override + String get activeuseUpdateInterval => 'Intervallo aggiornamento uso attivo'; + + @override + String get repeatNearbyTraffic => 'Ripeti traffico vicino'; + + @override + String get relayThroughRepeatersAcrossTheMesh => + 'Inoltra tramite ripetitori nella rete'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => + 'Solo vicini, senza flood dei ripetitori'; + + @override + String get multihop => 'Multi-hop'; + + @override + String get createProfile => 'Crea profilo'; + + @override + String get renameProfile => 'Rinomina profilo'; + + @override + String get newProfile => 'Nuovo profilo'; + + @override + String get manageProfiles => 'Gestisci profili'; + + @override + String get enableProfilesToStartManagingThem => + 'Abilita i profili per iniziare a gestirli.'; + + @override + String get openMessage => 'Apri messaggio'; + + @override + String get jumpToTheRelatedSarMessage => 'Vai al messaggio SAR correlato'; + + @override + String get removeSarMarker => 'Rimuovi marcatore SAR'; + + @override + String get pleaseSelectADestinationToSendSarMarker => + 'Seleziona una destinazione per inviare il marcatore SAR'; + + @override + String get sarMarkerBroadcastToPublicChannel => + 'Marcatore SAR trasmesso al canale pubblico'; + + @override + String get sarMarkerSentToRoom => 'Marcatore SAR inviato alla stanza'; + + @override + String get loadFromGallery => 'Carica dalla galleria'; + + @override + String get replaceImage => 'Sostituisci immagine'; + + @override + String get selectFromGallery => 'Seleziona dalla galleria'; + + @override + String get team => 'Squadra'; + + @override + String get found => 'Trovato'; + + @override + String get staging => 'Area di raccolta'; + + @override + String get object => 'Oggetto'; + + @override + String get quiet => 'Silenzioso'; + + @override + String get moderate => 'Moderato'; + + @override + String get busy => 'Occupato'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => + 'La scansione spettro non ha trovato frequenze candidate'; + + @override + String get searchMessages => 'Cerca messaggi'; + + @override + String get sendImageFromGallery => 'Invia immagine dalla galleria'; + + @override + String get takePhoto => 'Scatta foto'; + + @override + String get dmOnly => 'Solo messaggio diretto'; + + @override + String get allMessages => 'Tutti i messaggi'; + + @override + String get sendToPublicChannel => 'Inviare al canale pubblico?'; + + @override + String get selectMarkerTypeAndDestination => + 'Seleziona tipo marcatore e destinazione'; + + @override + String get noDestinationsAvailableLabel => 'Nessuna destinazione disponibile'; + + @override + String get image => 'Immagine'; + + @override + String get format => 'Formato'; + + @override + String get dimensions => 'Dimensioni'; + + @override + String get segments => 'Segmenti'; + + @override + String get transfers => 'Trasferimenti'; + + @override + String get downloadedBy => 'Scaricato da'; + + @override + String get saveDiscoverySettings => 'Salva impostazioni scoperta'; + + @override + String get savePublicInfo => 'Salva info pubbliche'; + + @override + String get saveRadioSettings => 'Salva impostazioni radio'; + + @override + String get savePath => 'Salva percorso'; + + @override + String get wipeDeviceData => 'Cancella dati dispositivo'; + + @override + String get wipeDevice => 'Cancella dispositivo'; + + @override + String get destructiveDeviceActions => 'Azioni distruttive del dispositivo.'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => + 'Scegli un preset o personalizza le impostazioni radio.'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => + 'Scegli il nome e la posizione condivisi da questo dispositivo.'; + + @override + String get availableSpaceOnThisDevice => + 'Spazio disponibile su questo dispositivo.'; + + @override + String get used => 'Usato'; + + @override + String get total => 'Totale'; + + @override + String get renameValue => 'Rinomina valore'; + + @override + String get customizeFields => 'Personalizza campi'; + + @override + String get livePreview => 'Anteprima dal vivo'; + + @override + String get refreshSchedule => 'Programma aggiornamento'; + + @override + String get noResponse => 'Nessuna risposta'; + + @override + String get refreshing => 'Aggiornamento'; + + @override + String get unavailable => 'Non disponibile'; + + @override + String get pickARelayOrNodeToWatchInSensors => + 'Scegli un relay o nodo da monitorare.'; + + @override + String get publicKeyLabel => 'Chiave pubblica'; + + @override + String get alreadyInContacts => 'Già nei contatti'; + + @override + String get connectToADeviceBeforeAddingContacts => + 'Connettiti a un dispositivo prima di aggiungere contatti'; + + @override + String get fromContacts => 'Dai contatti'; + + @override + String get onlineOnly => 'Solo online'; + + @override + String get inBoth => 'In entrambi'; + + @override + String get source => 'Origine'; + + @override + String get manualRouteEdit => 'Modifica manuale percorso'; + + @override + String get observedMeshRoute => 'Percorso mesh osservato'; + + @override + String get allMessagesCleared => 'Tutti i messaggi cancellati'; + + @override + String get onlineTraceDatabaseCleared => 'Database tracce cancellata'; + + @override + String get packetLogsCleared => 'Log pacchetti cancellati'; + + @override + String get hexDataCopiedToClipboard => 'Dati hex copiati negli appunti'; + + @override + String get developerModeEnabled => 'Modalità sviluppatore attivata'; + + @override + String get developerModeDisabled => 'Modalità sviluppatore disattivata'; + + @override + String get clipboardIsEmpty => 'Gli appunti sono vuoti'; + + @override + String get contactImported => 'Contatto importato'; + + @override + String get contactLinkCopiedToClipboard => + 'Link contatto copiato negli appunti'; + + @override + String get failedToExportContact => 'Esportazione contatto fallita'; + + @override + String get noLogsToExport => 'Nessun log da esportare'; + + @override + String get exportAsCsv => 'Esporta come CSV'; + + @override + String get exportAsText => 'Esporta come testo'; + + @override + String get receivedRfc3339 => 'Ricevuto (RFC3339)'; + + @override + String get buildTime => 'Ora build'; + + @override + String get downloadUrlNotAvailable => 'URL di download non disponibile'; + + @override + String get cannotOpenDownloadUrl => 'Impossibile aprire URL di download'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => + 'Il controllo aggiornamenti è disponibile solo su Android'; + + @override + String get youAreRunningTheLatestVersion => + 'Stai utilizzando l\'ultima versione'; + + @override + String get updateAvailableButDownloadUrlNotFound => + 'Aggiornamento disponibile ma URL di download non trovato'; + + @override + String get startTictactoe => 'Avvia Tic-Tac-Toe'; + + @override + String get tictactoeUnavailable => 'Tic-Tac-Toe non disponibile'; + + @override + String get tictactoeOpponentUnknown => 'Tic-Tac-Toe: avversario sconosciuto'; + + @override + String get tictactoeWaitingForStart => 'Tic-Tac-Toe: in attesa dell\'inizio'; + + @override + String get acceptsShareLinks => 'Accetta link condivisi'; + + @override + String get supportsRawHex => 'Supporta hex grezzo'; + + @override + String get clipboardfriendly => 'Compatibile con appunti'; + + @override + String get captured => 'Catturato'; + + @override + String get size => 'Dimensione'; + + @override + String get noCustomChannelsToClear => + 'Nessun canale personalizzato da cancellare.'; + + @override + String get noDeviceContactsToClear => + 'Nessun contatto dispositivo da cancellare.'; } diff --git a/lib/l10n/app_localizations_pl.dart b/lib/l10n/app_localizations_pl.dart index 918f20d..c3812ee 100644 --- a/lib/l10n/app_localizations_pl.dart +++ b/lib/l10n/app_localizations_pl.dart @@ -1924,4 +1924,769 @@ class AppLocalizationsPl extends AppLocalizations { String contactFailedToSetRoute(String error) { return 'Nie udało się ustawić trasy: $error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'Limit czasu ACK'; + + @override + String get opcode => 'Opcode'; + + @override + String get payload => 'Ładunek'; + + @override + String get hops => 'Skoki'; + + @override + String get hashSize => 'Rozmiar hash'; + + @override + String get pathBytes => 'Bajty ścieżki'; + + @override + String get selectedPath => 'Wybrana ścieżka'; + + @override + String get estimatedTx => 'Szacowane nadawanie'; + + @override + String get senderToReceipt => 'Od nadawcy do odbioru'; + + @override + String get receivedCopies => 'Otrzymane kopie'; + + @override + String get retryCause => 'Przyczyna ponowienia'; + + @override + String get retryMode => 'Tryb ponowienia'; + + @override + String get retryResult => 'Wynik ponowienia'; + + @override + String get lastRetry => 'Ostatnia próba'; + + @override + String get rxPackets => 'Pakiety RX'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => 'Szybkość'; + + @override + String get window => 'Okno'; + + @override + String get posttxDelay => 'Opóźnienie po nadawaniu'; + + @override + String get bandpass => 'Pasmowy'; + + @override + String get bandpassFilterVoice => 'Filtr pasmowy głosu'; + + @override + String get frequency => 'Częstotliwość'; + + @override + String get australia => 'Australia'; + + @override + String get australiaNarrow => 'Australia (wąski)'; + + @override + String get australiaQld => 'Australia: QLD'; + + @override + String get australiaSaWa => 'Australia: SA, WA'; + + @override + String get newZealand => 'Nowa Zelandia'; + + @override + String get newZealandNarrow => 'Nowa Zelandia (wąski)'; + + @override + String get switzerland => 'Szwajcaria'; + + @override + String get portugal433 => 'Portugalia 433'; + + @override + String get portugal868 => 'Portugalia 868'; + + @override + String get czechRepublicNarrow => 'Czechy (wąski)'; + + @override + String get eu433mhzLongRange => 'EU 433MHz (daleki zasięg)'; + + @override + String get euukDeprecated => 'EU/UK (przestarzały)'; + + @override + String get euukNarrow => 'EU/UK (wąski)'; + + @override + String get usacanadaRecommended => 'USA/Kanada (zalecany)'; + + @override + String get vietnamDeprecated => 'Wietnam (przestarzały)'; + + @override + String get vietnamNarrow => 'Wietnam (wąski)'; + + @override + String get active => 'Aktywny'; + + @override + String get addContact => 'Dodaj kontakt'; + + @override + String get all => 'Wszystko'; + + @override + String get autoResolve => 'Automatyczne rozwiązanie'; + + @override + String get clearAllLabel => 'Wyczyść wszystko'; + + @override + String get clearRelays => 'Wyczyść przekaźniki'; + + @override + String get clearFilters => 'Wyczyść filtry'; + + @override + String get clearRoute => 'Wyczyść trasę'; + + @override + String get clearMessages => 'Wyczyść wiadomości'; + + @override + String get clearScale => 'Wyczyść skalę'; + + @override + String get clearDiscoveries => 'Wyczyść odkrycia'; + + @override + String get clearOnlineTraceDatabase => 'Wyczyść bazę śladów'; + + @override + String get clearAllChannels => 'Wyczyść wszystkie kanały'; + + @override + String get clearAllContacts => 'Wyczyść wszystkie kontakty'; + + @override + String get clearChannels => 'Wyczyść kanały'; + + @override + String get clearContacts => 'Wyczyść kontakty'; + + @override + String get clearPathOnMaxRetry => 'Wyczyść ścieżkę przy maks. próbie'; + + @override + String get create => 'Utwórz'; + + @override + String get custom => 'Niestandardowy'; + + @override + String get defaultValue => 'Domyślny'; + + @override + String get duplicate => 'Duplikuj'; + + @override + String get editName => 'Edytuj nazwę'; + + @override + String get open => 'Otwórz'; + + @override + String get paste => 'Wklej'; + + @override + String get preview => 'Podgląd'; + + @override + String get remove => 'Usuń'; + + @override + String get rename => 'Zmień nazwę'; + + @override + String get resolveAll => 'Rozwiąż wszystko'; + + @override + String get send => 'Wyślij'; + + @override + String get sendAnyway => 'Wyślij mimo to'; + + @override + String get share => 'Udostępnij'; + + @override + String get shareContact => 'Udostępnij kontakt'; + + @override + String get trace => 'Śledzenie'; + + @override + String get use => 'Użyj'; + + @override + String get useSelectedFrequency => 'Użyj wybranej częstotliwości'; + + @override + String get discovery => 'Wykrywanie'; + + @override + String get discoverRepeaters => 'Wykryj przekaźniki'; + + @override + String get discoverSensors => 'Wykryj czujniki'; + + @override + String get repeaterDiscoverySent => 'Wykrywanie przekaźników wysłane'; + + @override + String get sensorDiscoverySent => 'Wykrywanie czujników wysłane'; + + @override + String get clearedPendingDiscoveries => 'Wyczyszczono oczekujące odkrycia.'; + + @override + String get autoDiscovery => 'Automatyczne wykrywanie'; + + @override + String get enableAutomaticAdding => 'Włącz automatyczne dodawanie'; + + @override + String get autoaddRepeaters => 'Automatycznie dodaj przekaźniki'; + + @override + String get autoaddRoomServers => 'Automatycznie dodaj serwery pokoi'; + + @override + String get autoaddSensors => 'Automatycznie dodaj czujniki'; + + @override + String get autoaddUsers => 'Automatycznie dodaj użytkowników'; + + @override + String get overwriteOldestWhenFull => 'Nadpisz najstarsze gdy pełne'; + + @override + String get storage => 'Pamięć'; + + @override + String get dangerZone => 'Strefa zagrożenia'; + + @override + String get profiles => 'Profile'; + + @override + String get favourites => 'Ulubione'; + + @override + String get sensors => 'Czujniki'; + + @override + String get others => 'Inne'; + + @override + String get gpsModule => 'Moduł GPS'; + + @override + String get liveTraffic => 'Ruch na żywo'; + + @override + String get repeatersMap => 'Mapa przekaźników'; + + @override + String get spectrumScan => 'Skanowanie spektrum'; + + @override + String get blePacketLogs => 'Logi pakietów BLE'; + + @override + String get onlineTraceDatabase => 'Baza śladów'; + + @override + String get routePathByteSize => 'Rozmiar ścieżki w bajtach'; + + @override + String get messageNotifications => 'Powiadomienia o wiadomościach'; + + @override + String get sarAlerts => 'Alerty SAR'; + + @override + String get discoveryNotifications => 'Powiadomienia o wykrywaniu'; + + @override + String get updateNotifications => 'Powiadomienia o aktualizacjach'; + + @override + String get muteWhileAppIsOpen => 'Wycisz gdy aplikacja jest otwarta'; + + @override + String get disableContacts => 'Wyłącz kontakty'; + + @override + String get enableSensorsTab => 'Włącz kartę Czujniki'; + + @override + String get enableProfiles => 'Włącz profile'; + + @override + String get autoRouteRotation => 'Automatyczna rotacja trasy'; + + @override + String get nearestRepeaterFallback => 'Najbliższy przekaźnik awaryjny'; + + @override + String get deleteAllStoredMessageHistory => 'Usuń całą historię wiadomości'; + + @override + String get messageFontSize => 'Rozmiar czcionki wiadomości'; + + @override + String get rotateMapWithHeading => 'Obracaj mapę z kierunkiem'; + + @override + String get showMapDebugInfo => 'Pokaż info debugowania mapy'; + + @override + String get openMapInFullscreen => 'Otwórz mapę na pełnym ekranie'; + + @override + String get showSarMarkersLabel => 'Pokaż znaczniki SAR'; + + @override + String get displaySarMarkersOnTheMainMap => + 'Wyświetlaj znaczniki SAR na głównej mapie'; + + @override + String get showAllContactTrailsLabel => 'Pokaż wszystkie ślady kontaktów'; + + @override + String get hideRepeatersOnMap => 'Ukryj przekaźniki na mapie'; + + @override + String get setMapScale => 'Ustaw skalę mapy'; + + @override + String get customMapScaleSaved => 'Niestandardowa skala mapy zapisana'; + + @override + String get voiceBitrate => 'Bitrate głosu'; + + @override + String get voiceCompressor => 'Kompresor głosu'; + + @override + String get balancesQuietAndLoudSpeechLevels => + 'Wyrównuje ciche i głośne poziomy mowy'; + + @override + String get voiceLimiter => 'Limiter głosu'; + + @override + String get preventsClippingPeaksBeforeEncoding => + 'Zapobiega przycinaniu szczytów przed kodowaniem'; + + @override + String get micAutoGain => 'Automatyczne wzmocnienie mikrofonu'; + + @override + String get letsTheRecorderAdjustInputLevel => + 'Pozwala nagrywarkowi dostosować poziom wejścia'; + + @override + String get echoCancellation => 'Usuwanie echa'; + + @override + String get noiseSuppression => 'Tłumienie szumu'; + + @override + String get trimSilenceInVoiceMessages => + 'Przytnij ciszę w wiadomościach głosowych'; + + @override + String get compressor => 'Kompresor'; + + @override + String get limiter => 'Limiter'; + + @override + String get autoGain => 'Automatyczne wzmocnienie'; + + @override + String get echoCancel => 'Echo'; + + @override + String get noiseSuppress => 'Szum'; + + @override + String get silenceTrim => 'Cisza'; + + @override + String get maxImageSize => 'Maksymalny rozmiar obrazu'; + + @override + String get imageCompression => 'Kompresja obrazu'; + + @override + String get grayscale => 'Skala szarości'; + + @override + String get ultraMode => 'Tryb ultra'; + + @override + String get fastPrivateGpsUpdates => 'Szybkie prywatne aktualizacje GPS'; + + @override + String get movementThreshold => 'Próg ruchu'; + + @override + String get fastGpsMovementThreshold => 'Próg ruchu szybkiego GPS'; + + @override + String get fastGpsActiveuseInterval => + 'Interwał aktywnego użycia szybkiego GPS'; + + @override + String get activeuseUpdateInterval => + 'Interwał aktualizacji przy aktywnym użyciu'; + + @override + String get repeatNearbyTraffic => 'Powtarzaj pobliski ruch'; + + @override + String get relayThroughRepeatersAcrossTheMesh => + 'Przekazuj przez przekaźniki w sieci'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => + 'Tylko w pobliżu, bez zalewania przekaźników'; + + @override + String get multihop => 'Wieloskokowy'; + + @override + String get createProfile => 'Utwórz profil'; + + @override + String get renameProfile => 'Zmień nazwę profilu'; + + @override + String get newProfile => 'Nowy profil'; + + @override + String get manageProfiles => 'Zarządzaj profilami'; + + @override + String get enableProfilesToStartManagingThem => + 'Włącz profile, aby zacząć nimi zarządzać.'; + + @override + String get openMessage => 'Otwórz wiadomość'; + + @override + String get jumpToTheRelatedSarMessage => + 'Przejdź do powiązanej wiadomości SAR'; + + @override + String get removeSarMarker => 'Usuń znacznik SAR'; + + @override + String get pleaseSelectADestinationToSendSarMarker => + 'Wybierz cel wysłania znacznika SAR'; + + @override + String get sarMarkerBroadcastToPublicChannel => + 'Znacznik SAR wysłany na kanał publiczny'; + + @override + String get sarMarkerSentToRoom => 'Znacznik SAR wysłany do pokoju'; + + @override + String get loadFromGallery => 'Załaduj z galerii'; + + @override + String get replaceImage => 'Zamień obraz'; + + @override + String get selectFromGallery => 'Wybierz z galerii'; + + @override + String get team => 'Zespół'; + + @override + String get found => 'Znaleziono'; + + @override + String get staging => 'Punkt zbiórki'; + + @override + String get object => 'Obiekt'; + + @override + String get quiet => 'Cicho'; + + @override + String get moderate => 'Umiarkowane'; + + @override + String get busy => 'Zajęty'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => + 'Skanowanie spektrum nie znalazło częstotliwości kandydatów'; + + @override + String get searchMessages => 'Szukaj wiadomości'; + + @override + String get sendImageFromGallery => 'Wyślij obraz z galerii'; + + @override + String get takePhoto => 'Zrób zdjęcie'; + + @override + String get dmOnly => 'Tylko wiadomość bezpośrednia'; + + @override + String get allMessages => 'Wszystkie wiadomości'; + + @override + String get sendToPublicChannel => 'Wysłać na kanał publiczny?'; + + @override + String get selectMarkerTypeAndDestination => 'Wybierz typ znacznika i cel'; + + @override + String get noDestinationsAvailableLabel => 'Brak dostępnych celów'; + + @override + String get image => 'Obraz'; + + @override + String get format => 'Format'; + + @override + String get dimensions => 'Wymiary'; + + @override + String get segments => 'Segmenty'; + + @override + String get transfers => 'Transfery'; + + @override + String get downloadedBy => 'Pobrane przez'; + + @override + String get saveDiscoverySettings => 'Zapisz ustawienia wykrywania'; + + @override + String get savePublicInfo => 'Zapisz informacje publiczne'; + + @override + String get saveRadioSettings => 'Zapisz ustawienia radia'; + + @override + String get savePath => 'Zapisz ścieżkę'; + + @override + String get wipeDeviceData => 'Wyczyść dane urządzenia'; + + @override + String get wipeDevice => 'Wyczyść urządzenie'; + + @override + String get destructiveDeviceActions => 'Destrukcyjne akcje na urządzeniu.'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => + 'Wybierz ustawienie wstępne lub dostosuj ustawienia radia.'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => + 'Wybierz nazwę i lokalizację udostępnianą przez to urządzenie.'; + + @override + String get availableSpaceOnThisDevice => + 'Dostępne miejsce na tym urządzeniu.'; + + @override + String get used => 'Użyto'; + + @override + String get total => 'Razem'; + + @override + String get renameValue => 'Zmień nazwę wartości'; + + @override + String get customizeFields => 'Dostosuj pola'; + + @override + String get livePreview => 'Podgląd na żywo'; + + @override + String get refreshSchedule => 'Harmonogram odświeżania'; + + @override + String get noResponse => 'Brak odpowiedzi'; + + @override + String get refreshing => 'Odświeżanie'; + + @override + String get unavailable => 'Niedostępny'; + + @override + String get pickARelayOrNodeToWatchInSensors => + 'Wybierz przekaźnik lub węzeł do obserwacji.'; + + @override + String get publicKeyLabel => 'Klucz publiczny'; + + @override + String get alreadyInContacts => 'Już w kontaktach'; + + @override + String get connectToADeviceBeforeAddingContacts => + 'Połącz się z urządzeniem przed dodaniem kontaktów'; + + @override + String get fromContacts => 'Z kontaktów'; + + @override + String get onlineOnly => 'Tylko online'; + + @override + String get inBoth => 'W obu'; + + @override + String get source => 'Źródło'; + + @override + String get manualRouteEdit => 'Ręczna edycja trasy'; + + @override + String get observedMeshRoute => 'Obserwowana trasa sieci'; + + @override + String get allMessagesCleared => 'Wszystkie wiadomości wyczyszczone'; + + @override + String get onlineTraceDatabaseCleared => 'Baza śladów wyczyszczona'; + + @override + String get packetLogsCleared => 'Logi pakietów wyczyszczone'; + + @override + String get hexDataCopiedToClipboard => 'Dane hex skopiowane do schowka'; + + @override + String get developerModeEnabled => 'Tryb programisty włączony'; + + @override + String get developerModeDisabled => 'Tryb programisty wyłączony'; + + @override + String get clipboardIsEmpty => 'Schowek jest pusty'; + + @override + String get contactImported => 'Kontakt zaimportowany'; + + @override + String get contactLinkCopiedToClipboard => + 'Link kontaktu skopiowany do schowka'; + + @override + String get failedToExportContact => 'Nie udało się wyeksportować kontaktu'; + + @override + String get noLogsToExport => 'Brak logów do eksportu'; + + @override + String get exportAsCsv => 'Eksportuj jako CSV'; + + @override + String get exportAsText => 'Eksportuj jako tekst'; + + @override + String get receivedRfc3339 => 'Odebrano (RFC3339)'; + + @override + String get buildTime => 'Czas budowania'; + + @override + String get downloadUrlNotAvailable => 'URL pobierania niedostępny'; + + @override + String get cannotOpenDownloadUrl => 'Nie można otworzyć URL pobierania'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => + 'Sprawdzanie aktualizacji dostępne tylko na Androidzie'; + + @override + String get youAreRunningTheLatestVersion => 'Używasz najnowszej wersji'; + + @override + String get updateAvailableButDownloadUrlNotFound => + 'Aktualizacja dostępna, ale URL pobierania nie znaleziony'; + + @override + String get startTictactoe => 'Rozpocznij Tic-Tac-Toe'; + + @override + String get tictactoeUnavailable => 'Tic-Tac-Toe niedostępny'; + + @override + String get tictactoeOpponentUnknown => 'Tic-Tac-Toe: przeciwnik nieznany'; + + @override + String get tictactoeWaitingForStart => 'Tic-Tac-Toe: oczekiwanie na start'; + + @override + String get acceptsShareLinks => 'Akceptuje udostępnione linki'; + + @override + String get supportsRawHex => 'Obsługuje surowy hex'; + + @override + String get clipboardfriendly => 'Przyjazne dla schowka'; + + @override + String get captured => 'Przechwycone'; + + @override + String get size => 'Rozmiar'; + + @override + String get noCustomChannelsToClear => + 'Brak niestandardowych kanałów do wyczyszczenia.'; + + @override + String get noDeviceContactsToClear => + 'Brak kontaktów urządzenia do wyczyszczenia.'; } diff --git a/lib/l10n/app_localizations_pt.dart b/lib/l10n/app_localizations_pt.dart index 5e8f2c3..23e46a6 100644 --- a/lib/l10n/app_localizations_pt.dart +++ b/lib/l10n/app_localizations_pt.dart @@ -1931,4 +1931,773 @@ class AppLocalizationsPt extends AppLocalizations { String contactFailedToSetRoute(String error) { return 'Falha ao definir a rota: $error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'Tempo limite ACK'; + + @override + String get opcode => 'Opcode'; + + @override + String get payload => 'Carga útil'; + + @override + String get hops => 'Saltos'; + + @override + String get hashSize => 'Tamanho do hash'; + + @override + String get pathBytes => 'Bytes do caminho'; + + @override + String get selectedPath => 'Caminho selecionado'; + + @override + String get estimatedTx => 'Transmissão estimada'; + + @override + String get senderToReceipt => 'Do remetente ao recibo'; + + @override + String get receivedCopies => 'Cópias recebidas'; + + @override + String get retryCause => 'Causa da nova tentativa'; + + @override + String get retryMode => 'Modo de nova tentativa'; + + @override + String get retryResult => 'Resultado da nova tentativa'; + + @override + String get lastRetry => 'Última tentativa'; + + @override + String get rxPackets => 'Pacotes RX'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => 'Taxa'; + + @override + String get window => 'Janela'; + + @override + String get posttxDelay => 'Atraso pós-tx'; + + @override + String get bandpass => 'Passa-banda'; + + @override + String get bandpassFilterVoice => 'Filtro passa-banda de voz'; + + @override + String get frequency => 'Frequência'; + + @override + String get australia => 'Austrália'; + + @override + String get australiaNarrow => 'Austrália (Estreito)'; + + @override + String get australiaQld => 'Austrália: QLD'; + + @override + String get australiaSaWa => 'Austrália: SA, WA'; + + @override + String get newZealand => 'Nova Zelândia'; + + @override + String get newZealandNarrow => 'Nova Zelândia (Estreito)'; + + @override + String get switzerland => 'Suíça'; + + @override + String get portugal433 => 'Portugal 433'; + + @override + String get portugal868 => 'Portugal 868'; + + @override + String get czechRepublicNarrow => 'República Checa (Estreito)'; + + @override + String get eu433mhzLongRange => 'UE 433MHz (Longo Alcance)'; + + @override + String get euukDeprecated => 'UE/RU (Obsoleto)'; + + @override + String get euukNarrow => 'UE/RU (Estreito)'; + + @override + String get usacanadaRecommended => 'EUA/Canadá (Recomendado)'; + + @override + String get vietnamDeprecated => 'Vietname (Obsoleto)'; + + @override + String get vietnamNarrow => 'Vietname (Estreito)'; + + @override + String get active => 'Ativo'; + + @override + String get addContact => 'Adicionar contacto'; + + @override + String get all => 'Tudo'; + + @override + String get autoResolve => 'Resolver automaticamente'; + + @override + String get clearAllLabel => 'Limpar tudo'; + + @override + String get clearRelays => 'Limpar relays'; + + @override + String get clearFilters => 'Limpar filtros'; + + @override + String get clearRoute => 'Limpar rota'; + + @override + String get clearMessages => 'Limpar mensagens'; + + @override + String get clearScale => 'Limpar escala'; + + @override + String get clearDiscoveries => 'Limpar descobertas'; + + @override + String get clearOnlineTraceDatabase => 'Limpar base de dados de rastreio'; + + @override + String get clearAllChannels => 'Limpar todos os canais'; + + @override + String get clearAllContacts => 'Limpar todos os contactos'; + + @override + String get clearChannels => 'Limpar canais'; + + @override + String get clearContacts => 'Limpar contactos'; + + @override + String get clearPathOnMaxRetry => 'Limpar caminho no máx. de tentativas'; + + @override + String get create => 'Criar'; + + @override + String get custom => 'Personalizado'; + + @override + String get defaultValue => 'Padrão'; + + @override + String get duplicate => 'Duplicar'; + + @override + String get editName => 'Editar nome'; + + @override + String get open => 'Abrir'; + + @override + String get paste => 'Colar'; + + @override + String get preview => 'Pré-visualização'; + + @override + String get remove => 'Remover'; + + @override + String get rename => 'Renomear'; + + @override + String get resolveAll => 'Resolver tudo'; + + @override + String get send => 'Enviar'; + + @override + String get sendAnyway => 'Enviar mesmo assim'; + + @override + String get share => 'Partilhar'; + + @override + String get shareContact => 'Partilhar contacto'; + + @override + String get trace => 'Rastreio'; + + @override + String get use => 'Usar'; + + @override + String get useSelectedFrequency => 'Usar frequência selecionada'; + + @override + String get discovery => 'Descoberta'; + + @override + String get discoverRepeaters => 'Descobrir repetidores'; + + @override + String get discoverSensors => 'Descobrir sensores'; + + @override + String get repeaterDiscoverySent => 'Descoberta de repetidores enviada'; + + @override + String get sensorDiscoverySent => 'Descoberta de sensores enviada'; + + @override + String get clearedPendingDiscoveries => 'Descobertas pendentes limpas.'; + + @override + String get autoDiscovery => 'Descoberta automática'; + + @override + String get enableAutomaticAdding => 'Ativar adição automática'; + + @override + String get autoaddRepeaters => 'Adicionar repetidores automaticamente'; + + @override + String get autoaddRoomServers => + 'Adicionar servidores de sala automaticamente'; + + @override + String get autoaddSensors => 'Adicionar sensores automaticamente'; + + @override + String get autoaddUsers => 'Adicionar utilizadores automaticamente'; + + @override + String get overwriteOldestWhenFull => + 'Sobrescrever mais antigos quando cheio'; + + @override + String get storage => 'Armazenamento'; + + @override + String get dangerZone => 'Zona de perigo'; + + @override + String get profiles => 'Perfis'; + + @override + String get favourites => 'Favoritos'; + + @override + String get sensors => 'Sensores'; + + @override + String get others => 'Outros'; + + @override + String get gpsModule => 'Módulo GPS'; + + @override + String get liveTraffic => 'Tráfego ao vivo'; + + @override + String get repeatersMap => 'Mapa de repetidores'; + + @override + String get spectrumScan => 'Varredura de espectro'; + + @override + String get blePacketLogs => 'Registos de pacotes BLE'; + + @override + String get onlineTraceDatabase => 'Base de dados de rastreio'; + + @override + String get routePathByteSize => 'Tamanho do caminho em bytes'; + + @override + String get messageNotifications => 'Notificações de mensagens'; + + @override + String get sarAlerts => 'Alertas SAR'; + + @override + String get discoveryNotifications => 'Notificações de descoberta'; + + @override + String get updateNotifications => 'Notificações de atualização'; + + @override + String get muteWhileAppIsOpen => 'Silenciar com a app aberta'; + + @override + String get disableContacts => 'Desativar contactos'; + + @override + String get enableSensorsTab => 'Ativar separador Sensores'; + + @override + String get enableProfiles => 'Ativar perfis'; + + @override + String get autoRouteRotation => 'Rotação automática de rota'; + + @override + String get nearestRepeaterFallback => 'Repetidor mais próximo como reserva'; + + @override + String get deleteAllStoredMessageHistory => + 'Apagar todo o histórico de mensagens'; + + @override + String get messageFontSize => 'Tamanho da fonte de mensagens'; + + @override + String get rotateMapWithHeading => 'Rodar mapa com direção'; + + @override + String get showMapDebugInfo => 'Mostrar info de depuração do mapa'; + + @override + String get openMapInFullscreen => 'Abrir mapa em ecrã inteiro'; + + @override + String get showSarMarkersLabel => 'Mostrar marcadores SAR'; + + @override + String get displaySarMarkersOnTheMainMap => + 'Mostrar marcadores SAR no mapa principal'; + + @override + String get showAllContactTrailsLabel => + 'Mostrar todos os rastos de contactos'; + + @override + String get hideRepeatersOnMap => 'Ocultar repetidores no mapa'; + + @override + String get setMapScale => 'Definir escala do mapa'; + + @override + String get customMapScaleSaved => 'Escala de mapa personalizada guardada'; + + @override + String get voiceBitrate => 'Taxa de bits de voz'; + + @override + String get voiceCompressor => 'Compressor de voz'; + + @override + String get balancesQuietAndLoudSpeechLevels => + 'Equilibra níveis de fala suaves e altos'; + + @override + String get voiceLimiter => 'Limitador de voz'; + + @override + String get preventsClippingPeaksBeforeEncoding => + 'Previne corte de picos antes da codificação'; + + @override + String get micAutoGain => 'Ganho automático do microfone'; + + @override + String get letsTheRecorderAdjustInputLevel => + 'Permite ao gravador ajustar o nível de entrada'; + + @override + String get echoCancellation => 'Cancelamento de eco'; + + @override + String get noiseSuppression => 'Supressão de ruído'; + + @override + String get trimSilenceInVoiceMessages => + 'Cortar silêncio em mensagens de voz'; + + @override + String get compressor => 'Compressor'; + + @override + String get limiter => 'Limitador'; + + @override + String get autoGain => 'Ganho automático'; + + @override + String get echoCancel => 'Eco'; + + @override + String get noiseSuppress => 'Ruído'; + + @override + String get silenceTrim => 'Silêncio'; + + @override + String get maxImageSize => 'Tamanho máximo de imagem'; + + @override + String get imageCompression => 'Compressão de imagem'; + + @override + String get grayscale => 'Escala de cinzentos'; + + @override + String get ultraMode => 'Modo ultra'; + + @override + String get fastPrivateGpsUpdates => 'Atualizações GPS privadas rápidas'; + + @override + String get movementThreshold => 'Limiar de movimento'; + + @override + String get fastGpsMovementThreshold => 'Limiar de movimento GPS rápido'; + + @override + String get fastGpsActiveuseInterval => 'Intervalo de uso ativo GPS rápido'; + + @override + String get activeuseUpdateInterval => 'Intervalo de atualização de uso ativo'; + + @override + String get repeatNearbyTraffic => 'Repetir tráfego próximo'; + + @override + String get relayThroughRepeatersAcrossTheMesh => + 'Retransmitir através de repetidores na rede'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => + 'Apenas próximos, sem flood de repetidores'; + + @override + String get multihop => 'Multi-salto'; + + @override + String get createProfile => 'Criar perfil'; + + @override + String get renameProfile => 'Renomear perfil'; + + @override + String get newProfile => 'Novo perfil'; + + @override + String get manageProfiles => 'Gerir perfis'; + + @override + String get enableProfilesToStartManagingThem => + 'Ative os perfis para começar a geri-los.'; + + @override + String get openMessage => 'Abrir mensagem'; + + @override + String get jumpToTheRelatedSarMessage => 'Ir para a mensagem SAR relacionada'; + + @override + String get removeSarMarker => 'Remover marcador SAR'; + + @override + String get pleaseSelectADestinationToSendSarMarker => + 'Selecione um destino para enviar o marcador SAR'; + + @override + String get sarMarkerBroadcastToPublicChannel => + 'Marcador SAR transmitido no canal público'; + + @override + String get sarMarkerSentToRoom => 'Marcador SAR enviado para a sala'; + + @override + String get loadFromGallery => 'Carregar da galeria'; + + @override + String get replaceImage => 'Substituir imagem'; + + @override + String get selectFromGallery => 'Selecionar da galeria'; + + @override + String get team => 'Equipa'; + + @override + String get found => 'Encontrado'; + + @override + String get staging => 'Área de reunião'; + + @override + String get object => 'Objeto'; + + @override + String get quiet => 'Silencioso'; + + @override + String get moderate => 'Moderado'; + + @override + String get busy => 'Ocupado'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => + 'A varredura de espectro não encontrou frequências candidatas'; + + @override + String get searchMessages => 'Pesquisar mensagens'; + + @override + String get sendImageFromGallery => 'Enviar imagem da galeria'; + + @override + String get takePhoto => 'Tirar foto'; + + @override + String get dmOnly => 'Apenas mensagem direta'; + + @override + String get allMessages => 'Todas as mensagens'; + + @override + String get sendToPublicChannel => 'Enviar para o canal público?'; + + @override + String get selectMarkerTypeAndDestination => + 'Selecione tipo de marcador e destino'; + + @override + String get noDestinationsAvailableLabel => 'Nenhum destino disponível'; + + @override + String get image => 'Imagem'; + + @override + String get format => 'Formato'; + + @override + String get dimensions => 'Dimensões'; + + @override + String get segments => 'Segmentos'; + + @override + String get transfers => 'Transferências'; + + @override + String get downloadedBy => 'Transferido por'; + + @override + String get saveDiscoverySettings => 'Guardar definições de descoberta'; + + @override + String get savePublicInfo => 'Guardar informação pública'; + + @override + String get saveRadioSettings => 'Guardar definições de rádio'; + + @override + String get savePath => 'Guardar caminho'; + + @override + String get wipeDeviceData => 'Apagar dados do dispositivo'; + + @override + String get wipeDevice => 'Apagar dispositivo'; + + @override + String get destructiveDeviceActions => 'Ações destrutivas do dispositivo.'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => + 'Escolha uma predefinição ou ajuste as definições de rádio.'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => + 'Escolha o nome e a localização que este dispositivo partilha.'; + + @override + String get availableSpaceOnThisDevice => + 'Espaço disponível neste dispositivo.'; + + @override + String get used => 'Usado'; + + @override + String get total => 'Total'; + + @override + String get renameValue => 'Renomear valor'; + + @override + String get customizeFields => 'Personalizar campos'; + + @override + String get livePreview => 'Pré-visualização ao vivo'; + + @override + String get refreshSchedule => 'Agenda de atualização'; + + @override + String get noResponse => 'Sem resposta'; + + @override + String get refreshing => 'A atualizar'; + + @override + String get unavailable => 'Indisponível'; + + @override + String get pickARelayOrNodeToWatchInSensors => + 'Escolha um relay ou nó para observar.'; + + @override + String get publicKeyLabel => 'Chave pública'; + + @override + String get alreadyInContacts => 'Já nos contactos'; + + @override + String get connectToADeviceBeforeAddingContacts => + 'Conecte-se a um dispositivo antes de adicionar contactos'; + + @override + String get fromContacts => 'Dos contactos'; + + @override + String get onlineOnly => 'Apenas online'; + + @override + String get inBoth => 'Em ambos'; + + @override + String get source => 'Fonte'; + + @override + String get manualRouteEdit => 'Edição manual de rota'; + + @override + String get observedMeshRoute => 'Rota mesh observada'; + + @override + String get allMessagesCleared => 'Todas as mensagens limpas'; + + @override + String get onlineTraceDatabaseCleared => 'Base de dados de rastreio limpa'; + + @override + String get packetLogsCleared => 'Registos de pacotes limpos'; + + @override + String get hexDataCopiedToClipboard => + 'Dados hex copiados para a área de transferência'; + + @override + String get developerModeEnabled => 'Modo de programador ativado'; + + @override + String get developerModeDisabled => 'Modo de programador desativado'; + + @override + String get clipboardIsEmpty => 'A área de transferência está vazia'; + + @override + String get contactImported => 'Contacto importado'; + + @override + String get contactLinkCopiedToClipboard => + 'Link do contacto copiado para a área de transferência'; + + @override + String get failedToExportContact => 'Falha ao exportar contacto'; + + @override + String get noLogsToExport => 'Sem registos para exportar'; + + @override + String get exportAsCsv => 'Exportar como CSV'; + + @override + String get exportAsText => 'Exportar como texto'; + + @override + String get receivedRfc3339 => 'Recebido (RFC3339)'; + + @override + String get buildTime => 'Hora de compilação'; + + @override + String get downloadUrlNotAvailable => 'URL de download não disponível'; + + @override + String get cannotOpenDownloadUrl => 'Não é possível abrir o URL de download'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => + 'A verificação de atualizações só está disponível no Android'; + + @override + String get youAreRunningTheLatestVersion => + 'Está a usar a versão mais recente'; + + @override + String get updateAvailableButDownloadUrlNotFound => + 'Atualização disponível mas URL de download não encontrado'; + + @override + String get startTictactoe => 'Iniciar Tic-Tac-Toe'; + + @override + String get tictactoeUnavailable => 'Tic-Tac-Toe indisponível'; + + @override + String get tictactoeOpponentUnknown => 'Tic-Tac-Toe: oponente desconhecido'; + + @override + String get tictactoeWaitingForStart => 'Tic-Tac-Toe: a aguardar início'; + + @override + String get acceptsShareLinks => 'Aceita links partilhados'; + + @override + String get supportsRawHex => 'Suporta hex bruto'; + + @override + String get clipboardfriendly => 'Compatível com a área de transferência'; + + @override + String get captured => 'Capturado'; + + @override + String get size => 'Tamanho'; + + @override + String get noCustomChannelsToClear => + 'Sem canais personalizados para limpar.'; + + @override + String get noDeviceContactsToClear => + 'Sem contactos do dispositivo para limpar.'; } diff --git a/lib/l10n/app_localizations_ru.dart b/lib/l10n/app_localizations_ru.dart index 75ee28b..62394cb 100644 --- a/lib/l10n/app_localizations_ru.dart +++ b/lib/l10n/app_localizations_ru.dart @@ -1921,4 +1921,768 @@ class AppLocalizationsRu extends AppLocalizations { String contactFailedToSetRoute(String error) { return 'Не удалось задать маршрут: $error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'Таймаут ACK'; + + @override + String get opcode => 'Опкод'; + + @override + String get payload => 'Полезная нагрузка'; + + @override + String get hops => 'Хопы'; + + @override + String get hashSize => 'Размер хеша'; + + @override + String get pathBytes => 'Байты пути'; + + @override + String get selectedPath => 'Выбранный путь'; + + @override + String get estimatedTx => 'Ожидаемая передача'; + + @override + String get senderToReceipt => 'От отправителя до получения'; + + @override + String get receivedCopies => 'Полученные копии'; + + @override + String get retryCause => 'Причина повтора'; + + @override + String get retryMode => 'Режим повтора'; + + @override + String get retryResult => 'Результат повтора'; + + @override + String get lastRetry => 'Последний повтор'; + + @override + String get rxPackets => 'RX-пакеты'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => 'Скорость'; + + @override + String get window => 'Окно'; + + @override + String get posttxDelay => 'Задержка после передачи'; + + @override + String get bandpass => 'Полосовой'; + + @override + String get bandpassFilterVoice => 'Полосовой фильтр голоса'; + + @override + String get frequency => 'Частота'; + + @override + String get australia => 'Австралия'; + + @override + String get australiaNarrow => 'Австралия (Узкий)'; + + @override + String get australiaQld => 'Австралия: QLD'; + + @override + String get australiaSaWa => 'Австралия: SA, WA'; + + @override + String get newZealand => 'Новая Зеландия'; + + @override + String get newZealandNarrow => 'Новая Зеландия (Узкий)'; + + @override + String get switzerland => 'Швейцария'; + + @override + String get portugal433 => 'Португалия 433'; + + @override + String get portugal868 => 'Португалия 868'; + + @override + String get czechRepublicNarrow => 'Чехия (Узкий)'; + + @override + String get eu433mhzLongRange => 'ЕС 433МГц (Дальний)'; + + @override + String get euukDeprecated => 'ЕС/Великобритания (Устарело)'; + + @override + String get euukNarrow => 'ЕС/Великобритания (Узкий)'; + + @override + String get usacanadaRecommended => 'США/Канада (Рекомендуется)'; + + @override + String get vietnamDeprecated => 'Вьетнам (Устарело)'; + + @override + String get vietnamNarrow => 'Вьетнам (Узкий)'; + + @override + String get active => 'Активно'; + + @override + String get addContact => 'Добавить контакт'; + + @override + String get all => 'Все'; + + @override + String get autoResolve => 'Автоматическое разрешение'; + + @override + String get clearAllLabel => 'Очистить все'; + + @override + String get clearRelays => 'Очистить реле'; + + @override + String get clearFilters => 'Очистить фильтры'; + + @override + String get clearRoute => 'Очистить маршрут'; + + @override + String get clearMessages => 'Очистить сообщения'; + + @override + String get clearScale => 'Очистить масштаб'; + + @override + String get clearDiscoveries => 'Очистить обнаружения'; + + @override + String get clearOnlineTraceDatabase => 'Очистить базу трассировок'; + + @override + String get clearAllChannels => 'Очистить все каналы'; + + @override + String get clearAllContacts => 'Очистить все контакты'; + + @override + String get clearChannels => 'Очистить каналы'; + + @override + String get clearContacts => 'Очистить контакты'; + + @override + String get clearPathOnMaxRetry => 'Очистить путь при макс. повторе'; + + @override + String get create => 'Создать'; + + @override + String get custom => 'Пользовательский'; + + @override + String get defaultValue => 'По умолчанию'; + + @override + String get duplicate => 'Дублировать'; + + @override + String get editName => 'Редактировать имя'; + + @override + String get open => 'Открыть'; + + @override + String get paste => 'Вставить'; + + @override + String get preview => 'Предпросмотр'; + + @override + String get remove => 'Удалить'; + + @override + String get rename => 'Переименовать'; + + @override + String get resolveAll => 'Разрешить все'; + + @override + String get send => 'Отправить'; + + @override + String get sendAnyway => 'Отправить все равно'; + + @override + String get share => 'Поделиться'; + + @override + String get shareContact => 'Поделиться контактом'; + + @override + String get trace => 'Трассировка'; + + @override + String get use => 'Использовать'; + + @override + String get useSelectedFrequency => 'Использовать выбранную частоту'; + + @override + String get discovery => 'Обнаружение'; + + @override + String get discoverRepeaters => 'Обнаружить повторители'; + + @override + String get discoverSensors => 'Обнаружить датчики'; + + @override + String get repeaterDiscoverySent => 'Обнаружение повторителей отправлено'; + + @override + String get sensorDiscoverySent => 'Обнаружение датчиков отправлено'; + + @override + String get clearedPendingDiscoveries => 'Ожидающие обнаружения очищены.'; + + @override + String get autoDiscovery => 'Автоматическое обнаружение'; + + @override + String get enableAutomaticAdding => 'Включить автоматическое добавление'; + + @override + String get autoaddRepeaters => 'Автодобавление повторителей'; + + @override + String get autoaddRoomServers => 'Автодобавление серверов комнат'; + + @override + String get autoaddSensors => 'Автодобавление датчиков'; + + @override + String get autoaddUsers => 'Автодобавление пользователей'; + + @override + String get overwriteOldestWhenFull => 'Перезаписать старейшие при заполнении'; + + @override + String get storage => 'Хранилище'; + + @override + String get dangerZone => 'Опасная зона'; + + @override + String get profiles => 'Профили'; + + @override + String get favourites => 'Избранное'; + + @override + String get sensors => 'Датчики'; + + @override + String get others => 'Другие'; + + @override + String get gpsModule => 'Модуль GPS'; + + @override + String get liveTraffic => 'Живой трафик'; + + @override + String get repeatersMap => 'Карта повторителей'; + + @override + String get spectrumScan => 'Сканирование спектра'; + + @override + String get blePacketLogs => 'Журналы BLE-пакетов'; + + @override + String get onlineTraceDatabase => 'База трассировок'; + + @override + String get routePathByteSize => 'Размер пути в байтах'; + + @override + String get messageNotifications => 'Уведомления о сообщениях'; + + @override + String get sarAlerts => 'SAR-оповещения'; + + @override + String get discoveryNotifications => 'Уведомления об обнаружении'; + + @override + String get updateNotifications => 'Уведомления об обновлениях'; + + @override + String get muteWhileAppIsOpen => 'Без звука при открытом приложении'; + + @override + String get disableContacts => 'Отключить контакты'; + + @override + String get enableSensorsTab => 'Включить вкладку Датчики'; + + @override + String get enableProfiles => 'Включить профили'; + + @override + String get autoRouteRotation => 'Автоматическая ротация маршрута'; + + @override + String get nearestRepeaterFallback => 'Ближайший повторитель как резерв'; + + @override + String get deleteAllStoredMessageHistory => 'Удалить всю историю сообщений'; + + @override + String get messageFontSize => 'Размер шрифта сообщений'; + + @override + String get rotateMapWithHeading => 'Вращать карту по направлению'; + + @override + String get showMapDebugInfo => 'Показать отладочную информацию карты'; + + @override + String get openMapInFullscreen => 'Открыть карту на весь экран'; + + @override + String get showSarMarkersLabel => 'Показать SAR-маркеры'; + + @override + String get displaySarMarkersOnTheMainMap => + 'Отображать SAR-маркеры на основной карте'; + + @override + String get showAllContactTrailsLabel => 'Показать все следы контактов'; + + @override + String get hideRepeatersOnMap => 'Скрыть повторители на карте'; + + @override + String get setMapScale => 'Установить масштаб карты'; + + @override + String get customMapScaleSaved => 'Пользовательский масштаб карты сохранён'; + + @override + String get voiceBitrate => 'Битрейт голоса'; + + @override + String get voiceCompressor => 'Компрессор голоса'; + + @override + String get balancesQuietAndLoudSpeechLevels => + 'Выравнивает тихую и громкую речь'; + + @override + String get voiceLimiter => 'Лимитер голоса'; + + @override + String get preventsClippingPeaksBeforeEncoding => + 'Предотвращает обрезку пиков перед кодированием'; + + @override + String get micAutoGain => 'Автоусиление микрофона'; + + @override + String get letsTheRecorderAdjustInputLevel => + 'Позволяет рекордеру регулировать уровень входа'; + + @override + String get echoCancellation => 'Подавление эха'; + + @override + String get noiseSuppression => 'Подавление шума'; + + @override + String get trimSilenceInVoiceMessages => + 'Обрезать тишину в голосовых сообщениях'; + + @override + String get compressor => 'Компрессор'; + + @override + String get limiter => 'Лимитер'; + + @override + String get autoGain => 'Автоусиление'; + + @override + String get echoCancel => 'Эхо'; + + @override + String get noiseSuppress => 'Шум'; + + @override + String get silenceTrim => 'Тишина'; + + @override + String get maxImageSize => 'Максимальный размер изображения'; + + @override + String get imageCompression => 'Сжатие изображения'; + + @override + String get grayscale => 'Оттенки серого'; + + @override + String get ultraMode => 'Режим ультра'; + + @override + String get fastPrivateGpsUpdates => 'Быстрые приватные GPS-обновления'; + + @override + String get movementThreshold => 'Порог движения'; + + @override + String get fastGpsMovementThreshold => 'Порог движения быстрого GPS'; + + @override + String get fastGpsActiveuseInterval => + 'Интервал активного использования быстрого GPS'; + + @override + String get activeuseUpdateInterval => + 'Интервал обновления при активном использовании'; + + @override + String get repeatNearbyTraffic => 'Повторять ближний трафик'; + + @override + String get relayThroughRepeatersAcrossTheMesh => + 'Ретранслировать через повторители по сети'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => + 'Только рядом, без flood повторителей'; + + @override + String get multihop => 'Многохоповый'; + + @override + String get createProfile => 'Создать профиль'; + + @override + String get renameProfile => 'Переименовать профиль'; + + @override + String get newProfile => 'Новый профиль'; + + @override + String get manageProfiles => 'Управление профилями'; + + @override + String get enableProfilesToStartManagingThem => + 'Включите профили, чтобы начать управлять ими.'; + + @override + String get openMessage => 'Открыть сообщение'; + + @override + String get jumpToTheRelatedSarMessage => 'Перейти к связанному SAR-сообщению'; + + @override + String get removeSarMarker => 'Удалить SAR-маркер'; + + @override + String get pleaseSelectADestinationToSendSarMarker => + 'Выберите назначение для отправки SAR-маркера'; + + @override + String get sarMarkerBroadcastToPublicChannel => + 'SAR-маркер отправлен в публичный канал'; + + @override + String get sarMarkerSentToRoom => 'SAR-маркер отправлен в комнату'; + + @override + String get loadFromGallery => 'Загрузить из галереи'; + + @override + String get replaceImage => 'Заменить изображение'; + + @override + String get selectFromGallery => 'Выбрать из галереи'; + + @override + String get team => 'Команда'; + + @override + String get found => 'Найдено'; + + @override + String get staging => 'Место сбора'; + + @override + String get object => 'Объект'; + + @override + String get quiet => 'Тихо'; + + @override + String get moderate => 'Умеренно'; + + @override + String get busy => 'Занято'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => + 'Сканирование спектра не нашло частот-кандидатов'; + + @override + String get searchMessages => 'Поиск сообщений'; + + @override + String get sendImageFromGallery => 'Отправить изображение из галереи'; + + @override + String get takePhoto => 'Сделать фото'; + + @override + String get dmOnly => 'Только личные сообщения'; + + @override + String get allMessages => 'Все сообщения'; + + @override + String get sendToPublicChannel => 'Отправить в публичный канал?'; + + @override + String get selectMarkerTypeAndDestination => + 'Выберите тип маркера и назначение'; + + @override + String get noDestinationsAvailableLabel => 'Нет доступных назначений'; + + @override + String get image => 'Изображение'; + + @override + String get format => 'Формат'; + + @override + String get dimensions => 'Размеры'; + + @override + String get segments => 'Сегменты'; + + @override + String get transfers => 'Передачи'; + + @override + String get downloadedBy => 'Загружено'; + + @override + String get saveDiscoverySettings => 'Сохранить настройки обнаружения'; + + @override + String get savePublicInfo => 'Сохранить публичную информацию'; + + @override + String get saveRadioSettings => 'Сохранить настройки радио'; + + @override + String get savePath => 'Сохранить путь'; + + @override + String get wipeDeviceData => 'Стереть данные устройства'; + + @override + String get wipeDevice => 'Стереть устройство'; + + @override + String get destructiveDeviceActions => 'Деструктивные действия устройства.'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => + 'Выберите пресет или настройте радио вручную.'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => + 'Выберите имя и местоположение, которыми делится устройство.'; + + @override + String get availableSpaceOnThisDevice => + 'Доступное место на этом устройстве.'; + + @override + String get used => 'Использовано'; + + @override + String get total => 'Всего'; + + @override + String get renameValue => 'Переименовать значение'; + + @override + String get customizeFields => 'Настроить поля'; + + @override + String get livePreview => 'Предпросмотр в реальном времени'; + + @override + String get refreshSchedule => 'Расписание обновления'; + + @override + String get noResponse => 'Нет ответа'; + + @override + String get refreshing => 'Обновление'; + + @override + String get unavailable => 'Недоступно'; + + @override + String get pickARelayOrNodeToWatchInSensors => + 'Выберите реле или узел для наблюдения.'; + + @override + String get publicKeyLabel => 'Публичный ключ'; + + @override + String get alreadyInContacts => 'Уже в контактах'; + + @override + String get connectToADeviceBeforeAddingContacts => + 'Подключитесь к устройству перед добавлением контактов'; + + @override + String get fromContacts => 'Из контактов'; + + @override + String get onlineOnly => 'Только онлайн'; + + @override + String get inBoth => 'В обоих'; + + @override + String get source => 'Источник'; + + @override + String get manualRouteEdit => 'Ручное редактирование маршрута'; + + @override + String get observedMeshRoute => 'Наблюдаемый mesh-маршрут'; + + @override + String get allMessagesCleared => 'Все сообщения очищены'; + + @override + String get onlineTraceDatabaseCleared => 'База трассировок очищена'; + + @override + String get packetLogsCleared => 'Журналы пакетов очищены'; + + @override + String get hexDataCopiedToClipboard => 'Hex-данные скопированы в буфер'; + + @override + String get developerModeEnabled => 'Режим разработчика включён'; + + @override + String get developerModeDisabled => 'Режим разработчика отключён'; + + @override + String get clipboardIsEmpty => 'Буфер обмена пуст'; + + @override + String get contactImported => 'Контакт импортирован'; + + @override + String get contactLinkCopiedToClipboard => + 'Ссылка на контакт скопирована в буфер'; + + @override + String get failedToExportContact => 'Не удалось экспортировать контакт'; + + @override + String get noLogsToExport => 'Нет журналов для экспорта'; + + @override + String get exportAsCsv => 'Экспортировать как CSV'; + + @override + String get exportAsText => 'Экспортировать как текст'; + + @override + String get receivedRfc3339 => 'Получено (RFC3339)'; + + @override + String get buildTime => 'Время сборки'; + + @override + String get downloadUrlNotAvailable => 'URL загрузки недоступен'; + + @override + String get cannotOpenDownloadUrl => 'Не удаётся открыть URL загрузки'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => + 'Проверка обновлений доступна только на Android'; + + @override + String get youAreRunningTheLatestVersion => 'Вы используете последнюю версию'; + + @override + String get updateAvailableButDownloadUrlNotFound => + 'Обновление доступно, но URL загрузки не найден'; + + @override + String get startTictactoe => 'Начать Tic-Tac-Toe'; + + @override + String get tictactoeUnavailable => 'Tic-Tac-Toe недоступно'; + + @override + String get tictactoeOpponentUnknown => 'Tic-Tac-Toe: противник неизвестен'; + + @override + String get tictactoeWaitingForStart => 'Tic-Tac-Toe: ожидание начала'; + + @override + String get acceptsShareLinks => 'Принимает общие ссылки'; + + @override + String get supportsRawHex => 'Поддерживает raw hex'; + + @override + String get clipboardfriendly => 'Удобно для буфера'; + + @override + String get captured => 'Захвачено'; + + @override + String get size => 'Размер'; + + @override + String get noCustomChannelsToClear => + 'Нет пользовательских каналов для очистки.'; + + @override + String get noDeviceContactsToClear => 'Нет контактов устройства для очистки.'; } diff --git a/lib/l10n/app_localizations_sl.dart b/lib/l10n/app_localizations_sl.dart index 87fee17..bebd6e3 100644 --- a/lib/l10n/app_localizations_sl.dart +++ b/lib/l10n/app_localizations_sl.dart @@ -1912,4 +1912,767 @@ class AppLocalizationsSl extends AppLocalizations { String contactFailedToSetRoute(String error) { return 'Nastavitev poti ni uspela: $error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'Časovna omejitev ACK'; + + @override + String get opcode => 'Opkoda'; + + @override + String get payload => 'Vsebina'; + + @override + String get hops => 'Skoki'; + + @override + String get hashSize => 'Velikost zgoščevalne vrednosti'; + + @override + String get pathBytes => 'Bajti poti'; + + @override + String get selectedPath => 'Izbrana pot'; + + @override + String get estimatedTx => 'Ocenjeni čas oddaje'; + + @override + String get senderToReceipt => 'Od pošiljatelja do prejema'; + + @override + String get receivedCopies => 'Prejete kopije'; + + @override + String get retryCause => 'Razlog ponovitve'; + + @override + String get retryMode => 'Način ponovitve'; + + @override + String get retryResult => 'Rezultat ponovitve'; + + @override + String get lastRetry => 'Zadnja ponovitev'; + + @override + String get rxPackets => 'RX paketi'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => 'Hitrost'; + + @override + String get window => 'Okno'; + + @override + String get posttxDelay => 'Zakasnitev po oddaji'; + + @override + String get bandpass => 'Pasovno sito'; + + @override + String get bandpassFilterVoice => 'Pasovno sito za glas'; + + @override + String get frequency => 'Frekvenca'; + + @override + String get australia => 'Avstralija'; + + @override + String get australiaNarrow => 'Avstralija (ozko)'; + + @override + String get australiaQld => 'Avstralija: QLD'; + + @override + String get australiaSaWa => 'Avstralija: SA, WA'; + + @override + String get newZealand => 'Nova Zelandija'; + + @override + String get newZealandNarrow => 'Nova Zelandija (ozko)'; + + @override + String get switzerland => 'Švica'; + + @override + String get portugal433 => 'Portugalska 433'; + + @override + String get portugal868 => 'Portugalska 868'; + + @override + String get czechRepublicNarrow => 'Češka (ozko)'; + + @override + String get eu433mhzLongRange => 'EU 433MHz (dolg doseg)'; + + @override + String get euukDeprecated => 'EU/UK (zastarelo)'; + + @override + String get euukNarrow => 'EU/UK (ozko)'; + + @override + String get usacanadaRecommended => 'ZDA/Kanada (priporočeno)'; + + @override + String get vietnamDeprecated => 'Vietnam (zastarelo)'; + + @override + String get vietnamNarrow => 'Vietnam (ozko)'; + + @override + String get active => 'Aktivno'; + + @override + String get addContact => 'Dodaj stik'; + + @override + String get all => 'Vse'; + + @override + String get autoResolve => 'Samodejno razreši'; + + @override + String get clearAllLabel => 'Počisti vse'; + + @override + String get clearRelays => 'Počisti posrednike'; + + @override + String get clearFilters => 'Počisti filtre'; + + @override + String get clearRoute => 'Počisti pot'; + + @override + String get clearMessages => 'Počisti sporočila'; + + @override + String get clearScale => 'Počisti merilo'; + + @override + String get clearDiscoveries => 'Počisti odkritja'; + + @override + String get clearOnlineTraceDatabase => 'Počisti bazo sledi'; + + @override + String get clearAllChannels => 'Počisti vse kanale'; + + @override + String get clearAllContacts => 'Počisti vse stike'; + + @override + String get clearChannels => 'Počisti kanale'; + + @override + String get clearContacts => 'Počisti stike'; + + @override + String get clearPathOnMaxRetry => 'Počisti pot ob maks. ponovitvi'; + + @override + String get create => 'Ustvari'; + + @override + String get custom => 'Po meri'; + + @override + String get defaultValue => 'Privzeto'; + + @override + String get duplicate => 'Podvoji'; + + @override + String get editName => 'Uredi ime'; + + @override + String get open => 'Odpri'; + + @override + String get paste => 'Prilepi'; + + @override + String get preview => 'Predogled'; + + @override + String get remove => 'Odstrani'; + + @override + String get rename => 'Preimenuj'; + + @override + String get resolveAll => 'Razreši vse'; + + @override + String get send => 'Pošlji'; + + @override + String get sendAnyway => 'Vseeno pošlji'; + + @override + String get share => 'Deli'; + + @override + String get shareContact => 'Deli stik'; + + @override + String get trace => 'Sledenje'; + + @override + String get use => 'Uporabi'; + + @override + String get useSelectedFrequency => 'Uporabi izbrano frekvenco'; + + @override + String get discovery => 'Odkrivanje'; + + @override + String get discoverRepeaters => 'Odkrij posrednike'; + + @override + String get discoverSensors => 'Odkrij senzorje'; + + @override + String get repeaterDiscoverySent => 'Odkrivanje posrednikov poslano'; + + @override + String get sensorDiscoverySent => 'Odkrivanje senzorjev poslano'; + + @override + String get clearedPendingDiscoveries => 'Čakalna odkritja počiščena.'; + + @override + String get autoDiscovery => 'Samodejno odkrivanje'; + + @override + String get enableAutomaticAdding => 'Omogoči samodejno dodajanje'; + + @override + String get autoaddRepeaters => 'Samodejno dodaj posrednike'; + + @override + String get autoaddRoomServers => 'Samodejno dodaj strežnike sob'; + + @override + String get autoaddSensors => 'Samodejno dodaj senzorje'; + + @override + String get autoaddUsers => 'Samodejno dodaj uporabnike'; + + @override + String get overwriteOldestWhenFull => 'Prepiši najstarejše ob polnem'; + + @override + String get storage => 'Shramba'; + + @override + String get dangerZone => 'Nevarno območje'; + + @override + String get profiles => 'Profili'; + + @override + String get favourites => 'Priljubljeni'; + + @override + String get sensors => 'Senzorji'; + + @override + String get others => 'Ostali'; + + @override + String get gpsModule => 'GPS modul'; + + @override + String get liveTraffic => 'Promet v živo'; + + @override + String get repeatersMap => 'Zemljevid posrednikov'; + + @override + String get spectrumScan => 'Spektralno skeniranje'; + + @override + String get blePacketLogs => 'Dnevniki BLE paketov'; + + @override + String get onlineTraceDatabase => 'Baza sledi'; + + @override + String get routePathByteSize => 'Velikost poti v bajtih'; + + @override + String get messageNotifications => 'Obvestila o sporočilih'; + + @override + String get sarAlerts => 'SAR opozorila'; + + @override + String get discoveryNotifications => 'Obvestila o odkritjih'; + + @override + String get updateNotifications => 'Obvestila o posodobitvah'; + + @override + String get muteWhileAppIsOpen => 'Utišaj ko je aplikacija odprta'; + + @override + String get disableContacts => 'Onemogoči stike'; + + @override + String get enableSensorsTab => 'Omogoči zavihek Senzorji'; + + @override + String get enableProfiles => 'Omogoči profile'; + + @override + String get autoRouteRotation => 'Samodejno kroženje poti'; + + @override + String get nearestRepeaterFallback => 'Najbližji posrednik kot rezerva'; + + @override + String get deleteAllStoredMessageHistory => + 'Izbriši vso shranjeno zgodovino sporočil'; + + @override + String get messageFontSize => 'Velikost pisave sporočil'; + + @override + String get rotateMapWithHeading => 'Vrti zemljevid s smerjo'; + + @override + String get showMapDebugInfo => 'Prikaži razhroščevalne info zemljevida'; + + @override + String get openMapInFullscreen => 'Odpri zemljevid na cel zaslon'; + + @override + String get showSarMarkersLabel => 'Prikaži SAR oznake'; + + @override + String get displaySarMarkersOnTheMainMap => + 'Prikaži SAR oznake na glavnem zemljevidu'; + + @override + String get showAllContactTrailsLabel => 'Prikaži vse sledi stikov'; + + @override + String get hideRepeatersOnMap => 'Skrij posrednike na zemljevidu'; + + @override + String get setMapScale => 'Nastavi merilo zemljevida'; + + @override + String get customMapScaleSaved => 'Merilo zemljevida shranjeno'; + + @override + String get voiceBitrate => 'Bitna hitrost glasu'; + + @override + String get voiceCompressor => 'Kompresor glasu'; + + @override + String get balancesQuietAndLoudSpeechLevels => + 'Izravnava tihe in glasne govorne ravni'; + + @override + String get voiceLimiter => 'Omejevalnik glasu'; + + @override + String get preventsClippingPeaksBeforeEncoding => + 'Preprečuje rezanje vrhov pred kodiranjem'; + + @override + String get micAutoGain => 'Samodejna ojačitev mikrofona'; + + @override + String get letsTheRecorderAdjustInputLevel => + 'Omogoči snemalniku prilagoditev vhodne ravni'; + + @override + String get echoCancellation => 'Odstranjevanje odmeva'; + + @override + String get noiseSuppression => 'Dušenje šuma'; + + @override + String get trimSilenceInVoiceMessages => + 'Obreži tišino v glasovnih sporočilih'; + + @override + String get compressor => 'Kompresor'; + + @override + String get limiter => 'Omejevalnik'; + + @override + String get autoGain => 'Samodejna ojačitev'; + + @override + String get echoCancel => 'Odmev'; + + @override + String get noiseSuppress => 'Šum'; + + @override + String get silenceTrim => 'Tišina'; + + @override + String get maxImageSize => 'Največja velikost slike'; + + @override + String get imageCompression => 'Stiskanje slik'; + + @override + String get grayscale => 'Sivine'; + + @override + String get ultraMode => 'Ultra način'; + + @override + String get fastPrivateGpsUpdates => 'Hitri zasebni GPS podatki'; + + @override + String get movementThreshold => 'Prag gibanja'; + + @override + String get fastGpsMovementThreshold => 'Prag gibanja za hitri GPS'; + + @override + String get fastGpsActiveuseInterval => 'Interval uporabe hitrega GPS-a'; + + @override + String get activeuseUpdateInterval => + 'Interval posodobitve pri aktivni uporabi'; + + @override + String get repeatNearbyTraffic => 'Ponavljaj bližnji promet'; + + @override + String get relayThroughRepeatersAcrossTheMesh => + 'Posreduj skozi posrednike po mreži'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => + 'Samo bližnji, brez poplavljanja posrednikov'; + + @override + String get multihop => 'Večskočno'; + + @override + String get createProfile => 'Ustvari profil'; + + @override + String get renameProfile => 'Preimenuj profil'; + + @override + String get newProfile => 'Nov profil'; + + @override + String get manageProfiles => 'Upravljaj profile'; + + @override + String get enableProfilesToStartManagingThem => + 'Omogočite profile, da jih začnete upravljati.'; + + @override + String get openMessage => 'Odpri sporočilo'; + + @override + String get jumpToTheRelatedSarMessage => 'Skoči na povezano SAR sporočilo'; + + @override + String get removeSarMarker => 'Odstrani SAR oznako'; + + @override + String get pleaseSelectADestinationToSendSarMarker => + 'Izberite cilj za pošiljanje SAR oznake'; + + @override + String get sarMarkerBroadcastToPublicChannel => + 'SAR oznaka poslana na javni kanal'; + + @override + String get sarMarkerSentToRoom => 'SAR oznaka poslana v sobo'; + + @override + String get loadFromGallery => 'Naloži iz galerije'; + + @override + String get replaceImage => 'Zamenjaj sliko'; + + @override + String get selectFromGallery => 'Izberi iz galerije'; + + @override + String get team => 'Ekipa'; + + @override + String get found => 'Najdeno'; + + @override + String get staging => 'Zbirno mesto'; + + @override + String get object => 'Predmet'; + + @override + String get quiet => 'Tiho'; + + @override + String get moderate => 'Zmerno'; + + @override + String get busy => 'Zasedeno'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => + 'Spektralno skeniranje ni našlo primernih frekvenc'; + + @override + String get searchMessages => 'Iskanje sporočil'; + + @override + String get sendImageFromGallery => 'Pošlji sliko iz galerije'; + + @override + String get takePhoto => 'Posnemi fotografijo'; + + @override + String get dmOnly => 'Samo neposredno'; + + @override + String get allMessages => 'Vsa sporočila'; + + @override + String get sendToPublicChannel => 'Pošlji na javni kanal?'; + + @override + String get selectMarkerTypeAndDestination => 'Izberite vrsto oznake in cilj'; + + @override + String get noDestinationsAvailableLabel => 'Ni razpoložljivih ciljev'; + + @override + String get image => 'Slika'; + + @override + String get format => 'Format'; + + @override + String get dimensions => 'Dimenzije'; + + @override + String get segments => 'Segmenti'; + + @override + String get transfers => 'Prenosi'; + + @override + String get downloadedBy => 'Preneseno od'; + + @override + String get saveDiscoverySettings => 'Shrani nastavitve odkrivanja'; + + @override + String get savePublicInfo => 'Shrani javne podatke'; + + @override + String get saveRadioSettings => 'Shrani radijske nastavitve'; + + @override + String get savePath => 'Shrani pot'; + + @override + String get wipeDeviceData => 'Izbriši podatke naprave'; + + @override + String get wipeDevice => 'Izbriši napravo'; + + @override + String get destructiveDeviceActions => 'Destruktivna dejanja na napravi.'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => + 'Izberite prednastavitev ali natančno prilagodite radijske nastavitve.'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => + 'Izberite ime in lokacijo, ki ju naprava deli.'; + + @override + String get availableSpaceOnThisDevice => + 'Razpoložljiv prostor na tej napravi.'; + + @override + String get used => 'Uporabljeno'; + + @override + String get total => 'Skupaj'; + + @override + String get renameValue => 'Preimenuj vrednost'; + + @override + String get customizeFields => 'Prilagodi polja'; + + @override + String get livePreview => 'Predogled v živo'; + + @override + String get refreshSchedule => 'Interval osvežitve'; + + @override + String get noResponse => 'Ni odgovora'; + + @override + String get refreshing => 'Osvežujem'; + + @override + String get unavailable => 'Nedostopno'; + + @override + String get pickARelayOrNodeToWatchInSensors => + 'Izberite posrednika ali vozlišče za opazovanje.'; + + @override + String get publicKeyLabel => 'Javni ključ'; + + @override + String get alreadyInContacts => 'Že med stiki'; + + @override + String get connectToADeviceBeforeAddingContacts => + 'Povežite se z napravo pred dodajanjem stikov'; + + @override + String get fromContacts => 'Iz stikov'; + + @override + String get onlineOnly => 'Samo povezani'; + + @override + String get inBoth => 'V obeh'; + + @override + String get source => 'Vir'; + + @override + String get manualRouteEdit => 'Ročno urejanje poti'; + + @override + String get observedMeshRoute => 'Opazovana mrežna pot'; + + @override + String get allMessagesCleared => 'Vsa sporočila počiščena'; + + @override + String get onlineTraceDatabaseCleared => 'Baza sledi počiščena'; + + @override + String get packetLogsCleared => 'Dnevniki paketov počiščeni'; + + @override + String get hexDataCopiedToClipboard => 'Hex podatki kopirani v odložišče'; + + @override + String get developerModeEnabled => 'Razvojni način omogočen'; + + @override + String get developerModeDisabled => 'Razvojni način onemogočen'; + + @override + String get clipboardIsEmpty => 'Odložišče je prazno'; + + @override + String get contactImported => 'Stik uvožen'; + + @override + String get contactLinkCopiedToClipboard => + 'Povezava na stik kopirana v odložišče'; + + @override + String get failedToExportContact => 'Izvoz stika ni uspel'; + + @override + String get noLogsToExport => 'Ni dnevnikov za izvoz'; + + @override + String get exportAsCsv => 'Izvozi kot CSV'; + + @override + String get exportAsText => 'Izvozi kot besedilo'; + + @override + String get receivedRfc3339 => 'Prejeto (RFC3339)'; + + @override + String get buildTime => 'Čas gradnje'; + + @override + String get downloadUrlNotAvailable => 'URL za prenos ni na voljo'; + + @override + String get cannotOpenDownloadUrl => 'URL za prenos ni mogoče odpreti'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => + 'Preverjanje posodobitev je na voljo le na Androidu'; + + @override + String get youAreRunningTheLatestVersion => + 'Uporabljate najnovejšo različico'; + + @override + String get updateAvailableButDownloadUrlNotFound => + 'Posodobitev na voljo, a URL za prenos ni najden'; + + @override + String get startTictactoe => 'Začni Tic-Tac-Toe'; + + @override + String get tictactoeUnavailable => 'Tic-Tac-Toe ni na voljo'; + + @override + String get tictactoeOpponentUnknown => 'Tic-Tac-Toe: nasprotnik neznan'; + + @override + String get tictactoeWaitingForStart => 'Tic-Tac-Toe: čakanje na začetek'; + + @override + String get acceptsShareLinks => 'Sprejema deljene povezave'; + + @override + String get supportsRawHex => 'Podpira surove hex'; + + @override + String get clipboardfriendly => 'Primerno za odložišče'; + + @override + String get captured => 'Zajeto'; + + @override + String get size => 'Velikost'; + + @override + String get noCustomChannelsToClear => 'Ni prilagojenih kanalov za brisanje.'; + + @override + String get noDeviceContactsToClear => 'Ni stikov naprave za brisanje.'; } diff --git a/lib/l10n/app_localizations_tr.dart b/lib/l10n/app_localizations_tr.dart index 6862180..2b91348 100644 --- a/lib/l10n/app_localizations_tr.dart +++ b/lib/l10n/app_localizations_tr.dart @@ -1914,4 +1914,763 @@ class AppLocalizationsTr extends AppLocalizations { String contactFailedToSetRoute(String error) { return 'Rota ayarlanamadı: $error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'ACK zaman aşımı'; + + @override + String get opcode => 'Opcode'; + + @override + String get payload => 'Yük'; + + @override + String get hops => 'Atlama'; + + @override + String get hashSize => 'Hash boyutu'; + + @override + String get pathBytes => 'Yol baytları'; + + @override + String get selectedPath => 'Seçilen yol'; + + @override + String get estimatedTx => 'Tahmini gönderim'; + + @override + String get senderToReceipt => 'Gönderenden alındıya'; + + @override + String get receivedCopies => 'Alınan kopyalar'; + + @override + String get retryCause => 'Yeniden deneme nedeni'; + + @override + String get retryMode => 'Yeniden deneme modu'; + + @override + String get retryResult => 'Yeniden deneme sonucu'; + + @override + String get lastRetry => 'Son deneme'; + + @override + String get rxPackets => 'RX paketleri'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => 'Hız'; + + @override + String get window => 'Pencere'; + + @override + String get posttxDelay => 'Gönderim sonrası gecikme'; + + @override + String get bandpass => 'Bant geçiren'; + + @override + String get bandpassFilterVoice => 'Bant geçiren filtre ses'; + + @override + String get frequency => 'Frekans'; + + @override + String get australia => 'Avustralya'; + + @override + String get australiaNarrow => 'Avustralya (Dar)'; + + @override + String get australiaQld => 'Avustralya: QLD'; + + @override + String get australiaSaWa => 'Avustralya: SA, WA'; + + @override + String get newZealand => 'Yeni Zelanda'; + + @override + String get newZealandNarrow => 'Yeni Zelanda (Dar)'; + + @override + String get switzerland => 'İsviçre'; + + @override + String get portugal433 => 'Portekiz 433'; + + @override + String get portugal868 => 'Portekiz 868'; + + @override + String get czechRepublicNarrow => 'Çek Cumhuriyeti (Dar)'; + + @override + String get eu433mhzLongRange => 'AB 433MHz (Uzun Menzil)'; + + @override + String get euukDeprecated => 'AB/BK (Kullanımdan kalktı)'; + + @override + String get euukNarrow => 'AB/BK (Dar)'; + + @override + String get usacanadaRecommended => 'ABD/Kanada (Önerilen)'; + + @override + String get vietnamDeprecated => 'Vietnam (Kullanımdan kalktı)'; + + @override + String get vietnamNarrow => 'Vietnam (Dar)'; + + @override + String get active => 'Aktif'; + + @override + String get addContact => 'Kişi ekle'; + + @override + String get all => 'Tümü'; + + @override + String get autoResolve => 'Otomatik çöz'; + + @override + String get clearAllLabel => 'Tümünü temizle'; + + @override + String get clearRelays => 'Röleleri temizle'; + + @override + String get clearFilters => 'Filtreleri temizle'; + + @override + String get clearRoute => 'Rotayı temizle'; + + @override + String get clearMessages => 'Mesajları temizle'; + + @override + String get clearScale => 'Ölçeği temizle'; + + @override + String get clearDiscoveries => 'Keşifleri temizle'; + + @override + String get clearOnlineTraceDatabase => 'Çevrimiçi iz veritabanını temizle'; + + @override + String get clearAllChannels => 'Tüm kanalları temizle'; + + @override + String get clearAllContacts => 'Tüm kişileri temizle'; + + @override + String get clearChannels => 'Kanalları temizle'; + + @override + String get clearContacts => 'Kişileri temizle'; + + @override + String get clearPathOnMaxRetry => 'Maks denemede yolu temizle'; + + @override + String get create => 'Oluştur'; + + @override + String get custom => 'Özel'; + + @override + String get defaultValue => 'Varsayılan'; + + @override + String get duplicate => 'Çoğalt'; + + @override + String get editName => 'Adı düzenle'; + + @override + String get open => 'Aç'; + + @override + String get paste => 'Yapıştır'; + + @override + String get preview => 'Önizleme'; + + @override + String get remove => 'Kaldır'; + + @override + String get rename => 'Yeniden adlandır'; + + @override + String get resolveAll => 'Tümünü çöz'; + + @override + String get send => 'Gönder'; + + @override + String get sendAnyway => 'Yine de gönder'; + + @override + String get share => 'Paylaş'; + + @override + String get shareContact => 'Kişiyi paylaş'; + + @override + String get trace => 'İz'; + + @override + String get use => 'Kullan'; + + @override + String get useSelectedFrequency => 'Seçilen frekansı kullan'; + + @override + String get discovery => 'Keşif'; + + @override + String get discoverRepeaters => 'Tekrarlayıcıları keşfet'; + + @override + String get discoverSensors => 'Sensörleri keşfet'; + + @override + String get repeaterDiscoverySent => 'Tekrarlayıcı keşfi gönderildi'; + + @override + String get sensorDiscoverySent => 'Sensör keşfi gönderildi'; + + @override + String get clearedPendingDiscoveries => 'Bekleyen keşifler temizlendi.'; + + @override + String get autoDiscovery => 'Otomatik keşif'; + + @override + String get enableAutomaticAdding => 'Otomatik eklemeyi etkinleştir'; + + @override + String get autoaddRepeaters => 'Tekrarlayıcıları otomatik ekle'; + + @override + String get autoaddRoomServers => 'Oda sunucularını otomatik ekle'; + + @override + String get autoaddSensors => 'Sensörleri otomatik ekle'; + + @override + String get autoaddUsers => 'Kullanıcıları otomatik ekle'; + + @override + String get overwriteOldestWhenFull => 'Dolduğunda en eskiyi üzerine yaz'; + + @override + String get storage => 'Depolama'; + + @override + String get dangerZone => 'Tehlikeli bölge'; + + @override + String get profiles => 'Profiller'; + + @override + String get favourites => 'Favoriler'; + + @override + String get sensors => 'Sensörler'; + + @override + String get others => 'Diğerleri'; + + @override + String get gpsModule => 'GPS Modülü'; + + @override + String get liveTraffic => 'Canlı trafik'; + + @override + String get repeatersMap => 'Tekrarlayıcılar haritası'; + + @override + String get spectrumScan => 'Spektrum taraması'; + + @override + String get blePacketLogs => 'BLE paket günlükleri'; + + @override + String get onlineTraceDatabase => 'Çevrimiçi iz veritabanı'; + + @override + String get routePathByteSize => 'Yol bayt boyutu'; + + @override + String get messageNotifications => 'Mesaj bildirimleri'; + + @override + String get sarAlerts => 'SAR uyarıları'; + + @override + String get discoveryNotifications => 'Keşif bildirimleri'; + + @override + String get updateNotifications => 'Güncelleme bildirimleri'; + + @override + String get muteWhileAppIsOpen => 'Uygulama açıkken sessize al'; + + @override + String get disableContacts => 'Kişileri devre dışı bırak'; + + @override + String get enableSensorsTab => 'Sensörler sekmesini etkinleştir'; + + @override + String get enableProfiles => 'Profilleri etkinleştir'; + + @override + String get autoRouteRotation => 'Otomatik rota rotasyonu'; + + @override + String get nearestRepeaterFallback => 'En yakın tekrarlayıcıya geri dönüş'; + + @override + String get deleteAllStoredMessageHistory => 'Tüm mesaj geçmişini sil'; + + @override + String get messageFontSize => 'Mesaj yazı tipi boyutu'; + + @override + String get rotateMapWithHeading => 'Haritayı yön ile döndür'; + + @override + String get showMapDebugInfo => 'Harita hata ayıklama bilgisini göster'; + + @override + String get openMapInFullscreen => 'Haritayı tam ekranda aç'; + + @override + String get showSarMarkersLabel => 'SAR işaretçilerini göster'; + + @override + String get displaySarMarkersOnTheMainMap => + 'SAR işaretçilerini ana haritada göster'; + + @override + String get showAllContactTrailsLabel => 'Tüm kişi izlerini göster'; + + @override + String get hideRepeatersOnMap => 'Haritada tekrarlayıcıları gizle'; + + @override + String get setMapScale => 'Harita ölçeğini ayarla'; + + @override + String get customMapScaleSaved => 'Özel harita ölçeği kaydedildi'; + + @override + String get voiceBitrate => 'Ses bit hızı'; + + @override + String get voiceCompressor => 'Ses sıkıştırıcı'; + + @override + String get balancesQuietAndLoudSpeechLevels => + 'Sessiz ve yüksek konuşma seviyelerini dengeler'; + + @override + String get voiceLimiter => 'Ses sınırlayıcı'; + + @override + String get preventsClippingPeaksBeforeEncoding => + 'Kodlama öncesi tepe kırpmasını önler'; + + @override + String get micAutoGain => 'Mikrofon otomatik kazancı'; + + @override + String get letsTheRecorderAdjustInputLevel => + 'Kaydedicinin giriş seviyesini ayarlamasına izin verir'; + + @override + String get echoCancellation => 'Yankı iptali'; + + @override + String get noiseSuppression => 'Gürültü bastırma'; + + @override + String get trimSilenceInVoiceMessages => 'Sesli mesajlarda sessizliği kırp'; + + @override + String get compressor => 'Sıkıştırıcı'; + + @override + String get limiter => 'Sınırlayıcı'; + + @override + String get autoGain => 'Otomatik kazanç'; + + @override + String get echoCancel => 'Yankı'; + + @override + String get noiseSuppress => 'Gürültü'; + + @override + String get silenceTrim => 'Sessizlik'; + + @override + String get maxImageSize => 'Maksimum resim boyutu'; + + @override + String get imageCompression => 'Resim sıkıştırma'; + + @override + String get grayscale => 'Gri tonlama'; + + @override + String get ultraMode => 'Ultra mod'; + + @override + String get fastPrivateGpsUpdates => 'Hızlı özel GPS güncellemeleri'; + + @override + String get movementThreshold => 'Hareket eşiği'; + + @override + String get fastGpsMovementThreshold => 'Hızlı GPS hareket eşiği'; + + @override + String get fastGpsActiveuseInterval => 'Hızlı GPS aktif kullanım aralığı'; + + @override + String get activeuseUpdateInterval => 'Aktif kullanım güncelleme aralığı'; + + @override + String get repeatNearbyTraffic => 'Yakın trafiği tekrarla'; + + @override + String get relayThroughRepeatersAcrossTheMesh => + 'Ağ üzerindeki tekrarlayıcılar aracılığıyla ilet'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => + 'Yalnızca yakın, tekrarlayıcı taşkını olmadan'; + + @override + String get multihop => 'Çok atlamalı'; + + @override + String get createProfile => 'Profil oluştur'; + + @override + String get renameProfile => 'Profili yeniden adlandır'; + + @override + String get newProfile => 'Yeni profil'; + + @override + String get manageProfiles => 'Profilleri yönet'; + + @override + String get enableProfilesToStartManagingThem => + 'Profilleri yönetmeye başlamak için etkinleştirin.'; + + @override + String get openMessage => 'Mesajı aç'; + + @override + String get jumpToTheRelatedSarMessage => 'İlgili SAR mesajına git'; + + @override + String get removeSarMarker => 'SAR işaretçisini kaldır'; + + @override + String get pleaseSelectADestinationToSendSarMarker => + 'SAR işaretçisi göndermek için bir hedef seçin'; + + @override + String get sarMarkerBroadcastToPublicChannel => + 'SAR işaretçisi genel kanala yayınlandı'; + + @override + String get sarMarkerSentToRoom => 'SAR işaretçisi odaya gönderildi'; + + @override + String get loadFromGallery => 'Galeriden yükle'; + + @override + String get replaceImage => 'Resmi değiştir'; + + @override + String get selectFromGallery => 'Galeriden seç'; + + @override + String get team => 'Takım'; + + @override + String get found => 'Bulundu'; + + @override + String get staging => 'Toplanma alanı'; + + @override + String get object => 'Nesne'; + + @override + String get quiet => 'Sessiz'; + + @override + String get moderate => 'Orta'; + + @override + String get busy => 'Meşgul'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => + 'Spektrum taraması aday frekans bulamadı'; + + @override + String get searchMessages => 'Mesajlarda ara'; + + @override + String get sendImageFromGallery => 'Galeriden resim gönder'; + + @override + String get takePhoto => 'Fotoğraf çek'; + + @override + String get dmOnly => 'Yalnızca DM'; + + @override + String get allMessages => 'Tüm mesajlar'; + + @override + String get sendToPublicChannel => 'Genel kanala gönderilsin mi?'; + + @override + String get selectMarkerTypeAndDestination => + 'İşaretçi türünü ve hedefi seçin'; + + @override + String get noDestinationsAvailableLabel => 'Kullanılabilir hedef yok'; + + @override + String get image => 'Resim'; + + @override + String get format => 'Biçim'; + + @override + String get dimensions => 'Boyutlar'; + + @override + String get segments => 'Segmentler'; + + @override + String get transfers => 'Transferler'; + + @override + String get downloadedBy => 'İndiren'; + + @override + String get saveDiscoverySettings => 'Keşif ayarlarını kaydet'; + + @override + String get savePublicInfo => 'Genel bilgileri kaydet'; + + @override + String get saveRadioSettings => 'Radyo ayarlarını kaydet'; + + @override + String get savePath => 'Yolu kaydet'; + + @override + String get wipeDeviceData => 'Cihaz verilerini sil'; + + @override + String get wipeDevice => 'Cihazı sil'; + + @override + String get destructiveDeviceActions => 'Yıkıcı cihaz işlemleri.'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => + 'Bir ön ayar seçin veya radyo ayarlarını ince ayarlayın.'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => + 'Bu cihazın paylaştığı ad ve konumu seçin.'; + + @override + String get availableSpaceOnThisDevice => 'Bu cihazda kullanılabilir alan.'; + + @override + String get used => 'Kullanılan'; + + @override + String get total => 'Toplam'; + + @override + String get renameValue => 'Değeri yeniden adlandır'; + + @override + String get customizeFields => 'Alanları özelleştir'; + + @override + String get livePreview => 'Canlı önizleme'; + + @override + String get refreshSchedule => 'Yenileme programı'; + + @override + String get noResponse => 'Yanıt yok'; + + @override + String get refreshing => 'Yenileniyor'; + + @override + String get unavailable => 'Kullanılamaz'; + + @override + String get pickARelayOrNodeToWatchInSensors => + 'İzlemek için bir röle veya düğüm seçin.'; + + @override + String get publicKeyLabel => 'Genel anahtar'; + + @override + String get alreadyInContacts => 'Zaten kişilerde'; + + @override + String get connectToADeviceBeforeAddingContacts => + 'Kişi eklemeden önce bir cihaza bağlanın'; + + @override + String get fromContacts => 'Kişilerden'; + + @override + String get onlineOnly => 'Yalnızca çevrimiçi'; + + @override + String get inBoth => 'Her ikisinde'; + + @override + String get source => 'Kaynak'; + + @override + String get manualRouteEdit => 'Manuel rota düzenle'; + + @override + String get observedMeshRoute => 'Gözlemlenen mesh rotası'; + + @override + String get allMessagesCleared => 'Tüm mesajlar temizlendi'; + + @override + String get onlineTraceDatabaseCleared => 'Çevrimiçi iz veritabanı temizlendi'; + + @override + String get packetLogsCleared => 'Paket günlükleri temizlendi'; + + @override + String get hexDataCopiedToClipboard => 'Hex verisi panoya kopyalandı'; + + @override + String get developerModeEnabled => 'Geliştirici modu etkinleştirildi'; + + @override + String get developerModeDisabled => 'Geliştirici modu devre dışı bırakıldı'; + + @override + String get clipboardIsEmpty => 'Pano boş'; + + @override + String get contactImported => 'Kişi içe aktarıldı'; + + @override + String get contactLinkCopiedToClipboard => + 'Kişi bağlantısı panoya kopyalandı'; + + @override + String get failedToExportContact => 'Kişi dışa aktarılamadı'; + + @override + String get noLogsToExport => 'Dışa aktarılacak günlük yok'; + + @override + String get exportAsCsv => 'CSV olarak dışa aktar'; + + @override + String get exportAsText => 'Metin olarak dışa aktar'; + + @override + String get receivedRfc3339 => 'Alındı (RFC3339)'; + + @override + String get buildTime => 'Derleme zamanı'; + + @override + String get downloadUrlNotAvailable => 'İndirme URL\'si mevcut değil'; + + @override + String get cannotOpenDownloadUrl => 'İndirme URL\'si açılamıyor'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => + 'Güncelleme kontrolü yalnızca Android\'de kullanılabilir'; + + @override + String get youAreRunningTheLatestVersion => 'En son sürümü kullanıyorsunuz'; + + @override + String get updateAvailableButDownloadUrlNotFound => + 'Güncelleme mevcut ancak indirme URL\'si bulunamadı'; + + @override + String get startTictactoe => 'Tic-Tac-Toe başlat'; + + @override + String get tictactoeUnavailable => 'Tic-Tac-Toe kullanılamıyor'; + + @override + String get tictactoeOpponentUnknown => 'Tic-Tac-Toe: rakip bilinmiyor'; + + @override + String get tictactoeWaitingForStart => 'Tic-Tac-Toe: başlangıç bekleniyor'; + + @override + String get acceptsShareLinks => 'Paylaşım bağlantılarını kabul eder'; + + @override + String get supportsRawHex => 'Ham hex destekler'; + + @override + String get clipboardfriendly => 'Pano dostu'; + + @override + String get captured => 'Yakalandı'; + + @override + String get size => 'Boyut'; + + @override + String get noCustomChannelsToClear => 'Temizlenecek özel kanal yok.'; + + @override + String get noDeviceContactsToClear => 'Temizlenecek cihaz kişisi yok.'; } diff --git a/lib/l10n/app_localizations_uk.dart b/lib/l10n/app_localizations_uk.dart index e6c2b85..a5467d9 100644 --- a/lib/l10n/app_localizations_uk.dart +++ b/lib/l10n/app_localizations_uk.dart @@ -1927,4 +1927,773 @@ class AppLocalizationsUk extends AppLocalizations { String contactFailedToSetRoute(String error) { return 'Не вдалося задати маршрут: $error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'Тайм-аут ACK'; + + @override + String get opcode => 'Опкод'; + + @override + String get payload => 'Корисне навантаження'; + + @override + String get hops => 'Хопи'; + + @override + String get hashSize => 'Розмір хешу'; + + @override + String get pathBytes => 'Байти шляху'; + + @override + String get selectedPath => 'Обраний шлях'; + + @override + String get estimatedTx => 'Очікувана передача'; + + @override + String get senderToReceipt => 'Від відправника до отримання'; + + @override + String get receivedCopies => 'Отримані копії'; + + @override + String get retryCause => 'Причина повтору'; + + @override + String get retryMode => 'Режим повтору'; + + @override + String get retryResult => 'Результат повтору'; + + @override + String get lastRetry => 'Остання спроба'; + + @override + String get rxPackets => 'RX-пакети'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => 'Швидкість'; + + @override + String get window => 'Вікно'; + + @override + String get posttxDelay => 'Затримка після передачі'; + + @override + String get bandpass => 'Смуговий'; + + @override + String get bandpassFilterVoice => 'Смуговий фільтр голосу'; + + @override + String get frequency => 'Частота'; + + @override + String get australia => 'Австралія'; + + @override + String get australiaNarrow => 'Австралія (Вузький)'; + + @override + String get australiaQld => 'Австралія: QLD'; + + @override + String get australiaSaWa => 'Австралія: SA, WA'; + + @override + String get newZealand => 'Нова Зеландія'; + + @override + String get newZealandNarrow => 'Нова Зеландія (Вузький)'; + + @override + String get switzerland => 'Швейцарія'; + + @override + String get portugal433 => 'Португалія 433'; + + @override + String get portugal868 => 'Португалія 868'; + + @override + String get czechRepublicNarrow => 'Чехія (Вузький)'; + + @override + String get eu433mhzLongRange => 'ЄС 433МГц (Далекий)'; + + @override + String get euukDeprecated => 'ЄС/Великобританія (Застаріле)'; + + @override + String get euukNarrow => 'ЄС/Великобританія (Вузький)'; + + @override + String get usacanadaRecommended => 'США/Канада (Рекомендовано)'; + + @override + String get vietnamDeprecated => 'В\'єтнам (Застаріле)'; + + @override + String get vietnamNarrow => 'В\'єтнам (Вузький)'; + + @override + String get active => 'Активно'; + + @override + String get addContact => 'Додати контакт'; + + @override + String get all => 'Усі'; + + @override + String get autoResolve => 'Автоматичне вирішення'; + + @override + String get clearAllLabel => 'Очистити все'; + + @override + String get clearRelays => 'Очистити реле'; + + @override + String get clearFilters => 'Очистити фільтри'; + + @override + String get clearRoute => 'Очистити маршрут'; + + @override + String get clearMessages => 'Очистити повідомлення'; + + @override + String get clearScale => 'Очистити масштаб'; + + @override + String get clearDiscoveries => 'Очистити виявлення'; + + @override + String get clearOnlineTraceDatabase => 'Очистити базу трасувань'; + + @override + String get clearAllChannels => 'Очистити всі канали'; + + @override + String get clearAllContacts => 'Очистити всі контакти'; + + @override + String get clearChannels => 'Очистити канали'; + + @override + String get clearContacts => 'Очистити контакти'; + + @override + String get clearPathOnMaxRetry => 'Очистити шлях при макс. спробі'; + + @override + String get create => 'Створити'; + + @override + String get custom => 'Користувацький'; + + @override + String get defaultValue => 'За замовчуванням'; + + @override + String get duplicate => 'Дублювати'; + + @override + String get editName => 'Редагувати ім\'я'; + + @override + String get open => 'Відкрити'; + + @override + String get paste => 'Вставити'; + + @override + String get preview => 'Попередній перегляд'; + + @override + String get remove => 'Видалити'; + + @override + String get rename => 'Перейменувати'; + + @override + String get resolveAll => 'Вирішити все'; + + @override + String get send => 'Надіслати'; + + @override + String get sendAnyway => 'Надіслати все одно'; + + @override + String get share => 'Поділитися'; + + @override + String get shareContact => 'Поділитися контактом'; + + @override + String get trace => 'Трасування'; + + @override + String get use => 'Використати'; + + @override + String get useSelectedFrequency => 'Використати обрану частоту'; + + @override + String get discovery => 'Виявлення'; + + @override + String get discoverRepeaters => 'Виявити повторювачі'; + + @override + String get discoverSensors => 'Виявити датчики'; + + @override + String get repeaterDiscoverySent => 'Виявлення повторювачів надіслано'; + + @override + String get sensorDiscoverySent => 'Виявлення датчиків надіслано'; + + @override + String get clearedPendingDiscoveries => 'Очікувані виявлення очищено.'; + + @override + String get autoDiscovery => 'Автоматичне виявлення'; + + @override + String get enableAutomaticAdding => 'Увімкнути автоматичне додавання'; + + @override + String get autoaddRepeaters => 'Автододавання повторювачів'; + + @override + String get autoaddRoomServers => 'Автододавання серверів кімнат'; + + @override + String get autoaddSensors => 'Автододавання датчиків'; + + @override + String get autoaddUsers => 'Автододавання користувачів'; + + @override + String get overwriteOldestWhenFull => + 'Перезаписати найстаріші при заповненні'; + + @override + String get storage => 'Сховище'; + + @override + String get dangerZone => 'Небезпечна зона'; + + @override + String get profiles => 'Профілі'; + + @override + String get favourites => 'Обране'; + + @override + String get sensors => 'Датчики'; + + @override + String get others => 'Інші'; + + @override + String get gpsModule => 'Модуль GPS'; + + @override + String get liveTraffic => 'Живий трафік'; + + @override + String get repeatersMap => 'Карта повторювачів'; + + @override + String get spectrumScan => 'Сканування спектру'; + + @override + String get blePacketLogs => 'Журнали BLE-пакетів'; + + @override + String get onlineTraceDatabase => 'База трасувань'; + + @override + String get routePathByteSize => 'Розмір шляху в байтах'; + + @override + String get messageNotifications => 'Сповіщення про повідомлення'; + + @override + String get sarAlerts => 'SAR-сповіщення'; + + @override + String get discoveryNotifications => 'Сповіщення про виявлення'; + + @override + String get updateNotifications => 'Сповіщення про оновлення'; + + @override + String get muteWhileAppIsOpen => 'Без звуку при відкритому додатку'; + + @override + String get disableContacts => 'Вимкнути контакти'; + + @override + String get enableSensorsTab => 'Увімкнути вкладку Датчики'; + + @override + String get enableProfiles => 'Увімкнути профілі'; + + @override + String get autoRouteRotation => 'Автоматична ротація маршруту'; + + @override + String get nearestRepeaterFallback => 'Найближчий повторювач як резерв'; + + @override + String get deleteAllStoredMessageHistory => + 'Видалити всю історію повідомлень'; + + @override + String get messageFontSize => 'Розмір шрифту повідомлень'; + + @override + String get rotateMapWithHeading => 'Обертати карту за напрямком'; + + @override + String get showMapDebugInfo => 'Показати налагоджувальну інфо карти'; + + @override + String get openMapInFullscreen => 'Відкрити карту на повний екран'; + + @override + String get showSarMarkersLabel => 'Показати SAR-маркери'; + + @override + String get displaySarMarkersOnTheMainMap => + 'Показувати SAR-маркери на головній карті'; + + @override + String get showAllContactTrailsLabel => 'Показати всі сліди контактів'; + + @override + String get hideRepeatersOnMap => 'Сховати повторювачі на карті'; + + @override + String get setMapScale => 'Встановити масштаб карти'; + + @override + String get customMapScaleSaved => 'Користувацький масштаб карти збережено'; + + @override + String get voiceBitrate => 'Бітрейт голосу'; + + @override + String get voiceCompressor => 'Компресор голосу'; + + @override + String get balancesQuietAndLoudSpeechLevels => + 'Вирівнює тихий і гучний рівні мови'; + + @override + String get voiceLimiter => 'Лімітер голосу'; + + @override + String get preventsClippingPeaksBeforeEncoding => + 'Запобігає обрізанню піків перед кодуванням'; + + @override + String get micAutoGain => 'Автопідсилення мікрофона'; + + @override + String get letsTheRecorderAdjustInputLevel => + 'Дозволяє рекордеру налаштувати рівень входу'; + + @override + String get echoCancellation => 'Придушення ехо'; + + @override + String get noiseSuppression => 'Придушення шуму'; + + @override + String get trimSilenceInVoiceMessages => + 'Обрізати тишу в голосових повідомленнях'; + + @override + String get compressor => 'Компресор'; + + @override + String get limiter => 'Лімітер'; + + @override + String get autoGain => 'Автопідсилення'; + + @override + String get echoCancel => 'Ехо'; + + @override + String get noiseSuppress => 'Шум'; + + @override + String get silenceTrim => 'Тиша'; + + @override + String get maxImageSize => 'Максимальний розмір зображення'; + + @override + String get imageCompression => 'Стиснення зображення'; + + @override + String get grayscale => 'Відтінки сірого'; + + @override + String get ultraMode => 'Ультра режим'; + + @override + String get fastPrivateGpsUpdates => 'Швидкі приватні GPS-оновлення'; + + @override + String get movementThreshold => 'Поріг руху'; + + @override + String get fastGpsMovementThreshold => 'Поріг руху швидкого GPS'; + + @override + String get fastGpsActiveuseInterval => + 'Інтервал активного використання швидкого GPS'; + + @override + String get activeuseUpdateInterval => + 'Інтервал оновлення при активному використанні'; + + @override + String get repeatNearbyTraffic => 'Повторювати близький трафік'; + + @override + String get relayThroughRepeatersAcrossTheMesh => + 'Ретранслювати через повторювачі по мережі'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => + 'Лише поблизу, без flood повторювачів'; + + @override + String get multihop => 'Багатохоповий'; + + @override + String get createProfile => 'Створити профіль'; + + @override + String get renameProfile => 'Перейменувати профіль'; + + @override + String get newProfile => 'Новий профіль'; + + @override + String get manageProfiles => 'Керувати профілями'; + + @override + String get enableProfilesToStartManagingThem => + 'Увімкніть профілі, щоб почати керувати ними.'; + + @override + String get openMessage => 'Відкрити повідомлення'; + + @override + String get jumpToTheRelatedSarMessage => + 'Перейти до пов\'язаного SAR-повідомлення'; + + @override + String get removeSarMarker => 'Видалити SAR-маркер'; + + @override + String get pleaseSelectADestinationToSendSarMarker => + 'Виберіть призначення для надсилання SAR-маркера'; + + @override + String get sarMarkerBroadcastToPublicChannel => + 'SAR-маркер надіслано на публічний канал'; + + @override + String get sarMarkerSentToRoom => 'SAR-маркер надіслано в кімнату'; + + @override + String get loadFromGallery => 'Завантажити з галереї'; + + @override + String get replaceImage => 'Замінити зображення'; + + @override + String get selectFromGallery => 'Вибрати з галереї'; + + @override + String get team => 'Команда'; + + @override + String get found => 'Знайдено'; + + @override + String get staging => 'Місце збору'; + + @override + String get object => 'Об\'єкт'; + + @override + String get quiet => 'Тихо'; + + @override + String get moderate => 'Помірно'; + + @override + String get busy => 'Зайнято'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => + 'Сканування спектру не знайшло частот-кандидатів'; + + @override + String get searchMessages => 'Пошук повідомлень'; + + @override + String get sendImageFromGallery => 'Надіслати зображення з галереї'; + + @override + String get takePhoto => 'Зробити фото'; + + @override + String get dmOnly => 'Лише особисті повідомлення'; + + @override + String get allMessages => 'Усі повідомлення'; + + @override + String get sendToPublicChannel => 'Надіслати в публічний канал?'; + + @override + String get selectMarkerTypeAndDestination => + 'Виберіть тип маркера та призначення'; + + @override + String get noDestinationsAvailableLabel => 'Немає доступних призначень'; + + @override + String get image => 'Зображення'; + + @override + String get format => 'Формат'; + + @override + String get dimensions => 'Розміри'; + + @override + String get segments => 'Сегменти'; + + @override + String get transfers => 'Передачі'; + + @override + String get downloadedBy => 'Завантажено'; + + @override + String get saveDiscoverySettings => 'Зберегти налаштування виявлення'; + + @override + String get savePublicInfo => 'Зберегти публічну інформацію'; + + @override + String get saveRadioSettings => 'Зберегти налаштування радіо'; + + @override + String get savePath => 'Зберегти шлях'; + + @override + String get wipeDeviceData => 'Стерти дані пристрою'; + + @override + String get wipeDevice => 'Стерти пристрій'; + + @override + String get destructiveDeviceActions => 'Деструктивні дії пристрою.'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => + 'Оберіть пресет або налаштуйте радіо вручну.'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => + 'Оберіть ім\'я та місцеположення, якими ділиться пристрій.'; + + @override + String get availableSpaceOnThisDevice => + 'Доступний простір на цьому пристрої.'; + + @override + String get used => 'Використано'; + + @override + String get total => 'Загалом'; + + @override + String get renameValue => 'Перейменувати значення'; + + @override + String get customizeFields => 'Налаштувати поля'; + + @override + String get livePreview => 'Попередній перегляд наживо'; + + @override + String get refreshSchedule => 'Розклад оновлення'; + + @override + String get noResponse => 'Немає відповіді'; + + @override + String get refreshing => 'Оновлення'; + + @override + String get unavailable => 'Недоступно'; + + @override + String get pickARelayOrNodeToWatchInSensors => + 'Оберіть реле або вузол для спостереження.'; + + @override + String get publicKeyLabel => 'Публічний ключ'; + + @override + String get alreadyInContacts => 'Вже в контактах'; + + @override + String get connectToADeviceBeforeAddingContacts => + 'Підключіться до пристрою перед додаванням контактів'; + + @override + String get fromContacts => 'З контактів'; + + @override + String get onlineOnly => 'Лише онлайн'; + + @override + String get inBoth => 'В обох'; + + @override + String get source => 'Джерело'; + + @override + String get manualRouteEdit => 'Ручне редагування маршруту'; + + @override + String get observedMeshRoute => 'Спостережуваний mesh-маршрут'; + + @override + String get allMessagesCleared => 'Усі повідомлення очищено'; + + @override + String get onlineTraceDatabaseCleared => 'Базу трасувань очищено'; + + @override + String get packetLogsCleared => 'Журнали пакетів очищено'; + + @override + String get hexDataCopiedToClipboard => 'Hex-дані скопійовано в буфер'; + + @override + String get developerModeEnabled => 'Режим розробника увімкнено'; + + @override + String get developerModeDisabled => 'Режим розробника вимкнено'; + + @override + String get clipboardIsEmpty => 'Буфер обміну порожній'; + + @override + String get contactImported => 'Контакт імпортовано'; + + @override + String get contactLinkCopiedToClipboard => + 'Посилання на контакт скопійовано в буфер'; + + @override + String get failedToExportContact => 'Не вдалося експортувати контакт'; + + @override + String get noLogsToExport => 'Немає журналів для експорту'; + + @override + String get exportAsCsv => 'Експортувати як CSV'; + + @override + String get exportAsText => 'Експортувати як текст'; + + @override + String get receivedRfc3339 => 'Отримано (RFC3339)'; + + @override + String get buildTime => 'Час збірки'; + + @override + String get downloadUrlNotAvailable => 'URL завантаження недоступний'; + + @override + String get cannotOpenDownloadUrl => 'Не вдається відкрити URL завантаження'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => + 'Перевірка оновлень доступна лише на Android'; + + @override + String get youAreRunningTheLatestVersion => + 'Ви використовуєте останню версію'; + + @override + String get updateAvailableButDownloadUrlNotFound => + 'Оновлення доступне, але URL завантаження не знайдено'; + + @override + String get startTictactoe => 'Почати Tic-Tac-Toe'; + + @override + String get tictactoeUnavailable => 'Tic-Tac-Toe недоступно'; + + @override + String get tictactoeOpponentUnknown => 'Tic-Tac-Toe: суперник невідомий'; + + @override + String get tictactoeWaitingForStart => 'Tic-Tac-Toe: очікування початку'; + + @override + String get acceptsShareLinks => 'Приймає посилання для обміну'; + + @override + String get supportsRawHex => 'Підтримує raw hex'; + + @override + String get clipboardfriendly => 'Зручно для буфера'; + + @override + String get captured => 'Захоплено'; + + @override + String get size => 'Розмір'; + + @override + String get noCustomChannelsToClear => + 'Немає користувацьких каналів для очищення.'; + + @override + String get noDeviceContactsToClear => + 'Немає контактів пристрою для очищення.'; } diff --git a/lib/l10n/app_localizations_zh.dart b/lib/l10n/app_localizations_zh.dart index 45a5856..cc851c1 100644 --- a/lib/l10n/app_localizations_zh.dart +++ b/lib/l10n/app_localizations_zh.dart @@ -1827,4 +1827,745 @@ class AppLocalizationsZh extends AppLocalizations { String contactFailedToSetRoute(String error) { return '设置路由失败:$error'; } + + @override + String get rssi => 'RSSI'; + + @override + String get snr => 'SNR'; + + @override + String get ackTimeout => 'ACK 超时'; + + @override + String get opcode => '操作码'; + + @override + String get payload => '有效载荷'; + + @override + String get hops => '跳数'; + + @override + String get hashSize => '哈希大小'; + + @override + String get pathBytes => '路径字节'; + + @override + String get selectedPath => '选定路径'; + + @override + String get estimatedTx => '预计传输'; + + @override + String get senderToReceipt => '发送到接收'; + + @override + String get receivedCopies => '收到的副本'; + + @override + String get retryCause => '重试原因'; + + @override + String get retryMode => '重试模式'; + + @override + String get retryResult => '重试结果'; + + @override + String get lastRetry => '最后重试'; + + @override + String get rxPackets => 'RX 数据包'; + + @override + String get mesh => 'Mesh'; + + @override + String get rate => '速率'; + + @override + String get window => '窗口'; + + @override + String get posttxDelay => '发送后延迟'; + + @override + String get bandpass => '带通'; + + @override + String get bandpassFilterVoice => '带通语音滤波'; + + @override + String get frequency => '频率'; + + @override + String get australia => '澳大利亚'; + + @override + String get australiaNarrow => '澳大利亚(窄带)'; + + @override + String get australiaQld => '澳大利亚:QLD'; + + @override + String get australiaSaWa => '澳大利亚:SA, WA'; + + @override + String get newZealand => '新西兰'; + + @override + String get newZealandNarrow => '新西兰(窄带)'; + + @override + String get switzerland => '瑞士'; + + @override + String get portugal433 => '葡萄牙 433'; + + @override + String get portugal868 => '葡萄牙 868'; + + @override + String get czechRepublicNarrow => '捷克(窄带)'; + + @override + String get eu433mhzLongRange => '欧盟 433MHz(远距离)'; + + @override + String get euukDeprecated => '欧盟/英国(已弃用)'; + + @override + String get euukNarrow => '欧盟/英国(窄带)'; + + @override + String get usacanadaRecommended => '美国/加拿大(推荐)'; + + @override + String get vietnamDeprecated => '越南(已弃用)'; + + @override + String get vietnamNarrow => '越南(窄带)'; + + @override + String get active => '活动'; + + @override + String get addContact => '添加联系人'; + + @override + String get all => '全部'; + + @override + String get autoResolve => '自动解析'; + + @override + String get clearAllLabel => '清除全部'; + + @override + String get clearRelays => '清除中继'; + + @override + String get clearFilters => '清除过滤器'; + + @override + String get clearRoute => '清除路由'; + + @override + String get clearMessages => '清除消息'; + + @override + String get clearScale => '清除比例'; + + @override + String get clearDiscoveries => '清除发现'; + + @override + String get clearOnlineTraceDatabase => '清除在线追踪数据库'; + + @override + String get clearAllChannels => '清除所有频道'; + + @override + String get clearAllContacts => '清除所有联系人'; + + @override + String get clearChannels => '清除频道'; + + @override + String get clearContacts => '清除联系人'; + + @override + String get clearPathOnMaxRetry => '最大重试时清除路径'; + + @override + String get create => '创建'; + + @override + String get custom => '自定义'; + + @override + String get defaultValue => '默认'; + + @override + String get duplicate => '复制'; + + @override + String get editName => '编辑名称'; + + @override + String get open => '打开'; + + @override + String get paste => '粘贴'; + + @override + String get preview => '预览'; + + @override + String get remove => '移除'; + + @override + String get rename => '重命名'; + + @override + String get resolveAll => '解析全部'; + + @override + String get send => '发送'; + + @override + String get sendAnyway => '仍然发送'; + + @override + String get share => '分享'; + + @override + String get shareContact => '分享联系人'; + + @override + String get trace => '追踪'; + + @override + String get use => '使用'; + + @override + String get useSelectedFrequency => '使用选定频率'; + + @override + String get discovery => '发现'; + + @override + String get discoverRepeaters => '发现中继器'; + + @override + String get discoverSensors => '发现传感器'; + + @override + String get repeaterDiscoverySent => '中继器发现已发送'; + + @override + String get sensorDiscoverySent => '传感器发现已发送'; + + @override + String get clearedPendingDiscoveries => '已清除待处理的发现。'; + + @override + String get autoDiscovery => '自动发现'; + + @override + String get enableAutomaticAdding => '启用自动添加'; + + @override + String get autoaddRepeaters => '自动添加中继器'; + + @override + String get autoaddRoomServers => '自动添加房间服务器'; + + @override + String get autoaddSensors => '自动添加传感器'; + + @override + String get autoaddUsers => '自动添加用户'; + + @override + String get overwriteOldestWhenFull => '满时覆盖最旧的'; + + @override + String get storage => '存储'; + + @override + String get dangerZone => '危险区域'; + + @override + String get profiles => '配置文件'; + + @override + String get favourites => '收藏夹'; + + @override + String get sensors => '传感器'; + + @override + String get others => '其他'; + + @override + String get gpsModule => 'GPS 模块'; + + @override + String get liveTraffic => '实时流量'; + + @override + String get repeatersMap => '中继器地图'; + + @override + String get spectrumScan => '频谱扫描'; + + @override + String get blePacketLogs => 'BLE 数据包日志'; + + @override + String get onlineTraceDatabase => '在线追踪数据库'; + + @override + String get routePathByteSize => '路由路径字节大小'; + + @override + String get messageNotifications => '消息通知'; + + @override + String get sarAlerts => 'SAR 警报'; + + @override + String get discoveryNotifications => '发现通知'; + + @override + String get updateNotifications => '更新通知'; + + @override + String get muteWhileAppIsOpen => '应用打开时静音'; + + @override + String get disableContacts => '禁用联系人'; + + @override + String get enableSensorsTab => '启用传感器标签'; + + @override + String get enableProfiles => '启用配置文件'; + + @override + String get autoRouteRotation => '自动路由轮换'; + + @override + String get nearestRepeaterFallback => '最近中继器回退'; + + @override + String get deleteAllStoredMessageHistory => '删除所有存储的消息历史'; + + @override + String get messageFontSize => '消息字体大小'; + + @override + String get rotateMapWithHeading => '随航向旋转地图'; + + @override + String get showMapDebugInfo => '显示地图调试信息'; + + @override + String get openMapInFullscreen => '全屏打开地图'; + + @override + String get showSarMarkersLabel => '显示 SAR 标记'; + + @override + String get displaySarMarkersOnTheMainMap => '在主地图上显示 SAR 标记'; + + @override + String get showAllContactTrailsLabel => '显示所有联系人轨迹'; + + @override + String get hideRepeatersOnMap => '在地图上隐藏中继器'; + + @override + String get setMapScale => '设置地图比例'; + + @override + String get customMapScaleSaved => '自定义地图比例已保存'; + + @override + String get voiceBitrate => '语音比特率'; + + @override + String get voiceCompressor => '语音压缩器'; + + @override + String get balancesQuietAndLoudSpeechLevels => '平衡安静和响亮的语音级别'; + + @override + String get voiceLimiter => '语音限制器'; + + @override + String get preventsClippingPeaksBeforeEncoding => '防止编码前的削波'; + + @override + String get micAutoGain => '麦克风自动增益'; + + @override + String get letsTheRecorderAdjustInputLevel => '让录音器调整输入级别'; + + @override + String get echoCancellation => '回声消除'; + + @override + String get noiseSuppression => '噪音抑制'; + + @override + String get trimSilenceInVoiceMessages => '修剪语音消息中的静音'; + + @override + String get compressor => '压缩器'; + + @override + String get limiter => '限制器'; + + @override + String get autoGain => '自动增益'; + + @override + String get echoCancel => '回声'; + + @override + String get noiseSuppress => '噪声'; + + @override + String get silenceTrim => '静音'; + + @override + String get maxImageSize => '最大图片大小'; + + @override + String get imageCompression => '图片压缩'; + + @override + String get grayscale => '灰度'; + + @override + String get ultraMode => '超级模式'; + + @override + String get fastPrivateGpsUpdates => '快速私有 GPS 更新'; + + @override + String get movementThreshold => '移动阈值'; + + @override + String get fastGpsMovementThreshold => '快速 GPS 移动阈值'; + + @override + String get fastGpsActiveuseInterval => '快速 GPS 活动使用间隔'; + + @override + String get activeuseUpdateInterval => '活动使用更新间隔'; + + @override + String get repeatNearbyTraffic => '转发附近流量'; + + @override + String get relayThroughRepeatersAcrossTheMesh => '通过网格中的中继器转发'; + + @override + String get nearbyOnlyWithoutRepeaterFlooding => '仅附近,无中继器泛洪'; + + @override + String get multihop => '多跳'; + + @override + String get createProfile => '创建配置文件'; + + @override + String get renameProfile => '重命名配置文件'; + + @override + String get newProfile => '新配置文件'; + + @override + String get manageProfiles => '管理配置文件'; + + @override + String get enableProfilesToStartManagingThem => '启用配置文件以开始管理它们。'; + + @override + String get openMessage => '打开消息'; + + @override + String get jumpToTheRelatedSarMessage => '跳转到相关的 SAR 消息'; + + @override + String get removeSarMarker => '移除 SAR 标记'; + + @override + String get pleaseSelectADestinationToSendSarMarker => '请选择目标以发送 SAR 标记'; + + @override + String get sarMarkerBroadcastToPublicChannel => 'SAR 标记已广播到公共频道'; + + @override + String get sarMarkerSentToRoom => 'SAR 标记已发送到房间'; + + @override + String get loadFromGallery => '从图库加载'; + + @override + String get replaceImage => '替换图片'; + + @override + String get selectFromGallery => '从图库选择'; + + @override + String get team => '团队'; + + @override + String get found => '已找到'; + + @override + String get staging => '集结区'; + + @override + String get object => '物体'; + + @override + String get quiet => '安静'; + + @override + String get moderate => '中等'; + + @override + String get busy => '繁忙'; + + @override + String get spectrumScanReturnedNoCandidateFrequencies => '频谱扫描未找到候选频率'; + + @override + String get searchMessages => '搜索消息'; + + @override + String get sendImageFromGallery => '从图库发送图片'; + + @override + String get takePhoto => '拍照'; + + @override + String get dmOnly => '仅私信'; + + @override + String get allMessages => '所有消息'; + + @override + String get sendToPublicChannel => '发送到公共频道?'; + + @override + String get selectMarkerTypeAndDestination => '选择标记类型和目标'; + + @override + String get noDestinationsAvailableLabel => '没有可用的目标'; + + @override + String get image => '图片'; + + @override + String get format => '格式'; + + @override + String get dimensions => '尺寸'; + + @override + String get segments => '分段'; + + @override + String get transfers => '传输'; + + @override + String get downloadedBy => '已下载'; + + @override + String get saveDiscoverySettings => '保存发现设置'; + + @override + String get savePublicInfo => '保存公共信息'; + + @override + String get saveRadioSettings => '保存无线电设置'; + + @override + String get savePath => '保存路径'; + + @override + String get wipeDeviceData => '擦除设备数据'; + + @override + String get wipeDevice => '擦除设备'; + + @override + String get destructiveDeviceActions => '破坏性设备操作。'; + + @override + String get chooseAPresetOrFinetuneCustomRadioSettings => '选择预设或微调自定义无线电设置。'; + + @override + String get chooseTheNameAndLocationThisDeviceShares => '选择此设备共享的名称和位置。'; + + @override + String get availableSpaceOnThisDevice => '此设备上的可用空间。'; + + @override + String get used => '已使用'; + + @override + String get total => '总计'; + + @override + String get renameValue => '重命名值'; + + @override + String get customizeFields => '自定义字段'; + + @override + String get livePreview => '实时预览'; + + @override + String get refreshSchedule => '刷新计划'; + + @override + String get noResponse => '无响应'; + + @override + String get refreshing => '刷新中'; + + @override + String get unavailable => '不可用'; + + @override + String get pickARelayOrNodeToWatchInSensors => '选择要在传感器中监视的中继或节点。'; + + @override + String get publicKeyLabel => '公钥'; + + @override + String get alreadyInContacts => '已在联系人中'; + + @override + String get connectToADeviceBeforeAddingContacts => '添加联系人前请连接到设备'; + + @override + String get fromContacts => '来自联系人'; + + @override + String get onlineOnly => '仅在线'; + + @override + String get inBoth => '两者中'; + + @override + String get source => '来源'; + + @override + String get manualRouteEdit => '手动路由编辑'; + + @override + String get observedMeshRoute => '观察到的网格路由'; + + @override + String get allMessagesCleared => '所有消息已清除'; + + @override + String get onlineTraceDatabaseCleared => '在线追踪数据库已清除'; + + @override + String get packetLogsCleared => '数据包日志已清除'; + + @override + String get hexDataCopiedToClipboard => '十六进制数据已复制到剪贴板'; + + @override + String get developerModeEnabled => '开发者模式已启用'; + + @override + String get developerModeDisabled => '开发者模式已禁用'; + + @override + String get clipboardIsEmpty => '剪贴板为空'; + + @override + String get contactImported => '联系人已导入'; + + @override + String get contactLinkCopiedToClipboard => '联系人链接已复制到剪贴板'; + + @override + String get failedToExportContact => '导出联系人失败'; + + @override + String get noLogsToExport => '没有日志可导出'; + + @override + String get exportAsCsv => '导出为 CSV'; + + @override + String get exportAsText => '导出为文本'; + + @override + String get receivedRfc3339 => '收到 (RFC3339)'; + + @override + String get buildTime => '构建时间'; + + @override + String get downloadUrlNotAvailable => '下载链接不可用'; + + @override + String get cannotOpenDownloadUrl => '无法打开下载链接'; + + @override + String get updateCheckIsOnlyAvailableOnAndroid => '更新检查仅在 Android 上可用'; + + @override + String get youAreRunningTheLatestVersion => '您正在使用最新版本'; + + @override + String get updateAvailableButDownloadUrlNotFound => '有更新可用但未找到下载链接'; + + @override + String get startTictactoe => '开始井字棋'; + + @override + String get tictactoeUnavailable => '井字棋不可用'; + + @override + String get tictactoeOpponentUnknown => '井字棋:对手未知'; + + @override + String get tictactoeWaitingForStart => '井字棋:等待开始'; + + @override + String get acceptsShareLinks => '接受分享链接'; + + @override + String get supportsRawHex => '支持原始十六进制'; + + @override + String get clipboardfriendly => '剪贴板友好'; + + @override + String get captured => '已捕获'; + + @override + String get size => '大小'; + + @override + String get noCustomChannelsToClear => '没有自定义频道可清除。'; + + @override + String get noDeviceContactsToClear => '没有设备联系人可清除。'; } diff --git a/lib/l10n/app_pl.arb b/lib/l10n/app_pl.arb index 74d5db3..7120d22 100644 --- a/lib/l10n/app_pl.arb +++ b/lib/l10n/app_pl.arb @@ -2328,5 +2328,252 @@ "contactFailedToClearRoute": "Nie udało się wyczyścić trasy: {error}", "contactRouteCleared": "Trasa wyczyszczona", "contactRouteSet": "Ustawiono trasę: {route}", - "contactFailedToSetRoute": "Nie udało się ustawić trasy: {error}" + "contactFailedToSetRoute": "Nie udało się ustawić trasy: {error}", + "rssi": "RSSI", + "snr": "SNR", + "ackTimeout": "Limit czasu ACK", + "opcode": "Opcode", + "payload": "Ładunek", + "hops": "Skoki", + "hashSize": "Rozmiar hash", + "pathBytes": "Bajty ścieżki", + "selectedPath": "Wybrana ścieżka", + "estimatedTx": "Szacowane nadawanie", + "senderToReceipt": "Od nadawcy do odbioru", + "receivedCopies": "Otrzymane kopie", + "retryCause": "Przyczyna ponowienia", + "retryMode": "Tryb ponowienia", + "retryResult": "Wynik ponowienia", + "lastRetry": "Ostatnia próba", + "rxPackets": "Pakiety RX", + "mesh": "Mesh", + "rate": "Szybkość", + "window": "Okno", + "posttxDelay": "Opóźnienie po nadawaniu", + "bandpass": "Pasmowy", + "bandpassFilterVoice": "Filtr pasmowy głosu", + "frequency": "Częstotliwość", + "australia": "Australia", + "australiaNarrow": "Australia (wąski)", + "australiaQld": "Australia: QLD", + "australiaSaWa": "Australia: SA, WA", + "newZealand": "Nowa Zelandia", + "newZealandNarrow": "Nowa Zelandia (wąski)", + "switzerland": "Szwajcaria", + "portugal433": "Portugalia 433", + "portugal868": "Portugalia 868", + "czechRepublicNarrow": "Czechy (wąski)", + "eu433mhzLongRange": "EU 433MHz (daleki zasięg)", + "euukDeprecated": "EU/UK (przestarzały)", + "euukNarrow": "EU/UK (wąski)", + "usacanadaRecommended": "USA/Kanada (zalecany)", + "vietnamDeprecated": "Wietnam (przestarzały)", + "vietnamNarrow": "Wietnam (wąski)", + "active": "Aktywny", + "addContact": "Dodaj kontakt", + "all": "Wszystko", + "autoResolve": "Automatyczne rozwiązanie", + "clearAllLabel": "Wyczyść wszystko", + "clearRelays": "Wyczyść przekaźniki", + "clearFilters": "Wyczyść filtry", + "clearRoute": "Wyczyść trasę", + "clearMessages": "Wyczyść wiadomości", + "clearScale": "Wyczyść skalę", + "clearDiscoveries": "Wyczyść odkrycia", + "clearOnlineTraceDatabase": "Wyczyść bazę śladów", + "clearAllChannels": "Wyczyść wszystkie kanały", + "clearAllContacts": "Wyczyść wszystkie kontakty", + "clearChannels": "Wyczyść kanały", + "clearContacts": "Wyczyść kontakty", + "clearPathOnMaxRetry": "Wyczyść ścieżkę przy maks. próbie", + "create": "Utwórz", + "custom": "Niestandardowy", + "defaultValue": "Domyślny", + "duplicate": "Duplikuj", + "editName": "Edytuj nazwę", + "open": "Otwórz", + "paste": "Wklej", + "preview": "Podgląd", + "remove": "Usuń", + "rename": "Zmień nazwę", + "resolveAll": "Rozwiąż wszystko", + "send": "Wyślij", + "sendAnyway": "Wyślij mimo to", + "share": "Udostępnij", + "shareContact": "Udostępnij kontakt", + "trace": "Śledzenie", + "use": "Użyj", + "useSelectedFrequency": "Użyj wybranej częstotliwości", + "discovery": "Wykrywanie", + "discoverRepeaters": "Wykryj przekaźniki", + "discoverSensors": "Wykryj czujniki", + "repeaterDiscoverySent": "Wykrywanie przekaźników wysłane", + "sensorDiscoverySent": "Wykrywanie czujników wysłane", + "clearedPendingDiscoveries": "Wyczyszczono oczekujące odkrycia.", + "autoDiscovery": "Automatyczne wykrywanie", + "enableAutomaticAdding": "Włącz automatyczne dodawanie", + "autoaddRepeaters": "Automatycznie dodaj przekaźniki", + "autoaddRoomServers": "Automatycznie dodaj serwery pokoi", + "autoaddSensors": "Automatycznie dodaj czujniki", + "autoaddUsers": "Automatycznie dodaj użytkowników", + "overwriteOldestWhenFull": "Nadpisz najstarsze gdy pełne", + "storage": "Pamięć", + "dangerZone": "Strefa zagrożenia", + "profiles": "Profile", + "favourites": "Ulubione", + "sensors": "Czujniki", + "others": "Inne", + "gpsModule": "Moduł GPS", + "liveTraffic": "Ruch na żywo", + "repeatersMap": "Mapa przekaźników", + "spectrumScan": "Skanowanie spektrum", + "blePacketLogs": "Logi pakietów BLE", + "onlineTraceDatabase": "Baza śladów", + "routePathByteSize": "Rozmiar ścieżki w bajtach", + "messageNotifications": "Powiadomienia o wiadomościach", + "sarAlerts": "Alerty SAR", + "discoveryNotifications": "Powiadomienia o wykrywaniu", + "updateNotifications": "Powiadomienia o aktualizacjach", + "muteWhileAppIsOpen": "Wycisz gdy aplikacja jest otwarta", + "disableContacts": "Wyłącz kontakty", + "enableSensorsTab": "Włącz kartę Czujniki", + "enableProfiles": "Włącz profile", + "autoRouteRotation": "Automatyczna rotacja trasy", + "nearestRepeaterFallback": "Najbliższy przekaźnik awaryjny", + "deleteAllStoredMessageHistory": "Usuń całą historię wiadomości", + "messageFontSize": "Rozmiar czcionki wiadomości", + "rotateMapWithHeading": "Obracaj mapę z kierunkiem", + "showMapDebugInfo": "Pokaż info debugowania mapy", + "openMapInFullscreen": "Otwórz mapę na pełnym ekranie", + "showSarMarkersLabel": "Pokaż znaczniki SAR", + "displaySarMarkersOnTheMainMap": "Wyświetlaj znaczniki SAR na głównej mapie", + "showAllContactTrailsLabel": "Pokaż wszystkie ślady kontaktów", + "hideRepeatersOnMap": "Ukryj przekaźniki na mapie", + "setMapScale": "Ustaw skalę mapy", + "customMapScaleSaved": "Niestandardowa skala mapy zapisana", + "voiceBitrate": "Bitrate głosu", + "voiceCompressor": "Kompresor głosu", + "balancesQuietAndLoudSpeechLevels": "Wyrównuje ciche i głośne poziomy mowy", + "voiceLimiter": "Limiter głosu", + "preventsClippingPeaksBeforeEncoding": "Zapobiega przycinaniu szczytów przed kodowaniem", + "micAutoGain": "Automatyczne wzmocnienie mikrofonu", + "letsTheRecorderAdjustInputLevel": "Pozwala nagrywarkowi dostosować poziom wejścia", + "echoCancellation": "Usuwanie echa", + "noiseSuppression": "Tłumienie szumu", + "trimSilenceInVoiceMessages": "Przytnij ciszę w wiadomościach głosowych", + "compressor": "Kompresor", + "limiter": "Limiter", + "autoGain": "Automatyczne wzmocnienie", + "echoCancel": "Echo", + "noiseSuppress": "Szum", + "silenceTrim": "Cisza", + "maxImageSize": "Maksymalny rozmiar obrazu", + "imageCompression": "Kompresja obrazu", + "grayscale": "Skala szarości", + "ultraMode": "Tryb ultra", + "fastPrivateGpsUpdates": "Szybkie prywatne aktualizacje GPS", + "movementThreshold": "Próg ruchu", + "fastGpsMovementThreshold": "Próg ruchu szybkiego GPS", + "fastGpsActiveuseInterval": "Interwał aktywnego użycia szybkiego GPS", + "activeuseUpdateInterval": "Interwał aktualizacji przy aktywnym użyciu", + "repeatNearbyTraffic": "Powtarzaj pobliski ruch", + "relayThroughRepeatersAcrossTheMesh": "Przekazuj przez przekaźniki w sieci", + "nearbyOnlyWithoutRepeaterFlooding": "Tylko w pobliżu, bez zalewania przekaźników", + "multihop": "Wieloskokowy", + "createProfile": "Utwórz profil", + "renameProfile": "Zmień nazwę profilu", + "newProfile": "Nowy profil", + "manageProfiles": "Zarządzaj profilami", + "enableProfilesToStartManagingThem": "Włącz profile, aby zacząć nimi zarządzać.", + "openMessage": "Otwórz wiadomość", + "jumpToTheRelatedSarMessage": "Przejdź do powiązanej wiadomości SAR", + "removeSarMarker": "Usuń znacznik SAR", + "pleaseSelectADestinationToSendSarMarker": "Wybierz cel wysłania znacznika SAR", + "sarMarkerBroadcastToPublicChannel": "Znacznik SAR wysłany na kanał publiczny", + "sarMarkerSentToRoom": "Znacznik SAR wysłany do pokoju", + "loadFromGallery": "Załaduj z galerii", + "replaceImage": "Zamień obraz", + "selectFromGallery": "Wybierz z galerii", + "team": "Zespół", + "found": "Znaleziono", + "staging": "Punkt zbiórki", + "object": "Obiekt", + "quiet": "Cicho", + "moderate": "Umiarkowane", + "busy": "Zajęty", + "spectrumScanReturnedNoCandidateFrequencies": "Skanowanie spektrum nie znalazło częstotliwości kandydatów", + "searchMessages": "Szukaj wiadomości", + "sendImageFromGallery": "Wyślij obraz z galerii", + "takePhoto": "Zrób zdjęcie", + "dmOnly": "Tylko wiadomość bezpośrednia", + "allMessages": "Wszystkie wiadomości", + "sendToPublicChannel": "Wysłać na kanał publiczny?", + "selectMarkerTypeAndDestination": "Wybierz typ znacznika i cel", + "noDestinationsAvailableLabel": "Brak dostępnych celów", + "image": "Obraz", + "format": "Format", + "dimensions": "Wymiary", + "segments": "Segmenty", + "transfers": "Transfery", + "downloadedBy": "Pobrane przez", + "saveDiscoverySettings": "Zapisz ustawienia wykrywania", + "savePublicInfo": "Zapisz informacje publiczne", + "saveRadioSettings": "Zapisz ustawienia radia", + "savePath": "Zapisz ścieżkę", + "wipeDeviceData": "Wyczyść dane urządzenia", + "wipeDevice": "Wyczyść urządzenie", + "destructiveDeviceActions": "Destrukcyjne akcje na urządzeniu.", + "chooseAPresetOrFinetuneCustomRadioSettings": "Wybierz ustawienie wstępne lub dostosuj ustawienia radia.", + "chooseTheNameAndLocationThisDeviceShares": "Wybierz nazwę i lokalizację udostępnianą przez to urządzenie.", + "availableSpaceOnThisDevice": "Dostępne miejsce na tym urządzeniu.", + "used": "Użyto", + "total": "Razem", + "renameValue": "Zmień nazwę wartości", + "customizeFields": "Dostosuj pola", + "livePreview": "Podgląd na żywo", + "refreshSchedule": "Harmonogram odświeżania", + "noResponse": "Brak odpowiedzi", + "refreshing": "Odświeżanie", + "unavailable": "Niedostępny", + "pickARelayOrNodeToWatchInSensors": "Wybierz przekaźnik lub węzeł do obserwacji.", + "publicKeyLabel": "Klucz publiczny", + "alreadyInContacts": "Już w kontaktach", + "connectToADeviceBeforeAddingContacts": "Połącz się z urządzeniem przed dodaniem kontaktów", + "fromContacts": "Z kontaktów", + "onlineOnly": "Tylko online", + "inBoth": "W obu", + "source": "Źródło", + "manualRouteEdit": "Ręczna edycja trasy", + "observedMeshRoute": "Obserwowana trasa sieci", + "allMessagesCleared": "Wszystkie wiadomości wyczyszczone", + "onlineTraceDatabaseCleared": "Baza śladów wyczyszczona", + "packetLogsCleared": "Logi pakietów wyczyszczone", + "hexDataCopiedToClipboard": "Dane hex skopiowane do schowka", + "developerModeEnabled": "Tryb programisty włączony", + "developerModeDisabled": "Tryb programisty wyłączony", + "clipboardIsEmpty": "Schowek jest pusty", + "contactImported": "Kontakt zaimportowany", + "contactLinkCopiedToClipboard": "Link kontaktu skopiowany do schowka", + "failedToExportContact": "Nie udało się wyeksportować kontaktu", + "noLogsToExport": "Brak logów do eksportu", + "exportAsCsv": "Eksportuj jako CSV", + "exportAsText": "Eksportuj jako tekst", + "receivedRfc3339": "Odebrano (RFC3339)", + "buildTime": "Czas budowania", + "downloadUrlNotAvailable": "URL pobierania niedostępny", + "cannotOpenDownloadUrl": "Nie można otworzyć URL pobierania", + "updateCheckIsOnlyAvailableOnAndroid": "Sprawdzanie aktualizacji dostępne tylko na Androidzie", + "youAreRunningTheLatestVersion": "Używasz najnowszej wersji", + "updateAvailableButDownloadUrlNotFound": "Aktualizacja dostępna, ale URL pobierania nie znaleziony", + "startTictactoe": "Rozpocznij Tic-Tac-Toe", + "tictactoeUnavailable": "Tic-Tac-Toe niedostępny", + "tictactoeOpponentUnknown": "Tic-Tac-Toe: przeciwnik nieznany", + "tictactoeWaitingForStart": "Tic-Tac-Toe: oczekiwanie na start", + "acceptsShareLinks": "Akceptuje udostępnione linki", + "supportsRawHex": "Obsługuje surowy hex", + "clipboardfriendly": "Przyjazne dla schowka", + "captured": "Przechwycone", + "size": "Rozmiar", + "noCustomChannelsToClear": "Brak niestandardowych kanałów do wyczyszczenia.", + "noDeviceContactsToClear": "Brak kontaktów urządzenia do wyczyszczenia." } diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index 0ef8331..eddf6c3 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -2328,5 +2328,252 @@ "contactFailedToClearRoute": "Falha ao limpar a rota: {error}", "contactRouteCleared": "Rota limpa", "contactRouteSet": "Rota definida: {route}", - "contactFailedToSetRoute": "Falha ao definir a rota: {error}" + "contactFailedToSetRoute": "Falha ao definir a rota: {error}", + "rssi": "RSSI", + "snr": "SNR", + "ackTimeout": "Tempo limite ACK", + "opcode": "Opcode", + "payload": "Carga útil", + "hops": "Saltos", + "hashSize": "Tamanho do hash", + "pathBytes": "Bytes do caminho", + "selectedPath": "Caminho selecionado", + "estimatedTx": "Transmissão estimada", + "senderToReceipt": "Do remetente ao recibo", + "receivedCopies": "Cópias recebidas", + "retryCause": "Causa da nova tentativa", + "retryMode": "Modo de nova tentativa", + "retryResult": "Resultado da nova tentativa", + "lastRetry": "Última tentativa", + "rxPackets": "Pacotes RX", + "mesh": "Mesh", + "rate": "Taxa", + "window": "Janela", + "posttxDelay": "Atraso pós-tx", + "bandpass": "Passa-banda", + "bandpassFilterVoice": "Filtro passa-banda de voz", + "frequency": "Frequência", + "australia": "Austrália", + "australiaNarrow": "Austrália (Estreito)", + "australiaQld": "Austrália: QLD", + "australiaSaWa": "Austrália: SA, WA", + "newZealand": "Nova Zelândia", + "newZealandNarrow": "Nova Zelândia (Estreito)", + "switzerland": "Suíça", + "portugal433": "Portugal 433", + "portugal868": "Portugal 868", + "czechRepublicNarrow": "República Checa (Estreito)", + "eu433mhzLongRange": "UE 433MHz (Longo Alcance)", + "euukDeprecated": "UE/RU (Obsoleto)", + "euukNarrow": "UE/RU (Estreito)", + "usacanadaRecommended": "EUA/Canadá (Recomendado)", + "vietnamDeprecated": "Vietname (Obsoleto)", + "vietnamNarrow": "Vietname (Estreito)", + "active": "Ativo", + "addContact": "Adicionar contacto", + "all": "Tudo", + "autoResolve": "Resolver automaticamente", + "clearAllLabel": "Limpar tudo", + "clearRelays": "Limpar relays", + "clearFilters": "Limpar filtros", + "clearRoute": "Limpar rota", + "clearMessages": "Limpar mensagens", + "clearScale": "Limpar escala", + "clearDiscoveries": "Limpar descobertas", + "clearOnlineTraceDatabase": "Limpar base de dados de rastreio", + "clearAllChannels": "Limpar todos os canais", + "clearAllContacts": "Limpar todos os contactos", + "clearChannels": "Limpar canais", + "clearContacts": "Limpar contactos", + "clearPathOnMaxRetry": "Limpar caminho no máx. de tentativas", + "create": "Criar", + "custom": "Personalizado", + "defaultValue": "Padrão", + "duplicate": "Duplicar", + "editName": "Editar nome", + "open": "Abrir", + "paste": "Colar", + "preview": "Pré-visualização", + "remove": "Remover", + "rename": "Renomear", + "resolveAll": "Resolver tudo", + "send": "Enviar", + "sendAnyway": "Enviar mesmo assim", + "share": "Partilhar", + "shareContact": "Partilhar contacto", + "trace": "Rastreio", + "use": "Usar", + "useSelectedFrequency": "Usar frequência selecionada", + "discovery": "Descoberta", + "discoverRepeaters": "Descobrir repetidores", + "discoverSensors": "Descobrir sensores", + "repeaterDiscoverySent": "Descoberta de repetidores enviada", + "sensorDiscoverySent": "Descoberta de sensores enviada", + "clearedPendingDiscoveries": "Descobertas pendentes limpas.", + "autoDiscovery": "Descoberta automática", + "enableAutomaticAdding": "Ativar adição automática", + "autoaddRepeaters": "Adicionar repetidores automaticamente", + "autoaddRoomServers": "Adicionar servidores de sala automaticamente", + "autoaddSensors": "Adicionar sensores automaticamente", + "autoaddUsers": "Adicionar utilizadores automaticamente", + "overwriteOldestWhenFull": "Sobrescrever mais antigos quando cheio", + "storage": "Armazenamento", + "dangerZone": "Zona de perigo", + "profiles": "Perfis", + "favourites": "Favoritos", + "sensors": "Sensores", + "others": "Outros", + "gpsModule": "Módulo GPS", + "liveTraffic": "Tráfego ao vivo", + "repeatersMap": "Mapa de repetidores", + "spectrumScan": "Varredura de espectro", + "blePacketLogs": "Registos de pacotes BLE", + "onlineTraceDatabase": "Base de dados de rastreio", + "routePathByteSize": "Tamanho do caminho em bytes", + "messageNotifications": "Notificações de mensagens", + "sarAlerts": "Alertas SAR", + "discoveryNotifications": "Notificações de descoberta", + "updateNotifications": "Notificações de atualização", + "muteWhileAppIsOpen": "Silenciar com a app aberta", + "disableContacts": "Desativar contactos", + "enableSensorsTab": "Ativar separador Sensores", + "enableProfiles": "Ativar perfis", + "autoRouteRotation": "Rotação automática de rota", + "nearestRepeaterFallback": "Repetidor mais próximo como reserva", + "deleteAllStoredMessageHistory": "Apagar todo o histórico de mensagens", + "messageFontSize": "Tamanho da fonte de mensagens", + "rotateMapWithHeading": "Rodar mapa com direção", + "showMapDebugInfo": "Mostrar info de depuração do mapa", + "openMapInFullscreen": "Abrir mapa em ecrã inteiro", + "showSarMarkersLabel": "Mostrar marcadores SAR", + "displaySarMarkersOnTheMainMap": "Mostrar marcadores SAR no mapa principal", + "showAllContactTrailsLabel": "Mostrar todos os rastos de contactos", + "hideRepeatersOnMap": "Ocultar repetidores no mapa", + "setMapScale": "Definir escala do mapa", + "customMapScaleSaved": "Escala de mapa personalizada guardada", + "voiceBitrate": "Taxa de bits de voz", + "voiceCompressor": "Compressor de voz", + "balancesQuietAndLoudSpeechLevels": "Equilibra níveis de fala suaves e altos", + "voiceLimiter": "Limitador de voz", + "preventsClippingPeaksBeforeEncoding": "Previne corte de picos antes da codificação", + "micAutoGain": "Ganho automático do microfone", + "letsTheRecorderAdjustInputLevel": "Permite ao gravador ajustar o nível de entrada", + "echoCancellation": "Cancelamento de eco", + "noiseSuppression": "Supressão de ruído", + "trimSilenceInVoiceMessages": "Cortar silêncio em mensagens de voz", + "compressor": "Compressor", + "limiter": "Limitador", + "autoGain": "Ganho automático", + "echoCancel": "Eco", + "noiseSuppress": "Ruído", + "silenceTrim": "Silêncio", + "maxImageSize": "Tamanho máximo de imagem", + "imageCompression": "Compressão de imagem", + "grayscale": "Escala de cinzentos", + "ultraMode": "Modo ultra", + "fastPrivateGpsUpdates": "Atualizações GPS privadas rápidas", + "movementThreshold": "Limiar de movimento", + "fastGpsMovementThreshold": "Limiar de movimento GPS rápido", + "fastGpsActiveuseInterval": "Intervalo de uso ativo GPS rápido", + "activeuseUpdateInterval": "Intervalo de atualização de uso ativo", + "repeatNearbyTraffic": "Repetir tráfego próximo", + "relayThroughRepeatersAcrossTheMesh": "Retransmitir através de repetidores na rede", + "nearbyOnlyWithoutRepeaterFlooding": "Apenas próximos, sem flood de repetidores", + "multihop": "Multi-salto", + "createProfile": "Criar perfil", + "renameProfile": "Renomear perfil", + "newProfile": "Novo perfil", + "manageProfiles": "Gerir perfis", + "enableProfilesToStartManagingThem": "Ative os perfis para começar a geri-los.", + "openMessage": "Abrir mensagem", + "jumpToTheRelatedSarMessage": "Ir para a mensagem SAR relacionada", + "removeSarMarker": "Remover marcador SAR", + "pleaseSelectADestinationToSendSarMarker": "Selecione um destino para enviar o marcador SAR", + "sarMarkerBroadcastToPublicChannel": "Marcador SAR transmitido no canal público", + "sarMarkerSentToRoom": "Marcador SAR enviado para a sala", + "loadFromGallery": "Carregar da galeria", + "replaceImage": "Substituir imagem", + "selectFromGallery": "Selecionar da galeria", + "team": "Equipa", + "found": "Encontrado", + "staging": "Área de reunião", + "object": "Objeto", + "quiet": "Silencioso", + "moderate": "Moderado", + "busy": "Ocupado", + "spectrumScanReturnedNoCandidateFrequencies": "A varredura de espectro não encontrou frequências candidatas", + "searchMessages": "Pesquisar mensagens", + "sendImageFromGallery": "Enviar imagem da galeria", + "takePhoto": "Tirar foto", + "dmOnly": "Apenas mensagem direta", + "allMessages": "Todas as mensagens", + "sendToPublicChannel": "Enviar para o canal público?", + "selectMarkerTypeAndDestination": "Selecione tipo de marcador e destino", + "noDestinationsAvailableLabel": "Nenhum destino disponível", + "image": "Imagem", + "format": "Formato", + "dimensions": "Dimensões", + "segments": "Segmentos", + "transfers": "Transferências", + "downloadedBy": "Transferido por", + "saveDiscoverySettings": "Guardar definições de descoberta", + "savePublicInfo": "Guardar informação pública", + "saveRadioSettings": "Guardar definições de rádio", + "savePath": "Guardar caminho", + "wipeDeviceData": "Apagar dados do dispositivo", + "wipeDevice": "Apagar dispositivo", + "destructiveDeviceActions": "Ações destrutivas do dispositivo.", + "chooseAPresetOrFinetuneCustomRadioSettings": "Escolha uma predefinição ou ajuste as definições de rádio.", + "chooseTheNameAndLocationThisDeviceShares": "Escolha o nome e a localização que este dispositivo partilha.", + "availableSpaceOnThisDevice": "Espaço disponível neste dispositivo.", + "used": "Usado", + "total": "Total", + "renameValue": "Renomear valor", + "customizeFields": "Personalizar campos", + "livePreview": "Pré-visualização ao vivo", + "refreshSchedule": "Agenda de atualização", + "noResponse": "Sem resposta", + "refreshing": "A atualizar", + "unavailable": "Indisponível", + "pickARelayOrNodeToWatchInSensors": "Escolha um relay ou nó para observar.", + "publicKeyLabel": "Chave pública", + "alreadyInContacts": "Já nos contactos", + "connectToADeviceBeforeAddingContacts": "Conecte-se a um dispositivo antes de adicionar contactos", + "fromContacts": "Dos contactos", + "onlineOnly": "Apenas online", + "inBoth": "Em ambos", + "source": "Fonte", + "manualRouteEdit": "Edição manual de rota", + "observedMeshRoute": "Rota mesh observada", + "allMessagesCleared": "Todas as mensagens limpas", + "onlineTraceDatabaseCleared": "Base de dados de rastreio limpa", + "packetLogsCleared": "Registos de pacotes limpos", + "hexDataCopiedToClipboard": "Dados hex copiados para a área de transferência", + "developerModeEnabled": "Modo de programador ativado", + "developerModeDisabled": "Modo de programador desativado", + "clipboardIsEmpty": "A área de transferência está vazia", + "contactImported": "Contacto importado", + "contactLinkCopiedToClipboard": "Link do contacto copiado para a área de transferência", + "failedToExportContact": "Falha ao exportar contacto", + "noLogsToExport": "Sem registos para exportar", + "exportAsCsv": "Exportar como CSV", + "exportAsText": "Exportar como texto", + "receivedRfc3339": "Recebido (RFC3339)", + "buildTime": "Hora de compilação", + "downloadUrlNotAvailable": "URL de download não disponível", + "cannotOpenDownloadUrl": "Não é possível abrir o URL de download", + "updateCheckIsOnlyAvailableOnAndroid": "A verificação de atualizações só está disponível no Android", + "youAreRunningTheLatestVersion": "Está a usar a versão mais recente", + "updateAvailableButDownloadUrlNotFound": "Atualização disponível mas URL de download não encontrado", + "startTictactoe": "Iniciar Tic-Tac-Toe", + "tictactoeUnavailable": "Tic-Tac-Toe indisponível", + "tictactoeOpponentUnknown": "Tic-Tac-Toe: oponente desconhecido", + "tictactoeWaitingForStart": "Tic-Tac-Toe: a aguardar início", + "acceptsShareLinks": "Aceita links partilhados", + "supportsRawHex": "Suporta hex bruto", + "clipboardfriendly": "Compatível com a área de transferência", + "captured": "Capturado", + "size": "Tamanho", + "noCustomChannelsToClear": "Sem canais personalizados para limpar.", + "noDeviceContactsToClear": "Sem contactos do dispositivo para limpar." } diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index 1f1343a..740dda6 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -563,5 +563,252 @@ "contactFailedToClearRoute": "Не удалось очистить маршрут: {error}", "contactRouteCleared": "Маршрут очищен", "contactRouteSet": "Маршрут задан: {route}", - "contactFailedToSetRoute": "Не удалось задать маршрут: {error}" + "contactFailedToSetRoute": "Не удалось задать маршрут: {error}", + "rssi": "RSSI", + "snr": "SNR", + "ackTimeout": "Таймаут ACK", + "opcode": "Опкод", + "payload": "Полезная нагрузка", + "hops": "Хопы", + "hashSize": "Размер хеша", + "pathBytes": "Байты пути", + "selectedPath": "Выбранный путь", + "estimatedTx": "Ожидаемая передача", + "senderToReceipt": "От отправителя до получения", + "receivedCopies": "Полученные копии", + "retryCause": "Причина повтора", + "retryMode": "Режим повтора", + "retryResult": "Результат повтора", + "lastRetry": "Последний повтор", + "rxPackets": "RX-пакеты", + "mesh": "Mesh", + "rate": "Скорость", + "window": "Окно", + "posttxDelay": "Задержка после передачи", + "bandpass": "Полосовой", + "bandpassFilterVoice": "Полосовой фильтр голоса", + "frequency": "Частота", + "australia": "Австралия", + "australiaNarrow": "Австралия (Узкий)", + "australiaQld": "Австралия: QLD", + "australiaSaWa": "Австралия: SA, WA", + "newZealand": "Новая Зеландия", + "newZealandNarrow": "Новая Зеландия (Узкий)", + "switzerland": "Швейцария", + "portugal433": "Португалия 433", + "portugal868": "Португалия 868", + "czechRepublicNarrow": "Чехия (Узкий)", + "eu433mhzLongRange": "ЕС 433МГц (Дальний)", + "euukDeprecated": "ЕС/Великобритания (Устарело)", + "euukNarrow": "ЕС/Великобритания (Узкий)", + "usacanadaRecommended": "США/Канада (Рекомендуется)", + "vietnamDeprecated": "Вьетнам (Устарело)", + "vietnamNarrow": "Вьетнам (Узкий)", + "active": "Активно", + "addContact": "Добавить контакт", + "all": "Все", + "autoResolve": "Автоматическое разрешение", + "clearAllLabel": "Очистить все", + "clearRelays": "Очистить реле", + "clearFilters": "Очистить фильтры", + "clearRoute": "Очистить маршрут", + "clearMessages": "Очистить сообщения", + "clearScale": "Очистить масштаб", + "clearDiscoveries": "Очистить обнаружения", + "clearOnlineTraceDatabase": "Очистить базу трассировок", + "clearAllChannels": "Очистить все каналы", + "clearAllContacts": "Очистить все контакты", + "clearChannels": "Очистить каналы", + "clearContacts": "Очистить контакты", + "clearPathOnMaxRetry": "Очистить путь при макс. повторе", + "create": "Создать", + "custom": "Пользовательский", + "defaultValue": "По умолчанию", + "duplicate": "Дублировать", + "editName": "Редактировать имя", + "open": "Открыть", + "paste": "Вставить", + "preview": "Предпросмотр", + "remove": "Удалить", + "rename": "Переименовать", + "resolveAll": "Разрешить все", + "send": "Отправить", + "sendAnyway": "Отправить все равно", + "share": "Поделиться", + "shareContact": "Поделиться контактом", + "trace": "Трассировка", + "use": "Использовать", + "useSelectedFrequency": "Использовать выбранную частоту", + "discovery": "Обнаружение", + "discoverRepeaters": "Обнаружить повторители", + "discoverSensors": "Обнаружить датчики", + "repeaterDiscoverySent": "Обнаружение повторителей отправлено", + "sensorDiscoverySent": "Обнаружение датчиков отправлено", + "clearedPendingDiscoveries": "Ожидающие обнаружения очищены.", + "autoDiscovery": "Автоматическое обнаружение", + "enableAutomaticAdding": "Включить автоматическое добавление", + "autoaddRepeaters": "Автодобавление повторителей", + "autoaddRoomServers": "Автодобавление серверов комнат", + "autoaddSensors": "Автодобавление датчиков", + "autoaddUsers": "Автодобавление пользователей", + "overwriteOldestWhenFull": "Перезаписать старейшие при заполнении", + "storage": "Хранилище", + "dangerZone": "Опасная зона", + "profiles": "Профили", + "favourites": "Избранное", + "sensors": "Датчики", + "others": "Другие", + "gpsModule": "Модуль GPS", + "liveTraffic": "Живой трафик", + "repeatersMap": "Карта повторителей", + "spectrumScan": "Сканирование спектра", + "blePacketLogs": "Журналы BLE-пакетов", + "onlineTraceDatabase": "База трассировок", + "routePathByteSize": "Размер пути в байтах", + "messageNotifications": "Уведомления о сообщениях", + "sarAlerts": "SAR-оповещения", + "discoveryNotifications": "Уведомления об обнаружении", + "updateNotifications": "Уведомления об обновлениях", + "muteWhileAppIsOpen": "Без звука при открытом приложении", + "disableContacts": "Отключить контакты", + "enableSensorsTab": "Включить вкладку Датчики", + "enableProfiles": "Включить профили", + "autoRouteRotation": "Автоматическая ротация маршрута", + "nearestRepeaterFallback": "Ближайший повторитель как резерв", + "deleteAllStoredMessageHistory": "Удалить всю историю сообщений", + "messageFontSize": "Размер шрифта сообщений", + "rotateMapWithHeading": "Вращать карту по направлению", + "showMapDebugInfo": "Показать отладочную информацию карты", + "openMapInFullscreen": "Открыть карту на весь экран", + "showSarMarkersLabel": "Показать SAR-маркеры", + "displaySarMarkersOnTheMainMap": "Отображать SAR-маркеры на основной карте", + "showAllContactTrailsLabel": "Показать все следы контактов", + "hideRepeatersOnMap": "Скрыть повторители на карте", + "setMapScale": "Установить масштаб карты", + "customMapScaleSaved": "Пользовательский масштаб карты сохранён", + "voiceBitrate": "Битрейт голоса", + "voiceCompressor": "Компрессор голоса", + "balancesQuietAndLoudSpeechLevels": "Выравнивает тихую и громкую речь", + "voiceLimiter": "Лимитер голоса", + "preventsClippingPeaksBeforeEncoding": "Предотвращает обрезку пиков перед кодированием", + "micAutoGain": "Автоусиление микрофона", + "letsTheRecorderAdjustInputLevel": "Позволяет рекордеру регулировать уровень входа", + "echoCancellation": "Подавление эха", + "noiseSuppression": "Подавление шума", + "trimSilenceInVoiceMessages": "Обрезать тишину в голосовых сообщениях", + "compressor": "Компрессор", + "limiter": "Лимитер", + "autoGain": "Автоусиление", + "echoCancel": "Эхо", + "noiseSuppress": "Шум", + "silenceTrim": "Тишина", + "maxImageSize": "Максимальный размер изображения", + "imageCompression": "Сжатие изображения", + "grayscale": "Оттенки серого", + "ultraMode": "Режим ультра", + "fastPrivateGpsUpdates": "Быстрые приватные GPS-обновления", + "movementThreshold": "Порог движения", + "fastGpsMovementThreshold": "Порог движения быстрого GPS", + "fastGpsActiveuseInterval": "Интервал активного использования быстрого GPS", + "activeuseUpdateInterval": "Интервал обновления при активном использовании", + "repeatNearbyTraffic": "Повторять ближний трафик", + "relayThroughRepeatersAcrossTheMesh": "Ретранслировать через повторители по сети", + "nearbyOnlyWithoutRepeaterFlooding": "Только рядом, без flood повторителей", + "multihop": "Многохоповый", + "createProfile": "Создать профиль", + "renameProfile": "Переименовать профиль", + "newProfile": "Новый профиль", + "manageProfiles": "Управление профилями", + "enableProfilesToStartManagingThem": "Включите профили, чтобы начать управлять ими.", + "openMessage": "Открыть сообщение", + "jumpToTheRelatedSarMessage": "Перейти к связанному SAR-сообщению", + "removeSarMarker": "Удалить SAR-маркер", + "pleaseSelectADestinationToSendSarMarker": "Выберите назначение для отправки SAR-маркера", + "sarMarkerBroadcastToPublicChannel": "SAR-маркер отправлен в публичный канал", + "sarMarkerSentToRoom": "SAR-маркер отправлен в комнату", + "loadFromGallery": "Загрузить из галереи", + "replaceImage": "Заменить изображение", + "selectFromGallery": "Выбрать из галереи", + "team": "Команда", + "found": "Найдено", + "staging": "Место сбора", + "object": "Объект", + "quiet": "Тихо", + "moderate": "Умеренно", + "busy": "Занято", + "spectrumScanReturnedNoCandidateFrequencies": "Сканирование спектра не нашло частот-кандидатов", + "searchMessages": "Поиск сообщений", + "sendImageFromGallery": "Отправить изображение из галереи", + "takePhoto": "Сделать фото", + "dmOnly": "Только личные сообщения", + "allMessages": "Все сообщения", + "sendToPublicChannel": "Отправить в публичный канал?", + "selectMarkerTypeAndDestination": "Выберите тип маркера и назначение", + "noDestinationsAvailableLabel": "Нет доступных назначений", + "image": "Изображение", + "format": "Формат", + "dimensions": "Размеры", + "segments": "Сегменты", + "transfers": "Передачи", + "downloadedBy": "Загружено", + "saveDiscoverySettings": "Сохранить настройки обнаружения", + "savePublicInfo": "Сохранить публичную информацию", + "saveRadioSettings": "Сохранить настройки радио", + "savePath": "Сохранить путь", + "wipeDeviceData": "Стереть данные устройства", + "wipeDevice": "Стереть устройство", + "destructiveDeviceActions": "Деструктивные действия устройства.", + "chooseAPresetOrFinetuneCustomRadioSettings": "Выберите пресет или настройте радио вручную.", + "chooseTheNameAndLocationThisDeviceShares": "Выберите имя и местоположение, которыми делится устройство.", + "availableSpaceOnThisDevice": "Доступное место на этом устройстве.", + "used": "Использовано", + "total": "Всего", + "renameValue": "Переименовать значение", + "customizeFields": "Настроить поля", + "livePreview": "Предпросмотр в реальном времени", + "refreshSchedule": "Расписание обновления", + "noResponse": "Нет ответа", + "refreshing": "Обновление", + "unavailable": "Недоступно", + "pickARelayOrNodeToWatchInSensors": "Выберите реле или узел для наблюдения.", + "publicKeyLabel": "Публичный ключ", + "alreadyInContacts": "Уже в контактах", + "connectToADeviceBeforeAddingContacts": "Подключитесь к устройству перед добавлением контактов", + "fromContacts": "Из контактов", + "onlineOnly": "Только онлайн", + "inBoth": "В обоих", + "source": "Источник", + "manualRouteEdit": "Ручное редактирование маршрута", + "observedMeshRoute": "Наблюдаемый mesh-маршрут", + "allMessagesCleared": "Все сообщения очищены", + "onlineTraceDatabaseCleared": "База трассировок очищена", + "packetLogsCleared": "Журналы пакетов очищены", + "hexDataCopiedToClipboard": "Hex-данные скопированы в буфер", + "developerModeEnabled": "Режим разработчика включён", + "developerModeDisabled": "Режим разработчика отключён", + "clipboardIsEmpty": "Буфер обмена пуст", + "contactImported": "Контакт импортирован", + "contactLinkCopiedToClipboard": "Ссылка на контакт скопирована в буфер", + "failedToExportContact": "Не удалось экспортировать контакт", + "noLogsToExport": "Нет журналов для экспорта", + "exportAsCsv": "Экспортировать как CSV", + "exportAsText": "Экспортировать как текст", + "receivedRfc3339": "Получено (RFC3339)", + "buildTime": "Время сборки", + "downloadUrlNotAvailable": "URL загрузки недоступен", + "cannotOpenDownloadUrl": "Не удаётся открыть URL загрузки", + "updateCheckIsOnlyAvailableOnAndroid": "Проверка обновлений доступна только на Android", + "youAreRunningTheLatestVersion": "Вы используете последнюю версию", + "updateAvailableButDownloadUrlNotFound": "Обновление доступно, но URL загрузки не найден", + "startTictactoe": "Начать Tic-Tac-Toe", + "tictactoeUnavailable": "Tic-Tac-Toe недоступно", + "tictactoeOpponentUnknown": "Tic-Tac-Toe: противник неизвестен", + "tictactoeWaitingForStart": "Tic-Tac-Toe: ожидание начала", + "acceptsShareLinks": "Принимает общие ссылки", + "supportsRawHex": "Поддерживает raw hex", + "clipboardfriendly": "Удобно для буфера", + "captured": "Захвачено", + "size": "Размер", + "noCustomChannelsToClear": "Нет пользовательских каналов для очистки.", + "noDeviceContactsToClear": "Нет контактов устройства для очистки." } diff --git a/lib/l10n/app_sl.arb b/lib/l10n/app_sl.arb index 56a50b3..e46dd71 100644 --- a/lib/l10n/app_sl.arb +++ b/lib/l10n/app_sl.arb @@ -511,8 +511,7 @@ "rawDump": "Surovi izpis", "cannotRetryMissingRecipient": "Ponovnega pošiljanja ni mogoče: informacije o prejemniku manjkajo", "voiceUnavailable": "Glas trenutno ni na voljo", - "requestingVoice": "Zahteva za glasom" - , + "requestingVoice": "Zahteva za glasom", "device": "naprava", "change": "Spremeni", "wizardOverviewDescription": "Ta aplikacija združuje sporočanje MeshCore, terenske SAR posodobitve, zemljevide in orodja za napravo na enem mestu.", @@ -564,5 +563,252 @@ "contactFailedToClearRoute": "Brisanje poti ni uspelo: {error}", "contactRouteCleared": "Pot izbrisana", "contactRouteSet": "Pot nastavljena: {route}", - "contactFailedToSetRoute": "Nastavitev poti ni uspela: {error}" + "contactFailedToSetRoute": "Nastavitev poti ni uspela: {error}", + "rssi": "RSSI", + "snr": "SNR", + "ackTimeout": "Časovna omejitev ACK", + "opcode": "Opkoda", + "payload": "Vsebina", + "hops": "Skoki", + "hashSize": "Velikost zgoščevalne vrednosti", + "pathBytes": "Bajti poti", + "selectedPath": "Izbrana pot", + "estimatedTx": "Ocenjeni čas oddaje", + "senderToReceipt": "Od pošiljatelja do prejema", + "receivedCopies": "Prejete kopije", + "retryCause": "Razlog ponovitve", + "retryMode": "Način ponovitve", + "retryResult": "Rezultat ponovitve", + "lastRetry": "Zadnja ponovitev", + "rxPackets": "RX paketi", + "mesh": "Mesh", + "rate": "Hitrost", + "window": "Okno", + "posttxDelay": "Zakasnitev po oddaji", + "bandpass": "Pasovno sito", + "bandpassFilterVoice": "Pasovno sito za glas", + "frequency": "Frekvenca", + "australia": "Avstralija", + "australiaNarrow": "Avstralija (ozko)", + "australiaQld": "Avstralija: QLD", + "australiaSaWa": "Avstralija: SA, WA", + "newZealand": "Nova Zelandija", + "newZealandNarrow": "Nova Zelandija (ozko)", + "switzerland": "Švica", + "portugal433": "Portugalska 433", + "portugal868": "Portugalska 868", + "czechRepublicNarrow": "Češka (ozko)", + "eu433mhzLongRange": "EU 433MHz (dolg doseg)", + "euukDeprecated": "EU/UK (zastarelo)", + "euukNarrow": "EU/UK (ozko)", + "usacanadaRecommended": "ZDA/Kanada (priporočeno)", + "vietnamDeprecated": "Vietnam (zastarelo)", + "vietnamNarrow": "Vietnam (ozko)", + "active": "Aktivno", + "addContact": "Dodaj stik", + "all": "Vse", + "autoResolve": "Samodejno razreši", + "clearAllLabel": "Počisti vse", + "clearRelays": "Počisti posrednike", + "clearFilters": "Počisti filtre", + "clearRoute": "Počisti pot", + "clearMessages": "Počisti sporočila", + "clearScale": "Počisti merilo", + "clearDiscoveries": "Počisti odkritja", + "clearOnlineTraceDatabase": "Počisti bazo sledi", + "clearAllChannels": "Počisti vse kanale", + "clearAllContacts": "Počisti vse stike", + "clearChannels": "Počisti kanale", + "clearContacts": "Počisti stike", + "clearPathOnMaxRetry": "Počisti pot ob maks. ponovitvi", + "create": "Ustvari", + "custom": "Po meri", + "defaultValue": "Privzeto", + "duplicate": "Podvoji", + "editName": "Uredi ime", + "open": "Odpri", + "paste": "Prilepi", + "preview": "Predogled", + "remove": "Odstrani", + "rename": "Preimenuj", + "resolveAll": "Razreši vse", + "send": "Pošlji", + "sendAnyway": "Vseeno pošlji", + "share": "Deli", + "shareContact": "Deli stik", + "trace": "Sledenje", + "use": "Uporabi", + "useSelectedFrequency": "Uporabi izbrano frekvenco", + "discovery": "Odkrivanje", + "discoverRepeaters": "Odkrij posrednike", + "discoverSensors": "Odkrij senzorje", + "repeaterDiscoverySent": "Odkrivanje posrednikov poslano", + "sensorDiscoverySent": "Odkrivanje senzorjev poslano", + "clearedPendingDiscoveries": "Čakalna odkritja počiščena.", + "autoDiscovery": "Samodejno odkrivanje", + "enableAutomaticAdding": "Omogoči samodejno dodajanje", + "autoaddRepeaters": "Samodejno dodaj posrednike", + "autoaddRoomServers": "Samodejno dodaj strežnike sob", + "autoaddSensors": "Samodejno dodaj senzorje", + "autoaddUsers": "Samodejno dodaj uporabnike", + "overwriteOldestWhenFull": "Prepiši najstarejše ob polnem", + "storage": "Shramba", + "dangerZone": "Nevarno območje", + "profiles": "Profili", + "favourites": "Priljubljeni", + "sensors": "Senzorji", + "others": "Ostali", + "gpsModule": "GPS modul", + "liveTraffic": "Promet v živo", + "repeatersMap": "Zemljevid posrednikov", + "spectrumScan": "Spektralno skeniranje", + "blePacketLogs": "Dnevniki BLE paketov", + "onlineTraceDatabase": "Baza sledi", + "routePathByteSize": "Velikost poti v bajtih", + "messageNotifications": "Obvestila o sporočilih", + "sarAlerts": "SAR opozorila", + "discoveryNotifications": "Obvestila o odkritjih", + "updateNotifications": "Obvestila o posodobitvah", + "muteWhileAppIsOpen": "Utišaj ko je aplikacija odprta", + "disableContacts": "Onemogoči stike", + "enableSensorsTab": "Omogoči zavihek Senzorji", + "enableProfiles": "Omogoči profile", + "autoRouteRotation": "Samodejno kroženje poti", + "nearestRepeaterFallback": "Najbližji posrednik kot rezerva", + "deleteAllStoredMessageHistory": "Izbriši vso shranjeno zgodovino sporočil", + "messageFontSize": "Velikost pisave sporočil", + "rotateMapWithHeading": "Vrti zemljevid s smerjo", + "showMapDebugInfo": "Prikaži razhroščevalne info zemljevida", + "openMapInFullscreen": "Odpri zemljevid na cel zaslon", + "showSarMarkersLabel": "Prikaži SAR oznake", + "displaySarMarkersOnTheMainMap": "Prikaži SAR oznake na glavnem zemljevidu", + "showAllContactTrailsLabel": "Prikaži vse sledi stikov", + "hideRepeatersOnMap": "Skrij posrednike na zemljevidu", + "setMapScale": "Nastavi merilo zemljevida", + "customMapScaleSaved": "Merilo zemljevida shranjeno", + "voiceBitrate": "Bitna hitrost glasu", + "voiceCompressor": "Kompresor glasu", + "balancesQuietAndLoudSpeechLevels": "Izravnava tihe in glasne govorne ravni", + "voiceLimiter": "Omejevalnik glasu", + "preventsClippingPeaksBeforeEncoding": "Preprečuje rezanje vrhov pred kodiranjem", + "micAutoGain": "Samodejna ojačitev mikrofona", + "letsTheRecorderAdjustInputLevel": "Omogoči snemalniku prilagoditev vhodne ravni", + "echoCancellation": "Odstranjevanje odmeva", + "noiseSuppression": "Dušenje šuma", + "trimSilenceInVoiceMessages": "Obreži tišino v glasovnih sporočilih", + "compressor": "Kompresor", + "limiter": "Omejevalnik", + "autoGain": "Samodejna ojačitev", + "echoCancel": "Odmev", + "noiseSuppress": "Šum", + "silenceTrim": "Tišina", + "maxImageSize": "Največja velikost slike", + "imageCompression": "Stiskanje slik", + "grayscale": "Sivine", + "ultraMode": "Ultra način", + "fastPrivateGpsUpdates": "Hitri zasebni GPS podatki", + "movementThreshold": "Prag gibanja", + "fastGpsMovementThreshold": "Prag gibanja za hitri GPS", + "fastGpsActiveuseInterval": "Interval uporabe hitrega GPS-a", + "activeuseUpdateInterval": "Interval posodobitve pri aktivni uporabi", + "repeatNearbyTraffic": "Ponavljaj bližnji promet", + "relayThroughRepeatersAcrossTheMesh": "Posreduj skozi posrednike po mreži", + "nearbyOnlyWithoutRepeaterFlooding": "Samo bližnji, brez poplavljanja posrednikov", + "multihop": "Večskočno", + "createProfile": "Ustvari profil", + "renameProfile": "Preimenuj profil", + "newProfile": "Nov profil", + "manageProfiles": "Upravljaj profile", + "enableProfilesToStartManagingThem": "Omogočite profile, da jih začnete upravljati.", + "openMessage": "Odpri sporočilo", + "jumpToTheRelatedSarMessage": "Skoči na povezano SAR sporočilo", + "removeSarMarker": "Odstrani SAR oznako", + "pleaseSelectADestinationToSendSarMarker": "Izberite cilj za pošiljanje SAR oznake", + "sarMarkerBroadcastToPublicChannel": "SAR oznaka poslana na javni kanal", + "sarMarkerSentToRoom": "SAR oznaka poslana v sobo", + "loadFromGallery": "Naloži iz galerije", + "replaceImage": "Zamenjaj sliko", + "selectFromGallery": "Izberi iz galerije", + "team": "Ekipa", + "found": "Najdeno", + "staging": "Zbirno mesto", + "object": "Predmet", + "quiet": "Tiho", + "moderate": "Zmerno", + "busy": "Zasedeno", + "spectrumScanReturnedNoCandidateFrequencies": "Spektralno skeniranje ni našlo primernih frekvenc", + "searchMessages": "Iskanje sporočil", + "sendImageFromGallery": "Pošlji sliko iz galerije", + "takePhoto": "Posnemi fotografijo", + "dmOnly": "Samo neposredno", + "allMessages": "Vsa sporočila", + "sendToPublicChannel": "Pošlji na javni kanal?", + "selectMarkerTypeAndDestination": "Izberite vrsto oznake in cilj", + "noDestinationsAvailableLabel": "Ni razpoložljivih ciljev", + "image": "Slika", + "format": "Format", + "dimensions": "Dimenzije", + "segments": "Segmenti", + "transfers": "Prenosi", + "downloadedBy": "Preneseno od", + "saveDiscoverySettings": "Shrani nastavitve odkrivanja", + "savePublicInfo": "Shrani javne podatke", + "saveRadioSettings": "Shrani radijske nastavitve", + "savePath": "Shrani pot", + "wipeDeviceData": "Izbriši podatke naprave", + "wipeDevice": "Izbriši napravo", + "destructiveDeviceActions": "Destruktivna dejanja na napravi.", + "chooseAPresetOrFinetuneCustomRadioSettings": "Izberite prednastavitev ali natančno prilagodite radijske nastavitve.", + "chooseTheNameAndLocationThisDeviceShares": "Izberite ime in lokacijo, ki ju naprava deli.", + "availableSpaceOnThisDevice": "Razpoložljiv prostor na tej napravi.", + "used": "Uporabljeno", + "total": "Skupaj", + "renameValue": "Preimenuj vrednost", + "customizeFields": "Prilagodi polja", + "livePreview": "Predogled v živo", + "refreshSchedule": "Interval osvežitve", + "noResponse": "Ni odgovora", + "refreshing": "Osvežujem", + "unavailable": "Nedostopno", + "pickARelayOrNodeToWatchInSensors": "Izberite posrednika ali vozlišče za opazovanje.", + "publicKeyLabel": "Javni ključ", + "alreadyInContacts": "Že med stiki", + "connectToADeviceBeforeAddingContacts": "Povežite se z napravo pred dodajanjem stikov", + "fromContacts": "Iz stikov", + "onlineOnly": "Samo povezani", + "inBoth": "V obeh", + "source": "Vir", + "manualRouteEdit": "Ročno urejanje poti", + "observedMeshRoute": "Opazovana mrežna pot", + "allMessagesCleared": "Vsa sporočila počiščena", + "onlineTraceDatabaseCleared": "Baza sledi počiščena", + "packetLogsCleared": "Dnevniki paketov počiščeni", + "hexDataCopiedToClipboard": "Hex podatki kopirani v odložišče", + "developerModeEnabled": "Razvojni način omogočen", + "developerModeDisabled": "Razvojni način onemogočen", + "clipboardIsEmpty": "Odložišče je prazno", + "contactImported": "Stik uvožen", + "contactLinkCopiedToClipboard": "Povezava na stik kopirana v odložišče", + "failedToExportContact": "Izvoz stika ni uspel", + "noLogsToExport": "Ni dnevnikov za izvoz", + "exportAsCsv": "Izvozi kot CSV", + "exportAsText": "Izvozi kot besedilo", + "receivedRfc3339": "Prejeto (RFC3339)", + "buildTime": "Čas gradnje", + "downloadUrlNotAvailable": "URL za prenos ni na voljo", + "cannotOpenDownloadUrl": "URL za prenos ni mogoče odpreti", + "updateCheckIsOnlyAvailableOnAndroid": "Preverjanje posodobitev je na voljo le na Androidu", + "youAreRunningTheLatestVersion": "Uporabljate najnovejšo različico", + "updateAvailableButDownloadUrlNotFound": "Posodobitev na voljo, a URL za prenos ni najden", + "startTictactoe": "Začni Tic-Tac-Toe", + "tictactoeUnavailable": "Tic-Tac-Toe ni na voljo", + "tictactoeOpponentUnknown": "Tic-Tac-Toe: nasprotnik neznan", + "tictactoeWaitingForStart": "Tic-Tac-Toe: čakanje na začetek", + "acceptsShareLinks": "Sprejema deljene povezave", + "supportsRawHex": "Podpira surove hex", + "clipboardfriendly": "Primerno za odložišče", + "captured": "Zajeto", + "size": "Velikost", + "noCustomChannelsToClear": "Ni prilagojenih kanalov za brisanje.", + "noDeviceContactsToClear": "Ni stikov naprave za brisanje." } diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb index 63b2f6d..2956736 100644 --- a/lib/l10n/app_tr.arb +++ b/lib/l10n/app_tr.arb @@ -2328,5 +2328,252 @@ "contactFailedToClearRoute": "Rota temizlenemedi: {error}", "contactRouteCleared": "Rota temizlendi", "contactRouteSet": "Rota ayarlandı: {route}", - "contactFailedToSetRoute": "Rota ayarlanamadı: {error}" + "contactFailedToSetRoute": "Rota ayarlanamadı: {error}", + "rssi": "RSSI", + "snr": "SNR", + "ackTimeout": "ACK zaman aşımı", + "opcode": "Opcode", + "payload": "Yük", + "hops": "Atlama", + "hashSize": "Hash boyutu", + "pathBytes": "Yol baytları", + "selectedPath": "Seçilen yol", + "estimatedTx": "Tahmini gönderim", + "senderToReceipt": "Gönderenden alındıya", + "receivedCopies": "Alınan kopyalar", + "retryCause": "Yeniden deneme nedeni", + "retryMode": "Yeniden deneme modu", + "retryResult": "Yeniden deneme sonucu", + "lastRetry": "Son deneme", + "rxPackets": "RX paketleri", + "mesh": "Mesh", + "rate": "Hız", + "window": "Pencere", + "posttxDelay": "Gönderim sonrası gecikme", + "bandpass": "Bant geçiren", + "bandpassFilterVoice": "Bant geçiren filtre ses", + "frequency": "Frekans", + "australia": "Avustralya", + "australiaNarrow": "Avustralya (Dar)", + "australiaQld": "Avustralya: QLD", + "australiaSaWa": "Avustralya: SA, WA", + "newZealand": "Yeni Zelanda", + "newZealandNarrow": "Yeni Zelanda (Dar)", + "switzerland": "İsviçre", + "portugal433": "Portekiz 433", + "portugal868": "Portekiz 868", + "czechRepublicNarrow": "Çek Cumhuriyeti (Dar)", + "eu433mhzLongRange": "AB 433MHz (Uzun Menzil)", + "euukDeprecated": "AB/BK (Kullanımdan kalktı)", + "euukNarrow": "AB/BK (Dar)", + "usacanadaRecommended": "ABD/Kanada (Önerilen)", + "vietnamDeprecated": "Vietnam (Kullanımdan kalktı)", + "vietnamNarrow": "Vietnam (Dar)", + "active": "Aktif", + "addContact": "Kişi ekle", + "all": "Tümü", + "autoResolve": "Otomatik çöz", + "clearAllLabel": "Tümünü temizle", + "clearRelays": "Röleleri temizle", + "clearFilters": "Filtreleri temizle", + "clearRoute": "Rotayı temizle", + "clearMessages": "Mesajları temizle", + "clearScale": "Ölçeği temizle", + "clearDiscoveries": "Keşifleri temizle", + "clearOnlineTraceDatabase": "Çevrimiçi iz veritabanını temizle", + "clearAllChannels": "Tüm kanalları temizle", + "clearAllContacts": "Tüm kişileri temizle", + "clearChannels": "Kanalları temizle", + "clearContacts": "Kişileri temizle", + "clearPathOnMaxRetry": "Maks denemede yolu temizle", + "create": "Oluştur", + "custom": "Özel", + "defaultValue": "Varsayılan", + "duplicate": "Çoğalt", + "editName": "Adı düzenle", + "open": "Aç", + "paste": "Yapıştır", + "preview": "Önizleme", + "remove": "Kaldır", + "rename": "Yeniden adlandır", + "resolveAll": "Tümünü çöz", + "send": "Gönder", + "sendAnyway": "Yine de gönder", + "share": "Paylaş", + "shareContact": "Kişiyi paylaş", + "trace": "İz", + "use": "Kullan", + "useSelectedFrequency": "Seçilen frekansı kullan", + "discovery": "Keşif", + "discoverRepeaters": "Tekrarlayıcıları keşfet", + "discoverSensors": "Sensörleri keşfet", + "repeaterDiscoverySent": "Tekrarlayıcı keşfi gönderildi", + "sensorDiscoverySent": "Sensör keşfi gönderildi", + "clearedPendingDiscoveries": "Bekleyen keşifler temizlendi.", + "autoDiscovery": "Otomatik keşif", + "enableAutomaticAdding": "Otomatik eklemeyi etkinleştir", + "autoaddRepeaters": "Tekrarlayıcıları otomatik ekle", + "autoaddRoomServers": "Oda sunucularını otomatik ekle", + "autoaddSensors": "Sensörleri otomatik ekle", + "autoaddUsers": "Kullanıcıları otomatik ekle", + "overwriteOldestWhenFull": "Dolduğunda en eskiyi üzerine yaz", + "storage": "Depolama", + "dangerZone": "Tehlikeli bölge", + "profiles": "Profiller", + "favourites": "Favoriler", + "sensors": "Sensörler", + "others": "Diğerleri", + "gpsModule": "GPS Modülü", + "liveTraffic": "Canlı trafik", + "repeatersMap": "Tekrarlayıcılar haritası", + "spectrumScan": "Spektrum taraması", + "blePacketLogs": "BLE paket günlükleri", + "onlineTraceDatabase": "Çevrimiçi iz veritabanı", + "routePathByteSize": "Yol bayt boyutu", + "messageNotifications": "Mesaj bildirimleri", + "sarAlerts": "SAR uyarıları", + "discoveryNotifications": "Keşif bildirimleri", + "updateNotifications": "Güncelleme bildirimleri", + "muteWhileAppIsOpen": "Uygulama açıkken sessize al", + "disableContacts": "Kişileri devre dışı bırak", + "enableSensorsTab": "Sensörler sekmesini etkinleştir", + "enableProfiles": "Profilleri etkinleştir", + "autoRouteRotation": "Otomatik rota rotasyonu", + "nearestRepeaterFallback": "En yakın tekrarlayıcıya geri dönüş", + "deleteAllStoredMessageHistory": "Tüm mesaj geçmişini sil", + "messageFontSize": "Mesaj yazı tipi boyutu", + "rotateMapWithHeading": "Haritayı yön ile döndür", + "showMapDebugInfo": "Harita hata ayıklama bilgisini göster", + "openMapInFullscreen": "Haritayı tam ekranda aç", + "showSarMarkersLabel": "SAR işaretçilerini göster", + "displaySarMarkersOnTheMainMap": "SAR işaretçilerini ana haritada göster", + "showAllContactTrailsLabel": "Tüm kişi izlerini göster", + "hideRepeatersOnMap": "Haritada tekrarlayıcıları gizle", + "setMapScale": "Harita ölçeğini ayarla", + "customMapScaleSaved": "Özel harita ölçeği kaydedildi", + "voiceBitrate": "Ses bit hızı", + "voiceCompressor": "Ses sıkıştırıcı", + "balancesQuietAndLoudSpeechLevels": "Sessiz ve yüksek konuşma seviyelerini dengeler", + "voiceLimiter": "Ses sınırlayıcı", + "preventsClippingPeaksBeforeEncoding": "Kodlama öncesi tepe kırpmasını önler", + "micAutoGain": "Mikrofon otomatik kazancı", + "letsTheRecorderAdjustInputLevel": "Kaydedicinin giriş seviyesini ayarlamasına izin verir", + "echoCancellation": "Yankı iptali", + "noiseSuppression": "Gürültü bastırma", + "trimSilenceInVoiceMessages": "Sesli mesajlarda sessizliği kırp", + "compressor": "Sıkıştırıcı", + "limiter": "Sınırlayıcı", + "autoGain": "Otomatik kazanç", + "echoCancel": "Yankı", + "noiseSuppress": "Gürültü", + "silenceTrim": "Sessizlik", + "maxImageSize": "Maksimum resim boyutu", + "imageCompression": "Resim sıkıştırma", + "grayscale": "Gri tonlama", + "ultraMode": "Ultra mod", + "fastPrivateGpsUpdates": "Hızlı özel GPS güncellemeleri", + "movementThreshold": "Hareket eşiği", + "fastGpsMovementThreshold": "Hızlı GPS hareket eşiği", + "fastGpsActiveuseInterval": "Hızlı GPS aktif kullanım aralığı", + "activeuseUpdateInterval": "Aktif kullanım güncelleme aralığı", + "repeatNearbyTraffic": "Yakın trafiği tekrarla", + "relayThroughRepeatersAcrossTheMesh": "Ağ üzerindeki tekrarlayıcılar aracılığıyla ilet", + "nearbyOnlyWithoutRepeaterFlooding": "Yalnızca yakın, tekrarlayıcı taşkını olmadan", + "multihop": "Çok atlamalı", + "createProfile": "Profil oluştur", + "renameProfile": "Profili yeniden adlandır", + "newProfile": "Yeni profil", + "manageProfiles": "Profilleri yönet", + "enableProfilesToStartManagingThem": "Profilleri yönetmeye başlamak için etkinleştirin.", + "openMessage": "Mesajı aç", + "jumpToTheRelatedSarMessage": "İlgili SAR mesajına git", + "removeSarMarker": "SAR işaretçisini kaldır", + "pleaseSelectADestinationToSendSarMarker": "SAR işaretçisi göndermek için bir hedef seçin", + "sarMarkerBroadcastToPublicChannel": "SAR işaretçisi genel kanala yayınlandı", + "sarMarkerSentToRoom": "SAR işaretçisi odaya gönderildi", + "loadFromGallery": "Galeriden yükle", + "replaceImage": "Resmi değiştir", + "selectFromGallery": "Galeriden seç", + "team": "Takım", + "found": "Bulundu", + "staging": "Toplanma alanı", + "object": "Nesne", + "quiet": "Sessiz", + "moderate": "Orta", + "busy": "Meşgul", + "spectrumScanReturnedNoCandidateFrequencies": "Spektrum taraması aday frekans bulamadı", + "searchMessages": "Mesajlarda ara", + "sendImageFromGallery": "Galeriden resim gönder", + "takePhoto": "Fotoğraf çek", + "dmOnly": "Yalnızca DM", + "allMessages": "Tüm mesajlar", + "sendToPublicChannel": "Genel kanala gönderilsin mi?", + "selectMarkerTypeAndDestination": "İşaretçi türünü ve hedefi seçin", + "noDestinationsAvailableLabel": "Kullanılabilir hedef yok", + "image": "Resim", + "format": "Biçim", + "dimensions": "Boyutlar", + "segments": "Segmentler", + "transfers": "Transferler", + "downloadedBy": "İndiren", + "saveDiscoverySettings": "Keşif ayarlarını kaydet", + "savePublicInfo": "Genel bilgileri kaydet", + "saveRadioSettings": "Radyo ayarlarını kaydet", + "savePath": "Yolu kaydet", + "wipeDeviceData": "Cihaz verilerini sil", + "wipeDevice": "Cihazı sil", + "destructiveDeviceActions": "Yıkıcı cihaz işlemleri.", + "chooseAPresetOrFinetuneCustomRadioSettings": "Bir ön ayar seçin veya radyo ayarlarını ince ayarlayın.", + "chooseTheNameAndLocationThisDeviceShares": "Bu cihazın paylaştığı ad ve konumu seçin.", + "availableSpaceOnThisDevice": "Bu cihazda kullanılabilir alan.", + "used": "Kullanılan", + "total": "Toplam", + "renameValue": "Değeri yeniden adlandır", + "customizeFields": "Alanları özelleştir", + "livePreview": "Canlı önizleme", + "refreshSchedule": "Yenileme programı", + "noResponse": "Yanıt yok", + "refreshing": "Yenileniyor", + "unavailable": "Kullanılamaz", + "pickARelayOrNodeToWatchInSensors": "İzlemek için bir röle veya düğüm seçin.", + "publicKeyLabel": "Genel anahtar", + "alreadyInContacts": "Zaten kişilerde", + "connectToADeviceBeforeAddingContacts": "Kişi eklemeden önce bir cihaza bağlanın", + "fromContacts": "Kişilerden", + "onlineOnly": "Yalnızca çevrimiçi", + "inBoth": "Her ikisinde", + "source": "Kaynak", + "manualRouteEdit": "Manuel rota düzenle", + "observedMeshRoute": "Gözlemlenen mesh rotası", + "allMessagesCleared": "Tüm mesajlar temizlendi", + "onlineTraceDatabaseCleared": "Çevrimiçi iz veritabanı temizlendi", + "packetLogsCleared": "Paket günlükleri temizlendi", + "hexDataCopiedToClipboard": "Hex verisi panoya kopyalandı", + "developerModeEnabled": "Geliştirici modu etkinleştirildi", + "developerModeDisabled": "Geliştirici modu devre dışı bırakıldı", + "clipboardIsEmpty": "Pano boş", + "contactImported": "Kişi içe aktarıldı", + "contactLinkCopiedToClipboard": "Kişi bağlantısı panoya kopyalandı", + "failedToExportContact": "Kişi dışa aktarılamadı", + "noLogsToExport": "Dışa aktarılacak günlük yok", + "exportAsCsv": "CSV olarak dışa aktar", + "exportAsText": "Metin olarak dışa aktar", + "receivedRfc3339": "Alındı (RFC3339)", + "buildTime": "Derleme zamanı", + "downloadUrlNotAvailable": "İndirme URL'si mevcut değil", + "cannotOpenDownloadUrl": "İndirme URL'si açılamıyor", + "updateCheckIsOnlyAvailableOnAndroid": "Güncelleme kontrolü yalnızca Android'de kullanılabilir", + "youAreRunningTheLatestVersion": "En son sürümü kullanıyorsunuz", + "updateAvailableButDownloadUrlNotFound": "Güncelleme mevcut ancak indirme URL'si bulunamadı", + "startTictactoe": "Tic-Tac-Toe başlat", + "tictactoeUnavailable": "Tic-Tac-Toe kullanılamıyor", + "tictactoeOpponentUnknown": "Tic-Tac-Toe: rakip bilinmiyor", + "tictactoeWaitingForStart": "Tic-Tac-Toe: başlangıç bekleniyor", + "acceptsShareLinks": "Paylaşım bağlantılarını kabul eder", + "supportsRawHex": "Ham hex destekler", + "clipboardfriendly": "Pano dostu", + "captured": "Yakalandı", + "size": "Boyut", + "noCustomChannelsToClear": "Temizlenecek özel kanal yok.", + "noDeviceContactsToClear": "Temizlenecek cihaz kişisi yok." } diff --git a/lib/l10n/app_uk.arb b/lib/l10n/app_uk.arb index 8bd83d1..5574570 100644 --- a/lib/l10n/app_uk.arb +++ b/lib/l10n/app_uk.arb @@ -2328,5 +2328,252 @@ "contactFailedToClearRoute": "Не вдалося очистити маршрут: {error}", "contactRouteCleared": "Маршрут очищено", "contactRouteSet": "Маршрут задано: {route}", - "contactFailedToSetRoute": "Не вдалося задати маршрут: {error}" + "contactFailedToSetRoute": "Не вдалося задати маршрут: {error}", + "rssi": "RSSI", + "snr": "SNR", + "ackTimeout": "Тайм-аут ACK", + "opcode": "Опкод", + "payload": "Корисне навантаження", + "hops": "Хопи", + "hashSize": "Розмір хешу", + "pathBytes": "Байти шляху", + "selectedPath": "Обраний шлях", + "estimatedTx": "Очікувана передача", + "senderToReceipt": "Від відправника до отримання", + "receivedCopies": "Отримані копії", + "retryCause": "Причина повтору", + "retryMode": "Режим повтору", + "retryResult": "Результат повтору", + "lastRetry": "Остання спроба", + "rxPackets": "RX-пакети", + "mesh": "Mesh", + "rate": "Швидкість", + "window": "Вікно", + "posttxDelay": "Затримка після передачі", + "bandpass": "Смуговий", + "bandpassFilterVoice": "Смуговий фільтр голосу", + "frequency": "Частота", + "australia": "Австралія", + "australiaNarrow": "Австралія (Вузький)", + "australiaQld": "Австралія: QLD", + "australiaSaWa": "Австралія: SA, WA", + "newZealand": "Нова Зеландія", + "newZealandNarrow": "Нова Зеландія (Вузький)", + "switzerland": "Швейцарія", + "portugal433": "Португалія 433", + "portugal868": "Португалія 868", + "czechRepublicNarrow": "Чехія (Вузький)", + "eu433mhzLongRange": "ЄС 433МГц (Далекий)", + "euukDeprecated": "ЄС/Великобританія (Застаріле)", + "euukNarrow": "ЄС/Великобританія (Вузький)", + "usacanadaRecommended": "США/Канада (Рекомендовано)", + "vietnamDeprecated": "В'єтнам (Застаріле)", + "vietnamNarrow": "В'єтнам (Вузький)", + "active": "Активно", + "addContact": "Додати контакт", + "all": "Усі", + "autoResolve": "Автоматичне вирішення", + "clearAllLabel": "Очистити все", + "clearRelays": "Очистити реле", + "clearFilters": "Очистити фільтри", + "clearRoute": "Очистити маршрут", + "clearMessages": "Очистити повідомлення", + "clearScale": "Очистити масштаб", + "clearDiscoveries": "Очистити виявлення", + "clearOnlineTraceDatabase": "Очистити базу трасувань", + "clearAllChannels": "Очистити всі канали", + "clearAllContacts": "Очистити всі контакти", + "clearChannels": "Очистити канали", + "clearContacts": "Очистити контакти", + "clearPathOnMaxRetry": "Очистити шлях при макс. спробі", + "create": "Створити", + "custom": "Користувацький", + "defaultValue": "За замовчуванням", + "duplicate": "Дублювати", + "editName": "Редагувати ім'я", + "open": "Відкрити", + "paste": "Вставити", + "preview": "Попередній перегляд", + "remove": "Видалити", + "rename": "Перейменувати", + "resolveAll": "Вирішити все", + "send": "Надіслати", + "sendAnyway": "Надіслати все одно", + "share": "Поділитися", + "shareContact": "Поділитися контактом", + "trace": "Трасування", + "use": "Використати", + "useSelectedFrequency": "Використати обрану частоту", + "discovery": "Виявлення", + "discoverRepeaters": "Виявити повторювачі", + "discoverSensors": "Виявити датчики", + "repeaterDiscoverySent": "Виявлення повторювачів надіслано", + "sensorDiscoverySent": "Виявлення датчиків надіслано", + "clearedPendingDiscoveries": "Очікувані виявлення очищено.", + "autoDiscovery": "Автоматичне виявлення", + "enableAutomaticAdding": "Увімкнути автоматичне додавання", + "autoaddRepeaters": "Автододавання повторювачів", + "autoaddRoomServers": "Автододавання серверів кімнат", + "autoaddSensors": "Автододавання датчиків", + "autoaddUsers": "Автододавання користувачів", + "overwriteOldestWhenFull": "Перезаписати найстаріші при заповненні", + "storage": "Сховище", + "dangerZone": "Небезпечна зона", + "profiles": "Профілі", + "favourites": "Обране", + "sensors": "Датчики", + "others": "Інші", + "gpsModule": "Модуль GPS", + "liveTraffic": "Живий трафік", + "repeatersMap": "Карта повторювачів", + "spectrumScan": "Сканування спектру", + "blePacketLogs": "Журнали BLE-пакетів", + "onlineTraceDatabase": "База трасувань", + "routePathByteSize": "Розмір шляху в байтах", + "messageNotifications": "Сповіщення про повідомлення", + "sarAlerts": "SAR-сповіщення", + "discoveryNotifications": "Сповіщення про виявлення", + "updateNotifications": "Сповіщення про оновлення", + "muteWhileAppIsOpen": "Без звуку при відкритому додатку", + "disableContacts": "Вимкнути контакти", + "enableSensorsTab": "Увімкнути вкладку Датчики", + "enableProfiles": "Увімкнути профілі", + "autoRouteRotation": "Автоматична ротація маршруту", + "nearestRepeaterFallback": "Найближчий повторювач як резерв", + "deleteAllStoredMessageHistory": "Видалити всю історію повідомлень", + "messageFontSize": "Розмір шрифту повідомлень", + "rotateMapWithHeading": "Обертати карту за напрямком", + "showMapDebugInfo": "Показати налагоджувальну інфо карти", + "openMapInFullscreen": "Відкрити карту на повний екран", + "showSarMarkersLabel": "Показати SAR-маркери", + "displaySarMarkersOnTheMainMap": "Показувати SAR-маркери на головній карті", + "showAllContactTrailsLabel": "Показати всі сліди контактів", + "hideRepeatersOnMap": "Сховати повторювачі на карті", + "setMapScale": "Встановити масштаб карти", + "customMapScaleSaved": "Користувацький масштаб карти збережено", + "voiceBitrate": "Бітрейт голосу", + "voiceCompressor": "Компресор голосу", + "balancesQuietAndLoudSpeechLevels": "Вирівнює тихий і гучний рівні мови", + "voiceLimiter": "Лімітер голосу", + "preventsClippingPeaksBeforeEncoding": "Запобігає обрізанню піків перед кодуванням", + "micAutoGain": "Автопідсилення мікрофона", + "letsTheRecorderAdjustInputLevel": "Дозволяє рекордеру налаштувати рівень входу", + "echoCancellation": "Придушення ехо", + "noiseSuppression": "Придушення шуму", + "trimSilenceInVoiceMessages": "Обрізати тишу в голосових повідомленнях", + "compressor": "Компресор", + "limiter": "Лімітер", + "autoGain": "Автопідсилення", + "echoCancel": "Ехо", + "noiseSuppress": "Шум", + "silenceTrim": "Тиша", + "maxImageSize": "Максимальний розмір зображення", + "imageCompression": "Стиснення зображення", + "grayscale": "Відтінки сірого", + "ultraMode": "Ультра режим", + "fastPrivateGpsUpdates": "Швидкі приватні GPS-оновлення", + "movementThreshold": "Поріг руху", + "fastGpsMovementThreshold": "Поріг руху швидкого GPS", + "fastGpsActiveuseInterval": "Інтервал активного використання швидкого GPS", + "activeuseUpdateInterval": "Інтервал оновлення при активному використанні", + "repeatNearbyTraffic": "Повторювати близький трафік", + "relayThroughRepeatersAcrossTheMesh": "Ретранслювати через повторювачі по мережі", + "nearbyOnlyWithoutRepeaterFlooding": "Лише поблизу, без flood повторювачів", + "multihop": "Багатохоповий", + "createProfile": "Створити профіль", + "renameProfile": "Перейменувати профіль", + "newProfile": "Новий профіль", + "manageProfiles": "Керувати профілями", + "enableProfilesToStartManagingThem": "Увімкніть профілі, щоб почати керувати ними.", + "openMessage": "Відкрити повідомлення", + "jumpToTheRelatedSarMessage": "Перейти до пов'язаного SAR-повідомлення", + "removeSarMarker": "Видалити SAR-маркер", + "pleaseSelectADestinationToSendSarMarker": "Виберіть призначення для надсилання SAR-маркера", + "sarMarkerBroadcastToPublicChannel": "SAR-маркер надіслано на публічний канал", + "sarMarkerSentToRoom": "SAR-маркер надіслано в кімнату", + "loadFromGallery": "Завантажити з галереї", + "replaceImage": "Замінити зображення", + "selectFromGallery": "Вибрати з галереї", + "team": "Команда", + "found": "Знайдено", + "staging": "Місце збору", + "object": "Об'єкт", + "quiet": "Тихо", + "moderate": "Помірно", + "busy": "Зайнято", + "spectrumScanReturnedNoCandidateFrequencies": "Сканування спектру не знайшло частот-кандидатів", + "searchMessages": "Пошук повідомлень", + "sendImageFromGallery": "Надіслати зображення з галереї", + "takePhoto": "Зробити фото", + "dmOnly": "Лише особисті повідомлення", + "allMessages": "Усі повідомлення", + "sendToPublicChannel": "Надіслати в публічний канал?", + "selectMarkerTypeAndDestination": "Виберіть тип маркера та призначення", + "noDestinationsAvailableLabel": "Немає доступних призначень", + "image": "Зображення", + "format": "Формат", + "dimensions": "Розміри", + "segments": "Сегменти", + "transfers": "Передачі", + "downloadedBy": "Завантажено", + "saveDiscoverySettings": "Зберегти налаштування виявлення", + "savePublicInfo": "Зберегти публічну інформацію", + "saveRadioSettings": "Зберегти налаштування радіо", + "savePath": "Зберегти шлях", + "wipeDeviceData": "Стерти дані пристрою", + "wipeDevice": "Стерти пристрій", + "destructiveDeviceActions": "Деструктивні дії пристрою.", + "chooseAPresetOrFinetuneCustomRadioSettings": "Оберіть пресет або налаштуйте радіо вручну.", + "chooseTheNameAndLocationThisDeviceShares": "Оберіть ім'я та місцеположення, якими ділиться пристрій.", + "availableSpaceOnThisDevice": "Доступний простір на цьому пристрої.", + "used": "Використано", + "total": "Загалом", + "renameValue": "Перейменувати значення", + "customizeFields": "Налаштувати поля", + "livePreview": "Попередній перегляд наживо", + "refreshSchedule": "Розклад оновлення", + "noResponse": "Немає відповіді", + "refreshing": "Оновлення", + "unavailable": "Недоступно", + "pickARelayOrNodeToWatchInSensors": "Оберіть реле або вузол для спостереження.", + "publicKeyLabel": "Публічний ключ", + "alreadyInContacts": "Вже в контактах", + "connectToADeviceBeforeAddingContacts": "Підключіться до пристрою перед додаванням контактів", + "fromContacts": "З контактів", + "onlineOnly": "Лише онлайн", + "inBoth": "В обох", + "source": "Джерело", + "manualRouteEdit": "Ручне редагування маршруту", + "observedMeshRoute": "Спостережуваний mesh-маршрут", + "allMessagesCleared": "Усі повідомлення очищено", + "onlineTraceDatabaseCleared": "Базу трасувань очищено", + "packetLogsCleared": "Журнали пакетів очищено", + "hexDataCopiedToClipboard": "Hex-дані скопійовано в буфер", + "developerModeEnabled": "Режим розробника увімкнено", + "developerModeDisabled": "Режим розробника вимкнено", + "clipboardIsEmpty": "Буфер обміну порожній", + "contactImported": "Контакт імпортовано", + "contactLinkCopiedToClipboard": "Посилання на контакт скопійовано в буфер", + "failedToExportContact": "Не вдалося експортувати контакт", + "noLogsToExport": "Немає журналів для експорту", + "exportAsCsv": "Експортувати як CSV", + "exportAsText": "Експортувати як текст", + "receivedRfc3339": "Отримано (RFC3339)", + "buildTime": "Час збірки", + "downloadUrlNotAvailable": "URL завантаження недоступний", + "cannotOpenDownloadUrl": "Не вдається відкрити URL завантаження", + "updateCheckIsOnlyAvailableOnAndroid": "Перевірка оновлень доступна лише на Android", + "youAreRunningTheLatestVersion": "Ви використовуєте останню версію", + "updateAvailableButDownloadUrlNotFound": "Оновлення доступне, але URL завантаження не знайдено", + "startTictactoe": "Почати Tic-Tac-Toe", + "tictactoeUnavailable": "Tic-Tac-Toe недоступно", + "tictactoeOpponentUnknown": "Tic-Tac-Toe: суперник невідомий", + "tictactoeWaitingForStart": "Tic-Tac-Toe: очікування початку", + "acceptsShareLinks": "Приймає посилання для обміну", + "supportsRawHex": "Підтримує raw hex", + "clipboardfriendly": "Зручно для буфера", + "captured": "Захоплено", + "size": "Розмір", + "noCustomChannelsToClear": "Немає користувацьких каналів для очищення.", + "noDeviceContactsToClear": "Немає контактів пристрою для очищення." } diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 2d60891..5674dd3 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -2228,80 +2228,55 @@ "description": "没有可发送的聊天联系人时的消息" }, "reply": "回复", - "@reply": { - }, + "@reply": {}, "technicalDetails": "技术细节", - "@technicalDetails": { - }, + "@technicalDetails": {}, "messageTechnicalDetails": "消息技术细节", - "@messageTechnicalDetails": { - }, + "@messageTechnicalDetails": {}, "linkQuality": "链路质量", - "@linkQuality": { - }, + "@linkQuality": {}, "delivery": "投递", - "@delivery": { - }, + "@delivery": {}, "status": "状态", - "@status": { - }, + "@status": {}, "expectedAckTag": "预期的 ACK 标签", - "@expectedAckTag": { - }, + "@expectedAckTag": {}, "roundTrip": "往返时间", - "@roundTrip": { - }, + "@roundTrip": {}, "retryAttempt": "重试尝试", - "@retryAttempt": { - }, + "@retryAttempt": {}, "floodFallback": "泛洪回退", - "@floodFallback": { - }, + "@floodFallback": {}, "identity": "身份", - "@identity": { - }, + "@identity": {}, "messageId": "消息 ID", - "@messageId": { - }, + "@messageId": {}, "sender": "发送者", - "@sender": { - }, + "@sender": {}, "senderKey": "发送者密钥", - "@senderKey": { - }, + "@senderKey": {}, "recipient": "接收者", - "@recipient": { - }, + "@recipient": {}, "recipientKey": "接收者密钥", - "@recipientKey": { - }, + "@recipientKey": {}, "voice": "语音", - "@voice": { - }, + "@voice": {}, "voiceId": "语音 ID", - "@voiceId": { - }, + "@voiceId": {}, "envelope": "信封", - "@envelope": { - }, + "@envelope": {}, "sessionProgress": "会话进度", - "@sessionProgress": { - }, + "@sessionProgress": {}, "complete": "完成", - "@complete": { - }, + "@complete": {}, "rawDump": "原始数据", - "@rawDump": { - }, + "@rawDump": {}, "cannotRetryMissingRecipient": "无法重试:缺少接收者信息", - "@cannotRetryMissingRecipient": { - }, + "@cannotRetryMissingRecipient": {}, "voiceUnavailable": "当前语音不可用", - "@voiceUnavailable": { - }, + "@voiceUnavailable": {}, "requestingVoice": "正在请求语音", - "@requestingVoice": { - }, + "@requestingVoice": {}, "device": "设备", "change": "更改", "wizardOverviewDescription": "此应用将 MeshCore 消息、SAR 现场更新、地图功能和设备工具整合到同一处。", @@ -2353,5 +2328,252 @@ "contactFailedToClearRoute": "清除路由失败:{error}", "contactRouteCleared": "路由已清除", "contactRouteSet": "路由已设置:{route}", - "contactFailedToSetRoute": "设置路由失败:{error}" + "contactFailedToSetRoute": "设置路由失败:{error}", + "rssi": "RSSI", + "snr": "SNR", + "ackTimeout": "ACK 超时", + "opcode": "操作码", + "payload": "有效载荷", + "hops": "跳数", + "hashSize": "哈希大小", + "pathBytes": "路径字节", + "selectedPath": "选定路径", + "estimatedTx": "预计传输", + "senderToReceipt": "发送到接收", + "receivedCopies": "收到的副本", + "retryCause": "重试原因", + "retryMode": "重试模式", + "retryResult": "重试结果", + "lastRetry": "最后重试", + "rxPackets": "RX 数据包", + "mesh": "Mesh", + "rate": "速率", + "window": "窗口", + "posttxDelay": "发送后延迟", + "bandpass": "带通", + "bandpassFilterVoice": "带通语音滤波", + "frequency": "频率", + "australia": "澳大利亚", + "australiaNarrow": "澳大利亚(窄带)", + "australiaQld": "澳大利亚:QLD", + "australiaSaWa": "澳大利亚:SA, WA", + "newZealand": "新西兰", + "newZealandNarrow": "新西兰(窄带)", + "switzerland": "瑞士", + "portugal433": "葡萄牙 433", + "portugal868": "葡萄牙 868", + "czechRepublicNarrow": "捷克(窄带)", + "eu433mhzLongRange": "欧盟 433MHz(远距离)", + "euukDeprecated": "欧盟/英国(已弃用)", + "euukNarrow": "欧盟/英国(窄带)", + "usacanadaRecommended": "美国/加拿大(推荐)", + "vietnamDeprecated": "越南(已弃用)", + "vietnamNarrow": "越南(窄带)", + "active": "活动", + "addContact": "添加联系人", + "all": "全部", + "autoResolve": "自动解析", + "clearAllLabel": "清除全部", + "clearRelays": "清除中继", + "clearFilters": "清除过滤器", + "clearRoute": "清除路由", + "clearMessages": "清除消息", + "clearScale": "清除比例", + "clearDiscoveries": "清除发现", + "clearOnlineTraceDatabase": "清除在线追踪数据库", + "clearAllChannels": "清除所有频道", + "clearAllContacts": "清除所有联系人", + "clearChannels": "清除频道", + "clearContacts": "清除联系人", + "clearPathOnMaxRetry": "最大重试时清除路径", + "create": "创建", + "custom": "自定义", + "defaultValue": "默认", + "duplicate": "复制", + "editName": "编辑名称", + "open": "打开", + "paste": "粘贴", + "preview": "预览", + "remove": "移除", + "rename": "重命名", + "resolveAll": "解析全部", + "send": "发送", + "sendAnyway": "仍然发送", + "share": "分享", + "shareContact": "分享联系人", + "trace": "追踪", + "use": "使用", + "useSelectedFrequency": "使用选定频率", + "discovery": "发现", + "discoverRepeaters": "发现中继器", + "discoverSensors": "发现传感器", + "repeaterDiscoverySent": "中继器发现已发送", + "sensorDiscoverySent": "传感器发现已发送", + "clearedPendingDiscoveries": "已清除待处理的发现。", + "autoDiscovery": "自动发现", + "enableAutomaticAdding": "启用自动添加", + "autoaddRepeaters": "自动添加中继器", + "autoaddRoomServers": "自动添加房间服务器", + "autoaddSensors": "自动添加传感器", + "autoaddUsers": "自动添加用户", + "overwriteOldestWhenFull": "满时覆盖最旧的", + "storage": "存储", + "dangerZone": "危险区域", + "profiles": "配置文件", + "favourites": "收藏夹", + "sensors": "传感器", + "others": "其他", + "gpsModule": "GPS 模块", + "liveTraffic": "实时流量", + "repeatersMap": "中继器地图", + "spectrumScan": "频谱扫描", + "blePacketLogs": "BLE 数据包日志", + "onlineTraceDatabase": "在线追踪数据库", + "routePathByteSize": "路由路径字节大小", + "messageNotifications": "消息通知", + "sarAlerts": "SAR 警报", + "discoveryNotifications": "发现通知", + "updateNotifications": "更新通知", + "muteWhileAppIsOpen": "应用打开时静音", + "disableContacts": "禁用联系人", + "enableSensorsTab": "启用传感器标签", + "enableProfiles": "启用配置文件", + "autoRouteRotation": "自动路由轮换", + "nearestRepeaterFallback": "最近中继器回退", + "deleteAllStoredMessageHistory": "删除所有存储的消息历史", + "messageFontSize": "消息字体大小", + "rotateMapWithHeading": "随航向旋转地图", + "showMapDebugInfo": "显示地图调试信息", + "openMapInFullscreen": "全屏打开地图", + "showSarMarkersLabel": "显示 SAR 标记", + "displaySarMarkersOnTheMainMap": "在主地图上显示 SAR 标记", + "showAllContactTrailsLabel": "显示所有联系人轨迹", + "hideRepeatersOnMap": "在地图上隐藏中继器", + "setMapScale": "设置地图比例", + "customMapScaleSaved": "自定义地图比例已保存", + "voiceBitrate": "语音比特率", + "voiceCompressor": "语音压缩器", + "balancesQuietAndLoudSpeechLevels": "平衡安静和响亮的语音级别", + "voiceLimiter": "语音限制器", + "preventsClippingPeaksBeforeEncoding": "防止编码前的削波", + "micAutoGain": "麦克风自动增益", + "letsTheRecorderAdjustInputLevel": "让录音器调整输入级别", + "echoCancellation": "回声消除", + "noiseSuppression": "噪音抑制", + "trimSilenceInVoiceMessages": "修剪语音消息中的静音", + "compressor": "压缩器", + "limiter": "限制器", + "autoGain": "自动增益", + "echoCancel": "回声", + "noiseSuppress": "噪声", + "silenceTrim": "静音", + "maxImageSize": "最大图片大小", + "imageCompression": "图片压缩", + "grayscale": "灰度", + "ultraMode": "超级模式", + "fastPrivateGpsUpdates": "快速私有 GPS 更新", + "movementThreshold": "移动阈值", + "fastGpsMovementThreshold": "快速 GPS 移动阈值", + "fastGpsActiveuseInterval": "快速 GPS 活动使用间隔", + "activeuseUpdateInterval": "活动使用更新间隔", + "repeatNearbyTraffic": "转发附近流量", + "relayThroughRepeatersAcrossTheMesh": "通过网格中的中继器转发", + "nearbyOnlyWithoutRepeaterFlooding": "仅附近,无中继器泛洪", + "multihop": "多跳", + "createProfile": "创建配置文件", + "renameProfile": "重命名配置文件", + "newProfile": "新配置文件", + "manageProfiles": "管理配置文件", + "enableProfilesToStartManagingThem": "启用配置文件以开始管理它们。", + "openMessage": "打开消息", + "jumpToTheRelatedSarMessage": "跳转到相关的 SAR 消息", + "removeSarMarker": "移除 SAR 标记", + "pleaseSelectADestinationToSendSarMarker": "请选择目标以发送 SAR 标记", + "sarMarkerBroadcastToPublicChannel": "SAR 标记已广播到公共频道", + "sarMarkerSentToRoom": "SAR 标记已发送到房间", + "loadFromGallery": "从图库加载", + "replaceImage": "替换图片", + "selectFromGallery": "从图库选择", + "team": "团队", + "found": "已找到", + "staging": "集结区", + "object": "物体", + "quiet": "安静", + "moderate": "中等", + "busy": "繁忙", + "spectrumScanReturnedNoCandidateFrequencies": "频谱扫描未找到候选频率", + "searchMessages": "搜索消息", + "sendImageFromGallery": "从图库发送图片", + "takePhoto": "拍照", + "dmOnly": "仅私信", + "allMessages": "所有消息", + "sendToPublicChannel": "发送到公共频道?", + "selectMarkerTypeAndDestination": "选择标记类型和目标", + "noDestinationsAvailableLabel": "没有可用的目标", + "image": "图片", + "format": "格式", + "dimensions": "尺寸", + "segments": "分段", + "transfers": "传输", + "downloadedBy": "已下载", + "saveDiscoverySettings": "保存发现设置", + "savePublicInfo": "保存公共信息", + "saveRadioSettings": "保存无线电设置", + "savePath": "保存路径", + "wipeDeviceData": "擦除设备数据", + "wipeDevice": "擦除设备", + "destructiveDeviceActions": "破坏性设备操作。", + "chooseAPresetOrFinetuneCustomRadioSettings": "选择预设或微调自定义无线电设置。", + "chooseTheNameAndLocationThisDeviceShares": "选择此设备共享的名称和位置。", + "availableSpaceOnThisDevice": "此设备上的可用空间。", + "used": "已使用", + "total": "总计", + "renameValue": "重命名值", + "customizeFields": "自定义字段", + "livePreview": "实时预览", + "refreshSchedule": "刷新计划", + "noResponse": "无响应", + "refreshing": "刷新中", + "unavailable": "不可用", + "pickARelayOrNodeToWatchInSensors": "选择要在传感器中监视的中继或节点。", + "publicKeyLabel": "公钥", + "alreadyInContacts": "已在联系人中", + "connectToADeviceBeforeAddingContacts": "添加联系人前请连接到设备", + "fromContacts": "来自联系人", + "onlineOnly": "仅在线", + "inBoth": "两者中", + "source": "来源", + "manualRouteEdit": "手动路由编辑", + "observedMeshRoute": "观察到的网格路由", + "allMessagesCleared": "所有消息已清除", + "onlineTraceDatabaseCleared": "在线追踪数据库已清除", + "packetLogsCleared": "数据包日志已清除", + "hexDataCopiedToClipboard": "十六进制数据已复制到剪贴板", + "developerModeEnabled": "开发者模式已启用", + "developerModeDisabled": "开发者模式已禁用", + "clipboardIsEmpty": "剪贴板为空", + "contactImported": "联系人已导入", + "contactLinkCopiedToClipboard": "联系人链接已复制到剪贴板", + "failedToExportContact": "导出联系人失败", + "noLogsToExport": "没有日志可导出", + "exportAsCsv": "导出为 CSV", + "exportAsText": "导出为文本", + "receivedRfc3339": "收到 (RFC3339)", + "buildTime": "构建时间", + "downloadUrlNotAvailable": "下载链接不可用", + "cannotOpenDownloadUrl": "无法打开下载链接", + "updateCheckIsOnlyAvailableOnAndroid": "更新检查仅在 Android 上可用", + "youAreRunningTheLatestVersion": "您正在使用最新版本", + "updateAvailableButDownloadUrlNotFound": "有更新可用但未找到下载链接", + "startTictactoe": "开始井字棋", + "tictactoeUnavailable": "井字棋不可用", + "tictactoeOpponentUnknown": "井字棋:对手未知", + "tictactoeWaitingForStart": "井字棋:等待开始", + "acceptsShareLinks": "接受分享链接", + "supportsRawHex": "支持原始十六进制", + "clipboardfriendly": "剪贴板友好", + "captured": "已捕获", + "size": "大小", + "noCustomChannelsToClear": "没有自定义频道可清除。", + "noDeviceContactsToClear": "没有设备联系人可清除。" } diff --git a/lib/models/contact.dart b/lib/models/contact.dart index 4473fdd..848ecc9 100644 --- a/lib/models/contact.dart +++ b/lib/models/contact.dart @@ -141,6 +141,23 @@ class ContactRouteCodec { ); } + static ParsedContactRoute direct({int hashSize = 1}) { + if (hashSize < 1 || hashSize > maxHashSize) { + throw ArgumentError.value(hashSize, 'hashSize', 'Must be 1, 2, or 3.'); + } + + final encodedPathLen = (hashSize - 1) << 6; + return ParsedContactRoute( + canonicalText: '', + hashSize: hashSize, + hopCount: 0, + encodedPathLen: encodedPathLen, + signedEncodedPathLen: toSignedDescriptor(encodedPathLen), + pathBytes: Uint8List(0), + paddedPathBytes: Uint8List(maxPathBytes), + ); + } + static ParsedContactRoute? fromContact(Contact contact) { if (!contact.routeHasPath || contact.routeHopCount == 0) { return null; diff --git a/lib/screens/add_contact_screen.dart b/lib/screens/add_contact_screen.dart index 4c7a0d3..1e3cdfc 100644 --- a/lib/screens/add_contact_screen.dart +++ b/lib/screens/add_contact_screen.dart @@ -3,6 +3,7 @@ import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; import '../providers/connection_provider.dart'; +import '../l10n/app_localizations.dart'; class AddContactScreen extends StatefulWidget { const AddContactScreen({super.key}); @@ -80,7 +81,7 @@ class _AddContactScreenState extends State { if (!mounted) return; ScaffoldMessenger.of( context, - ).showSnackBar(const SnackBar(content: Text('Clipboard is empty'))); + ).showSnackBar(SnackBar(content: Text(AppLocalizations.of(context)!.clipboardIsEmpty))); return; } @@ -141,7 +142,7 @@ class _AddContactScreenState extends State { ScaffoldMessenger.of( context, - ).showSnackBar(const SnackBar(content: Text('Contact imported'))); + ).showSnackBar(SnackBar(content: Text(AppLocalizations.of(context)!.contactImported))); setState(() { _importSucceeded = true; }); @@ -154,7 +155,7 @@ class _AddContactScreenState extends State { final colorScheme = theme.colorScheme; return Scaffold( - appBar: AppBar(title: const Text('Add Contact')), + appBar: AppBar(title: Text(AppLocalizations.of(context)!.addContact)), body: ListView( padding: const EdgeInsets.all(16), children: [ @@ -205,18 +206,18 @@ class _AddContactScreenState extends State { Wrap( spacing: 8, runSpacing: 8, - children: const [ + children: [ _ImportHintChip( icon: Icons.link_outlined, - label: 'Accepts share links', + label: AppLocalizations.of(context)!.acceptsShareLinks, ), _ImportHintChip( icon: Icons.code_outlined, - label: 'Supports raw hex', + label: AppLocalizations.of(context)!.supportsRawHex, ), _ImportHintChip( icon: Icons.content_paste_go_outlined, - label: 'Clipboard-friendly', + label: AppLocalizations.of(context)!.clipboardfriendly, ), ], ), @@ -285,8 +286,8 @@ class _AddContactScreenState extends State { ), TextButton.icon( onPressed: _isImporting ? null : _pasteFromClipboard, - icon: const Icon(Icons.content_paste_go_outlined), - label: const Text('Paste'), + icon: Icon(Icons.content_paste_go_outlined), + label: Text(AppLocalizations.of(context)!.paste), ), ], ), diff --git a/lib/screens/contacts_tab.dart b/lib/screens/contacts_tab.dart index bab45c1..e3d5b53 100644 --- a/lib/screens/contacts_tab.dart +++ b/lib/screens/contacts_tab.dart @@ -493,7 +493,7 @@ class _ContactsTabState extends State { mainAxisSize: MainAxisSize.min, children: [ ListTile( - leading: const Icon(Icons.message_outlined), + leading: Icon(Icons.message_outlined), title: Text(l10n.messages), onTap: () async { Navigator.pop(sheetContext); @@ -502,7 +502,7 @@ class _ContactsTabState extends State { ), if (channel.displayLocation != null) ListTile( - leading: const Icon(Icons.map_outlined), + leading: Icon(Icons.map_outlined), title: Text(l10n.viewOnMap), onTap: () { Navigator.pop(sheetContext); @@ -511,7 +511,7 @@ class _ContactsTabState extends State { ), if (!channel.isPublicChannel) ListTile( - leading: const Icon(Icons.delete, color: Colors.red), + leading: Icon(Icons.delete, color: Colors.red), title: Text( l10n.deleteChannel, style: const TextStyle(color: Colors.red), @@ -655,12 +655,12 @@ class _ContactsTabState extends State { size: 64, color: Theme.of(context).disabledColor, ), - const SizedBox(height: 16), + SizedBox(height: 16), Text( l10n.noContactsYet, style: Theme.of(context).textTheme.titleLarge, ), - const SizedBox(height: 8), + SizedBox(height: 8), Text( l10n.connectToDeviceToLoadContacts, style: Theme.of(context).textTheme.bodyMedium, @@ -674,8 +674,8 @@ class _ContactsTabState extends State { padding: const EdgeInsets.only(top: 16), child: OutlinedButton.icon( onPressed: () => _openAddContactScreen(context), - icon: const Icon(Icons.person_add_alt_1_outlined), - label: const Text('Add Contact'), + icon: Icon(Icons.person_add_alt_1_outlined), + label: Text(l10n.addContact), ), ), ], @@ -691,7 +691,7 @@ class _ContactsTabState extends State { // Favourites (contacts with firmware favourite flag set) if (contactsProvider.favouriteContacts.isNotEmpty) ...[ _SectionHeader( - title: 'Favourites', + title: l10n.favourites, count: contactsProvider.favouriteContacts.length, icon: Icons.star, ), @@ -766,8 +766,8 @@ class _ContactsTabState extends State { .read() .discoverNodeType(advertType: 2); ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Repeater discovery sent'), + SnackBar( + content: Text(l10n.repeaterDiscoverySent), ), ); }, @@ -802,7 +802,7 @@ class _ContactsTabState extends State { _buildNoFilterResults(context) else if (showRepeatersOthersGroup) _InferredContactGroupCard( - label: 'Others', + label: l10n.others, contacts: ungroupedRepeaters, compactContacts: true, currentPosition: _currentPosition, @@ -822,7 +822,7 @@ class _ContactsTabState extends State { // Sensors if (showSensorsSection) ...[ _SectionHeader( - title: 'Sensors', + title: l10n.sensors, count: sensors.length, icon: Icons.sensors, trailing: Row( @@ -841,8 +841,8 @@ class _ContactsTabState extends State { .read() .discoverNodeType(advertType: 4); ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Sensor discovery sent'), + SnackBar( + content: Text(l10n.sensorDiscoverySent), ), ); }, @@ -946,8 +946,8 @@ class _ContactsTabState extends State { Expanded( child: OutlinedButton.icon( onPressed: () => _openAddContactScreen(context), - icon: const Icon(Icons.person_add_alt_1_outlined), - label: const Text('Add Contact'), + icon: Icon(Icons.person_add_alt_1_outlined), + label: Text(l10n.addContact), style: OutlinedButton.styleFrom( padding: const EdgeInsets.symmetric( horizontal: 24, @@ -960,7 +960,7 @@ class _ContactsTabState extends State { Expanded( child: OutlinedButton.icon( onPressed: () => _showAddChannelDialog(context), - icon: const Icon(Icons.add_circle_outline), + icon: Icon(Icons.add_circle_outline), label: Text(l10n.addChannel), style: OutlinedButton.styleFrom( padding: const EdgeInsets.symmetric( @@ -1285,7 +1285,7 @@ class _ContactsTabState extends State { ? colorScheme.primary : null, ), - const SizedBox(width: 8), + SizedBox(width: 8), Text(l10n.lastSeen), ], ), @@ -1301,7 +1301,7 @@ class _ContactsTabState extends State { ? colorScheme.primary : null, ), - const SizedBox(width: 8), + SizedBox(width: 8), Text(l10n.distance), ], ), diff --git a/lib/screens/device_config_screen.dart b/lib/screens/device_config_screen.dart index a43f326..99eef9a 100644 --- a/lib/screens/device_config_screen.dart +++ b/lib/screens/device_config_screen.dart @@ -827,7 +827,7 @@ class _DeviceConfigScreenState extends State { final confirmed = await showDialog( context: context, builder: (dialogContext) => AlertDialog( - title: const Text('Wipe device data'), + title: Text(AppLocalizations.of(context)!.wipeDeviceData), content: const Text( 'This will erase all data on the connected device, including contacts, keys, and saved settings. This cannot be undone.', ), @@ -842,7 +842,7 @@ class _DeviceConfigScreenState extends State { foregroundColor: Theme.of(context).colorScheme.onError, ), onPressed: () => Navigator.of(dialogContext).pop(true), - child: const Text('Wipe device'), + child: Text(AppLocalizations.of(context)!.wipeDevice), ), ], ), @@ -893,7 +893,7 @@ class _DeviceConfigScreenState extends State { .toList(); if (contacts.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('No device contacts to clear.')), + SnackBar(content: Text(AppLocalizations.of(context)!.noDeviceContactsToClear)), ); return; } @@ -901,7 +901,7 @@ class _DeviceConfigScreenState extends State { final confirmed = await showDialog( context: context, builder: (dialogContext) => AlertDialog( - title: const Text('Clear all contacts'), + title: Text(AppLocalizations.of(context)!.clearAllContacts), content: Text( 'This will remove ${contacts.length} contact${contacts.length == 1 ? '' : 's'} from the connected device. Channels and radio settings will not be changed.', ), @@ -916,7 +916,7 @@ class _DeviceConfigScreenState extends State { foregroundColor: Theme.of(context).colorScheme.onError, ), onPressed: () => Navigator.of(dialogContext).pop(true), - child: const Text('Clear contacts'), + child: Text(AppLocalizations.of(context)!.clearContacts), ), ], ), @@ -988,7 +988,7 @@ class _DeviceConfigScreenState extends State { .toList(); if (channels.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('No custom channels to clear.')), + SnackBar(content: Text(AppLocalizations.of(context)!.noCustomChannelsToClear)), ); return; } @@ -996,7 +996,7 @@ class _DeviceConfigScreenState extends State { final confirmed = await showDialog( context: context, builder: (dialogContext) => AlertDialog( - title: const Text('Clear all channels'), + title: Text(AppLocalizations.of(context)!.clearAllChannels), content: Text( 'This will remove ${channels.length} custom channel${channels.length == 1 ? '' : 's'} from the connected device. Contacts and radio settings will not be changed.', ), @@ -1011,7 +1011,7 @@ class _DeviceConfigScreenState extends State { foregroundColor: Theme.of(context).colorScheme.onError, ), onPressed: () => Navigator.of(dialogContext).pop(true), - child: const Text('Clear channels'), + child: Text(AppLocalizations.of(context)!.clearChannels), ), ], ), @@ -1119,23 +1119,23 @@ class _DeviceConfigScreenState extends State { '${_getDeviceTypeString(context, deviceInfo.deviceType)} • ${deviceInfo.semanticVersion ?? deviceInfo.manufacturerModel ?? AppLocalizations.of(context)!.unknown}', stats: [ _HeroStatData( - label: 'Location', + label: AppLocalizations.of(context)!.location, value: locationSet ? 'Shared' : 'Hidden', icon: Icons.my_location_rounded, emphasized: locationSet, ), _HeroStatData( - label: 'Frequency', + label: AppLocalizations.of(context)!.frequency, value: '${_freqController.text} MHz', icon: Icons.settings_input_antenna_rounded, ), _HeroStatData( - label: 'Bandwidth', + label: AppLocalizations.of(context)!.bandwidth, value: _selectedBandwidth, icon: Icons.width_normal_rounded, ), _HeroStatData( - label: 'Model', + label: AppLocalizations.of(context)!.model, value: deviceInfo.manufacturerModel ?? AppLocalizations.of(context)!.unknown, @@ -1143,10 +1143,10 @@ class _DeviceConfigScreenState extends State { ), ], ), - const SizedBox(height: 20), + SizedBox(height: 20), _ConfigSectionCard( - title: 'Storage', - subtitle: 'Available space on this device.', + title: AppLocalizations.of(context)!.storage, + subtitle: AppLocalizations.of(context)!.availableSpaceOnThisDevice, icon: Icons.storage_rounded, child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -1155,16 +1155,16 @@ class _DeviceConfigScreenState extends State { children: [ Expanded( child: _StorageStat( - label: 'Used', + label: AppLocalizations.of(context)!.used, value: _formatStorage( deviceInfo.storageUsedKb ?? 0, ), ), ), - const SizedBox(width: 12), + SizedBox(width: 12), Expanded( child: _StorageStat( - label: 'Total', + label: AppLocalizations.of(context)!.total, value: deviceInfo.storageTotalKb != null ? _formatStorage(deviceInfo.storageTotalKb!) : AppLocalizations.of(context)!.unknown, @@ -1177,9 +1177,9 @@ class _DeviceConfigScreenState extends State { ], ), ), - const SizedBox(height: 20), + SizedBox(height: 20), _ConfigSectionCard( - title: 'Auto discovery', + title: AppLocalizations.of(context)!.autoDiscovery, subtitle: 'Control how the radio auto-adds discovered nodes to its contacts table.', icon: Icons.person_search_rounded, @@ -1190,7 +1190,7 @@ class _DeviceConfigScreenState extends State { icon: _autoAddDiscoveredContactsEnabled ? Icons.person_add_alt_1 : Icons.person_add_disabled, - title: 'Enable automatic adding', + title: AppLocalizations.of(context)!.enableAutomaticAdding, description: 'Turn this off to keep discoveries manual-only on the radio.', accentColor: _autoAddDiscoveredContactsEnabled @@ -1206,10 +1206,10 @@ class _DeviceConfigScreenState extends State { }, ), ), - const SizedBox(height: 18), + SizedBox(height: 18), _SettingHighlightCard( icon: Icons.person_outline_rounded, - title: 'Auto-add users', + title: AppLocalizations.of(context)!.autoaddUsers, description: 'Automatically store discovered user/chat nodes.', accentColor: _autoAddUsersEnabled @@ -1227,10 +1227,10 @@ class _DeviceConfigScreenState extends State { : null, ), ), - const SizedBox(height: 14), + SizedBox(height: 14), _SettingHighlightCard( icon: Icons.router_outlined, - title: 'Auto-add repeaters', + title: AppLocalizations.of(context)!.autoaddRepeaters, description: 'Automatically store discovered repeater nodes.', accentColor: _autoAddRepeatersEnabled @@ -1248,10 +1248,10 @@ class _DeviceConfigScreenState extends State { : null, ), ), - const SizedBox(height: 14), + SizedBox(height: 14), _SettingHighlightCard( icon: Icons.meeting_room_outlined, - title: 'Auto-add room servers', + title: AppLocalizations.of(context)!.autoaddRoomServers, description: 'Automatically store discovered room/server nodes.', accentColor: _autoAddRoomServersEnabled @@ -1269,10 +1269,10 @@ class _DeviceConfigScreenState extends State { : null, ), ), - const SizedBox(height: 14), + SizedBox(height: 14), _SettingHighlightCard( icon: Icons.sensors_outlined, - title: 'Auto-add sensors', + title: AppLocalizations.of(context)!.autoaddSensors, description: 'Automatically store discovered sensor nodes.', accentColor: _autoAddSensorsEnabled @@ -1290,10 +1290,10 @@ class _DeviceConfigScreenState extends State { : null, ), ), - const SizedBox(height: 14), + SizedBox(height: 14), _SettingHighlightCard( icon: Icons.history_toggle_off_rounded, - title: 'Overwrite oldest when full', + title: AppLocalizations.of(context)!.overwriteOldestWhenFull, description: 'Allow the radio to replace the oldest contact when storage is full.', accentColor: _overwriteOldestAutoAddEnabled @@ -1329,16 +1329,16 @@ class _DeviceConfigScreenState extends State { : _saveAutoDiscoverySettings, isSaving: _isSavingAutoDiscoverySettings, isSaved: _autoDiscoverySettingsSaved, - label: 'Save discovery settings', + label: AppLocalizations.of(context)!.saveDiscoverySettings, ), ), ], ), ), - const SizedBox(height: 20), + SizedBox(height: 20), _ConfigSectionCard( title: AppLocalizations.of(context)!.publicInfo, - subtitle: 'Choose the name and location this device shares.', + subtitle: AppLocalizations.of(context)!.chooseTheNameAndLocationThisDeviceShares, icon: Icons.public_rounded, child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -1371,7 +1371,7 @@ class _DeviceConfigScreenState extends State { icon: _gpsEnabled! ? Icons.gps_fixed : Icons.gps_off, - title: 'GPS Module', + title: AppLocalizations.of(context)!.gpsModule, description: 'Enable or disable the onboard GPS hardware.', accentColor: _gpsEnabled! @@ -1483,16 +1483,16 @@ class _DeviceConfigScreenState extends State { onPressed: _isSavingPublicInfo ? null : _savePublicInfo, isSaving: _isSavingPublicInfo, isSaved: _publicInfoSaved, - label: 'Save public info', + label: AppLocalizations.of(context)!.savePublicInfo, ), ), ], ), ), - const SizedBox(height: 20), + SizedBox(height: 20), _ConfigSectionCard( title: AppLocalizations.of(context)!.radioSettings, - subtitle: 'Choose a preset or fine-tune custom radio settings.', + subtitle: AppLocalizations.of(context)!.chooseAPresetOrFinetuneCustomRadioSettings, icon: Icons.settings_input_antenna_rounded, child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -1512,9 +1512,9 @@ class _DeviceConfigScreenState extends State { ), isExpanded: true, items: [ - const DropdownMenuItem<_RadioPreset?>( + DropdownMenuItem<_RadioPreset?>( value: null, - child: Text('Custom'), + child: Text(AppLocalizations.of(context)!.custom), ), ..._radioPresets.map( (preset) => DropdownMenuItem<_RadioPreset?>( @@ -1713,10 +1713,10 @@ class _DeviceConfigScreenState extends State { ), ), if (deviceInfo.clientRepeat != null) ...[ - const SizedBox(height: 16), + SizedBox(height: 16), _SettingHighlightCard( icon: Icons.repeat_rounded, - title: 'Repeat nearby traffic', + title: AppLocalizations.of(context)!.repeatNearbyTraffic, description: deviceInfo.allowedRepeatFreqRanges != null && deviceInfo.allowedRepeatFreqRanges!.isNotEmpty @@ -1753,16 +1753,16 @@ class _DeviceConfigScreenState extends State { : _saveRadioSettings, isSaving: _isSavingRadioSettings, isSaved: _radioSettingsSaved, - label: 'Save radio settings', + label: AppLocalizations.of(context)!.saveRadioSettings, ), ), ], ), ), - const SizedBox(height: 20), + SizedBox(height: 20), _ConfigSectionCard( - title: 'Danger zone', - subtitle: 'Destructive device actions.', + title: AppLocalizations.of(context)!.dangerZone, + subtitle: AppLocalizations.of(context)!.destructiveDeviceActions, icon: Icons.warning_amber_rounded, child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -1830,8 +1830,8 @@ class _DeviceConfigScreenState extends State { strokeWidth: 2, ), ) - : const Icon(Icons.people_alt_outlined), - label: const Text('Clear all contacts'), + : Icon(Icons.people_alt_outlined), + label: Text(AppLocalizations.of(context)!.clearAllContacts), ), ), const SizedBox(height: 12), @@ -1854,8 +1854,8 @@ class _DeviceConfigScreenState extends State { strokeWidth: 2, ), ) - : const Icon(Icons.forum_outlined), - label: const Text('Clear all channels'), + : Icon(Icons.forum_outlined), + label: Text(AppLocalizations.of(context)!.clearAllChannels), ), ), const SizedBox(height: 12), @@ -1870,8 +1870,8 @@ class _DeviceConfigScreenState extends State { foregroundColor: colorScheme.onError, minimumSize: const Size.fromHeight(52), ), - icon: const Icon(Icons.delete_forever_rounded), - label: const Text('Wipe device data'), + icon: Icon(Icons.delete_forever_rounded), + label: Text(AppLocalizations.of(context)!.wipeDeviceData), ), ), ], diff --git a/lib/screens/discovery_screen.dart b/lib/screens/discovery_screen.dart index 3ceafc9..9922948 100644 --- a/lib/screens/discovery_screen.dart +++ b/lib/screens/discovery_screen.dart @@ -54,7 +54,7 @@ class _DiscoveryScreenState extends State { final confirmed = await showDialog( context: context, builder: (dialogContext) => AlertDialog( - title: const Text('Clear discoveries'), + title: Text(AppLocalizations.of(context)!.clearDiscoveries), content: Text( 'Remove all $pendingCount pending discover${pendingCount == 1 ? 'y' : 'ies'} from this device?', ), @@ -65,7 +65,7 @@ class _DiscoveryScreenState extends State { ), FilledButton( onPressed: () => Navigator.of(dialogContext).pop(true), - child: const Text('Clear all'), + child: Text(AppLocalizations.of(context)!.clearAllLabel), ), ], ), @@ -80,7 +80,7 @@ class _DiscoveryScreenState extends State { return; } ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('Cleared pending discoveries.')), + SnackBar(content: Text(AppLocalizations.of(context)!.clearedPendingDiscoveries)), ); } @@ -363,7 +363,7 @@ class _DiscoveryScreenState extends State { return Scaffold( appBar: AppBar( - title: const Text('Discovery'), + title: Text(l10n.discovery), actions: [ Consumer( builder: (context, connectionProvider, child) { @@ -393,8 +393,8 @@ class _DiscoveryScreenState extends State { ), ) : const Icon(Icons.router_outlined), - const SizedBox(width: 12), - const Text('Discover repeaters'), + SizedBox(width: 12), + Text(l10n.discoverRepeaters), ], ), ), @@ -412,8 +412,8 @@ class _DiscoveryScreenState extends State { ), ) : const Icon(Icons.sensors_outlined), - const SizedBox(width: 12), - const Text('Discover sensors'), + SizedBox(width: 12), + Text(l10n.discoverSensors), ], ), ), @@ -490,7 +490,7 @@ class _DiscoveryScreenState extends State { : const Icon( Icons.download_for_offline_outlined, ), - label: const Text('Resolve all'), + label: Text(l10n.resolveAll), ), ), const SizedBox(width: 10), @@ -499,8 +499,8 @@ class _DiscoveryScreenState extends State { onPressed: pendingAdverts.isNotEmpty ? _clearAllDiscoveries : null, - icon: const Icon(Icons.clear_all_rounded), - label: const Text('Clear all'), + icon: Icon(Icons.clear_all_rounded), + label: Text(l10n.clearAllLabel), ), ), ], diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart index 7932ba3..0db6845 100644 --- a/lib/screens/home_screen.dart +++ b/lib/screens/home_screen.dart @@ -362,7 +362,7 @@ class _HomeScreenState extends State ), ), title: Text(l10n.flood), - subtitle: const Text('Relay through repeaters across the mesh'), + subtitle: Text(l10n.relayThroughRepeatersAcrossTheMesh), trailing: const Icon(Icons.chevron_right_rounded), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20), @@ -388,7 +388,7 @@ class _HomeScreenState extends State ), ), title: Text(l10n.direct), - subtitle: const Text('Nearby only, without repeater flooding'), + subtitle: Text(l10n.nearbyOnlyWithoutRepeaterFlooding), trailing: const Icon(Icons.chevron_right_rounded), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20), @@ -609,7 +609,7 @@ class _HomeScreenState extends State onPressed: () async { await provider.disconnect(); }, - icon: const Icon(Icons.power_settings_new), + icon: Icon(Icons.power_settings_new), tooltip: AppLocalizations.of(context)!.disconnect, color: Colors.red.shade700, ); @@ -631,8 +631,8 @@ class _HomeScreenState extends State child: Row( children: [ const Icon(Icons.radar), - const SizedBox(width: 8), - const Text('Spectrum Scan'), + SizedBox(width: 8), + Text(AppLocalizations.of(context)!.spectrumScan), ], ), onTap: () { @@ -653,11 +653,11 @@ class _HomeScreenState extends State items.add( PopupMenuItem( - child: const Row( + child: Row( children: [ - Icon(Icons.radar_outlined), - SizedBox(width: 8), - Text('Live Traffic'), + const Icon(Icons.radar_outlined), + const SizedBox(width: 8), + Text(AppLocalizations.of(context)!.liveTraffic), ], ), onTap: () { @@ -688,11 +688,11 @@ class _HomeScreenState extends State items.add( PopupMenuItem( - child: const Row( + child: Row( children: [ - Icon(Icons.router_outlined), - SizedBox(width: 8), - Text('Repeaters Map'), + const Icon(Icons.router_outlined), + const SizedBox(width: 8), + Text(AppLocalizations.of(context)!.repeatersMap), ], ), onTap: () { @@ -749,7 +749,7 @@ class _HomeScreenState extends State child: Row( children: [ const Icon(Icons.settings), - const SizedBox(width: 8), + SizedBox(width: 8), Text(AppLocalizations.of(context)!.settings), ], ), @@ -777,11 +777,11 @@ class _HomeScreenState extends State if (profilesEnabled) { items.add( PopupMenuItem( - child: const Row( + child: Row( children: [ - Icon(Icons.layers_outlined), - SizedBox(width: 8), - Text('Profiles'), + const Icon(Icons.layers_outlined), + const SizedBox(width: 8), + Text(AppLocalizations.of(context)!.profiles), ], ), onTap: () { @@ -889,7 +889,7 @@ class _HomeScreenState extends State ); case _HomeTab.map: return Tab( - icon: const Icon(Icons.map), + icon: Icon(Icons.map), text: AppLocalizations.of(context)!.map, ); case _HomeTab.sensors: @@ -941,7 +941,7 @@ class _HomeScreenState extends State ), ), ) - : const Icon(Icons.bluetooth, size: 18), + : Icon(Icons.bluetooth, size: 18), label: Text( provider.isReconnecting ? '${provider.reconnectionAttempt}/${provider.maxReconnectionAttempts}' @@ -960,7 +960,7 @@ class _HomeScreenState extends State const SizedBox(width: 8), IconButton( onPressed: () => provider.cancelReconnection(), - icon: const Icon(Icons.close, size: 20), + icon: Icon(Icons.close, size: 20), tooltip: AppLocalizations.of(context)!.cancelReconnection, style: IconButton.styleFrom( backgroundColor: Colors.red.shade700, diff --git a/lib/screens/live_traffic_screen.dart b/lib/screens/live_traffic_screen.dart index fd1ab78..90907cc 100644 --- a/lib/screens/live_traffic_screen.dart +++ b/lib/screens/live_traffic_screen.dart @@ -15,6 +15,7 @@ import '../utils/log_rx_route_decoder.dart'; import '../widgets/compact_signal_indicator.dart'; import '../widgets/messages/message_trace_sheet.dart'; import 'packet_log_screen.dart'; +import '../l10n/app_localizations.dart'; T? _maybeProvider(BuildContext context) { try { @@ -147,7 +148,7 @@ class _LiveTrafficScreenState extends State { return Scaffold( appBar: AppBar( - title: const Text('Live Traffic'), + title: Text(AppLocalizations.of(context)!.liveTraffic), actions: [ if (widget.openPacketLogs != null) IconButton( @@ -327,17 +328,17 @@ class _SummaryPanel extends StatelessWidget { runSpacing: 6, children: [ _SummaryBadge( - label: 'Mesh', + label: AppLocalizations.of(context)!.mesh, value: busynessLabel, color: busynessColor, ), _SummaryBadge( - label: 'Rate', + label: AppLocalizations.of(context)!.rate, value: '${snapshot.packetsPerMinute} pkt/min', color: Theme.of(context).colorScheme.primary, ), _SummaryBadge( - label: 'Window', + label: AppLocalizations.of(context)!.window, value: _windowLabel(snapshot.windowDuration), color: Theme.of(context).colorScheme.secondary, onTap: onWindowTap, @@ -350,14 +351,14 @@ class _SummaryPanel extends StatelessWidget { runSpacing: 10, children: [ _MetricTile( - label: 'RX packets', + label: AppLocalizations.of(context)!.rxPackets, value: '${snapshot.rxCount}', subtitle: totalRxCount == null ? _windowSummaryLabel(snapshot.windowDuration) : 'Device total $totalRxCount', ), _MetricTile( - label: 'RSSI', + label: AppLocalizations.of(context)!.rssi, value: snapshot.latestRssiDbm == null ? 'No RX data' : '${snapshot.latestRssiDbm} dBm', @@ -366,7 +367,7 @@ class _SummaryPanel extends StatelessWidget { : 'Avg ${snapshot.avgRssiDbm!.toStringAsFixed(1)} dBm', ), _MetricTile( - label: 'SNR', + label: AppLocalizations.of(context)!.snr, value: snapshot.latestSnrDb == null ? 'No RX data' : '${snapshot.latestSnrDb!.toStringAsFixed(1)} dB', @@ -375,7 +376,7 @@ class _SummaryPanel extends StatelessWidget { : 'Avg ${snapshot.avgSnrDb!.toStringAsFixed(1)} dB', ), _MetricTile( - label: 'Multi-hop', + label: AppLocalizations.of(context)!.multihop, value: '${snapshot.multiHopCount}', subtitle: routeHashCounts.summaryLabel, footer: snapshot.avgHopCount == null @@ -455,7 +456,7 @@ class _PacketTypeFilterBar extends StatelessWidget { child: Row( children: [ _FilterChip( - label: 'All', + label: AppLocalizations.of(context)!.all, selected: selectedType == null, onTap: () => onSelected(null), ), diff --git a/lib/screens/map_tab.dart b/lib/screens/map_tab.dart index 5c1163e..83c8413 100644 --- a/lib/screens/map_tab.dart +++ b/lib/screens/map_tab.dart @@ -519,7 +519,7 @@ class _MapTabState extends State with AutomaticKeepAliveClientMixin { child: Row( children: [ const Icon(Icons.layers), - const SizedBox(width: 12), + SizedBox(width: 12), Expanded( child: Text( AppLocalizations.of(context)!.selectMapLayer, @@ -644,7 +644,7 @@ class _MapTabState extends State with AutomaticKeepAliveClientMixin { !rootContext.read().isUsingCustomMap && _currentLayer == _dtk25Layer ? const Icon(Icons.check_circle, color: Colors.green) - : const Icon(Icons.radio_button_unchecked), + : Icon(Icons.radio_button_unchecked), title: Text(AppLocalizations.of(context)!.topographicMap), subtitle: Text(_dtk25Layer.attribution), onTap: () async { @@ -872,8 +872,8 @@ class _MapTabState extends State with AutomaticKeepAliveClientMixin { ), if (!hasCustomMap) ListTile( - leading: const Icon(Icons.add_photo_alternate), - title: const Text('Load from gallery'), + leading: Icon(Icons.add_photo_alternate), + title: Text(AppLocalizations.of(context)!.loadFromGallery), subtitle: const Text( 'Use a cave map image instead of GPS tiles', ), @@ -904,8 +904,8 @@ class _MapTabState extends State with AutomaticKeepAliveClientMixin { ), ), ListTile( - leading: const Icon(Icons.swap_horizontal_circle), - title: const Text('Replace image'), + leading: Icon(Icons.swap_horizontal_circle), + title: Text(AppLocalizations.of(context)!.replaceImage), subtitle: const Text( 'Pick a different map from the gallery', ), @@ -940,8 +940,8 @@ class _MapTabState extends State with AutomaticKeepAliveClientMixin { ), if (customMapConfig.isCalibrated) ListTile( - leading: const Icon(Icons.clear), - title: const Text('Clear scale'), + leading: Icon(Icons.clear), + title: Text(AppLocalizations.of(context)!.clearScale), onTap: () async { await mapProvider.clearCustomMapCalibration(); if (!context.mounted) return; @@ -1218,7 +1218,7 @@ class _MapTabState extends State with AutomaticKeepAliveClientMixin { context: context, builder: (dialogContext) { return AlertDialog( - title: const Text('Set map scale'), + title: Text(AppLocalizations.of(context)!.setMapScale), content: TextField( controller: controller, keyboardType: const TextInputType.numberWithOptions( @@ -1279,7 +1279,7 @@ class _MapTabState extends State with AutomaticKeepAliveClientMixin { if (!mounted) return; ScaffoldMessenger.of( context, - ).showSnackBar(const SnackBar(content: Text('Custom map scale saved'))); + ).showSnackBar(SnackBar(content: Text(AppLocalizations.of(context)!.customMapScaleSaved))); } } @@ -1417,9 +1417,9 @@ class _MapTabState extends State with AutomaticKeepAliveClientMixin { if (message != null) ListTile( contentPadding: EdgeInsets.zero, - leading: const Icon(Icons.chat_bubble_outline), - title: const Text('Open message'), - subtitle: const Text('Jump to the related SAR message'), + leading: Icon(Icons.chat_bubble_outline), + title: Text(AppLocalizations.of(context)!.openMessage), + subtitle: Text(AppLocalizations.of(context)!.jumpToTheRelatedSarMessage), onTap: () async { Navigator.pop(sheetContext); await _openSarMarkerMessage( @@ -1468,7 +1468,7 @@ class _MapTabState extends State with AutomaticKeepAliveClientMixin { return showDialog( context: context, builder: (dialogContext) => AlertDialog( - title: const Text('Remove SAR marker'), + title: Text(AppLocalizations.of(context)!.removeSarMarker), content: Text( hasMessage ? 'This will remove the marker and its linked chat message.' @@ -1654,8 +1654,8 @@ class _MapTabState extends State with AutomaticKeepAliveClientMixin { if (!sendToChannel && !sendToAllContacts && roomPublicKey == null) { if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Please select a destination to send SAR marker'), + SnackBar( + content: Text(AppLocalizations.of(context)!.pleaseSelectADestinationToSendSarMarker), backgroundColor: Colors.red, ), ); @@ -1784,8 +1784,8 @@ class _MapTabState extends State with AutomaticKeepAliveClientMixin { if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('SAR marker broadcast to public channel'), + SnackBar( + content: Text(AppLocalizations.of(context)!.sarMarkerBroadcastToPublicChannel), backgroundColor: Colors.orange, duration: Duration(seconds: 2), ), @@ -1832,8 +1832,8 @@ class _MapTabState extends State with AutomaticKeepAliveClientMixin { if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('SAR marker sent to room'), + SnackBar( + content: Text(AppLocalizations.of(context)!.sarMarkerSentToRoom), backgroundColor: Colors.green, duration: Duration(seconds: 2), ), @@ -3026,7 +3026,7 @@ class _MapTabState extends State with AutomaticKeepAliveClientMixin { color: Colors.white, size: 20, ), - const SizedBox(width: 8), + SizedBox(width: 8), Text( AppLocalizations.of(context)!.measureDistance, style: const TextStyle( diff --git a/lib/screens/messages_tab.dart b/lib/screens/messages_tab.dart index 7de4ff0..ff6e5de 100644 --- a/lib/screens/messages_tab.dart +++ b/lib/screens/messages_tab.dart @@ -535,7 +535,7 @@ class _MessagesTabState extends State { }).firstOrNull; if (recipient == null) { - ToastLogger.error(context, l10n.cannotReplyContactNotFound); + ToastLogger.error(context, AppLocalizations.of(context)!.cannotReplyContactNotFound); return; } } @@ -564,13 +564,13 @@ class _MessagesTabState extends State { } else { final senderPrefix = message.senderPublicKeyPrefix; if (senderPrefix == null || senderPrefix.length < 6) { - ToastLogger.error(context, l10n.cannotReplySenderMissing); + ToastLogger.error(context, AppLocalizations.of(context)!.cannotReplySenderMissing); return; } recipient = contactsProvider.findContactByPrefix(senderPrefix); if (recipient == null) { - ToastLogger.error(context, l10n.cannotReplyContactNotFound); + ToastLogger.error(context, AppLocalizations.of(context)!.cannotReplyContactNotFound); return; } @@ -1376,7 +1376,7 @@ class _MessagesTabState extends State { final decision = await showDialog( context: context, builder: (dialogContext) => AlertDialog( - title: const Text('Send to Public Channel?'), + title: Text(AppLocalizations.of(context)!.sendToPublicChannel), content: Text( 'You are about to send $mediaType to the Public Channel. ' 'This is not advised because everyone on the mesh may receive it. ' @@ -1389,7 +1389,7 @@ class _MessagesTabState extends State { ), FilledButton( onPressed: () => Navigator.of(dialogContext).pop(true), - child: const Text('Send anyway'), + child: Text(AppLocalizations.of(context)!.sendAnyway), ), ], ), @@ -1449,8 +1449,8 @@ class _MessagesTabState extends State { mainAxisSize: MainAxisSize.min, children: [ ListTile( - leading: const Icon(Icons.search), - title: const Text('Search messages'), + leading: Icon(Icons.search), + title: Text(AppLocalizations.of(context)!.searchMessages), onTap: () async { await _runAfterSheetDismissal(sheetContext, () async { _showFilteredMessageSearch(); @@ -1458,7 +1458,7 @@ class _MessagesTabState extends State { }, ), ListTile( - leading: const Icon(Icons.add_location_alt), + leading: Icon(Icons.add_location_alt), title: Text(AppLocalizations.of(context)!.sendSarMarker), onTap: () async { await _runAfterSheetDismissal(sheetContext, () async { @@ -1485,8 +1485,8 @@ class _MessagesTabState extends State { ), ListTile( enabled: !_isSendingImage, - leading: const Icon(Icons.photo_library), - title: const Text('Send image from gallery'), + leading: Icon(Icons.photo_library), + title: Text(AppLocalizations.of(context)!.sendImageFromGallery), onTap: _isSendingImage ? null : () async { @@ -1497,8 +1497,8 @@ class _MessagesTabState extends State { ), ListTile( enabled: !_isSendingImage, - leading: const Icon(Icons.camera_alt), - title: const Text('Take photo'), + leading: Icon(Icons.camera_alt), + title: Text(AppLocalizations.of(context)!.takePhoto), onTap: _isSendingImage ? null : () async { @@ -1508,9 +1508,9 @@ class _MessagesTabState extends State { }, ), ListTile( - leading: const Icon(Icons.grid_3x3), - title: const Text('Start Tic-Tac-Toe'), - subtitle: const Text('DM only'), + leading: Icon(Icons.grid_3x3), + title: Text(AppLocalizations.of(context)!.startTictactoe), + subtitle: Text(AppLocalizations.of(context)!.dmOnly), onTap: () async { await _runAfterSheetDismissal(sheetContext, () async { await _startTicTacToeGame(); diff --git a/lib/screens/packet_log_screen.dart b/lib/screens/packet_log_screen.dart index 751a1ae..e67449c 100644 --- a/lib/screens/packet_log_screen.dart +++ b/lib/screens/packet_log_screen.dart @@ -61,7 +61,7 @@ class _PacketLogScreenState extends State { if (context.mounted) { ScaffoldMessenger.of( context, - ).showSnackBar(const SnackBar(content: Text('No logs to export'))); + ).showSnackBar(SnackBar(content: Text(AppLocalizations.of(context)!.noLogsToExport))); } return; } @@ -108,7 +108,7 @@ class _PacketLogScreenState extends State { if (context.mounted) { ScaffoldMessenger.of( context, - ).showSnackBar(const SnackBar(content: Text('No logs to export'))); + ).showSnackBar(SnackBar(content: Text(AppLocalizations.of(context)!.noLogsToExport))); } return; } @@ -155,8 +155,8 @@ class _PacketLogScreenState extends State { void _copyToClipboard(BuildContext context, BlePacketLog log) { Clipboard.setData(ClipboardData(text: log.hexData)); ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Hex data copied to clipboard'), + SnackBar( + content: Text(AppLocalizations.of(context)!.hexDataCopiedToClipboard), duration: Duration(seconds: 1), ), ); @@ -184,7 +184,7 @@ class _PacketLogScreenState extends State { setState(() {}); if (parentContext.mounted) { ScaffoldMessenger.of(parentContext).showSnackBar( - const SnackBar(content: Text('Packet logs cleared')), + SnackBar(content: Text(AppLocalizations.of(context)!.packetLogsCleared)), ); } }, @@ -205,7 +205,7 @@ class _PacketLogScreenState extends State { title: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Text('BLE Packet Logs'), + Text(AppLocalizations.of(context)!.blePacketLogs), Text( '${logs.length} packets', style: Theme.of(context).textTheme.bodySmall, @@ -316,23 +316,23 @@ class _PacketLogScreenState extends State { icon: const Icon(Icons.share), tooltip: 'Export logs', itemBuilder: (context) => [ - const PopupMenuItem( + PopupMenuItem( value: 'csv', child: Row( children: [ - Icon(Icons.table_chart), - SizedBox(width: 8), - Text('Export as CSV'), + const Icon(Icons.table_chart), + const SizedBox(width: 8), + Text(AppLocalizations.of(context)!.exportAsCsv), ], ), ), - const PopupMenuItem( + PopupMenuItem( value: 'txt', child: Row( children: [ - Icon(Icons.text_snippet), - SizedBox(width: 8), - Text('Export as Text'), + const Icon(Icons.text_snippet), + const SizedBox(width: 8), + Text(AppLocalizations.of(context)!.exportAsText), ], ), ), @@ -411,8 +411,8 @@ class _PacketLogScreenState extends State { _filterDirection = null; }); }, - icon: const Icon(Icons.clear_all), - label: const Text('Clear filters'), + icon: Icon(Icons.clear_all), + label: Text(AppLocalizations.of(context)!.clearFilters), ), ], ], @@ -519,24 +519,24 @@ class _PacketLogCard extends StatelessWidget { children: [ _FactCard( icon: isRx ? Icons.call_received : Icons.call_made, - label: 'Direction', + label: AppLocalizations.of(context)!.direction, value: isRx ? 'RX' : 'TX', accent: directionColor, ), _FactCard( icon: Icons.data_object, - label: 'Size', + label: AppLocalizations.of(context)!.size, value: '${log.rawData.length} bytes', ), _FactCard( icon: Icons.schedule, - label: 'Captured', + label: AppLocalizations.of(context)!.captured, value: _formatTimestamp(log.timestamp), ), if (log.responseCode != null) _FactCard( icon: Icons.sell, - label: 'Opcode', + label: AppLocalizations.of(context)!.opcode, value: log.opcodeName, ), ], @@ -565,7 +565,7 @@ class _PacketLogCard extends StatelessWidget { const SizedBox(height: 10), if (rxInfo?.rssiDbm != null) _SignalMeter( - label: 'RSSI', + label: AppLocalizations.of(context)!.rssi, valueLabel: '${rxInfo!.rssiDbm} dBm', normalized: _normalizeRssi( rxInfo.rssiDbm!.toDouble(), @@ -573,9 +573,9 @@ class _PacketLogCard extends StatelessWidget { color: _rssiColor(rxInfo.rssiDbm!.toDouble()), ), if (rxInfo?.snrDb != null) ...[ - const SizedBox(height: 8), + SizedBox(height: 8), _SignalMeter( - label: 'SNR', + label: AppLocalizations.of(context)!.snr, valueLabel: '${rxInfo!.snrDb!.toStringAsFixed(1)} dB', normalized: _normalizeSnr(rxInfo.snrDb!), @@ -854,17 +854,17 @@ class _RouteSection extends StatelessWidget { children: [ _FactCard( icon: Icons.route, - label: 'Payload', + label: AppLocalizations.of(context)!.payload, value: _payloadTypeLabel(route.payloadType), ), _FactCard( icon: Icons.hub, - label: 'Hops', + label: AppLocalizations.of(context)!.hops, value: '${route.hopCount}', ), _FactCard( icon: Icons.tag, - label: 'Hash size', + label: AppLocalizations.of(context)!.hashSize, value: '${route.hashSize} byte${route.hashSize == 1 ? '' : 's'}', ), diff --git a/lib/screens/profiles_screen.dart b/lib/screens/profiles_screen.dart index f877e47..5b04cc5 100644 --- a/lib/screens/profiles_screen.dart +++ b/lib/screens/profiles_screen.dart @@ -4,6 +4,7 @@ import 'package:provider/provider.dart'; import '../models/config_profile.dart'; import '../services/profile_manager.dart'; import '../services/profile_workspace_coordinator.dart'; +import '../l10n/app_localizations.dart'; class ProfilesScreen extends StatelessWidget { const ProfilesScreen({super.key}); @@ -15,7 +16,7 @@ class ProfilesScreen extends StatelessWidget { final profiles = profileManager.visibleProfiles; return Scaffold( appBar: AppBar( - title: const Text('Profiles'), + title: Text(AppLocalizations.of(context)!.profiles), actions: [ IconButton( onPressed: () async { @@ -30,12 +31,12 @@ class ProfilesScreen extends StatelessWidget { ), floatingActionButton: FloatingActionButton.extended( onPressed: () => _createProfile(context), - icon: const Icon(Icons.add), - label: const Text('New Profile'), + icon: Icon(Icons.add), + label: Text(AppLocalizations.of(context)!.newProfile), ), body: profiles.isEmpty - ? const Center( - child: Text('Enable profiles to start managing them.'), + ? Center( + child: Text(AppLocalizations.of(context)!.enableProfilesToStartManagingThem), ) : ListView.builder( padding: const EdgeInsets.all(16), @@ -73,7 +74,7 @@ class ProfilesScreen extends StatelessWidget { ).colorScheme.primaryContainer, borderRadius: BorderRadius.circular(999), ), - child: const Text('Active'), + child: Text(AppLocalizations.of(context)!.active), ), ], ), @@ -90,7 +91,7 @@ class ProfilesScreen extends StatelessWidget { .read() .openProfile(profile.id); }, - child: const Text('Open'), + child: Text(AppLocalizations.of(context)!.open), ), OutlinedButton( onPressed: () async { @@ -111,7 +112,7 @@ class ProfilesScreen extends StatelessWidget { .read() .exportProfile(resolved); }, - child: const Text('Share'), + child: Text(AppLocalizations.of(context)!.share), ), PopupMenuButton( onSelected: (value) async { @@ -132,14 +133,14 @@ class ProfilesScreen extends StatelessWidget { } }, itemBuilder: (context) => [ - const PopupMenuItem( + PopupMenuItem( value: 'duplicate', - child: Text('Duplicate'), + child: Text(AppLocalizations.of(context)!.duplicate), ), if (!profile.isDefault) - const PopupMenuItem( + PopupMenuItem( value: 'rename', - child: Text('Rename'), + child: Text(AppLocalizations.of(context)!.rename), ), if (!profile.isDefault) const PopupMenuItem( @@ -187,7 +188,7 @@ class ProfilesScreen extends StatelessWidget { final name = await showDialog( context: context, builder: (context) => AlertDialog( - title: const Text('Create Profile'), + title: Text(AppLocalizations.of(context)!.createProfile), content: TextField( controller: controller, autofocus: true, @@ -200,7 +201,7 @@ class ProfilesScreen extends StatelessWidget { ), FilledButton( onPressed: () => Navigator.of(context).pop(controller.text.trim()), - child: const Text('Create'), + child: Text(AppLocalizations.of(context)!.create), ), ], ), @@ -221,7 +222,7 @@ class ProfilesScreen extends StatelessWidget { final name = await showDialog( context: context, builder: (context) => AlertDialog( - title: const Text('Rename Profile'), + title: Text(AppLocalizations.of(context)!.renameProfile), content: TextField( controller: controller, autofocus: true, diff --git a/lib/screens/repeaters_map_screen.dart b/lib/screens/repeaters_map_screen.dart index c00362e..7e60074 100644 --- a/lib/screens/repeaters_map_screen.dart +++ b/lib/screens/repeaters_map_screen.dart @@ -10,6 +10,7 @@ import '../models/contact.dart'; import '../providers/connection_provider.dart'; import '../providers/contacts_provider.dart'; import '../services/mesh_map_nodes_service.dart'; +import '../l10n/app_localizations.dart'; class RepeatersMapScreen extends StatefulWidget { const RepeatersMapScreen({super.key}); @@ -191,18 +192,18 @@ class _RepeatersMapScreenState extends State { context, ).textTheme.titleLarge?.copyWith(fontWeight: FontWeight.w700), ), - const SizedBox(height: 12), + SizedBox(height: 12), _InfoLine( - label: 'Public key', + label: AppLocalizations.of(context)!.publicKeyLabel, value: repeater.publicKey, monospace: true, ), _InfoLine( - label: 'Coordinates', + label: AppLocalizations.of(context)!.coordinates, value: '${repeater.latitude.toStringAsFixed(5)}, ${repeater.longitude.toStringAsFixed(5)}', ), - _InfoLine(label: 'Source', value: repeater.sourceLabel), + _InfoLine(label: AppLocalizations.of(context)!.source, value: repeater.sourceLabel), const SizedBox(height: 12), if (canAdd) SizedBox( @@ -233,8 +234,8 @@ class _RepeatersMapScreenState extends State { width: double.infinity, child: FilledButton.icon( onPressed: null, - icon: const Icon(Icons.check_circle), - label: const Text('Already in contacts'), + icon: Icon(Icons.check_circle), + label: Text(AppLocalizations.of(context)!.alreadyInContacts), ), ), ], @@ -253,8 +254,8 @@ class _RepeatersMapScreenState extends State { if (!connectionProvider.deviceInfo.isConnected) { if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Connect to a device before adding contacts'), + SnackBar( + content: Text(AppLocalizations.of(context)!.connectToADeviceBeforeAddingContacts), ), ); return; @@ -366,7 +367,7 @@ class _RepeatersMapScreenState extends State { return Scaffold( appBar: AppBar( - title: const Text('Repeaters Map'), + title: Text(AppLocalizations.of(context)!.repeatersMap), actions: [ IconButton( onPressed: _isLoading @@ -446,18 +447,18 @@ class _RepeatersMapScreenState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, - children: const [ + children: [ _LegendRow( - color: Color(0xFF7C3AED), - label: 'From contacts', + color: const Color(0xFF7C3AED), + label: AppLocalizations.of(context)!.fromContacts, ), - SizedBox(height: 8), + const SizedBox(height: 8), _LegendRow( - color: Color(0xFFE8681D), - label: 'Online only', + color: const Color(0xFFE8681D), + label: AppLocalizations.of(context)!.onlineOnly, ), - SizedBox(height: 8), - _LegendRow(color: Color(0xFF1B8F4F), label: 'In both'), + const SizedBox(height: 8), + _LegendRow(color: const Color(0xFF1B8F4F), label: AppLocalizations.of(context)!.inBoth), ], ), ), diff --git a/lib/screens/sar_template_management_screen.dart b/lib/screens/sar_template_management_screen.dart index 606e818..903f4c9 100644 --- a/lib/screens/sar_template_management_screen.dart +++ b/lib/screens/sar_template_management_screen.dart @@ -240,7 +240,7 @@ class _SarTemplateManagementScreenState extends State { shrinkWrap: true, padding: const EdgeInsets.only(bottom: 20), children: [ - const ListTile( - title: Text( + ListTile( + title: const Text( 'Add sensor node', style: TextStyle(fontWeight: FontWeight.bold), ), - subtitle: Text('Pick a relay or node to watch in Sensors.'), + subtitle: Text(AppLocalizations.of(context)!.pickARelayOrNodeToWatchInSensors), ), ...candidates.map( (contact) => ListTile( @@ -209,7 +210,7 @@ class _SensorsTabState extends State { final didSave = await showDialog( context: context, builder: (dialogContext) => AlertDialog( - title: const Text('Rename value'), + title: Text(AppLocalizations.of(context)!.renameValue), content: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, @@ -388,10 +389,10 @@ class _SensorCustomizeView extends StatelessWidget { title: Text('Customize ${contact?.displayName ?? 'Sensor'}'), ), body: ListView( - padding: const EdgeInsets.fromLTRB(16, 16, 16, 24), + padding: EdgeInsets.fromLTRB(16, 16, 16, 24), children: [ _SensorCustomizeSectionCard( - title: 'Live preview', + title: AppLocalizations.of(context)!.livePreview, subtitle: 'Changes apply immediately. This card matches the current dashboard layout for this sensor.', child: SensorTelemetryCard( @@ -414,7 +415,7 @@ class _SensorCustomizeView extends StatelessWidget { ), ), _SensorCustomizeSectionCard( - title: 'Refresh schedule', + title: AppLocalizations.of(context)!.refreshSchedule, subtitle: 'Choose how often this sensor should refresh while your device stays connected.', child: SensorAutoRefreshOptions( @@ -702,8 +703,8 @@ class SensorMetricSelectorItem extends StatelessWidget { fontWeight: FontWeight.w700, ), ), - icon: const Icon(Icons.edit_outlined, size: 18), - label: const Text('Rename'), + icon: Icon(Icons.edit_outlined, size: 18), + label: Text(AppLocalizations.of(context)!.rename), ), if (showChannelChip) Container( @@ -911,7 +912,7 @@ class _EmptySensorsStateState extends State<_EmptySensorsState> { await connectionProvider.discoverNodeType(advertType: 4); if (mounted) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('Sensor discovery sent')), + SnackBar(content: Text(AppLocalizations.of(context)!.sensorDiscoverySent)), ); } } finally { diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index 53c4bf7..3de2acc 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -192,7 +192,7 @@ class _SettingsScreenState extends State { }); ScaffoldMessenger.of( context, - ).showSnackBar(const SnackBar(content: Text('Developer mode disabled'))); + ).showSnackBar(SnackBar(content: Text(AppLocalizations.of(context)!.developerModeDisabled))); return; } @@ -206,7 +206,7 @@ class _SettingsScreenState extends State { }); ScaffoldMessenger.of( context, - ).showSnackBar(const SnackBar(content: Text('Developer mode enabled'))); + ).showSnackBar(SnackBar(content: Text(AppLocalizations.of(context)!.developerModeEnabled))); return; } @@ -328,7 +328,7 @@ class _SettingsScreenState extends State { final value = await showDialog( context: context, builder: (context) => AlertDialog( - title: const Text('Fast GPS movement threshold'), + title: Text(AppLocalizations.of(context)!.fastGpsMovementThreshold), content: TextField( controller: controller, keyboardType: const TextInputType.numberWithOptions(decimal: true), @@ -369,7 +369,7 @@ class _SettingsScreenState extends State { final value = await showDialog( context: context, builder: (context) => AlertDialog( - title: const Text('Fast GPS active-use interval'), + title: Text(AppLocalizations.of(context)!.fastGpsActiveuseInterval), content: TextField( controller: controller, keyboardType: TextInputType.number, @@ -558,8 +558,8 @@ class _SettingsScreenState extends State { if (kIsWeb || defaultTargetPlatform != TargetPlatform.android) { if (mounted) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Update check is only available on Android'), + SnackBar( + content: Text(AppLocalizations.of(context)!.updateCheckIsOnlyAvailableOnAndroid), backgroundColor: Colors.orange, ), ); @@ -583,8 +583,8 @@ class _SettingsScreenState extends State { if (!updateInfo.isAvailable) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('You are running the latest version'), + SnackBar( + content: Text(AppLocalizations.of(context)!.youAreRunningTheLatestVersion), backgroundColor: Colors.green, ), ); @@ -593,8 +593,8 @@ class _SettingsScreenState extends State { if (updateInfo.downloadUrl == null) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Update available but download URL not found'), + SnackBar( + content: Text(AppLocalizations.of(context)!.updateAvailableButDownloadUrlNotFound), backgroundColor: Colors.orange, ), ); @@ -736,7 +736,7 @@ class _SettingsScreenState extends State { title: Row( children: [ const Icon(Icons.settings, size: 24), - const SizedBox(width: 12), + SizedBox(width: 12), Text(AppLocalizations.of(context)!.locationPermission), ], ), @@ -878,7 +878,7 @@ class _SettingsScreenState extends State { final confirmed = await showDialog( context: context, builder: (context) => AlertDialog( - title: const Text('Clear Messages'), + title: Text(AppLocalizations.of(context)!.clearMessages), content: const Text( 'This will permanently delete all stored messages. Are you sure?', ), @@ -907,8 +907,8 @@ class _SettingsScreenState extends State { if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('All messages cleared'), + SnackBar( + content: Text(AppLocalizations.of(context)!.allMessagesCleared), backgroundColor: Colors.orange, ), ); @@ -918,7 +918,7 @@ class _SettingsScreenState extends State { final confirmed = await showDialog( context: context, builder: (context) => AlertDialog( - title: const Text('Clear online trace database'), + title: Text(AppLocalizations.of(context)!.clearOnlineTraceDatabase), content: const Text( 'This removes the cached online node database used as a trace fallback.', ), @@ -951,8 +951,8 @@ class _SettingsScreenState extends State { }); ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Online trace database cleared'), + SnackBar( + content: Text(AppLocalizations.of(context)!.onlineTraceDatabaseCleared), backgroundColor: Colors.orange, ), ); @@ -978,7 +978,7 @@ class _SettingsScreenState extends State { final selected = await showDialog( context: context, builder: (context) => SimpleDialog( - title: const Text('Route path byte size'), + title: Text(AppLocalizations.of(context)!.routePathByteSize), children: [ for (final value in RouteHashPreferences.supportedSizes) SimpleDialogOption( @@ -1024,21 +1024,21 @@ class _SettingsScreenState extends State { _buildSectionHeader('Appearance'), _buildSettingsCard([ ListTile( - leading: const Icon(Icons.palette), + leading: Icon(Icons.palette), title: Text(AppLocalizations.of(context)!.theme), subtitle: Text(AppTheme.getThemeDisplayName(_selectedTheme)), trailing: const Icon(Icons.chevron_right), onTap: () => _showThemeDialog(), ), ListTile( - leading: const Icon(Icons.language), + leading: Icon(Icons.language), title: Text(AppLocalizations.of(context)!.language), subtitle: Text(LocalePreferences.getDisplayName(_selectedLocale)), trailing: const Icon(Icons.chevron_right), onTap: () => _showLanguageDialog(), ), SwitchListTile( - secondary: const Icon(Icons.radar), + secondary: Icon(Icons.radar), title: Text(AppLocalizations.of(context)!.showRxTxIndicators), subtitle: Text( AppLocalizations.of(context)!.displayPacketActivity, @@ -1056,8 +1056,8 @@ class _SettingsScreenState extends State { _buildSectionHeader('Notifications'), _buildSettingsCard([ SwitchListTile( - secondary: const Icon(Icons.chat_bubble_outline), - title: const Text('Message notifications'), + secondary: Icon(Icons.chat_bubble_outline), + title: Text(AppLocalizations.of(context)!.messageNotifications), subtitle: const Text( 'Notify for incoming direct and channel messages', ), @@ -1072,8 +1072,8 @@ class _SettingsScreenState extends State { }, ), SwitchListTile( - secondary: const Icon(Icons.warning_amber_outlined), - title: const Text('SAR alerts'), + secondary: Icon(Icons.warning_amber_outlined), + title: Text(AppLocalizations.of(context)!.sarAlerts), subtitle: const Text( 'Notify for incoming SAR markers such as found person or fire', ), @@ -1086,8 +1086,8 @@ class _SettingsScreenState extends State { }, ), SwitchListTile( - secondary: const Icon(Icons.contact_page_outlined), - title: const Text('Discovery notifications'), + secondary: Icon(Icons.contact_page_outlined), + title: Text(AppLocalizations.of(context)!.discoveryNotifications), subtitle: const Text( 'Notify when new contacts appear in Discovery', ), @@ -1102,8 +1102,8 @@ class _SettingsScreenState extends State { }, ), SwitchListTile( - secondary: const Icon(Icons.system_update), - title: const Text('Update notifications'), + secondary: Icon(Icons.system_update), + title: Text(AppLocalizations.of(context)!.updateNotifications), subtitle: const Text( 'Notify when a newer app version is available', ), @@ -1118,8 +1118,8 @@ class _SettingsScreenState extends State { }, ), SwitchListTile( - secondary: const Icon(Icons.visibility_off_outlined), - title: const Text('Mute while app is open'), + secondary: Icon(Icons.visibility_off_outlined), + title: Text(AppLocalizations.of(context)!.muteWhileAppIsOpen), subtitle: const Text( 'Do not show local notifications while the app is in the foreground', ), @@ -1139,7 +1139,7 @@ class _SettingsScreenState extends State { _buildSettingsCard([ Consumer( builder: (context, appProvider, child) => SwitchListTile( - secondary: const Icon(Icons.map_outlined), + secondary: Icon(Icons.map_outlined), title: Text(AppLocalizations.of(context)!.disableMap), subtitle: Text( AppLocalizations.of(context)!.disableMapDescription, @@ -1152,8 +1152,8 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, appProvider, child) => SwitchListTile( - secondary: const Icon(Icons.contacts_outlined), - title: const Text('Disable Contacts'), + secondary: Icon(Icons.contacts_outlined), + title: Text(AppLocalizations.of(context)!.disableContacts), subtitle: const Text( 'Hide the contacts tab to simplify navigation', ), @@ -1165,8 +1165,8 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, appProvider, child) => SwitchListTile( - secondary: const Icon(Icons.sensors), - title: const Text('Enable Sensors tab'), + secondary: Icon(Icons.sensors), + title: Text(AppLocalizations.of(context)!.enableSensorsTab), subtitle: const Text( 'Show a dedicated tab for watched relay and node telemetry', ), @@ -1181,8 +1181,8 @@ class _SettingsScreenState extends State { _buildSectionHeader('Messaging'), _buildSettingsCard([ ListTile( - leading: const Icon(Icons.alt_route), - title: const Text('Route path byte size'), + leading: Icon(Icons.alt_route), + title: Text(AppLocalizations.of(context)!.routePathByteSize), subtitle: Text( '$_routeHashSize byte${_routeHashSize == 1 ? '' : 's'} for manual contact routes', ), @@ -1191,8 +1191,8 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, appProvider, child) => SwitchListTile( - secondary: const Icon(Icons.swap_horiz), - title: const Text('Auto route rotation'), + secondary: Icon(Icons.swap_horiz), + title: Text(AppLocalizations.of(context)!.autoRouteRotation), subtitle: const Text( 'Rotate between best known direct paths and flood mode for room/contact sends', ), @@ -1204,8 +1204,8 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, appProvider, child) => SwitchListTile( - secondary: const Icon(Icons.route), - title: const Text('Nearest repeater fallback'), + secondary: Icon(Icons.route), + title: Text(AppLocalizations.of(context)!.nearestRepeaterFallback), subtitle: const Text( 'After normal retries fail, try one final resend through the nearest repeater', ), @@ -1217,8 +1217,8 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, appProvider, child) => SwitchListTile( - secondary: const Icon(Icons.route), - title: const Text('Clear path on max retry'), + secondary: Icon(Icons.route), + title: Text(AppLocalizations.of(context)!.clearPathOnMaxRetry), subtitle: const Text( 'Clear the route only after all retries and final router fallback fail', ), @@ -1234,13 +1234,13 @@ class _SettingsScreenState extends State { 'Clear Messages', style: TextStyle(color: Colors.red), ), - subtitle: const Text('Delete all stored message history'), + subtitle: Text(AppLocalizations.of(context)!.deleteAllStoredMessageHistory), onTap: _clearMessages, ), Consumer( builder: (context, appProvider, child) => ListTile( - leading: const Icon(Icons.format_size), - title: const Text('Message font size'), + leading: Icon(Icons.format_size), + title: Text(AppLocalizations.of(context)!.messageFontSize), subtitle: Text( '${(appProvider.messageFontScale * 100).round()}% of default', ), @@ -1264,8 +1264,8 @@ class _SettingsScreenState extends State { _buildSectionHeader('Tracing'), _buildSettingsCard([ ListTile( - leading: const Icon(Icons.cloud_sync), - title: const Text('Online trace database'), + leading: Icon(Icons.cloud_sync), + title: Text(AppLocalizations.of(context)!.onlineTraceDatabase), subtitle: Text(_onlineTraceCacheSubtitle()), ), ListTile( @@ -1299,8 +1299,8 @@ class _SettingsScreenState extends State { _buildSectionHeader('Map'), _buildSettingsCard([ SwitchListTile( - secondary: const Icon(Icons.explore), - title: const Text('Rotate map with heading'), + secondary: Icon(Icons.explore), + title: Text(AppLocalizations.of(context)!.rotateMapWithHeading), subtitle: const Text( 'Rotate the map based on your compass or movement heading', ), @@ -1313,8 +1313,8 @@ class _SettingsScreenState extends State { }, ), SwitchListTile( - secondary: const Icon(Icons.bug_report_outlined), - title: const Text('Show map debug info'), + secondary: Icon(Icons.bug_report_outlined), + title: Text(AppLocalizations.of(context)!.showMapDebugInfo), subtitle: const Text( 'Display extra map diagnostics and internal state overlays', ), @@ -1327,8 +1327,8 @@ class _SettingsScreenState extends State { }, ), SwitchListTile( - secondary: const Icon(Icons.fullscreen), - title: const Text('Open map in fullscreen'), + secondary: Icon(Icons.fullscreen), + title: Text(AppLocalizations.of(context)!.openMapInFullscreen), subtitle: const Text( 'Start the map tab in fullscreen mode by default', ), @@ -1342,9 +1342,9 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, drawingProvider, child) => SwitchListTile( - secondary: const Icon(Icons.fmd_good_outlined), - title: const Text('Show SAR markers'), - subtitle: const Text('Display SAR markers on the main map'), + secondary: Icon(Icons.fmd_good_outlined), + title: Text(AppLocalizations.of(context)!.showSarMarkersLabel), + subtitle: Text(AppLocalizations.of(context)!.displaySarMarkersOnTheMainMap), value: drawingProvider.showSarMarkers, onChanged: (value) { drawingProvider.toggleSarMarkers(); @@ -1353,8 +1353,8 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, mapProvider, child) => SwitchListTile( - secondary: const Icon(Icons.timeline), - title: const Text('Show all contact trails'), + secondary: Icon(Icons.timeline), + title: Text(AppLocalizations.of(context)!.showAllContactTrailsLabel), subtitle: const Text( 'Display location trails for all contacts that have history', ), @@ -1366,8 +1366,8 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, mapProvider, child) => SwitchListTile( - secondary: const Icon(Icons.router_outlined), - title: const Text('Hide repeaters on map'), + secondary: Icon(Icons.router_outlined), + title: Text(AppLocalizations.of(context)!.hideRepeatersOnMap), subtitle: const Text( 'Hide repeater contacts from the main map view', ), @@ -1397,16 +1397,16 @@ class _SettingsScreenState extends State { ), _buildSettingsCard([ ListTile( - leading: const Icon(Icons.graphic_eq), - title: const Text('Voice bitrate'), + leading: Icon(Icons.graphic_eq), + title: Text(AppLocalizations.of(context)!.voiceBitrate), subtitle: Text(_voiceBitrateSubtitle(_voiceBitrate)), trailing: const Icon(Icons.chevron_right), onTap: _showVoiceBitrateDialog, ), Consumer( builder: (context, appProvider, child) => SwitchListTile( - secondary: const Icon(Icons.tune), - title: const Text('Band-pass filter voice'), + secondary: Icon(Icons.tune), + title: Text(AppLocalizations.of(context)!.bandpassFilterVoice), subtitle: const Text( 'Keeps speech frequencies and cuts low/high noise', ), @@ -1418,9 +1418,9 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, appProvider, child) => SwitchListTile( - secondary: const Icon(Icons.compress), - title: const Text('Voice compressor'), - subtitle: const Text('Balances quiet and loud speech levels'), + secondary: Icon(Icons.compress), + title: Text(AppLocalizations.of(context)!.voiceCompressor), + subtitle: Text(AppLocalizations.of(context)!.balancesQuietAndLoudSpeechLevels), value: appProvider.isVoiceCompressorEnabled, onChanged: (value) async { await appProvider.toggleVoiceCompressorEnabled(value); @@ -1429,9 +1429,9 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, appProvider, child) => SwitchListTile( - secondary: const Icon(Icons.speed), - title: const Text('Voice limiter'), - subtitle: const Text('Prevents clipping peaks before encoding'), + secondary: Icon(Icons.speed), + title: Text(AppLocalizations.of(context)!.voiceLimiter), + subtitle: Text(AppLocalizations.of(context)!.preventsClippingPeaksBeforeEncoding), value: appProvider.isVoiceLimiterEnabled, onChanged: (value) async { await appProvider.toggleVoiceLimiterEnabled(value); @@ -1440,9 +1440,9 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, appProvider, child) => SwitchListTile( - secondary: const Icon(Icons.auto_fix_high), - title: const Text('Mic auto gain'), - subtitle: const Text('Lets the recorder adjust input level'), + secondary: Icon(Icons.auto_fix_high), + title: Text(AppLocalizations.of(context)!.micAutoGain), + subtitle: Text(AppLocalizations.of(context)!.letsTheRecorderAdjustInputLevel), value: appProvider.isVoiceAutoGainEnabled, onChanged: (value) async { await appProvider.toggleVoiceAutoGainEnabled(value); @@ -1451,8 +1451,8 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, appProvider, child) => SwitchListTile( - secondary: const Icon(Icons.hearing_disabled), - title: const Text('Echo cancellation'), + secondary: Icon(Icons.hearing_disabled), + title: Text(AppLocalizations.of(context)!.echoCancellation), subtitle: const Text( 'Uses recorder echo cancellation if available', ), @@ -1464,8 +1464,8 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, appProvider, child) => SwitchListTile( - secondary: const Icon(Icons.noise_control_off), - title: const Text('Noise suppression'), + secondary: Icon(Icons.noise_control_off), + title: Text(AppLocalizations.of(context)!.noiseSuppression), subtitle: const Text( 'Uses recorder noise suppression if available', ), @@ -1477,8 +1477,8 @@ class _SettingsScreenState extends State { ), Consumer( builder: (context, appProvider, child) => SwitchListTile( - secondary: const Icon(Icons.content_cut), - title: const Text('Trim silence in voice messages'), + secondary: Icon(Icons.content_cut), + title: Text(AppLocalizations.of(context)!.trimSilenceInVoiceMessages), subtitle: const Text( 'Removes long silent parts before sending voice', ), @@ -1493,15 +1493,15 @@ class _SettingsScreenState extends State { _buildSectionHeader('Images'), _buildSettingsCard([ ListTile( - leading: const Icon(Icons.photo_size_select_large), - title: const Text('Max image size'), + leading: Icon(Icons.photo_size_select_large), + title: Text(AppLocalizations.of(context)!.maxImageSize), subtitle: Text('$_imageMaxSize×$_imageMaxSize px'), trailing: const Icon(Icons.chevron_right), onTap: _showImageMaxSizeDialog, ), ListTile( - leading: const Icon(Icons.tune), - title: const Text('Image compression'), + leading: Icon(Icons.tune), + title: Text(AppLocalizations.of(context)!.imageCompression), subtitle: Text( '$_imageCompression / 90 (higher = smaller file)', ), @@ -1519,8 +1519,8 @@ class _SettingsScreenState extends State { ), ), SwitchListTile( - secondary: const Icon(Icons.invert_colors), - title: const Text('Grayscale'), + secondary: Icon(Icons.invert_colors), + title: Text(AppLocalizations.of(context)!.grayscale), subtitle: const Text( 'Converts image to grayscale for smaller file size', ), @@ -1532,8 +1532,8 @@ class _SettingsScreenState extends State { }, ), SwitchListTile( - secondary: const Icon(Icons.compress), - title: const Text('Ultra mode'), + secondary: Icon(Icons.compress), + title: Text(AppLocalizations.of(context)!.ultraMode), subtitle: const Text( 'Extra-aggressive compression with stronger AVIF settings', ), @@ -1554,8 +1554,8 @@ class _SettingsScreenState extends State { _buildSectionHeader('Profiles'), _buildSettingsCard([ SwitchListTile( - secondary: const Icon(Icons.layers_outlined), - title: const Text('Enable Profiles'), + secondary: Icon(Icons.layers_outlined), + title: Text(AppLocalizations.of(context)!.enableProfiles), subtitle: const Text( 'Show profile management UI while keeping the hidden Default profile as the current workspace.', ), @@ -1572,8 +1572,8 @@ class _SettingsScreenState extends State { ), if (_profilesEnabled) ListTile( - leading: const Icon(Icons.folder_copy_outlined), - title: const Text('Manage profiles'), + leading: Icon(Icons.folder_copy_outlined), + title: Text(AppLocalizations.of(context)!.manageProfiles), subtitle: Text( context.watch().activeProfileId == ConfigProfile.defaultProfileId @@ -1594,7 +1594,7 @@ class _SettingsScreenState extends State { _buildSectionHeader('Templates & Help'), _buildSettingsCard([ ListTile( - leading: const Icon(Icons.location_searching), + leading: Icon(Icons.location_searching), title: Text(AppLocalizations.of(context)!.sarTemplates), subtitle: Text(AppLocalizations.of(context)!.manageSarTemplates), trailing: const Icon(Icons.chevron_right), @@ -1608,7 +1608,7 @@ class _SettingsScreenState extends State { }, ), ListTile( - leading: const Icon(Icons.school), + leading: Icon(Icons.school), title: Text(AppLocalizations.of(context)!.viewWelcomeTutorial), trailing: const Icon(Icons.chevron_right), onTap: () async { @@ -1629,8 +1629,8 @@ class _SettingsScreenState extends State { _buildSectionHeader(AppLocalizations.of(context)!.permissionsSection), _buildSettingsCard([ SwitchListTile( - secondary: const Icon(Icons.gps_fixed), - title: const Text('Fast private GPS updates'), + secondary: Icon(Icons.gps_fixed), + title: Text(AppLocalizations.of(context)!.fastPrivateGpsUpdates), subtitle: const Text( 'Use private zero-hop updates while moving significantly or while actively using map/messages.', ), @@ -1638,8 +1638,8 @@ class _SettingsScreenState extends State { onChanged: _setFastLocationUpdatesEnabled, ), ListTile( - leading: const Icon(Icons.straighten), - title: const Text('Movement threshold'), + leading: Icon(Icons.straighten), + title: Text(AppLocalizations.of(context)!.movementThreshold), subtitle: Text( '${_fastLocationMovementThresholdMeters.toStringAsFixed(0)} m', ), @@ -1647,14 +1647,14 @@ class _SettingsScreenState extends State { onTap: _editFastLocationMovementThreshold, ), ListTile( - leading: const Icon(Icons.timer), - title: const Text('Active-use update interval'), + leading: Icon(Icons.timer), + title: Text(AppLocalizations.of(context)!.activeuseUpdateInterval), subtitle: Text('$_fastLocationActiveCadenceSeconds s'), trailing: const Icon(Icons.chevron_right), onTap: _editFastLocationActiveCadence, ), ListTile( - leading: const Icon(Icons.location_on), + leading: Icon(Icons.location_on), title: Text(AppLocalizations.of(context)!.locationPermission), subtitle: FutureBuilder( future: Geolocator.checkPermission(), @@ -1707,7 +1707,7 @@ class _SettingsScreenState extends State { _buildSectionHeader(AppLocalizations.of(context)!.about), _buildSettingsCard([ ListTile( - leading: const Icon(Icons.info), + leading: Icon(Icons.info), title: Text(AppLocalizations.of(context)!.appVersion), subtitle: Text( _packageInfo != null @@ -1717,12 +1717,12 @@ class _SettingsScreenState extends State { onTap: _handleVersionTap, ), ListTile( - leading: const Icon(Icons.badge), + leading: Icon(Icons.badge), title: Text(AppLocalizations.of(context)!.appName), subtitle: Text(_packageInfo?.appName ?? 'MeshCore SAR'), ), ListTile( - leading: const Icon(Icons.description), + leading: Icon(Icons.description), title: Text(AppLocalizations.of(context)!.aboutMeshCoreSar), subtitle: Text( AppLocalizations.of(context)!.aboutDescription.split('\n\n')[0], @@ -1756,19 +1756,19 @@ class _SettingsScreenState extends State { _buildSectionHeader('Developer & Data'), _buildSettingsCard([ ListTile( - leading: const Icon(Icons.bug_report), + leading: Icon(Icons.bug_report), title: Text(AppLocalizations.of(context)!.packageName), subtitle: Text(_packageInfo?.packageName ?? 'com.meshcore.sar'), ), Padding( - padding: const EdgeInsets.fromLTRB(16, 12, 16, 4), + padding: EdgeInsets.fromLTRB(16, 12, 16, 4), child: Text( AppLocalizations.of(context)!.sampleData, style: Theme.of(context).textTheme.titleSmall, ), ), Padding( - padding: const EdgeInsets.fromLTRB(16, 0, 16, 8), + padding: EdgeInsets.fromLTRB(16, 0, 16, 8), child: Text( AppLocalizations.of(context)!.sampleDataDescription, style: Theme.of(context).textTheme.bodySmall?.copyWith( @@ -1791,7 +1791,7 @@ class _SettingsScreenState extends State { height: 16, child: CircularProgressIndicator(strokeWidth: 2), ) - : const Icon(Icons.add_circle_outline), + : Icon(Icons.add_circle_outline), label: Text(AppLocalizations.of(context)!.loadSampleData), style: ElevatedButton.styleFrom( padding: const EdgeInsets.symmetric(vertical: 12), @@ -1802,7 +1802,7 @@ class _SettingsScreenState extends State { Expanded( child: OutlinedButton.icon( onPressed: _isLoadingSampleData ? null : _clearSampleData, - icon: const Icon(Icons.delete_outline), + icon: Icon(Icons.delete_outline), label: Text(AppLocalizations.of(context)!.clearAllData), style: OutlinedButton.styleFrom( foregroundColor: Colors.red, @@ -1908,8 +1908,8 @@ class _SettingsScreenState extends State { onPressed: _isPreviewLoading ? null : _selectPreviewImageFromGallery, - icon: const Icon(Icons.photo_library_outlined), - label: const Text('Select from gallery'), + icon: Icon(Icons.photo_library_outlined), + label: Text(AppLocalizations.of(context)!.selectFromGallery), ), ], ), @@ -2115,21 +2115,21 @@ class _SettingsScreenState extends State { children: [ Expanded( child: _voiceStatChip( - label: 'Band-pass', + label: AppLocalizations.of(context)!.bandpass, enabled: bandPassEnabled, ), ), - const SizedBox(width: 8), + SizedBox(width: 8), Expanded( child: _voiceStatChip( - label: 'Compressor', + label: AppLocalizations.of(context)!.compressor, enabled: compressorEnabled, ), ), - const SizedBox(width: 8), + SizedBox(width: 8), Expanded( child: _voiceStatChip( - label: 'Limiter', + label: AppLocalizations.of(context)!.limiter, enabled: limiterEnabled, ), ), @@ -2140,21 +2140,21 @@ class _SettingsScreenState extends State { children: [ Expanded( child: _voiceStatChip( - label: 'Auto gain', + label: AppLocalizations.of(context)!.autoGain, enabled: autoGainEnabled, ), ), - const SizedBox(width: 8), + SizedBox(width: 8), Expanded( child: _voiceStatChip( - label: 'Echo cancel', + label: AppLocalizations.of(context)!.echoCancel, enabled: echoCancellationEnabled, ), ), - const SizedBox(width: 8), + SizedBox(width: 8), Expanded( child: _voiceStatChip( - label: 'Noise suppress', + label: AppLocalizations.of(context)!.noiseSuppress, enabled: noiseSuppressionEnabled, ), ), @@ -2165,7 +2165,7 @@ class _SettingsScreenState extends State { children: [ Expanded( child: _voiceStatChip( - label: 'Silence trim', + label: AppLocalizations.of(context)!.silenceTrim, enabled: silenceTrimEnabled, ), ), @@ -2237,7 +2237,7 @@ class _SettingsScreenState extends State { subtitle: Text(AppLocalizations.of(context)!.blueDarkTheme), value: AppThemeMode.dark, ), - const Divider(), + Divider(), RadioListTile( title: Row( children: [ @@ -2301,7 +2301,7 @@ class _SettingsScreenState extends State { ), value: AppThemeMode.sarNavyBlue, ), - const Divider(), + Divider(), RadioListTile( title: Text(AppLocalizations.of(context)!.autoSystem), subtitle: Text( @@ -2368,7 +2368,7 @@ class _SettingsScreenState extends State { showDialog( context: context, builder: (context) => AlertDialog( - title: const Text('Max image size'), + title: Text(AppLocalizations.of(context)!.maxImageSize), content: SingleChildScrollView( child: RadioGroup( groupValue: _imageMaxSize, @@ -2384,7 +2384,7 @@ class _SettingsScreenState extends State { value: size, title: Text('$size×$size px'), subtitle: size == ImagePreferences.defaultMaxSize - ? const Text('Default') + ? Text(AppLocalizations.of(context)!.defaultValue) : null, ), ) @@ -2406,7 +2406,7 @@ class _SettingsScreenState extends State { showDialog( context: context, builder: (context) => AlertDialog( - title: const Text('Voice bitrate'), + title: Text(AppLocalizations.of(context)!.voiceBitrate), content: SingleChildScrollView( child: RadioGroup( groupValue: _voiceBitrate, @@ -2425,7 +2425,7 @@ class _SettingsScreenState extends State { title: Text('$bitrate bps'), subtitle: bitrate == VoiceBitratePreferences.defaultBitrate - ? const Text('Default') + ? Text(AppLocalizations.of(context)!.defaultValue) : null, ), ) @@ -2464,16 +2464,16 @@ class _SettingsScreenState extends State { 'Version ${_packageInfo?.version ?? '1.0.0'}', style: Theme.of(context).textTheme.bodyMedium, ), - const SizedBox(height: 16), + SizedBox(height: 16), Text(AppLocalizations.of(context)!.aboutDescription), - const SizedBox(height: 16), + SizedBox(height: 16), Text( AppLocalizations.of(context)!.technologiesUsed, style: Theme.of( context, ).textTheme.titleMedium?.copyWith(fontWeight: FontWeight.bold), ), - const SizedBox(height: 8), + SizedBox(height: 8), Text(AppLocalizations.of(context)!.technologiesList), ], ), @@ -2486,7 +2486,7 @@ class _SettingsScreenState extends State { await launchUrl(url, mode: LaunchMode.externalApplication); } }, - icon: const Icon(Icons.open_in_new), + icon: Icon(Icons.open_in_new), label: Text(AppLocalizations.of(context)!.moreInfo), ), TextButton( diff --git a/lib/screens/spectrum_scan_screen.dart b/lib/screens/spectrum_scan_screen.dart index 7f6b4a7..a1286bd 100644 --- a/lib/screens/spectrum_scan_screen.dart +++ b/lib/screens/spectrum_scan_screen.dart @@ -4,6 +4,7 @@ import 'package:provider/provider.dart'; import '../models/device_info.dart'; import '../providers/connection_provider.dart'; import '../widgets/device/spectrum_scan_panel.dart'; +import '../l10n/app_localizations.dart'; class SpectrumScanScreen extends StatefulWidget { const SpectrumScanScreen({super.key}); @@ -323,8 +324,8 @@ class _SpectrumScanScreenState extends State { final mergedCandidates = _mergeSectorCandidates(sectorCandidates); if (mergedCandidates.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Spectrum scan returned no candidate frequencies'), + SnackBar( + content: Text(AppLocalizations.of(context)!.spectrumScanReturnedNoCandidateFrequencies), backgroundColor: Colors.red, ), ); @@ -383,7 +384,7 @@ class _SpectrumScanScreenState extends State { : possibleBracketFrequencies; return Scaffold( - appBar: AppBar(title: const Text('Spectrum Scan')), + appBar: AppBar(title: Text(AppLocalizations.of(context)!.spectrumScan)), body: ListView( padding: const EdgeInsets.all(16), children: [ diff --git a/lib/screens/welcome_wizard_screen.dart b/lib/screens/welcome_wizard_screen.dart index d9526f6..01d9fd3 100644 --- a/lib/screens/welcome_wizard_screen.dart +++ b/lib/screens/welcome_wizard_screen.dart @@ -331,7 +331,7 @@ class _WelcomeWizardScreenState extends State { if (_currentPage > 0) TextButton.icon( onPressed: _previousPage, - icon: const Icon(Icons.arrow_back), + icon: Icon(Icons.arrow_back), label: Text(l10n.wizardBack), ) else @@ -510,7 +510,7 @@ class _WelcomeWizardScreenState extends State { ? colorScheme.primary : colorScheme.onSurfaceVariant, ), - const SizedBox(width: 12), + SizedBox(width: 12), Expanded( child: Text( isConnected @@ -601,7 +601,7 @@ class _WelcomeWizardScreenState extends State { _selectedPreset.summary, style: Theme.of(context).textTheme.bodyMedium, ), - const SizedBox(height: 14), + SizedBox(height: 14), ...[ _FeatureItem( icon: Icons.rule, diff --git a/lib/widgets/connection_dialog.dart b/lib/widgets/connection_dialog.dart index c5a25c5..e88328d 100644 --- a/lib/widgets/connection_dialog.dart +++ b/lib/widgets/connection_dialog.dart @@ -221,7 +221,7 @@ class _ConnectionDialogState extends State Icons.info_outline, color: Theme.of(context).colorScheme.onPrimaryContainer, ), - const SizedBox(width: 12), + SizedBox(width: 12), Expanded( child: Text( AppLocalizations.of(context)!.defaultPinInfo, @@ -260,7 +260,7 @@ class _ConnectionDialogState extends State context, ).colorScheme.onSurfaceVariant.withValues(alpha: 0.5), ), - const SizedBox(height: 16), + SizedBox(height: 16), Text( AppLocalizations.of(context)!.noDevicesFound, style: TextStyle( @@ -271,7 +271,7 @@ class _ConnectionDialogState extends State const SizedBox(height: 8), TextButton.icon( onPressed: _refreshBleDevices, - icon: const Icon(Icons.refresh), + icon: Icon(Icons.refresh), label: Text(AppLocalizations.of(context)!.scanAgain), ), ], diff --git a/lib/widgets/contacts/add_channel_dialog.dart b/lib/widgets/contacts/add_channel_dialog.dart index cd60f7a..e694849 100644 --- a/lib/widgets/contacts/add_channel_dialog.dart +++ b/lib/widgets/contacts/add_channel_dialog.dart @@ -133,7 +133,7 @@ class _AddChannelSheetState extends State { onPressed: _isCreating ? null : () => Navigator.of(context).pop(), - icon: const Icon(Icons.close), + icon: Icon(Icons.close), tooltip: l10n.close, ), ], @@ -158,7 +158,7 @@ class _AddChannelSheetState extends State { size: 20, color: theme.colorScheme.primary, ), - const SizedBox(width: 8), + SizedBox(width: 8), Expanded( child: Text( l10n.channelTypesInfo, @@ -170,7 +170,7 @@ class _AddChannelSheetState extends State { ], ), ), - const SizedBox(height: 16), + SizedBox(height: 16), TextFormField( controller: _nameController, decoration: InputDecoration( @@ -196,7 +196,7 @@ class _AddChannelSheetState extends State { }, ), if (!isHashChannel) ...[ - const SizedBox(height: 16), + SizedBox(height: 16), TextFormField( controller: _secretController, decoration: InputDecoration( @@ -211,7 +211,7 @@ class _AddChannelSheetState extends State { textInputAction: TextInputAction.done, onFieldSubmitted: (_) => _handleCreate(), ), - const SizedBox(height: 8), + SizedBox(height: 8), Text( l10n.channelSecretHelp, style: theme.textTheme.bodySmall?.copyWith( @@ -236,7 +236,7 @@ class _AddChannelSheetState extends State { size: 20, color: Colors.blue, ), - const SizedBox(width: 8), + SizedBox(width: 8), Expanded( child: Text( l10n.hashChannelInfo, diff --git a/lib/widgets/contacts/contact_route_dialog.dart b/lib/widgets/contacts/contact_route_dialog.dart index b1bd469..f81a510 100644 --- a/lib/widgets/contacts/contact_route_dialog.dart +++ b/lib/widgets/contacts/contact_route_dialog.dart @@ -7,6 +7,7 @@ import 'package:provider/provider.dart'; import '../../models/contact.dart'; import '../../models/path_history.dart'; +import '../../l10n/app_localizations.dart'; import '../../providers/app_provider.dart'; import '../../providers/connection_provider.dart'; import '../../services/contact_route_resolver.dart'; @@ -213,6 +214,16 @@ class _ContactRouteDialogState extends State { ); } + ParsedContactRoute? get _effectiveRoute { + if (_parsedRoute != null) { + return _parsedRoute; + } + if (_errorText != null || _controller.text.trim().isNotEmpty) { + return null; + } + return ContactRouteCodec.direct(hashSize: _selectedHashSize); + } + void _toggleHop(Contact contact) { setState(() { if (_selectedMapHops.any( @@ -415,13 +426,14 @@ class _ContactRouteDialogState extends State { ), trailing: FilledButton.tonal( onPressed: () => _applyHistoryRecord(record), - child: const Text('Use'), + child: Text(AppLocalizations.of(context)!.use), ), ), ); } Widget _buildPreviewSection() { + final previewRoute = _effectiveRoute; final colorScheme = Theme.of(context).colorScheme; return Container( width: double.infinity, @@ -435,20 +447,21 @@ class _ContactRouteDialogState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - _parsedRoute == null ? 'Route preview' : _parsedRoute!.summary, + previewRoute == null ? 'Route preview' : previewRoute.summary, style: Theme.of(context).textTheme.titleSmall, ), const SizedBox(height: 4), Text( - _parsedRoute == null + previewRoute == null ? 'Pick relays from the list below or open manual edit if you need exact hop tokens.' - : '${_parsedRoute!.byteLength} bytes • descriptor 0x${_parsedRoute!.encodedPathLen.toRadixString(16).padLeft(2, '0').toUpperCase()}', + : '${previewRoute.byteLength} bytes • descriptor 0x${previewRoute.encodedPathLen.toRadixString(16).padLeft(2, '0').toUpperCase()}', style: Theme.of(context).textTheme.bodySmall, ), - if (_parsedRoute != null) ...[ + if (previewRoute != null && + previewRoute.canonicalText.isNotEmpty) ...[ const SizedBox(height: 10), SelectableText( - _parsedRoute!.canonicalText, + previewRoute.canonicalText, style: Theme.of( context, ).textTheme.bodyMedium?.copyWith(fontFamily: 'monospace'), @@ -469,7 +482,7 @@ class _ContactRouteDialogState extends State { border: Border.all(color: Theme.of(context).dividerColor), ), child: Text( - 'No relays selected yet. Add repeaters below or let auto resolve build a route.', + 'No relays selected. Save now to use a direct path, or add repeaters below.', style: Theme.of(context).textTheme.bodyMedium, ), ); @@ -590,7 +603,7 @@ class _ContactRouteDialogState extends State { _showManualEditor = expanded; }); }, - title: const Text('Manual route edit'), + title: Text(AppLocalizations.of(context)!.manualRouteEdit), subtitle: const Text( 'Use this when you need to paste or tweak hop tokens directly.', ), @@ -728,8 +741,8 @@ class _ContactRouteDialogState extends State { children: [ FilledButton.tonalIcon( onPressed: _resolvePathAutomatically, - icon: const Icon(Icons.auto_fix_high), - label: const Text('Auto resolve'), + icon: Icon(Icons.auto_fix_high), + label: Text(AppLocalizations.of(context)!.autoResolve), ), OutlinedButton.icon( onPressed: _selectedMapHops.isEmpty @@ -740,8 +753,8 @@ class _ContactRouteDialogState extends State { _syncControllerFromSelectedHops(); }); }, - icon: const Icon(Icons.clear_all), - label: const Text('Clear relays'), + icon: Icon(Icons.clear_all), + label: Text(AppLocalizations.of(context)!.clearRelays), ), ], ), @@ -796,7 +809,7 @@ class _ContactRouteDialogState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ if (observedRecord != null) ...[ - _buildHistoryRecordTile(observedRecord, title: 'Observed mesh route'), + _buildHistoryRecordTile(observedRecord, title: AppLocalizations.of(context)!.observedMeshRoute), const SizedBox(height: 16), ], if (remainingRecords.isEmpty) @@ -822,6 +835,7 @@ class _ContactRouteDialogState extends State { @override Widget build(BuildContext context) { + final effectiveRoute = _effectiveRoute; final appProvider = context.watch(); final connectionProvider = context.watch(); final selfPoint = @@ -939,22 +953,24 @@ class _ContactRouteDialogState extends State { TextButton( onPressed: () => Navigator.of( context, - ).pop(const ContactRouteDialogResult.clear()), - child: const Text('Clear Route'), + ).pop(ContactRouteDialogResult.clear()), + child: Text( + '${AppLocalizations.of(context)!.clearRoute} (${AppLocalizations.of(context)!.flood})', + ), ) else const SizedBox.shrink(), FilledButton( - onPressed: _parsedRoute == null + onPressed: effectiveRoute == null ? null : () => Navigator.of(context).pop( ContactRouteDialogResult.setWithFallback( - _parsedRoute!, + effectiveRoute, inferredFallbackLocation: _buildSyntheticFallbackLocation(), ), ), - child: const Text('Save Path'), + child: Text(AppLocalizations.of(context)!.savePath), ), ], ), diff --git a/lib/widgets/contacts/contact_tile.dart b/lib/widgets/contacts/contact_tile.dart index 54414b0..8208904 100644 --- a/lib/widgets/contacts/contact_tile.dart +++ b/lib/widgets/contacts/contact_tile.dart @@ -159,7 +159,7 @@ class ContactTile extends StatelessWidget { Row(children: [_buildRoutePill(context, contact)]), ] else Padding( - padding: const EdgeInsets.only(top: 4), + padding: EdgeInsets.only(top: 4), child: Text( AppLocalizations.of(context)!.noGpsData, style: Theme.of( @@ -361,8 +361,8 @@ class ContactTile extends StatelessWidget { onTap: () async { Navigator.pop(sheetContext); final toggled = contact.toggleFavourite(); - final connectionProvider = - context.read(); + final connectionProvider = context + .read(); await connectionProvider.addOrUpdateContact(toggled); if (context.mounted) { // Refresh contact from device so the local cache is updated @@ -372,12 +372,12 @@ class ContactTile extends StatelessWidget { ), if (!contact.isChannel) ListTile( - leading: const Icon(Icons.share_outlined), - title: const Text('Share Contact'), + leading: Icon(Icons.share_outlined), + title: Text(l10n.shareContact), onTap: () async { Navigator.pop(sheetContext); - final connectionProvider = - context.read(); + final connectionProvider = context + .read(); final url = await connectionProvider.exportContactUrl( contact.publicKey, ); @@ -385,22 +385,20 @@ class ContactTile extends StatelessWidget { await Clipboard.setData(ClipboardData(text: url)); if (context.mounted) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Contact link copied to clipboard'), + SnackBar( + content: Text(l10n.contactLinkCopiedToClipboard), ), ); } } else if (context.mounted) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Failed to export contact'), - ), + SnackBar(content: Text(l10n.failedToExportContact)), ); } }, ), ListTile( - leading: const Icon(Icons.message_outlined), + leading: Icon(Icons.message_outlined), title: Text(l10n.messages), enabled: canMessage, onTap: !canMessage @@ -412,7 +410,7 @@ class ContactTile extends StatelessWidget { ), if (contact.displayLocation != null) ListTile( - leading: const Icon(Icons.map_outlined), + leading: Icon(Icons.map_outlined), title: Text(l10n.viewOnMap), onTap: () { Navigator.pop(sheetContext); @@ -438,8 +436,8 @@ class ContactTile extends StatelessWidget { ), if (canPreviewSensor) ListTile( - leading: const Icon(Icons.visibility_outlined), - title: const Text('Preview'), + leading: Icon(Icons.visibility_outlined), + title: Text(l10n.preview), onTap: () async { Navigator.pop(sheetContext); await Future.delayed(Duration.zero); @@ -467,7 +465,7 @@ class ContactTile extends StatelessWidget { ), if (canSetPath) ListTile( - leading: const Icon(Icons.alt_route), + leading: Icon(Icons.alt_route), title: Text(l10n.contactSetPath), onTap: () { Navigator.pop(sheetContext); @@ -476,8 +474,8 @@ class ContactTile extends StatelessWidget { ), if (!contact.isChannel) ListTile( - leading: const Icon(Icons.route), - title: const Text('Trace'), + leading: Icon(Icons.route), + title: Text(l10n.trace), onTap: () { Navigator.pop(sheetContext); _showTraceSheet(context, contact); @@ -494,8 +492,8 @@ class ContactTile extends StatelessWidget { ), if (!contact.isPublicChannel) ListTile( - leading: const Icon(Icons.edit_outlined), - title: const Text('Edit name'), + leading: Icon(Icons.edit_outlined), + title: Text(l10n.editName), onTap: () { Navigator.pop(sheetContext); _showNameOverrideDialog(context, contact); @@ -503,7 +501,7 @@ class ContactTile extends StatelessWidget { ), if (!contact.isPublicChannel) ListTile( - leading: const Icon(Icons.delete, color: Colors.red), + leading: Icon(Icons.delete, color: Colors.red), title: Text( contact.isChannel ? l10n.deleteChannel : l10n.deleteContact, style: const TextStyle(color: Colors.red), @@ -788,12 +786,13 @@ class ContactTile extends StatelessWidget { paddedPathBytes: parsedRoute.paddedPathBytes, ); if (context.mounted) { + final routeLabel = parsedRoute.hopCount == 0 + ? AppLocalizations.of(context)!.direct + : parsedRoute.canonicalText; ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( - AppLocalizations.of( - context, - )!.contactRouteSet(parsedRoute.canonicalText), + AppLocalizations.of(context)!.contactRouteSet(routeLabel), ), ), ); @@ -1321,14 +1320,16 @@ class _NeighboursSheetState extends State<_NeighboursSheet> { final timestampOrMs = int.tryParse(parts[1]); final snrRaw = int.tryParse(parts[2]); final isMs = timestampOrMs != null && timestampOrMs < 1e9; - parsed.add(_Neighbour( - publicKeyHex: keyHex, - lastSeenAt: !isMs && timestampOrMs != null - ? DateTime.fromMillisecondsSinceEpoch(timestampOrMs * 1000) - : null, - lastSeenMs: isMs ? timestampOrMs : null, - snrDb: snrRaw != null ? snrRaw / 4.0 : null, - )); + parsed.add( + _Neighbour( + publicKeyHex: keyHex, + lastSeenAt: !isMs && timestampOrMs != null + ? DateTime.fromMillisecondsSinceEpoch(timestampOrMs * 1000) + : null, + lastSeenMs: isMs ? timestampOrMs : null, + snrDb: snrRaw != null ? snrRaw / 4.0 : null, + ), + ); } } @@ -1401,41 +1402,35 @@ class _NeighboursSheetState extends State<_NeighboursSheet> { child: _loading ? const Center(child: CircularProgressIndicator()) : _error != null - ? Center( - child: Padding( - padding: const EdgeInsets.all(24), - child: Text( - _error!, - textAlign: TextAlign.center, - ), - ), - ) - : _neighbours.isEmpty - ? const Center(child: Text('No neighbours found')) - : ListView.builder( - padding: const EdgeInsets.only(bottom: 16), - itemCount: _neighbours.length, - itemBuilder: (context, index) { - final n = _neighbours[index]; - final name = - _resolveNeighbourName(n.publicKeyHex); - final parts = [ - if (n.snrDb != null) - 'SNR ${n.snrDb!.toStringAsFixed(1)} dB', - if (n.lastSeenAt != null) - _formatAge(n.lastSeenAt!), - if (n.lastSeenMs != null) - '${n.lastSeenMs}ms ago', - ]; - return ListTile( - leading: const Icon(Icons.router_outlined), - title: Text(name), - subtitle: parts.isNotEmpty - ? Text(parts.join(' • ')) - : null, - ); - }, - ), + ? Center( + child: Padding( + padding: const EdgeInsets.all(24), + child: Text(_error!, textAlign: TextAlign.center), + ), + ) + : _neighbours.isEmpty + ? const Center(child: Text('No neighbours found')) + : ListView.builder( + padding: const EdgeInsets.only(bottom: 16), + itemCount: _neighbours.length, + itemBuilder: (context, index) { + final n = _neighbours[index]; + final name = _resolveNeighbourName(n.publicKeyHex); + final parts = [ + if (n.snrDb != null) + 'SNR ${n.snrDb!.toStringAsFixed(1)} dB', + if (n.lastSeenAt != null) _formatAge(n.lastSeenAt!), + if (n.lastSeenMs != null) '${n.lastSeenMs}ms ago', + ]; + return ListTile( + leading: const Icon(Icons.router_outlined), + title: Text(name), + subtitle: parts.isNotEmpty + ? Text(parts.join(' • ')) + : null, + ); + }, + ), ), ], ), diff --git a/lib/widgets/contacts/room_login_sheet.dart b/lib/widgets/contacts/room_login_sheet.dart index 9f1a80a..6373251 100644 --- a/lib/widgets/contacts/room_login_sheet.dart +++ b/lib/widgets/contacts/room_login_sheet.dart @@ -401,7 +401,7 @@ class _RoomLoginSheetState extends State { color: colorScheme.onPrimaryContainer, size: 20, ), - const SizedBox(width: 12), + SizedBox(width: 12), Expanded( child: Text( AppLocalizations.of(context)!.enterPasswordInfo, @@ -488,7 +488,7 @@ class _RoomLoginSheetState extends State { height: 20, child: CircularProgressIndicator(strokeWidth: 2), ) - : const Icon(Icons.login), + : Icon(Icons.login), label: Text( _isLoggingIn ? AppLocalizations.of(context)!.loggingInDots diff --git a/lib/widgets/device/spectrum_scan_panel.dart b/lib/widgets/device/spectrum_scan_panel.dart index c626e11..4c3580a 100644 --- a/lib/widgets/device/spectrum_scan_panel.dart +++ b/lib/widgets/device/spectrum_scan_panel.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:meshcore_client/meshcore_client.dart'; +import '../../l10n/app_localizations.dart'; class SpectrumScanPanel extends StatelessWidget { final ThemeData theme; @@ -103,12 +104,12 @@ class SpectrumScanPanel extends StatelessWidget { children: [ _LegendChip( color: theme.colorScheme.primary, - label: 'Quiet', + label: AppLocalizations.of(context)!.quiet, ), - const _LegendChip(color: Colors.orange, label: 'Moderate'), + _LegendChip(color: Colors.orange, label: AppLocalizations.of(context)!.moderate), _LegendChip( color: theme.colorScheme.error, - label: 'Busy', + label: AppLocalizations.of(context)!.busy, ), ], ), @@ -211,8 +212,8 @@ class SpectrumScanPanel extends StatelessWidget { onPressed: selectedFrequencyKhz == null ? null : onApplySelected, - icon: const Icon(Icons.north_east), - label: const Text('Use selected frequency'), + icon: Icon(Icons.north_east), + label: Text(AppLocalizations.of(context)!.useSelectedFrequency), ), ), ], diff --git a/lib/widgets/map/compass/compass_contact_list.dart b/lib/widgets/map/compass/compass_contact_list.dart index 51bc4ba..b80a551 100644 --- a/lib/widgets/map/compass/compass_contact_list.dart +++ b/lib/widgets/map/compass/compass_contact_list.dart @@ -100,7 +100,7 @@ class CompassContactList extends StatelessWidget { // Persons/Team section if (showContacts && persons.isNotEmpty) ...[ Padding( - padding: const EdgeInsets.only(left: 16, bottom: 8, top: 4), + padding: EdgeInsets.only(left: 16, bottom: 8, top: 4), child: Text( l10n.teamMembers, style: Theme.of( @@ -135,7 +135,7 @@ class CompassContactList extends StatelessWidget { // Repeaters section if (showRepeaters && repeaters.isNotEmpty) ...[ Padding( - padding: const EdgeInsets.only(left: 16, bottom: 8, top: 12), + padding: EdgeInsets.only(left: 16, bottom: 8, top: 12), child: Text( l10n.repeaters, style: Theme.of( @@ -151,7 +151,7 @@ class CompassContactList extends StatelessWidget { // Rooms section if (rooms.isNotEmpty) ...[ Padding( - padding: const EdgeInsets.only(left: 16, bottom: 8, top: 12), + padding: EdgeInsets.only(left: 16, bottom: 8, top: 12), child: Text( l10n.rooms, style: Theme.of( diff --git a/lib/widgets/map/compass/compass_filters.dart b/lib/widgets/map/compass/compass_filters.dart index 6b3ace4..b10523d 100644 --- a/lib/widgets/map/compass/compass_filters.dart +++ b/lib/widgets/map/compass/compass_filters.dart @@ -49,7 +49,7 @@ class _CompassFiltersState extends State { title: Row( children: [ const Icon(Icons.filter_list, size: 20), - const SizedBox(width: 8), + SizedBox(width: 8), Text(l10n.filterMarkers), ], ), @@ -62,7 +62,7 @@ class _CompassFiltersState extends State { _CompactFilterItem( icon: Icons.timeline, color: Colors.blue, - label: 'Location Trail', + label: l10n.locationTrail, value: mapProvider.isTrailVisible, onChanged: (value) { mapProvider.toggleTrailVisibility(); @@ -100,7 +100,7 @@ class _CompassFiltersState extends State { const SizedBox(height: 4), // SAR Markers section Padding( - padding: const EdgeInsets.only(left: 8, bottom: 8, top: 4), + padding: EdgeInsets.only(left: 8, bottom: 8, top: 4), child: Text( l10n.sarMarkers, style: Theme.of(context).textTheme.labelLarge?.copyWith( @@ -118,7 +118,7 @@ class _CompassFiltersState extends State { setDialogState(() {}); }, ), - const SizedBox(height: 4), + SizedBox(height: 4), _CompactFilterItem( icon: Icons.local_fire_department, color: Colors.red, @@ -129,7 +129,7 @@ class _CompassFiltersState extends State { setDialogState(() {}); }, ), - const SizedBox(height: 4), + SizedBox(height: 4), _CompactFilterItem( icon: Icons.home_work, color: Colors.orange, @@ -164,7 +164,7 @@ class _CompassFiltersState extends State { Widget build(BuildContext context) { final l10n = AppLocalizations.of(context)!; return IconButton( - icon: const Icon(Icons.filter_list), + icon: Icon(Icons.filter_list), tooltip: l10n.filterMarkersTooltip, onPressed: () => _showFilterDialog(), ); diff --git a/lib/widgets/map/compass/compass_header.dart b/lib/widgets/map/compass/compass_header.dart index 2130d12..094ed81 100644 --- a/lib/widgets/map/compass/compass_header.dart +++ b/lib/widgets/map/compass/compass_header.dart @@ -565,7 +565,7 @@ class _LocationFormatToggleState extends State<_LocationFormatToggle> { Widget build(BuildContext context) { final position = widget.position; if (position == null) { - return const SizedBox.shrink(); + return SizedBox.shrink(); } final l10n = AppLocalizations.of(context)!; diff --git a/lib/widgets/map/compass/compass_sar_list.dart b/lib/widgets/map/compass/compass_sar_list.dart index 84c3653..d8a7429 100644 --- a/lib/widgets/map/compass/compass_sar_list.dart +++ b/lib/widgets/map/compass/compass_sar_list.dart @@ -64,7 +64,7 @@ class CompassSarList extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( - padding: const EdgeInsets.only(left: 16, top: 16, bottom: 8), + padding: EdgeInsets.only(left: 16, top: 16, bottom: 8), child: Text( l10n.sarMarkers, style: Theme.of(context).textTheme.titleMedium?.copyWith( diff --git a/lib/widgets/map/drawing_toolbar.dart b/lib/widgets/map/drawing_toolbar.dart index 646f954..ad213fc 100644 --- a/lib/widgets/map/drawing_toolbar.dart +++ b/lib/widgets/map/drawing_toolbar.dart @@ -603,7 +603,7 @@ class DrawingToolbar extends StatelessWidget { child: Row( children: [ const Icon(Icons.share), - const SizedBox(width: 12), + SizedBox(width: 12), Expanded( child: Text( AppLocalizations.of(context)!.shareDrawingsCount( @@ -620,7 +620,7 @@ class DrawingToolbar extends StatelessWidget { const Divider(), // Option: Send to Public Channel ListTile( - leading: const Icon(Icons.public, color: Colors.blue), + leading: Icon(Icons.public, color: Colors.blue), title: Text(AppLocalizations.of(context)!.publicChannel), subtitle: Text(AppLocalizations.of(context)!.broadcastToAll), onTap: () async { diff --git a/lib/widgets/map/map_legend.dart b/lib/widgets/map/map_legend.dart index 8452a5d..7da7406 100644 --- a/lib/widgets/map/map_legend.dart +++ b/lib/widgets/map/map_legend.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import '../../l10n/app_localizations.dart'; class MapLegend extends StatelessWidget { final int teamMemberCount; @@ -35,31 +36,31 @@ class MapLegend extends StatelessWidget { _LegendItem( icon: Icons.person, color: Theme.of(context).colorScheme.primary, - label: 'Team', + label: AppLocalizations.of(context)!.team, count: teamMemberCount, ), _LegendItem( icon: Icons.person_pin, color: Colors.green, - label: 'Found', + label: AppLocalizations.of(context)!.found, count: foundPersonCount, ), _LegendItem( icon: Icons.local_fire_department, color: Colors.red, - label: 'Fire', + label: AppLocalizations.of(context)!.fire, count: fireCount, ), _LegendItem( icon: Icons.home_work, color: Colors.orange, - label: 'Staging', + label: AppLocalizations.of(context)!.staging, count: stagingAreaCount, ), _LegendItem( icon: Icons.inventory_2, color: Colors.purple, - label: 'Object', + label: AppLocalizations.of(context)!.object, count: objectCount, ), ], diff --git a/lib/widgets/map/map_message_overlay.dart b/lib/widgets/map/map_message_overlay.dart index fbaa1e2..07ad24a 100644 --- a/lib/widgets/map/map_message_overlay.dart +++ b/lib/widgets/map/map_message_overlay.dart @@ -98,7 +98,7 @@ class _MapMessageOverlayState extends State { color: Colors.white, size: 20, ), - const SizedBox(width: 8), + SizedBox(width: 8), Expanded( child: Text( AppLocalizations.of(context)!.recentMessages, diff --git a/lib/widgets/map/trail_controls.dart b/lib/widgets/map/trail_controls.dart index 6f7bca2..f2c112b 100644 --- a/lib/widgets/map/trail_controls.dart +++ b/lib/widgets/map/trail_controls.dart @@ -39,7 +39,7 @@ class TrailControls extends StatelessWidget { Row( children: [ const Icon(Icons.timeline, size: 24), - const SizedBox(width: 12), + SizedBox(width: 12), Text( l10n.locationTrail, style: const TextStyle( @@ -53,7 +53,7 @@ class TrailControls extends StatelessWidget { // Trail visibility toggle SwitchListTile( - secondary: const Icon(Icons.visibility), + secondary: Icon(Icons.visibility), title: Text(l10n.showTrailOnMap), subtitle: Text( mapProvider.isTrailVisible @@ -75,7 +75,7 @@ class TrailControls extends StatelessWidget { children: [ OutlinedButton.icon( onPressed: () => _importTrail(context, mapProvider), - icon: const Icon(Icons.file_upload_outlined), + icon: Icon(Icons.file_upload_outlined), label: Text(l10n.importFromClipboard), ), if (mapProvider.currentTrail != null && @@ -86,7 +86,7 @@ class TrailControls extends StatelessWidget { mapProvider.currentTrail!, customName: 'My Trail', ), - icon: const Icon(Icons.file_download_outlined), + icon: Icon(Icons.file_download_outlined), label: Text(l10n.exportToClipboard), ), ], @@ -116,13 +116,13 @@ class TrailControls extends StatelessWidget { mapProvider.totalTrailDistance, ), ), - const SizedBox(height: 8), + SizedBox(height: 8), _buildStatRow( icon: Icons.access_time, label: l10n.duration, value: _formatDuration(mapProvider.trailDuration), ), - const SizedBox(height: 8), + SizedBox(height: 8), _buildStatRow( icon: Icons.place, label: l10n.points, @@ -139,7 +139,7 @@ class TrailControls extends StatelessWidget { onPressed: () { _showClearConfirmation(context, mapProvider, l10n); }, - icon: const Icon(Icons.delete_outline), + icon: Icon(Icons.delete_outline), label: Text(l10n.clearTrail), style: ElevatedButton.styleFrom( backgroundColor: Colors.red, @@ -161,7 +161,7 @@ class TrailControls extends StatelessWidget { size: 48, color: Colors.grey, ), - const SizedBox(height: 8), + SizedBox(height: 8), Text( l10n.noTrailRecorded, style: const TextStyle( @@ -169,7 +169,7 @@ class TrailControls extends StatelessWidget { fontSize: 16, ), ), - const SizedBox(height: 8), + SizedBox(height: 8), Text( l10n.startTrackingToRecord, style: const TextStyle( @@ -191,7 +191,7 @@ class TrailControls extends StatelessWidget { Row( children: [ const Icon(Icons.people, size: 20), - const SizedBox(width: 8), + SizedBox(width: 8), Text( l10n.contactTrails, style: const TextStyle( @@ -205,7 +205,7 @@ class TrailControls extends StatelessWidget { // Show All Contact Trails toggle SwitchListTile( - secondary: const Icon(Icons.route), + secondary: Icon(Icons.route), title: Text(l10n.showAllContactTrails), subtitle: Text( contactsWithTrails.isEmpty diff --git a/lib/widgets/messages/custom_map_sar_update_sheet.dart b/lib/widgets/messages/custom_map_sar_update_sheet.dart index 46eddc6..affb90f 100644 --- a/lib/widgets/messages/custom_map_sar_update_sheet.dart +++ b/lib/widgets/messages/custom_map_sar_update_sheet.dart @@ -200,7 +200,7 @@ class _CustomMapSarUpdateSheetState extends State { ), ); }), - const SizedBox(height: 24), + SizedBox(height: 24), Text( AppLocalizations.of(context)!.sendTo, style: TextStyle( @@ -231,7 +231,7 @@ class _CustomMapSarUpdateSheetState extends State { color: Colors.red.withValues(alpha: 0.3), ), ), - child: const Text('No destinations available'), + child: Text(AppLocalizations.of(context)!.noDestinationsAvailableLabel), ); } @@ -426,7 +426,7 @@ class _CustomMapSarUpdateSheetState extends State { (!_sendToAllContacts && _selectedContact == null)) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( - content: Text('Select marker type and destination'), + content: Text(AppLocalizations.of(context)!.selectMarkerTypeAndDestination), ), ); return; @@ -449,8 +449,8 @@ class _CustomMapSarUpdateSheetState extends State { Navigator.pop(context); } }, - icon: const Icon(Icons.send), - label: const Text('Send'), + icon: Icon(Icons.send), + label: Text(AppLocalizations.of(context)!.send), ), ), ), diff --git a/lib/widgets/messages/message_bubble.dart b/lib/widgets/messages/message_bubble.dart index fbe2d0f..70641b4 100644 --- a/lib/widgets/messages/message_bubble.dart +++ b/lib/widgets/messages/message_bubble.dart @@ -288,7 +288,7 @@ class _MessageBubbleState extends State { children: [ if (!isOwnMessage && widget.onReply != null) ListTile( - leading: const Icon(Icons.reply), + leading: Icon(Icons.reply), title: Text(AppLocalizations.of(context)!.reply), onTap: () { Navigator.pop(context); @@ -297,7 +297,7 @@ class _MessageBubbleState extends State { ), // Copy text option ListTile( - leading: const Icon(Icons.copy), + leading: Icon(Icons.copy), title: Text(AppLocalizations.of(context)!.copyText), onTap: () { Clipboard.setData(ClipboardData(text: widget.message.text)); @@ -329,7 +329,7 @@ class _MessageBubbleState extends State { } return ListTile( - leading: const Icon(Icons.bookmark_add), + leading: Icon(Icons.bookmark_add), title: Text(AppLocalizations.of(context)!.saveAsTemplate), onTap: () { Navigator.pop(context); @@ -342,7 +342,7 @@ class _MessageBubbleState extends State { if (widget.message.isSarMarker && widget.message.sarGpsCoordinates != null) ListTile( - leading: const Icon(Icons.share_location), + leading: Icon(Icons.share_location), title: Text(AppLocalizations.of(context)!.shareLocation), onTap: () { Navigator.pop(context); @@ -352,7 +352,7 @@ class _MessageBubbleState extends State { // Navigate to drawing option (only for drawing messages) if (widget.message.isDrawing && widget.message.drawingId != null) ListTile( - leading: const Icon(Icons.map), + leading: Icon(Icons.map), title: Text(AppLocalizations.of(context)!.navigateToDrawing), onTap: () { Navigator.pop(context); @@ -362,7 +362,7 @@ class _MessageBubbleState extends State { // Copy coordinates option (only for drawing messages) if (widget.message.isDrawing && widget.message.drawingId != null) ListTile( - leading: const Icon(Icons.copy), + leading: Icon(Icons.copy), title: Text(AppLocalizations.of(context)!.copyCoordinates), onTap: () { Navigator.pop(context); @@ -372,7 +372,7 @@ class _MessageBubbleState extends State { // Hide from map option (only for drawing messages) if (widget.message.isDrawing && widget.message.drawingId != null) ListTile( - leading: const Icon(Icons.visibility_off), + leading: Icon(Icons.visibility_off), title: Text(AppLocalizations.of(context)!.hideFromMap), onTap: () { Navigator.pop(context); @@ -381,7 +381,7 @@ class _MessageBubbleState extends State { ), // Technical details option ListTile( - leading: const Icon(Icons.data_object), + leading: Icon(Icons.data_object), title: Text(AppLocalizations.of(context)!.technicalDetails), onTap: () { Navigator.pop(context); @@ -392,8 +392,8 @@ class _MessageBubbleState extends State { widget.message.pathLen > 0 && widget.message.pathLen < 255) ListTile( - leading: const Icon(Icons.route), - title: const Text('Trace'), + leading: Icon(Icons.route), + title: Text(AppLocalizations.of(context)!.trace), onTap: () { Navigator.pop(context); _showTraceSheet(context); @@ -401,7 +401,7 @@ class _MessageBubbleState extends State { ), // Delete message option ListTile( - leading: const Icon(Icons.delete, color: Colors.red), + leading: Icon(Icons.delete, color: Colors.red), title: Text( AppLocalizations.of(context)!.delete, style: const TextStyle(color: Colors.red), @@ -686,7 +686,7 @@ class _MessageBubbleState extends State { void copyField(String value) { Clipboard.setData(ClipboardData(text: value)); - ToastLogger.success(context, l10n.textCopiedToClipboard); + ToastLogger.success(context, AppLocalizations.of(context)!.textCopiedToClipboard); } showModalBottomSheet( @@ -708,14 +708,14 @@ class _MessageBubbleState extends State { children: [ Expanded( child: Text( - l10n.messageTechnicalDetails, + AppLocalizations.of(context)!.messageTechnicalDetails, style: Theme.of(sheetContext).textTheme.titleLarge, ), ), IconButton( onPressed: () => Navigator.pop(sheetContext), - icon: const Icon(Icons.close), - tooltip: l10n.close, + icon: Icon(Icons.close), + tooltip: AppLocalizations.of(context)!.close, ), ], ), @@ -758,17 +758,17 @@ class _MessageBubbleState extends State { if (widget.message.lastEchoRssiDbm != null || snrDb != null || rssiDbm != null) ...[ - const SizedBox(height: 12), + SizedBox(height: 12), _techSection( sheetContext, icon: Icons.network_check, - title: l10n.linkQuality, + title: AppLocalizations.of(context)!.linkQuality, child: Column( children: [ if (rssiDbm != null) _signalRow( sheetContext, - label: 'RSSI', + label: AppLocalizations.of(context)!.rssi, valueLabel: '$rssiDbm dBm', normalized: ((rssiDbm.toDouble() + 120.0) / 70.0) @@ -780,10 +780,10 @@ class _MessageBubbleState extends State { : Colors.redAccent, ), if (snrDb != null) ...[ - const SizedBox(height: 8), + SizedBox(height: 8), _signalRow( sheetContext, - label: 'SNR', + label: AppLocalizations.of(context)!.snr, valueLabel: '${snrDb.toStringAsFixed(1)} dB', normalized: ((snrDb + 20.0) / 40.0).clamp( 0.0, @@ -800,21 +800,21 @@ class _MessageBubbleState extends State { ), ), ], - const SizedBox(height: 12), + SizedBox(height: 12), _techSection( sheetContext, icon: Icons.tune, - title: l10n.delivery, + title: AppLocalizations.of(context)!.delivery, child: Column( children: [ _detailRow( sheetContext, - label: l10n.status, + label: AppLocalizations.of(context)!.status, value: widget.message.deliveryStatus.name, ), _detailRow( sheetContext, - label: 'Received (RFC3339)', + label: AppLocalizations.of(context)!.receivedRfc3339, value: _formatRfc3339(widget.message.receivedAt), onCopy: () => copyField( _formatRfc3339(widget.message.receivedAt), @@ -823,14 +823,14 @@ class _MessageBubbleState extends State { if (widget.message.expectedAckTag != null) _detailRow( sheetContext, - label: l10n.expectedAckTag, + label: AppLocalizations.of(context)!.expectedAckTag, value: widget.message.expectedAckTag! .toString(), ), if (receptionDetails?.senderToReceiptMs != null) _detailRow( sheetContext, - label: 'Sender to receipt', + label: AppLocalizations.of(context)!.senderToReceipt, value: _formatDurationMs( receptionDetails!.senderToReceiptMs!, ), @@ -838,7 +838,7 @@ class _MessageBubbleState extends State { if (receptionDetails?.estimatedTransmitMs != null) _detailRow( sheetContext, - label: 'Estimated tx', + label: AppLocalizations.of(context)!.estimatedTx, value: _formatDurationMs( receptionDetails!.estimatedTransmitMs!, ), @@ -846,7 +846,7 @@ class _MessageBubbleState extends State { if (receptionDetails?.postTransmitDelayMs != null) _detailRow( sheetContext, - label: 'Post-tx delay', + label: AppLocalizations.of(context)!.posttxDelay, value: _formatDurationMs( receptionDetails!.postTransmitDelayMs!, ), @@ -854,44 +854,44 @@ class _MessageBubbleState extends State { if (widget.receivedCopies > 1) _detailRow( sheetContext, - label: 'Received copies', + label: AppLocalizations.of(context)!.receivedCopies, value: '${widget.receivedCopies}', ), if (widget.message.suggestedTimeoutMs != null) _detailRow( sheetContext, - label: 'ACK timeout', + label: AppLocalizations.of(context)!.ackTimeout, value: '${widget.message.suggestedTimeoutMs} ms', ), if (retryCause != null) _detailRow( sheetContext, - label: 'Retry cause', + label: AppLocalizations.of(context)!.retryCause, value: retryCause, ), if (retryMode != null) _detailRow( sheetContext, - label: 'Retry mode', + label: AppLocalizations.of(context)!.retryMode, value: retryMode, ), if (widget.message.roundTripTimeMs != null) _detailRow( sheetContext, - label: l10n.roundTrip, + label: AppLocalizations.of(context)!.roundTrip, value: '${widget.message.roundTripTimeMs} ms', ), if (widget.message.retryAttempt > 0) _detailRow( sheetContext, - label: l10n.retryAttempt, + label: AppLocalizations.of(context)!.retryAttempt, value: '${widget.message.retryAttempt}/4', ), if (widget.message.lastRetryAt != null) _detailRow( sheetContext, - label: 'Last retry', + label: AppLocalizations.of(context)!.lastRetry, value: _formatRfc3339( widget.message.lastRetryAt!, ), @@ -902,49 +902,49 @@ class _MessageBubbleState extends State { if (widget.message.usedFloodFallback) _detailRow( sheetContext, - label: l10n.floodFallback, - value: l10n.yes, + label: AppLocalizations.of(context)!.floodFallback, + value: AppLocalizations.of(context)!.yes, ), if (routeMetadata?.canonicalPath case final routePath?) _detailRow( sheetContext, - label: 'Selected path', + label: AppLocalizations.of(context)!.selectedPath, value: routePath, onCopy: () => copyField(routePath), ), if (retryResult != null) _detailRow( sheetContext, - label: 'Retry result', + label: AppLocalizations.of(context)!.retryResult, value: retryResult, ), if (packetPathHex != null) _detailRow( sheetContext, - label: 'Path bytes', + label: AppLocalizations.of(context)!.pathBytes, value: packetPathHex, onCopy: () => copyField(packetPathHex), ), ], ), ), - const SizedBox(height: 12), + SizedBox(height: 12), _techSection( sheetContext, icon: Icons.badge, - title: l10n.identity, + title: AppLocalizations.of(context)!.identity, child: Column( children: [ _detailRow( sheetContext, - label: l10n.messageId, + label: AppLocalizations.of(context)!.messageId, value: widget.message.id, onCopy: () => copyField(widget.message.id), ), _detailRow( sheetContext, - label: l10n.sender, + label: AppLocalizations.of(context)!.sender, value: senderName ?? widget.message.senderName ?? @@ -953,20 +953,20 @@ class _MessageBubbleState extends State { if (senderPrefixHex != null) _detailRow( sheetContext, - label: l10n.senderKey, + label: AppLocalizations.of(context)!.senderKey, value: senderPrefixHex, onCopy: () => copyField(senderPrefixHex), ), if (recipientName != null) _detailRow( sheetContext, - label: l10n.recipient, + label: AppLocalizations.of(context)!.recipient, value: recipientName, ), if (recipientPrefixHex != null) _detailRow( sheetContext, - label: l10n.recipientKey, + label: AppLocalizations.of(context)!.recipientKey, value: recipientPrefixHex, onCopy: () => copyField(recipientPrefixHex), ), @@ -974,51 +974,51 @@ class _MessageBubbleState extends State { ), ), if (widget.message.isVoice) ...[ - const SizedBox(height: 12), + SizedBox(height: 12), _techSection( sheetContext, icon: Icons.graphic_eq, - title: l10n.voice, + title: AppLocalizations.of(context)!.voice, child: Column( children: [ _detailRow( sheetContext, - label: l10n.voiceId, + label: AppLocalizations.of(context)!.voiceId, value: widget.message.voiceId ?? '-', ), _detailRow( sheetContext, - label: l10n.envelope, + label: AppLocalizations.of(context)!.envelope, value: envelope != null ? 'VE3 compact' - : l10n.unknown, + : AppLocalizations.of(context)!.unknown, ), if (voiceSession != null) _detailRow( sheetContext, - label: l10n.sessionProgress, + label: AppLocalizations.of(context)!.sessionProgress, value: '${voiceSession.receivedCount}/${voiceSession.total} segments', ), if (voiceSession != null) _detailRow( sheetContext, - label: l10n.complete, + label: AppLocalizations.of(context)!.complete, value: voiceSession.isComplete - ? l10n.yes - : l10n.no, + ? AppLocalizations.of(context)!.yes + : AppLocalizations.of(context)!.no, ), if (transferDetails != null) _detailRow( sheetContext, - label: 'Transfers', + label: AppLocalizations.of(context)!.transfers, value: '${transferDetails.totalTransfers}', ), if (transferDetails != null && transferDetails.downloaders.isNotEmpty) _detailRow( sheetContext, - label: 'Downloaded by', + label: AppLocalizations.of(context)!.downloadedBy, value: _formatDownloaderSummary( transferDetails, ), @@ -1026,7 +1026,7 @@ class _MessageBubbleState extends State { if (voiceTxEstimate > Duration.zero) _detailRow( sheetContext, - label: 'Estimated tx', + label: AppLocalizations.of(context)!.estimatedTx, value: voiceTxEstimate.inSeconds < 60 ? '~${voiceTxEstimate.inSeconds}s' : '~${voiceTxEstimate.inMinutes}m ${voiceTxEstimate.inSeconds % 60}s', @@ -1036,32 +1036,32 @@ class _MessageBubbleState extends State { ), ], if (imageEnvelope != null) ...[ - const SizedBox(height: 12), + SizedBox(height: 12), _techSection( sheetContext, icon: Icons.image_outlined, - title: 'Image', + title: AppLocalizations.of(context)!.image, child: Column( children: [ _detailRow( sheetContext, - label: l10n.envelope, + label: AppLocalizations.of(context)!.envelope, value: 'IE1', ), _detailRow( sheetContext, - label: 'Format', + label: AppLocalizations.of(context)!.format, value: imageEnvelope.format.label, ), _detailRow( sheetContext, - label: 'Dimensions', + label: AppLocalizations.of(context)!.dimensions, value: '${imageEnvelope.width}×${imageEnvelope.height}', ), _detailRow( sheetContext, - label: 'Segments', + label: AppLocalizations.of(context)!.segments, value: imageSession != null ? '${imageSession.receivedCount}/${imageSession.total}' : '${imageEnvelope.total}', @@ -1069,22 +1069,22 @@ class _MessageBubbleState extends State { if (imageSession != null) _detailRow( sheetContext, - label: l10n.complete, + label: AppLocalizations.of(context)!.complete, value: imageSession.isComplete - ? l10n.yes - : l10n.no, + ? AppLocalizations.of(context)!.yes + : AppLocalizations.of(context)!.no, ), if (transferDetails != null) _detailRow( sheetContext, - label: 'Transfers', + label: AppLocalizations.of(context)!.transfers, value: '${transferDetails.totalTransfers}', ), if (transferDetails != null && transferDetails.downloaders.isNotEmpty) _detailRow( sheetContext, - label: 'Downloaded by', + label: AppLocalizations.of(context)!.downloadedBy, value: _formatDownloaderSummary( transferDetails, ), @@ -1092,7 +1092,7 @@ class _MessageBubbleState extends State { if (imageTxEstimate > Duration.zero) _detailRow( sheetContext, - label: 'Estimated tx', + label: AppLocalizations.of(context)!.estimatedTx, value: imageTxEstimate.inSeconds < 60 ? '~${imageTxEstimate.inSeconds}s' : '~${imageTxEstimate.inMinutes}m ${imageTxEstimate.inSeconds % 60}s', @@ -1107,7 +1107,7 @@ class _MessageBubbleState extends State { dense: true, visualDensity: VisualDensity.compact, title: Text( - l10n.rawDump, + AppLocalizations.of(context)!.rawDump, style: const TextStyle( fontSize: 12, fontWeight: FontWeight.w600, @@ -1432,7 +1432,7 @@ class _MessageBubbleState extends State { final lon = coords.longitude.toStringAsFixed(6); // Build share text - final shareText = l10n.shareLocationText( + final shareText = AppLocalizations.of(context)!.shareLocationText( markerInfo, lat, lon, @@ -1441,7 +1441,7 @@ class _MessageBubbleState extends State { // Share the location SharePlus.instance.share( - ShareParams(text: shareText, subject: l10n.sarLocationShare), + ShareParams(text: shareText, subject: AppLocalizations.of(context)!.sarLocationShare), ); } @@ -1852,14 +1852,14 @@ class _MessageBubbleState extends State { } } else if (message.isChannelMessage) { if (message.channelIdx == 0) { - channelDisplayName = l10n.publicChannel; + channelDisplayName = AppLocalizations.of(context)!.publicChannel; } else { final channelContact = contactsProvider.channels.where((c) { return c.publicKey.length > 1 && c.publicKey[1] == message.channelIdx; }).firstOrNull; channelDisplayName = channelContact?.getLocalizedDisplayName(context) ?? - '${l10n.channel} ${message.channelIdx}'; + '${AppLocalizations.of(context)!.channel} ${message.channelIdx}'; } if (isOwnMessage) { @@ -1869,14 +1869,14 @@ class _MessageBubbleState extends State { final recipientSubtitle = isOwnMessage && message.isChannelMessage && recipientDisplayName != null - ? '${l10n.channel}: $recipientDisplayName' + ? '${AppLocalizations.of(context)!.channel}: $recipientDisplayName' : recipientDisplayName; final directCounterpartLabel = !message.isChannelMessage - ? (isOwnMessage ? recipientSubtitle : l10n.you) + ? (isOwnMessage ? recipientSubtitle : AppLocalizations.of(context)!.you) : null; final receivedChannelSubtitle = !isOwnMessage && message.isChannelMessage && channelDisplayName != null - ? '${l10n.channel}: $channelDisplayName' + ? '${AppLocalizations.of(context)!.channel}: $channelDisplayName' : null; final shouldFloatBubble = widget.isCompact; @@ -1992,7 +1992,7 @@ class _MessageBubbleState extends State { mainAxisSize: MainAxisSize.min, children: [ const Icon(Icons.draw, size: 16, color: Colors.white), - const SizedBox(width: 4), + SizedBox(width: 4), Text( AppLocalizations.of(context)!.mapDrawing, style: Theme.of(context).textTheme.labelSmall @@ -2029,7 +2029,7 @@ class _MessageBubbleState extends State { size: 16, color: Colors.white, ), - const SizedBox(width: 4), + SizedBox(width: 4), Text( AppLocalizations.of(context)!.sarAlert, style: Theme.of(context).textTheme.labelSmall @@ -2522,7 +2522,7 @@ class _MessageBubbleState extends State { ? Colors.red : Colors.orange, ), - const SizedBox(width: 3), + SizedBox(width: 3), Text( message.deliveredRecipientsCount == message.recipients!.length diff --git a/lib/widgets/messages/messages_content.dart b/lib/widgets/messages/messages_content.dart index c0be707..1daf9df 100644 --- a/lib/widgets/messages/messages_content.dart +++ b/lib/widgets/messages/messages_content.dart @@ -55,12 +55,12 @@ class MessagesContent extends StatelessWidget { size: 64, color: Theme.of(context).disabledColor, ), - const SizedBox(height: 16), + SizedBox(height: 16), Text( AppLocalizations.of(context)!.noMessagesYet, style: Theme.of(context).textTheme.titleLarge, ), - const SizedBox(height: 8), + SizedBox(height: 8), Text( AppLocalizations.of(context)!.pullDownToSync, style: Theme.of(context).textTheme.bodyMedium, diff --git a/lib/widgets/messages/recipient_selector_sheet.dart b/lib/widgets/messages/recipient_selector_sheet.dart index 15fdb0d..8be9073 100644 --- a/lib/widgets/messages/recipient_selector_sheet.dart +++ b/lib/widgets/messages/recipient_selector_sheet.dart @@ -111,7 +111,7 @@ class _RecipientSelectorSheetState extends State { // Search field Padding( - padding: const EdgeInsets.all(16), + padding: EdgeInsets.all(16), child: TextField( controller: _searchController, decoration: InputDecoration( @@ -154,7 +154,7 @@ class _RecipientSelectorSheetState extends State { context: context, icon: Icons.all_inbox, title: l10n.showAll, - subtitle: 'All messages', + subtitle: l10n.allMessages, unreadCount: widget.unreadCount, isSelected: _isSelected('all', null), onTap: () { @@ -181,7 +181,7 @@ class _RecipientSelectorSheetState extends State { ), if (filteredChannels.isEmpty) Padding( - padding: const EdgeInsets.all(16), + padding: EdgeInsets.all(16), child: Text( l10n.noChannelsFound, style: Theme.of(context).textTheme.bodyMedium?.copyWith( @@ -234,7 +234,7 @@ class _RecipientSelectorSheetState extends State { ), if (filteredContacts.isEmpty) Padding( - padding: const EdgeInsets.all(16), + padding: EdgeInsets.all(16), child: Text( l10n.noContactsFound, style: Theme.of(context).textTheme.bodyMedium?.copyWith( @@ -283,7 +283,7 @@ class _RecipientSelectorSheetState extends State { ), if (filteredRooms.isEmpty) Padding( - padding: const EdgeInsets.all(16), + padding: EdgeInsets.all(16), child: Text( l10n.noRoomsFound, style: Theme.of(context).textTheme.bodyMedium?.copyWith( @@ -323,7 +323,7 @@ class _RecipientSelectorSheetState extends State { size: 64, color: Theme.of(context).disabledColor, ), - const SizedBox(height: 16), + SizedBox(height: 16), Text( l10n.noRecipientsAvailable, style: Theme.of(context).textTheme.bodyLarge diff --git a/lib/widgets/messages/sar_update_sheet.dart b/lib/widgets/messages/sar_update_sheet.dart index e3ac95e..5bb6ccf 100644 --- a/lib/widgets/messages/sar_update_sheet.dart +++ b/lib/widgets/messages/sar_update_sheet.dart @@ -381,7 +381,7 @@ class _SarUpdateSheetState extends State { ), ); }), - const SizedBox(height: 16), + SizedBox(height: 16), // Destination selection (compact dropdown with rooms, channels, and all contacts) Text( @@ -505,7 +505,7 @@ class _SarUpdateSheetState extends State { size: 18, color: colorScheme.onSurface, ), - const SizedBox(width: 12), + SizedBox(width: 12), Expanded( child: Text( AppLocalizations.of(context)!.allTeamContacts, @@ -593,7 +593,7 @@ class _SarUpdateSheetState extends State { color: Colors.green, size: 20, ), - const SizedBox(width: 8), + SizedBox(width: 8), Expanded( child: Text( AppLocalizations.of(context)!.directMessagesInfo(chatContactsCount), @@ -718,7 +718,7 @@ class _SarUpdateSheetState extends State { ), ), ), - const SizedBox(width: 16), + SizedBox(width: 16), Text( AppLocalizations.of(context)!.gettingLocation, style: TextStyle(color: colorScheme.onSurface), @@ -979,7 +979,7 @@ class _SarUpdateSheetState extends State { size: 16, color: Colors.blue, ), - const SizedBox(width: 8), + SizedBox(width: 8), Expanded( child: Text( AppLocalizations.of(context)!.exampleCoordinates, @@ -994,7 +994,7 @@ class _SarUpdateSheetState extends State { ), ], - const SizedBox(height: 24), + SizedBox(height: 24), // Optional notes Text( @@ -1193,7 +1193,7 @@ class _SarUpdateSheetState extends State { borderRadius: BorderRadius.circular(8), ), ), - icon: const Icon(Icons.send, size: 20), + icon: Icon(Icons.send, size: 20), label: Text( AppLocalizations.of(context)!.sendSarMarker, style: const TextStyle( diff --git a/lib/widgets/messages/tictactoe_message_bubble.dart b/lib/widgets/messages/tictactoe_message_bubble.dart index a04dbd4..4bf6fa9 100644 --- a/lib/widgets/messages/tictactoe_message_bubble.dart +++ b/lib/widgets/messages/tictactoe_message_bubble.dart @@ -9,6 +9,7 @@ import '../../providers/contacts_provider.dart'; import '../../providers/messages_provider.dart'; import '../../utils/tictactoe_message_parser.dart'; import '../../utils/toast_logger.dart'; +import '../../l10n/app_localizations.dart'; class TicTacToeMessageBubble extends StatelessWidget { final Message message; @@ -33,7 +34,7 @@ class TicTacToeMessageBubble extends StatelessWidget { final messages = context.watch().messages; final selfKey = conn.deviceInfo.publicKey; if (selfKey == null || selfKey.length < 6) { - return const Text('Tic-Tac-Toe unavailable'); + return Text(AppLocalizations.of(context)!.tictactoeUnavailable); } final selfKey6 = _key6Hex(selfKey); @@ -43,7 +44,7 @@ class TicTacToeMessageBubble extends StatelessWidget { isSentByMe: isSentByMe, ); if (opponent == null) { - return const Text('Tic-Tac-Toe: opponent unknown'); + return Text(AppLocalizations.of(context)!.tictactoeOpponentUnknown); } final opponentKey6 = _key6Hex(opponent.publicKey); @@ -69,7 +70,7 @@ class TicTacToeMessageBubble extends StatelessWidget { start ??= event.type == TicTacToeEventType.start ? event : null; if (start == null) { - return const Text('Tic-Tac-Toe: waiting for start'); + return Text(AppLocalizations.of(context)!.tictactoeWaitingForStart); } final xPlayer = start.playerKey6; diff --git a/lib/widgets/permission_request_dialog.dart b/lib/widgets/permission_request_dialog.dart index ca03d15..aaa8bc6 100644 --- a/lib/widgets/permission_request_dialog.dart +++ b/lib/widgets/permission_request_dialog.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; +import '../l10n/app_localizations.dart'; /// Dialog that requests location permissions on app startup class PermissionRequestDialog extends StatefulWidget { @@ -109,8 +110,8 @@ class _PermissionRequestDialogState extends State { Icons.location_on, color: Theme.of(context).colorScheme.primary, ), - const SizedBox(width: 12), - const Text('Location Permission'), + SizedBox(width: 12), + Text(AppLocalizations.of(context)!.locationPermission), ], ), content: Column( diff --git a/lib/widgets/sar/sar_template_edit_dialog.dart b/lib/widgets/sar/sar_template_edit_dialog.dart index 595a4df..1dff480 100644 --- a/lib/widgets/sar/sar_template_edit_dialog.dart +++ b/lib/widgets/sar/sar_template_edit_dialog.dart @@ -210,7 +210,7 @@ class _SarTemplateEditDialogState extends State { maxLines: 2, onChanged: (_) => setState(() {}), ), - const SizedBox(height: 16), + SizedBox(height: 16), // Color picker Text( @@ -305,7 +305,7 @@ class _SarTemplateEditDialogState extends State { const SizedBox(width: 12), ElevatedButton.icon( onPressed: _save, - icon: const Icon(Icons.save), + icon: Icon(Icons.save), label: Text(l10n.save), ), ], diff --git a/lib/widgets/sensors/sensor_telemetry_card.dart b/lib/widgets/sensors/sensor_telemetry_card.dart index 55bd158..e51e9cb 100644 --- a/lib/widgets/sensors/sensor_telemetry_card.dart +++ b/lib/widgets/sensors/sensor_telemetry_card.dart @@ -1090,7 +1090,7 @@ class SensorTelemetryCard extends StatelessWidget { ), ), if (state == SensorRefreshState.timeout) - const _InlineAlertBadge(label: 'No response'), + _InlineAlertBadge(label: l10n.noResponse), ], ), if (telemetry != null) ...[ @@ -1107,8 +1107,8 @@ class SensorTelemetryCard extends StatelessWidget { ), ), if (state == SensorRefreshState.refreshing) - const _InlineStateMeta( - label: 'Refreshing', + _InlineStateMeta( + label: l10n.refreshing, color: Color(0xFF266AC2), spinning: true, ), @@ -1119,8 +1119,8 @@ class SensorTelemetryCard extends StatelessWidget { icon: Icons.check_circle, ), if (state == SensorRefreshState.unavailable) - const _InlineStateMeta( - label: 'Unavailable', + _InlineStateMeta( + label: l10n.unavailable, color: Color(0xFFB13B55), icon: Icons.error_outline, ), @@ -1153,17 +1153,17 @@ class SensorTelemetryCard extends StatelessWidget { } if (onCustomize != null) { items.add( - const PopupMenuItem( + PopupMenuItem( value: 'customize', - child: Text('Customize fields'), + child: Text(l10n.customizeFields), ), ); } if (onRemove != null) { items.add( - const PopupMenuItem( + PopupMenuItem( value: 'remove', - child: Text('Remove'), + child: Text(l10n.remove), ), ); } diff --git a/lib/widgets/update_dialog.dart b/lib/widgets/update_dialog.dart index 61f3d2d..3bf7a8d 100644 --- a/lib/widgets/update_dialog.dart +++ b/lib/widgets/update_dialog.dart @@ -54,10 +54,10 @@ class UpdateDialog extends StatelessWidget { // Optional: Build timestamp if (updateInfo.timestamp != null) ...[ - const SizedBox(height: 12), + SizedBox(height: 12), _buildInfoRow( context, - label: 'Build Time', + label: AppLocalizations.of(context)!.buildTime, value: _formatTimestamp(updateInfo.timestamp!), ), ], @@ -131,8 +131,8 @@ class UpdateDialog extends StatelessWidget { if (updateInfo.downloadUrl == null) { if (context.mounted) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Download URL not available'), + SnackBar( + content: Text(AppLocalizations.of(context)!.downloadUrlNotAvailable), backgroundColor: Colors.red, ), ); @@ -147,8 +147,8 @@ class UpdateDialog extends StatelessWidget { if (!canLaunch) { if (context.mounted) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Cannot open download URL'), + SnackBar( + content: Text(AppLocalizations.of(context)!.cannotOpenDownloadUrl), backgroundColor: Colors.red, ), );