From 00a7d83c4d0a70c2a5d29fbe25ac3f7d9f949dba Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 27 Apr 2025 11:26:23 -0700 Subject: [PATCH] More translation keys, delete unused file --- Localizable.xcstrings | 568 ++++++++---------- Meshtastic.xcodeproj/project.pbxproj | 4 - .../Enums/CannedMessagesConfigEnums.swift | 4 +- Meshtastic/Export/WriteCsvFile.swift | 2 +- .../Views/Bluetooth/InvalidVersion.swift | 2 +- .../Helpers/Help/DirectMessagesHelp.swift | 2 +- Meshtastic/Views/Helpers/MQTTIcon.swift | 2 +- Meshtastic/Views/Nodes/DeviceMetricsLog.swift | 2 +- .../Nodes/Helpers/Map/MapSettingsForm.swift | 2 +- .../Nodes/Helpers/Map/PositionPopover.swift | 2 +- .../Nodes/Helpers/Map/WaypointForm.swift | 2 +- .../Metrics Columns/MetricsColumnDetail.swift | 2 +- .../Views/Nodes/Helpers/NodeListFilter.swift | 2 +- Meshtastic/Views/Nodes/NodeMap.swift | 233 ------- Meshtastic/Views/Settings/AppSettings.swift | 2 +- Meshtastic/Views/Settings/Channels.swift | 2 +- .../Views/Settings/Logs/AppLogFilter.swift | 2 +- .../Views/Settings/Logs/LogDetail.swift | 2 +- Meshtastic/Views/Settings/RouteRecorder.swift | 2 +- Meshtastic/Views/Settings/ShareChannels.swift | 4 +- 20 files changed, 259 insertions(+), 584 deletions(-) delete mode 100644 Meshtastic/Views/Nodes/NodeMap.swift diff --git a/Localizable.xcstrings b/Localizable.xcstrings index 2d33ee77..fd37255a 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -4332,134 +4332,6 @@ } } }, - "canned.messages.preset.manual" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Manuelle Konfiguration" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Manual Configuration" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Configuration manuelle" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "הגדרה ידנית" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Configurazione manuale" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Konfiguracja ręczna" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "Manuell konfiguration" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ручна конфигурација" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "手动配置" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "手動設定" - } - } - } - }, - "canned.messages.preset.rakrotary" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "RAK Drehimpulsgeber Modul" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "RAK Rotary Encoder Module" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Module d'encodage rotatif RAK" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "RAK Rotary Encoder Module" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Modulo encoder rotativo RAK" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Moduł kodera obrotowego RAK" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "RAK Rotary Encoder-modul" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "RAK Rotary енкодер модул" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "RAK 编码器" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "RAK 旋轉編碼器" - } - } - } - }, "Carousel Interval" : { "localizations" : { "it" : { @@ -5130,69 +5002,47 @@ } } }, - "Channel Utilization %@%%" : { - "localizations" : { - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Utilizzo del canale %@%%" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "頻道利用率 %@%%" - } - } - } - }, - "channel.utilization" : { + "Channel Utilization" : { "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Kanalbelegung" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Channel Utilization" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Utilisation du canal" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "שימוש ערוץ" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Utilizzo del canale" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Wykorzystanie kanału" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Kanalutnyttjande" } }, "sr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Искоришћеност канала" } }, @@ -5210,6 +5060,22 @@ } } }, + "Channel Utilization %@%%" : { + "localizations" : { + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Utilizzo del canale %@%%" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "頻道利用率 %@%%" + } + } + } + }, "Channels" : { "localizations" : { "de" : { @@ -5396,6 +5262,64 @@ } } }, + "Clear App Data" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "App Daten löschen" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Effacer les données de l'application" + } + }, + "he" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "אפס הגדרות אפליקציה" + } + }, + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Cancella i dati dell'app" + } + }, + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Wyczyść dane aplikacji" + } + }, + "se" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Rensa appdata" + } + }, + "sr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Очисти податке апликације" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "清除 App 数据" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "清除 App 資料" + } + } + } + }, "Clear Log" : { "localizations" : { "it" : { @@ -5418,70 +5342,6 @@ } } }, - "clear.app.data" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "App Daten löschen" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Clear App Data" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Effacer les données de l'application" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "אפס הגדרות אפליקציה" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancella i dati dell'app" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wyczyść dane aplikacji" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rensa appdata" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Очисти податке апликације" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除 App 数据" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "清除 App 資料" - } - } - } - }, "Client" : { "localizations" : { "it" : { @@ -5622,65 +5482,59 @@ } } }, - "close" : { + "Close" : { "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Schließen" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Close" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Fermer" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "סגור" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Chiudere" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zamknij" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Stäng" } }, "sr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Затвори" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "关闭" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "關閉" } } @@ -11734,99 +11588,59 @@ } } }, - "encrypted" : { + "Encrypted" : { "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Verschlüsselt" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Encrypted" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Encrypté" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "מוצפן" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Crittografato" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zaszyfrowany" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Krypterad" } }, "sr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Шифровано" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "加密" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "translated", - "value" : "已加密" - } - } - } - }, - "Encrypted" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verschlüsselt" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Crittografato" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Шифровано" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "加密" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "已加密" } } @@ -12874,7 +12688,7 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Finish" } }, @@ -15608,65 +15422,59 @@ } } }, - "include" : { + "Include" : { "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", - "value" : "Include" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Include" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Inclure" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "כלול" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Includere" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Dołącz" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Inkludera" } }, "sr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Укључите" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "包含" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "包含" } } @@ -15738,27 +15546,21 @@ }, "India" : { "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "India" - } - }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "India" } }, "sr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Индија" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "印度" } } @@ -18296,27 +18098,21 @@ }, "Korea" : { "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Korea" - } - }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Corea" } }, "sr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Кореја" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "韓國" } } @@ -19862,6 +19658,64 @@ } } }, + "Manual Configuration" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Manuelle Konfiguration" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Configuration manuelle" + } + }, + "he" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "הגדרה ידנית" + } + }, + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Configurazione manuale" + } + }, + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Konfiguracja ręczna" + } + }, + "se" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Manuell konfiguration" + } + }, + "sr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Ручна конфигурација" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "手动配置" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "手動設定" + } + } + } + }, "map" : { "localizations" : { "de" : { @@ -24576,7 +24430,7 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "不存在" } }, @@ -27340,6 +27194,64 @@ } } }, + "RAK Rotary Encoder" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "RAK Drehimpulsgeber Modul" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Module d'encodage rotatif RAK" + } + }, + "he" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "RAK Rotary Encoder Module" + } + }, + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Modulo encoder rotativo RAK" + } + }, + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Moduł kodera obrotowego RAK" + } + }, + "se" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "RAK Rotary Encoder-modul" + } + }, + "sr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "RAK Rotary енкодер модул" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "RAK 编码器" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "RAK 旋轉編碼器" + } + } + } + }, "range.test" : { "localizations" : { "de" : { @@ -35938,7 +35850,7 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "超时" } }, @@ -37104,7 +37016,7 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "未知" } }, @@ -37934,7 +37846,7 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "用户名称" } }, @@ -38262,7 +38174,7 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "电压" } }, diff --git a/Meshtastic.xcodeproj/project.pbxproj b/Meshtastic.xcodeproj/project.pbxproj index 4f451b2d..59a50868 100644 --- a/Meshtastic.xcodeproj/project.pbxproj +++ b/Meshtastic.xcodeproj/project.pbxproj @@ -146,7 +146,6 @@ DD8EBF43285058FA00426DCA /* DisplayConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8EBF42285058FA00426DCA /* DisplayConfig.swift */; }; DD8ED9C52898D51F00B3B0AB /* NetworkConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8ED9C42898D51F00B3B0AB /* NetworkConfig.swift */; }; DD8ED9C8289CE4B900B3B0AB /* RoutingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8ED9C7289CE4B900B3B0AB /* RoutingError.swift */; }; - DD90860E26F69BAE00DC5189 /* NodeMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD90860D26F69BAE00DC5189 /* NodeMap.swift */; }; DD913639270DFF4C00D7ACF3 /* LocalNotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD913638270DFF4C00D7ACF3 /* LocalNotificationManager.swift */; }; DD93800B2BA3F968008BEC06 /* NodeMapContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD93800A2BA3F968008BEC06 /* NodeMapContent.swift */; }; DD93800E2BA74D0C008BEC06 /* ChannelForm.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD93800D2BA74D0C008BEC06 /* ChannelForm.swift */; }; @@ -437,7 +436,6 @@ DD8ED9C42898D51F00B3B0AB /* NetworkConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkConfig.swift; sourceTree = ""; }; DD8ED9C7289CE4B900B3B0AB /* RoutingError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoutingError.swift; sourceTree = ""; }; DD90860A26F645B700DC5189 /* Meshtastic.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Meshtastic.entitlements; sourceTree = ""; }; - DD90860D26F69BAE00DC5189 /* NodeMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeMap.swift; sourceTree = ""; }; DD913638270DFF4C00D7ACF3 /* LocalNotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalNotificationManager.swift; sourceTree = ""; }; DD93800A2BA3F968008BEC06 /* NodeMapContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeMapContent.swift; sourceTree = ""; }; DD93800D2BA74D0C008BEC06 /* ChannelForm.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelForm.swift; sourceTree = ""; }; @@ -731,7 +729,6 @@ DDDB263E2AABEE20003AFCB7 /* NodeList.swift */, DD769E0228D18BF0001A3F05 /* DeviceMetricsLog.swift */, DDAD49EC2AFB39DC00B4425D /* MeshMap.swift */, - DD90860D26F69BAE00DC5189 /* NodeMap.swift */, DD73FD1028750779000852D6 /* PositionLog.swift */, DD4F23CC28779A3C001D37CB /* EnvironmentMetricsLog.swift */, 6DEDA5592A957B8E00321D2E /* DetectionSensorLog.swift */, @@ -1404,7 +1401,6 @@ DDC4D568275499A500A4208E /* Persistence.swift in Sources */, DDD6EEAF29BC024700383354 /* Firmware.swift in Sources */, DD77093B2AA1ABB8007A8BF0 /* BluetoothTips.swift in Sources */, - DD90860E26F69BAE00DC5189 /* NodeMap.swift in Sources */, D9C9839D2B79CFD700BDBE6A /* TextMessageSize.swift in Sources */, DDC94FCE29CF55310082EA6E /* RtttlConfig.swift in Sources */, DD964FBD296E6B01007C176F /* EmojiOnlyTextField.swift in Sources */, diff --git a/Meshtastic/Enums/CannedMessagesConfigEnums.swift b/Meshtastic/Enums/CannedMessagesConfigEnums.swift index 15edbe4c..7209c8ed 100644 --- a/Meshtastic/Enums/CannedMessagesConfigEnums.swift +++ b/Meshtastic/Enums/CannedMessagesConfigEnums.swift @@ -19,9 +19,9 @@ enum ConfigPresets: Int, CaseIterable, Identifiable { switch self { case .unset: - return "canned.messages.preset.manual".localized + return "Manual Configuration".localized case .rakRotaryEncoder: - return "canned.messages.preset.rakrotary".localized + return "RAK Rotary Encoder".localized case .cardKB: return "M5 Stack Card KB / RAK Keypad".localized } diff --git a/Meshtastic/Export/WriteCsvFile.swift b/Meshtastic/Export/WriteCsvFile.swift index 66835b4a..a1380c77 100644 --- a/Meshtastic/Export/WriteCsvFile.swift +++ b/Meshtastic/Export/WriteCsvFile.swift @@ -14,7 +14,7 @@ func telemetryToCsvFile(telemetry: [TelemetryEntity], metricsType: Int) -> Strin let dateFormatString = (localeDateFormat ?? "MM/dd/YY j:mma").replacingOccurrences(of: ",", with: "") if metricsType == 0 { // Create Device Metrics Header - csvString = "\("battery.level".localized), \("Voltage".localized), \("channel.utilization".localized), \("airtime".localized), \("uptime".localized), \("Timestamp".localized)" + csvString = "\("battery.level".localized), \("Voltage".localized), \("Channel Utilization".localized), \("airtime".localized), \("uptime".localized), \("Timestamp".localized)" for dm in telemetry where dm.metricsType == 0 { csvString += "\n" csvString += dm.batteryLevel?.formatted(.number.grouping(.never)) ?? "" diff --git a/Meshtastic/Views/Bluetooth/InvalidVersion.swift b/Meshtastic/Views/Bluetooth/InvalidVersion.swift index ba94e7c1..6a82581b 100644 --- a/Meshtastic/Views/Bluetooth/InvalidVersion.swift +++ b/Meshtastic/Views/Bluetooth/InvalidVersion.swift @@ -49,7 +49,7 @@ struct InvalidVersion: View { Button { dismiss() } label: { - Label("close", systemImage: "xmark") + Label("Close", systemImage: "xmark") } .buttonStyle(.bordered) diff --git a/Meshtastic/Views/Helpers/Help/DirectMessagesHelp.swift b/Meshtastic/Views/Helpers/Help/DirectMessagesHelp.swift index fd0f0414..1b9263c5 100644 --- a/Meshtastic/Views/Helpers/Help/DirectMessagesHelp.swift +++ b/Meshtastic/Views/Helpers/Help/DirectMessagesHelp.swift @@ -50,7 +50,7 @@ struct DirectMessagesHelp: View { Button { dismiss() } label: { - Label("close", systemImage: "xmark") + Label("Close", systemImage: "xmark") } .buttonStyle(.bordered) .buttonBorderShape(.capsule) diff --git a/Meshtastic/Views/Helpers/MQTTIcon.swift b/Meshtastic/Views/Helpers/MQTTIcon.swift index 914c6043..7d6c653a 100644 --- a/Meshtastic/Views/Helpers/MQTTIcon.swift +++ b/Meshtastic/Views/Helpers/MQTTIcon.swift @@ -29,7 +29,7 @@ struct MQTTIcon: View { VStack(spacing: 0.5) { Text("Topic: \(topic)".localized) .padding(20) - Button("close", action: { self.isPopoverOpen = false }).padding([.bottom], 20) + Button("Close", action: { self.isPopoverOpen = false }).padding([.bottom], 20) } .presentationCompactAdaptation(.popover) }) diff --git a/Meshtastic/Views/Nodes/DeviceMetricsLog.swift b/Meshtastic/Views/Nodes/DeviceMetricsLog.swift index 9ebce292..6b2570d2 100644 --- a/Meshtastic/Views/Nodes/DeviceMetricsLog.swift +++ b/Meshtastic/Views/Nodes/DeviceMetricsLog.swift @@ -165,7 +165,7 @@ struct DeviceMetricsLog: View { // dm.voltage.map { Text("\(String(format: "%.2f", $0))") } ?? Text("--") Text("\(dm.voltage?.formatted(.number.precision(.fractionLength(2))) ?? Constants.nilValueIndicator)") } - TableColumn("channel.utilization") { dm in + TableColumn("Channel Utilization") { dm in dm.channelUtilization.map { channelUtilization in // Text("\(String(format: "%.2f", channelUtilization))%") Text("\(channelUtilization.formatted(.number.precision(.fractionLength(2))))%") diff --git a/Meshtastic/Views/Nodes/Helpers/Map/MapSettingsForm.swift b/Meshtastic/Views/Nodes/Helpers/Map/MapSettingsForm.swift index 088787b9..85db444a 100644 --- a/Meshtastic/Views/Nodes/Helpers/Map/MapSettingsForm.swift +++ b/Meshtastic/Views/Nodes/Helpers/Map/MapSettingsForm.swift @@ -111,7 +111,7 @@ Spacer() Button { dismiss() } label: { - Label("close", systemImage: "xmark") + Label("Close", systemImage: "xmark") } .buttonStyle(.bordered) .buttonBorderShape(.capsule) diff --git a/Meshtastic/Views/Nodes/Helpers/Map/PositionPopover.swift b/Meshtastic/Views/Nodes/Helpers/Map/PositionPopover.swift index 880a4074..ce7a10ef 100644 --- a/Meshtastic/Views/Nodes/Helpers/Map/PositionPopover.swift +++ b/Meshtastic/Views/Nodes/Helpers/Map/PositionPopover.swift @@ -234,7 +234,7 @@ struct PositionPopover: View { Button { dismiss() } label: { - Label("close", systemImage: "xmark") + Label("Close", systemImage: "xmark") } .buttonStyle(.bordered) .buttonBorderShape(.capsule) diff --git a/Meshtastic/Views/Nodes/Helpers/Map/WaypointForm.swift b/Meshtastic/Views/Nodes/Helpers/Map/WaypointForm.swift index 8c8feb32..8800cabf 100644 --- a/Meshtastic/Views/Nodes/Helpers/Map/WaypointForm.swift +++ b/Meshtastic/Views/Nodes/Helpers/Map/WaypointForm.swift @@ -354,7 +354,7 @@ struct WaypointForm: View { Button { dismiss() } label: { - Label("close", systemImage: "xmark") + Label("Close", systemImage: "xmark") } .buttonStyle(.bordered) .buttonBorderShape(.capsule) diff --git a/Meshtastic/Views/Nodes/Helpers/Metrics Columns/MetricsColumnDetail.swift b/Meshtastic/Views/Nodes/Helpers/Metrics Columns/MetricsColumnDetail.swift index 1f384cb2..24cc6f96 100644 --- a/Meshtastic/Views/Nodes/Helpers/Metrics Columns/MetricsColumnDetail.swift +++ b/Meshtastic/Views/Nodes/Helpers/Metrics Columns/MetricsColumnDetail.swift @@ -63,7 +63,7 @@ struct MetricsColumnDetail: View { Button { dismiss() } label: { - Label("close", systemImage: "xmark") + Label("Close", systemImage: "xmark") } .buttonStyle(.bordered) .buttonBorderShape(.capsule) diff --git a/Meshtastic/Views/Nodes/Helpers/NodeListFilter.swift b/Meshtastic/Views/Nodes/Helpers/NodeListFilter.swift index a29a0749..063e073a 100644 --- a/Meshtastic/Views/Nodes/Helpers/NodeListFilter.swift +++ b/Meshtastic/Views/Nodes/Helpers/NodeListFilter.swift @@ -192,7 +192,7 @@ struct NodeListFilter: View { Button { dismiss() } label: { - Label("close", systemImage: "xmark") + Label("Close", systemImage: "xmark") } .buttonStyle(.bordered) .buttonBorderShape(.capsule) diff --git a/Meshtastic/Views/Nodes/NodeMap.swift b/Meshtastic/Views/Nodes/NodeMap.swift deleted file mode 100644 index e81fc224..00000000 --- a/Meshtastic/Views/Nodes/NodeMap.swift +++ /dev/null @@ -1,233 +0,0 @@ -//// -//// NodeMap.swift -//// MeshtasticApple -//// -//// Created by Garth Vander Houwen on 8/7/21. -//// -// -//import SwiftUI -//import MapKit -//import CoreLocation -//import CoreData -// -//struct NodeMap: View { -// @Environment(\.managedObjectContext) var context -// @EnvironmentObject var bleManager: BLEManager -// -// @ObservedObject -// var router: Router -// @State var selectedMapLayer: MapLayer = UserDefaults.mapLayer -// @State var enableMapRecentering: Bool = UserDefaults.enableMapRecentering -// @State var enableMapRouteLines: Bool = UserDefaults.enableMapRouteLines -// @State var enableMapNodeHistoryPins: Bool = UserDefaults.enableMapNodeHistoryPins -// @State var enableOfflineMaps: Bool = UserDefaults.enableOfflineMaps -// @State var selectedTileServer: MapTileServer = UserDefaults.mapTileServer -// @State var enableOverlayServer: Bool = UserDefaults.enableOverlayServer -// @State var selectedOverlayServer: MapOverlayServer = UserDefaults.mapOverlayServer -// @State var mapTilesAboveLabels: Bool = UserDefaults.mapTilesAboveLabels -// let fromDate: NSDate = Calendar.current.date(byAdding: .month, value: -1, to: Date())! as NSDate -// @FetchRequest(sortDescriptors: [NSSortDescriptor(key: "time", ascending: true)], -// predicate: NSPredicate(format: "nodePosition != nil", Calendar.current.date(byAdding: .day, value: -7, to: Date())! as NSDate), animation: .none) -// private var positions: FetchedResults -// @FetchRequest(sortDescriptors: [NSSortDescriptor(key: "name", ascending: false)], -// predicate: NSPredicate( -// format: "expire == nil || expire >= %@", Date() as NSDate -// ), animation: .none) -// private var waypoints: FetchedResults -// @State var waypointCoordinate: WaypointCoordinate? -// @State var selectedTracking: UserTrackingModes = .none -// @State var isPresentingInfoSheet: Bool = false -// @State private var customMapOverlay: MapViewSwiftUI.CustomMapOverlay? = MapViewSwiftUI.CustomMapOverlay( -// mapName: "offlinemap", -// tileType: "png", -// canReplaceMapContent: true -// ) -// var body: some View { -// NavigationStack { -// ZStack { -// MapViewSwiftUI( -// onLongPress: { coord in -// waypointCoordinate = WaypointCoordinate(id: .init(), coordinate: coord, waypointId: 0) -// }, onWaypointEdit: { wpId in -// if wpId > 0 { -// waypointCoordinate = WaypointCoordinate(id: .init(), coordinate: nil, waypointId: Int64(wpId)) -// } -// }, -// selectedMapLayer: selectedMapLayer, -// positions: Array(positions), -// waypoints: Array(waypoints), -// userTrackingMode: selectedTracking.MKUserTrackingModeValue(), -// showNodeHistory: enableMapNodeHistoryPins, -// showRouteLines: enableMapRouteLines, -// customMapOverlay: self.customMapOverlay -// ) -// VStack(alignment: .trailing) { -// HStack(alignment: .top) { -// Spacer() -// MapButtons(tracking: $selectedTracking, isPresentingInfoSheet: $isPresentingInfoSheet) -// .padding(.trailing, 8) -// .padding(.top, 16) -// } -// Spacer() -// TileDownloadStatus() -// .padding(.trailing, 16) -// .padding(.bottom, 20) -// } -// } -// .ignoresSafeArea(.all, edges: [.top, .leading, .trailing]) -// .frame(maxHeight: .infinity) -// .sheet(item: $waypointCoordinate, content: { wpc in -// WaypointFormMapKit(coordinate: wpc) -// .presentationDetents([.medium, .large]) -// .presentationDragIndicator(.automatic) -// }) -// .sheet(isPresented: $isPresentingInfoSheet) { -// VStack { -// Form { -// Section(header: Text("Map Options")) { -// Picker(selection: $selectedMapLayer, label: Text("")) { -// ForEach(MapLayer.allCases, id: \.self) { layer in -// if layer == MapLayer.offline && enableOfflineMaps { -// Text(layer.localized) -// } else if layer != MapLayer.offline { -// Text(layer.localized) -// } -// } -// } -// .pickerStyle(SegmentedPickerStyle()) -// .onChange(of: selectedMapLayer) { _, newMapLayer in -// UserDefaults.mapLayer = newMapLayer -// } -// .padding(.top, 5) -// .padding(.bottom, 5) -// Toggle(isOn: $enableMapRecentering) { -// Label("map.recentering", systemImage: "camera.metering.center.weighted") -// } -// .toggleStyle(SwitchToggleStyle(tint: .accentColor)) -// .onTapGesture { -// self.enableMapRecentering.toggle() -// UserDefaults.enableMapRecentering = self.enableMapRecentering -// } -// Toggle(isOn: $enableMapNodeHistoryPins) { -// Label("Show Node History", systemImage: "building.columns.fill") -// } -// .toggleStyle(SwitchToggleStyle(tint: .accentColor)) -// .onTapGesture { -// self.enableMapNodeHistoryPins.toggle() -// UserDefaults.enableMapNodeHistoryPins = self.enableMapNodeHistoryPins -// } -// Toggle(isOn: $enableMapRouteLines) { -// Label("Show Route Lines", systemImage: "road.lanes") -// } -// .toggleStyle(SwitchToggleStyle(tint: .accentColor)) -// .onTapGesture { -// self.enableMapRouteLines.toggle() -// UserDefaults.enableMapRouteLines = self.enableMapRouteLines -// } -// let locale = Locale.current -// if locale.region?.identifier ?? "no locale" == "US" { -// Toggle(isOn: $enableOverlayServer) { -// Label("Show Weather", systemImage: "cloud.fill") -// } -// .toggleStyle(SwitchToggleStyle(tint: .accentColor)) -// .onTapGesture { -// self.enableOverlayServer.toggle() -// UserDefaults.enableOverlayServer = self.enableOverlayServer -// } -// if enableOverlayServer { -// Picker(selection: $selectedOverlayServer, -// label: Text("Radar")) { -// ForEach(MapOverlayServer.allCases, id: \.self) { mos in -// Text(mos.description) -// .font(.footnote) -// } -// } -// .pickerStyle(DefaultPickerStyle()) -// .onChange(of: (selectedOverlayServer)) { _, newSelectedOverlayServer in -// UserDefaults.mapOverlayServer = newSelectedOverlayServer -// } -// Text(LocalizedStringKey(selectedOverlayServer.attribution)) -// .font(.footnote) -// .foregroundColor(.gray) -// .padding(0) -// } -// } -// } -// Section(header: Text("Offline Maps")) { -// Toggle(isOn: $enableOfflineMaps) { -// Text("Enable Offline Maps") -// } -// .toggleStyle(SwitchToggleStyle(tint: .accentColor)) -// .onChange(of: enableOfflineMaps) { _, newEnableOfflineMaps in -// UserDefaults.enableOfflineMaps = newEnableOfflineMaps -// if !enableOfflineMaps { -// if self.selectedMapLayer == .offline { -// self.selectedMapLayer = .standard -// } -// } -// } -// if enableOfflineMaps { -// VStack(alignment: .leading) { -// Picker(selection: $selectedTileServer, -// label: Text("Tile Server")) { -// ForEach(MapTileServer.allCases, id: \.self) { tsl in -// Text(tsl.description) -// } -// } -// .pickerStyle(DefaultPickerStyle()) -// .onChange(of: (selectedTileServer)) { _, newSelectedTileServer in -// UserDefaults.mapTileServer = newSelectedTileServer -// } -// Text("Attribution:") -// .fontWeight(.semibold) -// .font(.footnote) -// Text(LocalizedStringKey(selectedTileServer.attribution)) -// .font(.footnote) -// .foregroundColor(.gray) -// .padding(0) -// Divider() -// Toggle(isOn: $mapTilesAboveLabels) { -// Text("Tiles above Labels") -// } -// .toggleStyle(SwitchToggleStyle(tint: .accentColor)) -// .onTapGesture { -// self.mapTilesAboveLabels.toggle() -// UserDefaults.mapTilesAboveLabels = self.mapTilesAboveLabels -// } -// } -// } -// } -// } -// #if targetEnvironment(macCatalyst) -// Button { -// isPresentingInfoSheet = false -// } label: { -// Label("close", systemImage: "xmark") -// } -// .buttonStyle(.bordered) -// .buttonBorderShape(.capsule) -// .controlSize(.large) -// .padding(.bottom) -// #endif -// } -// .presentationDetents([enableOfflineMaps || enableOverlayServer ? .large : .medium]) -// .presentationDragIndicator(.visible) -// } -// } -// .navigationBarItems(leading: -// MeshtasticLogo(), trailing: -// ZStack { -// ConnectedDevice( -// bluetoothOn: bleManager.isSwitchedOn, -// deviceConnected: bleManager.connectedPeripheral != nil, -// name: (bleManager.connectedPeripheral != nil) ? bleManager.connectedPeripheral.shortName : -// "?") -// }) -// .onAppear(perform: { -// UIApplication.shared.isIdleTimerDisabled = true -// }) -// .onDisappear(perform: { -// UIApplication.shared.isIdleTimerDisabled = false -// }) -// } -//} diff --git a/Meshtastic/Views/Settings/AppSettings.swift b/Meshtastic/Views/Settings/AppSettings.swift index 7ba7d3f9..e16fb31b 100644 --- a/Meshtastic/Views/Settings/AppSettings.swift +++ b/Meshtastic/Views/Settings/AppSettings.swift @@ -43,7 +43,7 @@ struct AppSettings: View { Button { isPresentingCoreDataResetConfirm = true } label: { - Label("clear.app.data", systemImage: "trash") + Label("Clear App Data", systemImage: "trash") .foregroundColor(.red) } .confirmationDialog( diff --git a/Meshtastic/Views/Settings/Channels.swift b/Meshtastic/Views/Settings/Channels.swift index 19c56a7b..861f0cb3 100644 --- a/Meshtastic/Views/Settings/Channels.swift +++ b/Meshtastic/Views/Settings/Channels.swift @@ -230,7 +230,7 @@ struct Channels: View { Button { goBack() } label: { - Label("close", systemImage: "xmark") + Label("Close", systemImage: "xmark") } .buttonStyle(.bordered) .buttonBorderShape(.capsule) diff --git a/Meshtastic/Views/Settings/Logs/AppLogFilter.swift b/Meshtastic/Views/Settings/Logs/AppLogFilter.swift index e6371672..eadf8e41 100644 --- a/Meshtastic/Views/Settings/Logs/AppLogFilter.swift +++ b/Meshtastic/Views/Settings/Logs/AppLogFilter.swift @@ -136,7 +136,7 @@ struct AppLogFilter: View { Button { dismiss() } label: { - Label("close", systemImage: "xmark") + Label("Close", systemImage: "xmark") } .buttonStyle(.bordered) .buttonBorderShape(.capsule) diff --git a/Meshtastic/Views/Settings/Logs/LogDetail.swift b/Meshtastic/Views/Settings/Logs/LogDetail.swift index ca5d17d6..268c5a3a 100644 --- a/Meshtastic/Views/Settings/Logs/LogDetail.swift +++ b/Meshtastic/Views/Settings/Logs/LogDetail.swift @@ -151,7 +151,7 @@ struct LogDetail: View { Button { dismiss() } label: { - Label("close", systemImage: "xmark") + Label("Close", systemImage: "xmark") } .buttonStyle(.bordered) .buttonBorderShape(.capsule) diff --git a/Meshtastic/Views/Settings/RouteRecorder.swift b/Meshtastic/Views/Settings/RouteRecorder.swift index 4a1f2b96..58190878 100644 --- a/Meshtastic/Views/Settings/RouteRecorder.swift +++ b/Meshtastic/Views/Settings/RouteRecorder.swift @@ -261,7 +261,7 @@ struct RouteRecorder: View { Button(role: .cancel) { isShowingDetails = false } label: { - Label("close", systemImage: "xmark") + Label("Close", systemImage: "xmark") } .buttonStyle(.bordered) .buttonBorderShape(.capsule) diff --git a/Meshtastic/Views/Settings/ShareChannels.swift b/Meshtastic/Views/Settings/ShareChannels.swift index 7ea643ae..71707792 100644 --- a/Meshtastic/Views/Settings/ShareChannels.swift +++ b/Meshtastic/Views/Settings/ShareChannels.swift @@ -62,7 +62,7 @@ struct ShareChannels: View { Grid { GridRow { Spacer() - Text("include") + Text("Include") .font(.caption) .fontWeight(.bold) .padding(.trailing) @@ -70,7 +70,7 @@ struct ShareChannels: View { .font(.caption) .fontWeight(.bold) .padding(.trailing) - Text("encrypted") + Text("Encrypted") .font(.caption) .fontWeight(.bold) }