From ade85af1fb74c563f00b57ae371dfed438236693 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sat, 26 Apr 2025 16:18:21 -0700 Subject: [PATCH 01/11] Bump version --- Meshtastic.xcodeproj/project.pbxproj | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Meshtastic.xcodeproj/project.pbxproj b/Meshtastic.xcodeproj/project.pbxproj index 62cf1085..4f451b2d 100644 --- a/Meshtastic.xcodeproj/project.pbxproj +++ b/Meshtastic.xcodeproj/project.pbxproj @@ -1787,12 +1787,12 @@ INFOPLIST_FILE = Meshtastic/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Meshtastic; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 17.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.5.23; + MARKETING_VERSION = 2.6.0; PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTS_MACCATALYST = YES; @@ -1821,12 +1821,12 @@ INFOPLIST_FILE = Meshtastic/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Meshtastic; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 17.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.5.23; + MARKETING_VERSION = 2.6.0; PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTS_MACCATALYST = YES; @@ -1852,13 +1852,13 @@ INFOPLIST_FILE = Widgets/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Widgets; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 17.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.5.23; + MARKETING_VERSION = 2.6.0; PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient.Widgets; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1885,13 +1885,13 @@ INFOPLIST_FILE = Widgets/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Widgets; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; + IPHONEOS_DEPLOYMENT_TARGET = 17.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 2.5.23; + MARKETING_VERSION = 2.6.0; PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient.Widgets; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; From ea24117be96fac4cc20b61f455e5ebfb8d6e9d6a Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 27 Apr 2025 09:11:54 -0700 Subject: [PATCH 02/11] Remove so more translation keys --- Localizable.xcstrings | 476 ++++++++--------------- Meshtastic/Enums/ChannelRoles.swift | 6 +- Meshtastic/Views/ContentView.swift | 2 +- Meshtastic/Views/Settings/Settings.swift | 2 +- 4 files changed, 169 insertions(+), 317 deletions(-) diff --git a/Localizable.xcstrings b/Localizable.xcstrings index a29691fb..0e1c3b63 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -5210,198 +5210,6 @@ } } }, - "channel.role.disabled" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deaktiviert" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disabled" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Désactivé" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "כבוי" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disattivato" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wyłączony" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "Inaktiverad" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Онемогућено" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "禁用" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "關閉" - } - } - } - }, - "channel.role.primary" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primär" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primary" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Principal" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "עיקרי" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primario" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Podstawowy" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primär" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Примарни" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "主要" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "主要" - } - } - } - }, - "channel.role.secondary" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sekundär" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Secondary" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Secondaire" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "משני" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Secondario" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wtórny" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sekundär" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Секундарни" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "次要" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "次要" - } - } - } - }, "channel.utilization" : { "localizations" : { "de" : { @@ -10913,13 +10721,43 @@ "de" : { "stringUnit" : { "state" : "translated", - "value" : "Ausgeschaltet" + "value" : "Deaktiviert" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Disabled" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Désactivé" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "כבוי" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Disabili" + "value" : "Disattivato" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wyłączony" + } + }, + "se" : { + "stringUnit" : { + "state" : "translated", + "value" : "Inaktiverad" } }, "sr" : { @@ -10937,7 +10775,7 @@ "zh-Hant-TW" : { "stringUnit" : { "state" : "translated", - "value" : "已停用" + "value" : "關閉" } } } @@ -18572,27 +18410,21 @@ }, "Japan" : { "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Japan" - } - }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Giappone" } }, "sr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Јапан" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "日本" } } @@ -27424,21 +27256,57 @@ }, "Primary" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Primär" + } + }, + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Principal" + } + }, + "he" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "עיקרי" + } + }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Primario" } }, + "pl" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Podstawowy" + } + }, + "se" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Primär" + } + }, "sr" : { "stringUnit" : { - "state" : "translated", - "value" : "Основни" + "state" : "needs_review", + "value" : "Примарни" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "主要" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "主要" } } @@ -28690,61 +28558,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Antworten" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Reply" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Répondre" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "תגובה" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Risposta" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Odpowiedz" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Svara" } }, "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" : "回覆" } } @@ -30706,27 +30568,21 @@ }, "Russia" : { "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Russia" - } - }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Russia" } }, "sr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Русија" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "俄羅斯" } } @@ -31280,18 +31136,60 @@ }, "Secondary" : { "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sekundär" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Secondary" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Secondaire" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "משני" + } + }, "it" : { "stringUnit" : { "state" : "translated", "value" : "Secondario" } }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Wtórny" + } + }, + "se" : { + "stringUnit" : { + "state" : "translated", + "value" : "Sekundär" + } + }, "sr" : { "stringUnit" : { "state" : "translated", "value" : "Секундарни" } }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "次要" + } + }, "zh-Hant-TW" : { "stringUnit" : { "state" : "translated", @@ -32890,7 +32788,7 @@ } } }, - "settings" : { + "Settings" : { "localizations" : { "de" : { "stringUnit" : { @@ -32954,22 +32852,6 @@ } } }, - "Settings" : { - "localizations" : { - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Impostazioni" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "設定" - } - } - } - }, "Share QR Code & Link" : { "localizations" : { "de" : { @@ -34336,27 +34218,21 @@ }, "Taiwan" : { "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Taiwan" - } - }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Taiwan" } }, "sr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Тајван" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "臺灣 🇹🇼" } } @@ -34388,61 +34264,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tapback Antwort" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tapback Response" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Réponse de Tapback" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "תגובה מהירה" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Risposta di Tapback" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Odpowiedź na stuknięcie" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Svarsreaktion" } }, "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" : "表情回應" } } @@ -35410,27 +35280,21 @@ }, "Thailand" : { "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thailand" - } - }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Thailandia" } }, "sr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Тајланд" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "泰國" } } @@ -36336,61 +36200,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zeitlimit erreicht" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Timeout" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Délai d'expiration" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "זמן קצוב" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Timeout" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Limit czasu" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tidsgräns överskriden" } }, "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" : "逾時長度" } } @@ -36422,61 +36280,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Zeitstempel" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Timestamp" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Horodatage" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "שעה/תאריך" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Timestamp" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Znacznik czasu" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tidsstämpel" } }, "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" : "時間戳記" } } diff --git a/Meshtastic/Enums/ChannelRoles.swift b/Meshtastic/Enums/ChannelRoles.swift index 186cff0b..ea1c0e8b 100644 --- a/Meshtastic/Enums/ChannelRoles.swift +++ b/Meshtastic/Enums/ChannelRoles.swift @@ -19,11 +19,11 @@ enum ChannelRoles: Int, CaseIterable, Identifiable { switch self { case .disabled: - return "channel.role.disabled".localized + return "Disabled".localized case .primary: - return "channel.role.primary".localized + return "Primary".localized case .secondary: - return "channel.role.secondary".localized + return "Secondary".localized } } func protoEnumValue() -> Channel.Role { diff --git a/Meshtastic/Views/ContentView.swift b/Meshtastic/Views/ContentView.swift index 50734893..692b1749 100644 --- a/Meshtastic/Views/ContentView.swift +++ b/Meshtastic/Views/ContentView.swift @@ -54,7 +54,7 @@ struct ContentView: View { router: appState.router ) .tabItem { - Label("settings", systemImage: "gear") + Label("Settings", systemImage: "gear") .font(.title) } .tag(NavigationState.Tab.settings) diff --git a/Meshtastic/Views/Settings/Settings.swift b/Meshtastic/Views/Settings/Settings.swift index 8ebcfd83..0ebac5a8 100644 --- a/Meshtastic/Views/Settings/Settings.swift +++ b/Meshtastic/Views/Settings/Settings.swift @@ -542,7 +542,7 @@ struct Settings: View { } } } - .navigationTitle("settings") + .navigationTitle("Settings") .navigationBarItems( leading: MeshtasticLogo().onLongPressGesture(minimumDuration: 1.0) { self.moduleOverride.toggle() From 43c8ed37248bf8627b7aeabc2cc8ab1434a5838c Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 27 Apr 2025 09:32:59 -0700 Subject: [PATCH 03/11] Additionaltranslatin key cleanup --- Localizable.xcstrings | 490 ++++++------------ .../Enums/CannedMessagesConfigEnums.swift | 2 +- Meshtastic/Enums/PositionConfigEnums.swift | 4 +- Meshtastic/Views/Bluetooth/Connect.swift | 2 +- Meshtastic/Views/Helpers/PowerMetrics.swift | 4 +- Meshtastic/Views/Messages/ChannelList.swift | 2 +- Meshtastic/Views/Messages/Messages.swift | 2 +- .../Views/Nodes/Helpers/NodeDetail.swift | 2 +- Meshtastic/Views/Settings/Channels.swift | 2 +- Meshtastic/Views/Settings/RouteRecorder.swift | 2 +- Meshtastic/Views/Settings/Settings.swift | 2 +- 11 files changed, 161 insertions(+), 353 deletions(-) diff --git a/Localizable.xcstrings b/Localizable.xcstrings index 0e1c3b63..440ebedb 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -4332,70 +4332,6 @@ } } }, - "canned.messages.preset.cardkb" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "M5 Stack Card KB / RAK Tastenfeld" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "M5 Stack Card KB / RAK Keypad" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Clavier M5 Stack Card KB / RAK" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "M5 Stack Card KB / RAK Keypad" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "M5 Stack Card KB / Tastiera RAK" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "M5 Stack Card KB / RAK Keypad" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "M5 Stack Card KB / RAK Keypad" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "M5 стек картица KB / RAK тастатура" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "M5 Stack 卡片键盘 / RAK 键盘" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "M5Stack 卡片鍵盤 / RAK 鍵盤" - } - } - } - }, "canned.messages.preset.manual" : { "localizations" : { "de" : { @@ -5274,65 +5210,59 @@ } } }, - "channels" : { + "Channels" : { "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Kanäle" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Channels" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Canaux" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "ערוצים" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Canali" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Kanały" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Kanaler" } }, "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" : "頻道" } } @@ -10720,61 +10650,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Deaktiviert" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disabled" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Désactivé" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "כבוי" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Disattivato" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Wyłączony" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Inaktiverad" } }, "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" : "關閉" } } @@ -10784,61 +10708,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Trennen" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disconnect" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Déconnecter" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "התנתק" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Disconnessione" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Rozłącz" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Koppla från" } }, "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" : "斷開連接" } } @@ -10848,61 +10766,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tastatur ausblenden" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dismiss" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Annuler" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "סגור מקלדת" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Sospendere" } }, "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" : "隱藏鍵盤" } } @@ -10912,61 +10824,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Display (Device Screen)" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Display" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Écran" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "צג מכשיר" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Display" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Wyświetlacz (Ekran Urządzenia)" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Skärm" } }, "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" : "螢幕" } } @@ -11630,61 +11536,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Aktiviert" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Enabled" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Activé" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "מופעל" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Abilitato" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Włączony" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Aktiverad" } }, "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" : "啟用" } } @@ -12928,65 +12828,59 @@ } } }, - "finish" : { + "Finish" : { "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Beenden" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Finish" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Terminer" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "סיים" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Fine" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Finish" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Avsluta" } }, "sr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Заврши" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Finish" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "完成" } } @@ -13088,65 +12982,59 @@ } } }, - "firmware.version" : { + "Firmware Version" : { "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", - "value" : "Firmware Version" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Firmware Version" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Version du firmware" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "גרסת קושחה" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Versione del firmware" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Wersja Oprogramowania" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Firmwareversion" } }, "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" : "韌體版本" } } @@ -13270,61 +13158,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Feste PIN" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fixed PIN" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Code PIN fixe" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "קוד קבוע" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "PIN fisso" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Stały PIN" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Fast PIN" } }, "sr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Фиксни ПИН" } }, "zh-Hans" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "固定 PIN 码" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "固定 PIN 碼" } } @@ -14462,122 +14344,6 @@ } } }, - "gpsmode.disabled" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ausgeschaltet" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disabled" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Désactivé" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "כבוי" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disabili" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "Inaktiverad" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Онемогућен" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "禁用" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "已停用" - } - } - } - }, - "gpsmode.enabled" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eingeschaltet" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Enabled" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Activé" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "מופעל" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abilitato" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aktiverad" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Омогућен" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "启用" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "已啟用" - } - } - } - }, "gpsmode.notPresent" : { "localizations" : { "en" : { @@ -20000,6 +19766,70 @@ } } }, + "M5 Stack Card KB / RAK Keypad" : { + "localizations" : { + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "M5 Stack Card KB / RAK Tastenfeld" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "M5 Stack Card KB / RAK Keypad" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Clavier M5 Stack Card KB / RAK" + } + }, + "he" : { + "stringUnit" : { + "state" : "translated", + "value" : "M5 Stack Card KB / RAK Keypad" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "M5 Stack Card KB / Tastiera RAK" + } + }, + "pl" : { + "stringUnit" : { + "state" : "translated", + "value" : "M5 Stack Card KB / RAK Keypad" + } + }, + "se" : { + "stringUnit" : { + "state" : "translated", + "value" : "M5 Stack Card KB / RAK Keypad" + } + }, + "sr" : { + "stringUnit" : { + "state" : "translated", + "value" : "M5 стек картица KB / RAK тастатура" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "M5 Stack 卡片键盘 / RAK 键盘" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "translated", + "value" : "M5Stack 卡片鍵盤 / RAK 鍵盤" + } + } + } + }, "Malaysia 433mhz" : { "localizations" : { "en" : { @@ -38624,7 +38454,7 @@ } } }, - "voltage" : { + "Voltage" : { "localizations" : { "de" : { "stringUnit" : { @@ -38688,28 +38518,6 @@ } } }, - "Voltage" : { - "localizations" : { - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tensione" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Напон" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "電壓" - } - } - } - }, "Volts %@" : { "localizations" : { "it" : { diff --git a/Meshtastic/Enums/CannedMessagesConfigEnums.swift b/Meshtastic/Enums/CannedMessagesConfigEnums.swift index f197eced..15edbe4c 100644 --- a/Meshtastic/Enums/CannedMessagesConfigEnums.swift +++ b/Meshtastic/Enums/CannedMessagesConfigEnums.swift @@ -23,7 +23,7 @@ enum ConfigPresets: Int, CaseIterable, Identifiable { case .rakRotaryEncoder: return "canned.messages.preset.rakrotary".localized case .cardKB: - return "canned.messages.preset.cardkb".localized + return "M5 Stack Card KB / RAK Keypad".localized } } } diff --git a/Meshtastic/Enums/PositionConfigEnums.swift b/Meshtastic/Enums/PositionConfigEnums.swift index 4853d050..7e587a08 100644 --- a/Meshtastic/Enums/PositionConfigEnums.swift +++ b/Meshtastic/Enums/PositionConfigEnums.swift @@ -110,9 +110,9 @@ enum GpsMode: Int, CaseIterable, Equatable { var description: String { switch self { case .disabled: - return "gpsmode.disabled".localized + return "Disabled".localized case .enabled: - return "gpsmode.enabled".localized + return "Eenabled".localized case .notPresent: return "gpsmode.notPresent".localized } diff --git a/Meshtastic/Views/Bluetooth/Connect.swift b/Meshtastic/Views/Bluetooth/Connect.swift index 880faf8d..6dacb044 100644 --- a/Meshtastic/Views/Bluetooth/Connect.swift +++ b/Meshtastic/Views/Bluetooth/Connect.swift @@ -67,7 +67,7 @@ struct Connect: View { Text("BLE Name").font(.callout)+Text(": \(bleManager.connectedPeripheral?.peripheral.name?.addingVariationSelectors ?? "unknown".localized)") .font(.callout).foregroundColor(Color.gray) if node != nil { - Text("firmware.version").font(.callout)+Text(": \(node?.metadata?.firmwareVersion ?? "unknown".localized)") + Text("Firmware Version").font(.callout)+Text(": \(node?.metadata?.firmwareVersion ?? "unknown".localized)") .font(.callout).foregroundColor(Color.gray) } if bleManager.isSubscribed { diff --git a/Meshtastic/Views/Helpers/PowerMetrics.swift b/Meshtastic/Views/Helpers/PowerMetrics.swift index 7f9fdcdd..e85c0f6a 100644 --- a/Meshtastic/Views/Helpers/PowerMetrics.swift +++ b/Meshtastic/Views/Helpers/PowerMetrics.swift @@ -69,8 +69,8 @@ struct PowerMetrics: View { } enum PowerMetricType: String { - case current = "current" - case voltage = "voltage" + case current = "Current" + case voltage = "Voltage" } struct PowerMetricCompactWidget: View { diff --git a/Meshtastic/Views/Messages/ChannelList.swift b/Meshtastic/Views/Messages/ChannelList.swift index 426cb0c7..f4194dc3 100644 --- a/Meshtastic/Views/Messages/ChannelList.swift +++ b/Meshtastic/Views/Messages/ChannelList.swift @@ -154,6 +154,6 @@ struct ChannelList: View { .listStyle(.plain) } } - .navigationTitle("channels") + .navigationTitle("Channels") } } diff --git a/Meshtastic/Views/Messages/Messages.swift b/Meshtastic/Views/Messages/Messages.swift index 1267d3e2..6142617b 100644 --- a/Meshtastic/Views/Messages/Messages.swift +++ b/Meshtastic/Views/Messages/Messages.swift @@ -35,7 +35,7 @@ struct Messages: View { List(selection: $router.navigationState.messages) { NavigationLink(value: MessagesNavigationState.channels()) { Label { - Text("channels") + Text("Channels") .badge(unreadChannelMessages) .font(.title2) .padding() diff --git a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift index 10c0b569..7f834de9 100644 --- a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift +++ b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift @@ -120,7 +120,7 @@ struct NodeDetail: View { if let metadata = node.metadata { HStack { Label { - Text("firmware.version") + Text("Firmware Version") } icon: { Image(systemName: "memorychip") .symbolRenderingMode(.multicolor) diff --git a/Meshtastic/Views/Settings/Channels.swift b/Meshtastic/Views/Settings/Channels.swift index 551b9ab4..19c56a7b 100644 --- a/Meshtastic/Views/Settings/Channels.swift +++ b/Meshtastic/Views/Settings/Channels.swift @@ -279,7 +279,7 @@ struct Channels: View { .padding() } } - .navigationTitle("channels") + .navigationTitle("Channels") .navigationBarItems(trailing: ZStack { ConnectedDevice(bluetoothOn: bleManager.isSwitchedOn, deviceConnected: bleManager.connectedPeripheral != nil, name: (bleManager.connectedPeripheral != nil) ? bleManager.connectedPeripheral.shortName : "?") diff --git a/Meshtastic/Views/Settings/RouteRecorder.swift b/Meshtastic/Views/Settings/RouteRecorder.swift index 8cee2eeb..4a1f2b96 100644 --- a/Meshtastic/Views/Settings/RouteRecorder.swift +++ b/Meshtastic/Views/Settings/RouteRecorder.swift @@ -250,7 +250,7 @@ struct RouteRecorder: View { } isShowingDetails = false } label: { - Label("finish", systemImage: "flag.checkered") + Label("Finish", systemImage: "flag.checkered") } .buttonStyle(.bordered) .buttonBorderShape(.capsule) diff --git a/Meshtastic/Views/Settings/Settings.swift b/Meshtastic/Views/Settings/Settings.swift index 0ebac5a8..715b74e2 100644 --- a/Meshtastic/Views/Settings/Settings.swift +++ b/Meshtastic/Views/Settings/Settings.swift @@ -78,7 +78,7 @@ struct Settings: View { NavigationLink(value: SettingsNavigationState.channels) { Label { - Text("channels") + Text("Channels") } icon: { Image(systemName: "fibrechannel") } From 5498b712c944ecd81dac24b676b97c60f8053eb0 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 27 Apr 2025 09:57:49 -0700 Subject: [PATCH 04/11] Clean up additional transation keys --- Localizable.xcstrings | 586 +++++------------- Meshtastic/Enums/PositionConfigEnums.swift | 2 +- Meshtastic/Tips/MessagesTips.swift | 2 +- .../Views/Settings/Channels/ChannelForm.swift | 4 +- .../Settings/Config/Module/SerialConfig.swift | 2 +- .../Settings/Config/PositionConfig.swift | 2 +- Meshtastic/Views/Settings/Settings.swift | 2 +- 7 files changed, 178 insertions(+), 422 deletions(-) diff --git a/Localizable.xcstrings b/Localizable.xcstrings index 440ebedb..67d828e7 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -668,13 +668,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "%@ Die App wird automatisch wieder zum präferierten Gerät verbinden, sobald es in Reichweite kommt." } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "%@ L'application se reconnectera automatiquement à la radio en favori dès qu'elle sera à nouveau disponible." } }, @@ -726,13 +726,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "%@ Dieser Fehler kann üblicherweise behoben werden, indem man unter Einstellungen > Bluetooth die Verbindung manuell löscht und sich erneut mit dem Gerät verbindet." } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "%@ Cette erreur ne peut généralement pas être corrigée sans aller dans Réglages > Bluetooth et faire > Oublier cet appareil, puis reconnecter la radio." } }, @@ -2224,13 +2224,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Airtime" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Temps d'émission" } }, @@ -2688,13 +2688,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Immer an" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "En permanence" } }, @@ -2774,13 +2774,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Ambient Lighting" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Lumière ambiante" } }, @@ -2832,13 +2832,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Ambient Lighting Config" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Configuration de la lumière ambiante" } }, @@ -3154,13 +3154,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Bist Du sicher?" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Êtes-vous sûr ?" } }, @@ -3290,13 +3290,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Geräte in der Nähe" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Radios disponibles" } }, @@ -3466,13 +3466,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Batterie Ladung" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Niveau de batterie" } }, @@ -3580,13 +3580,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "BLE Name" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Nom du BLE" } }, @@ -3638,13 +3638,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Die Bluetooth Pin muss 6 Stellen lang sein." } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Le code pin BLE doit avoir 6 chiffres." } }, @@ -3810,13 +3810,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Bluetooth Konfiguration" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Configuration Bluetooth" } }, @@ -3868,13 +3868,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Bluetooth ist aus" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Le Bluetooth est arrêté" } }, @@ -4048,13 +4048,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Bytes" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Octets" } }, @@ -4162,13 +4162,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Abbrechen" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Annuler" } }, @@ -4220,13 +4220,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Canned Messages" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Messages préformatés" } }, @@ -4278,13 +4278,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Canned Messages Config" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Configuration des messages préformatés" } }, @@ -4652,13 +4652,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Kanal" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Canal" } }, @@ -5214,13 +5214,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Kanäle" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Canaux" } }, @@ -5256,13 +5256,13 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "频道" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "頻道" } } @@ -9976,7 +9976,7 @@ }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Noeud d'infrastructure qui étend la couverture du réseau en relayant les messages avec un minimum de surcharge. Invisible dans la liste des noeuds." } }, @@ -10040,7 +10040,7 @@ }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Noeud d'infrastructure qui étend la couverture du réseau en relayant les messages. Visible dans la liste des noeuds." } }, @@ -10650,13 +10650,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Deaktiviert" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Désactivé" } }, @@ -10692,13 +10692,13 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "禁用" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "關閉" } } @@ -10708,13 +10708,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Trennen" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Déconnecter" } }, @@ -10750,13 +10750,13 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "断开连接" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "斷開連接" } } @@ -10766,13 +10766,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Tastatur ausblenden" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Annuler" } }, @@ -10808,13 +10808,13 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "收起键盘" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "隱藏鍵盤" } } @@ -10824,13 +10824,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Display (Device Screen)" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Écran" } }, @@ -10866,13 +10866,13 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "显示" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "螢幕" } } @@ -11536,13 +11536,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Aktiviert" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Activé" } }, @@ -11578,13 +11578,13 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "启用" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "啟用" } } @@ -12832,13 +12832,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Beenden" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Terminer" } }, @@ -12880,7 +12880,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "完成" } } @@ -12986,13 +12986,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Firmware Version" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Version du firmware" } }, @@ -13028,13 +13028,13 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "固件版本" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "韌體版本" } } @@ -13158,13 +13158,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Feste PIN" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Code PIN fixe" } }, @@ -13200,13 +13200,13 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "固定 PIN 码" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "固定 PIN 碼" } } @@ -14344,58 +14344,6 @@ } } }, - "gpsmode.notPresent" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Not Present" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Absent" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "לא קיים" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Non presente" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "Inte närvarande" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Није пристуно" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "不存在" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "無模組" - } - } - } - }, "Group Message" : { "localizations" : { "de" : { @@ -18190,7 +18138,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "日本" } } @@ -23368,70 +23316,6 @@ } } }, - "mqtt" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "MQTT" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "MQTT" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "MQTT" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "MQTT" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "MQTT" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "MQTT" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "MQTT" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "MQTT" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "MQTT" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "MQTT" - } - } - } - }, "MQTT" : { "localizations" : { "it" : { @@ -23632,70 +23516,6 @@ } } }, - "name" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Name" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Name" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nom" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "שם" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nome" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nazwa" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "Namn" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Име" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "名称" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "名稱" - } - } - } - }, "Name" : { "localizations" : { "de" : { @@ -24722,6 +24542,52 @@ } } }, + "Not Present" : { + "localizations" : { + "fr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Absent" + } + }, + "he" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "לא קיים" + } + }, + "it" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Non presente" + } + }, + "se" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Inte närvarande" + } + }, + "sr" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "Није пристуно" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "不存在" + } + }, + "zh-Hant-TW" : { + "stringUnit" : { + "state" : "needs_review", + "value" : "無模組" + } + } + } + }, "not.connected" : { "localizations" : { "de" : { @@ -27088,13 +26954,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Primär" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Principal" } }, @@ -27130,13 +26996,13 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "主要" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "主要" } } @@ -28388,13 +28254,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Antworten" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Répondre" } }, @@ -28430,13 +28296,13 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "回复" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "回覆" } } @@ -30412,7 +30278,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "俄羅斯" } } @@ -34062,7 +33928,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "臺灣 🇹🇼" } } @@ -34094,13 +33960,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Tapback Antwort" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Réponse de Tapback" } }, @@ -34136,13 +34002,13 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "响应" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "表情回應" } } @@ -35124,7 +34990,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "泰國" } } @@ -36026,7 +35892,7 @@ } } }, - "timeout" : { + "Timeout" : { "localizations" : { "de" : { "stringUnit" : { @@ -36078,45 +35944,23 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "逾時長度" } } } }, - "timestamp" : { - "localizations" : { - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "timestamp" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "временска ознака" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "時間戳記" - } - } - } - }, "Timestamp" : { "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Zeitstempel" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Horodatage" } }, @@ -36152,13 +35996,13 @@ }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "时间戳" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "時間戳記" } } @@ -36634,70 +36478,6 @@ } } }, - "tip.messages.title" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nachrichten" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Messages" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Messages" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "הודעות" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Messaggi" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Messages" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "Meddelanden" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Поруке" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "消息" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "訊息" - } - } - } - }, "TLS Enabled" : { "localizations" : { "it" : { @@ -37214,27 +36994,21 @@ }, "United States" : { "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "United States" - } - }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Stati Uniti" } }, "sr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Сједињене Америчке државе" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "美國" } } @@ -37288,61 +37062,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", - "value" : "Unknown" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Unknown" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Inconnu" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "לא ידוע" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Sconosciuto" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Nieznany" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Okänd" } }, "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" : "未知" } } @@ -38124,61 +37892,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Benutzername" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Username" - } - }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Nom d'utilisateur" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "שם משתמש" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Nome utente" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Nazwa użytkownika" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Användarnamn" } }, "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" : "使用者名稱" } } @@ -38458,61 +38220,55 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", - "value" : "Voltage" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Voltage" } }, "fr" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tension" } }, "he" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "וולטז'" } }, "it" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Tensione" } }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Napięcie" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Spänning" } }, "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" : "電壓" } } diff --git a/Meshtastic/Enums/PositionConfigEnums.swift b/Meshtastic/Enums/PositionConfigEnums.swift index 7e587a08..43f9f73e 100644 --- a/Meshtastic/Enums/PositionConfigEnums.swift +++ b/Meshtastic/Enums/PositionConfigEnums.swift @@ -114,7 +114,7 @@ enum GpsMode: Int, CaseIterable, Equatable { case .enabled: return "Eenabled".localized case .notPresent: - return "gpsmode.notPresent".localized + return "Not Present".localized } } func protoEnumValue() -> Config.PositionConfig.GpsMode { diff --git a/Meshtastic/Tips/MessagesTips.swift b/Meshtastic/Tips/MessagesTips.swift index ddbe9feb..a470dcaa 100644 --- a/Meshtastic/Tips/MessagesTips.swift +++ b/Meshtastic/Tips/MessagesTips.swift @@ -13,7 +13,7 @@ struct MessagesTip: Tip { return "tip.messages" } var title: Text { - Text("tip.messages.title") + Text("Messages") } var message: Text? { Text("tip.messages.message") diff --git a/Meshtastic/Views/Settings/Channels/ChannelForm.swift b/Meshtastic/Views/Settings/Channels/ChannelForm.swift index 06a4a260..0b449274 100644 --- a/Meshtastic/Views/Settings/Channels/ChannelForm.swift +++ b/Meshtastic/Views/Settings/Channels/ChannelForm.swift @@ -30,7 +30,7 @@ struct ChannelForm: View { Form { Section(header: Text("channel details")) { HStack { - Text("name") + Text("Name") Spacer() TextField( "Channel Name", @@ -170,7 +170,7 @@ struct ChannelForm: View { } } } - Section(header: Text("mqtt")) { + Section(header: Text("MQTT")) { Toggle(isOn: $uplink) { Label("Uplink Enabled", systemImage: "arrowshape.up") } diff --git a/Meshtastic/Views/Settings/Config/Module/SerialConfig.swift b/Meshtastic/Views/Settings/Config/Module/SerialConfig.swift index d8ca379d..06b4b06a 100644 --- a/Meshtastic/Views/Settings/Config/Module/SerialConfig.swift +++ b/Meshtastic/Views/Settings/Config/Module/SerialConfig.swift @@ -53,7 +53,7 @@ struct SerialConfig: View { } .pickerStyle(DefaultPickerStyle()) .listRowSeparator(/*@START_MENU_TOKEN@*/.visible/*@END_MENU_TOKEN@*/) - Picker("timeout", selection: $timeout ) { + Picker("Timeout", selection: $timeout ) { ForEach(SerialTimeoutIntervals.allCases) { sti in Text(sti.description) } diff --git a/Meshtastic/Views/Settings/Config/PositionConfig.swift b/Meshtastic/Views/Settings/Config/PositionConfig.swift index db0574c7..d8e6ad9f 100644 --- a/Meshtastic/Views/Settings/Config/PositionConfig.swift +++ b/Meshtastic/Views/Settings/Config/PositionConfig.swift @@ -210,7 +210,7 @@ struct PositionConfig: View { } Toggle(isOn: $includeTimestamp) { // 128 - Label("timestamp", systemImage: "clock") + Label("Timestamp", systemImage: "clock") } .toggleStyle(SwitchToggleStyle(tint: .accentColor)) .onChange(of: includeTimestamp) { _, newIncludeTimestamp in diff --git a/Meshtastic/Views/Settings/Settings.swift b/Meshtastic/Views/Settings/Settings.swift index 715b74e2..5a5b6aec 100644 --- a/Meshtastic/Views/Settings/Settings.swift +++ b/Meshtastic/Views/Settings/Settings.swift @@ -209,7 +209,7 @@ struct Settings: View { if isModuleSupported(.mqttConfig) { NavigationLink(value: SettingsNavigationState.mqtt) { Label { - Text("mqtt") + Text("MQTT") } icon: { Image(systemName: "dot.radiowaves.up.forward") } From 8a38f06d55f2f3088756aeb7b04f86721bf31a44 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 27 Apr 2025 10:06:10 -0700 Subject: [PATCH 05/11] Update translation key statuses --- Localizable.xcstrings | 96 +++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/Localizable.xcstrings b/Localizable.xcstrings index 67d828e7..2d33ee77 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -2,7 +2,7 @@ "sourceLanguage" : "en", "strings" : { "" : { - + "shouldTranslate" : false }, "\t%@" : { "localizations" : { @@ -5232,7 +5232,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Canali" } }, @@ -5250,7 +5250,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Канали" } }, @@ -10668,7 +10668,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Disattivato" } }, @@ -10686,7 +10686,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Онемогућено" } }, @@ -10726,7 +10726,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Disconnessione" } }, @@ -10744,7 +10744,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Прекините везу" } }, @@ -10784,7 +10784,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Sospendere" } }, @@ -10802,7 +10802,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Отпусти" } }, @@ -10842,7 +10842,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Display" } }, @@ -10860,7 +10860,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Приказ" } }, @@ -11554,7 +11554,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Abilitato" } }, @@ -11572,7 +11572,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Омогућено" } }, @@ -12850,7 +12850,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Fine" } }, @@ -12868,7 +12868,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Заврши" } }, @@ -13004,7 +13004,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Versione del firmware" } }, @@ -13022,7 +13022,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Верзија фирмвера" } }, @@ -13176,7 +13176,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "PIN fisso" } }, @@ -13194,7 +13194,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Фиксни ПИН" } }, @@ -18126,13 +18126,13 @@ "localizations" : { "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Giappone" } }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Јапан" } }, @@ -24558,7 +24558,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Non presente" } }, @@ -24570,7 +24570,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Није пристуно" } }, @@ -24582,7 +24582,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "無模組" } } @@ -26972,7 +26972,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Primario" } }, @@ -26990,7 +26990,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Примарни" } }, @@ -28272,7 +28272,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Risposta" } }, @@ -28290,7 +28290,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Одговори" } }, @@ -30272,7 +30272,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Русија" } }, @@ -33922,7 +33922,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Тајван" } }, @@ -33978,7 +33978,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Risposta di Tapback" } }, @@ -33996,7 +33996,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Реакција додиром" } }, @@ -34978,13 +34978,13 @@ "localizations" : { "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Thailandia" } }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Тајланд" } }, @@ -35932,7 +35932,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Временско ограничење" } }, @@ -35990,7 +35990,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Временска ознака" } }, @@ -36996,19 +36996,19 @@ "localizations" : { "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Stati Uniti" } }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Сједињене Америчке државе" } }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "美國" } } @@ -37080,7 +37080,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Sconosciuto" } }, @@ -37098,7 +37098,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Непознато" } }, @@ -37110,7 +37110,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "未知" } } @@ -37910,7 +37910,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Nome utente" } }, @@ -37928,7 +37928,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Корисничко име" } }, @@ -37940,7 +37940,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "使用者名稱" } } @@ -38238,7 +38238,7 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Tensione" } }, @@ -38256,7 +38256,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Напон" } }, @@ -38268,7 +38268,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "電壓" } } From 00a7d83c4d0a70c2a5d29fbe25ac3f7d9f949dba Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 27 Apr 2025 11:26:23 -0700 Subject: [PATCH 06/11] 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) } From d568627ce8f2ef978d83d91ac65ccca3e7cf5389 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 27 Apr 2025 12:50:45 -0700 Subject: [PATCH 07/11] Additional translation key cleanup --- Localizable.xcstrings | 104 +----------------- Meshtastic/Enums/SerialConfigEnums.swift | 2 +- Meshtastic/Extensions/OSLogEntryLog.swift | 2 +- Meshtastic/Helpers/BLEManager.swift | 2 +- .../Nodes/Helpers/Map/WaypointForm.swift | 2 +- .../Views/Nodes/Helpers/NodeDetail.swift | 2 +- 6 files changed, 11 insertions(+), 103 deletions(-) diff --git a/Localizable.xcstrings b/Localizable.xcstrings index fd37255a..f405f17f 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -5534,7 +5534,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "關閉" } } @@ -7872,7 +7872,7 @@ } } }, - "default" : { + "Default" : { "localizations" : { "de" : { "stringUnit" : { @@ -7936,34 +7936,6 @@ } } }, - "Default" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Standard" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Predefinito" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Подразумевано" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "預設" - } - } - } - }, "default.128x64.screen.layout" : { "localizations" : { "en" : { @@ -10874,70 +10846,6 @@ } } }, - "distance" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Entfernung" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Distance" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Distance" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "מרחק" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Distanza" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odległość" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "Distans" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Раздаљина" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "距离" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "距離" - } - } - } - }, "Distance" : { "localizations" : { "de" : { @@ -11640,7 +11548,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "已加密" } } @@ -15474,7 +15382,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "包含" } } @@ -15560,7 +15468,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "印度" } } @@ -18112,7 +18020,7 @@ }, "zh-Hant-TW" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "韓國" } } diff --git a/Meshtastic/Enums/SerialConfigEnums.swift b/Meshtastic/Enums/SerialConfigEnums.swift index ff937207..5799dbfb 100644 --- a/Meshtastic/Enums/SerialConfigEnums.swift +++ b/Meshtastic/Enums/SerialConfigEnums.swift @@ -31,7 +31,7 @@ enum SerialBaudRates: Int, CaseIterable, Identifiable { switch self { case .baudDefault: - return "default".localized + return "Default".localized case .baud110: return "110 Baud" case .baud300: diff --git a/Meshtastic/Extensions/OSLogEntryLog.swift b/Meshtastic/Extensions/OSLogEntryLog.swift index fe2dc2cf..c60c7aca 100644 --- a/Meshtastic/Extensions/OSLogEntryLog.swift +++ b/Meshtastic/Extensions/OSLogEntryLog.swift @@ -18,7 +18,7 @@ extension OSLogEntryLog.Level { case .notice: "⚠️ Notice" case .error: "🚨 Error" case .fault: "💥 Fault" - @unknown default: "default" + @unknown default: "Default".localized } } var color: Color { diff --git a/Meshtastic/Helpers/BLEManager.swift b/Meshtastic/Helpers/BLEManager.swift index 9f633f30..b9f2a7d8 100644 --- a/Meshtastic/Helpers/BLEManager.swift +++ b/Meshtastic/Helpers/BLEManager.swift @@ -3448,7 +3448,7 @@ extension BLEManager: CBCentralManagerDelegate { case .unsupported: status = "BLE is unsupported" default: - status = "default" + status = "Default".localized } Logger.services.info("📜 [BLE] Bluetooth status: \(status, privacy: .public)") } diff --git a/Meshtastic/Views/Nodes/Helpers/Map/WaypointForm.swift b/Meshtastic/Views/Nodes/Helpers/Map/WaypointForm.swift index 8800cabf..736c2114 100644 --- a/Meshtastic/Views/Nodes/Helpers/Map/WaypointForm.swift +++ b/Meshtastic/Views/Nodes/Helpers/Map/WaypointForm.swift @@ -338,7 +338,7 @@ struct WaypointForm: View { if LocationsHandler.currentLocation.distance(from: LocationsHandler.DefaultLocation) > 0.0 { let metersAway = waypoint.coordinate.distance(from: LocationsHandler.currentLocation) Label { - Text("distance".localized + ": \(distanceFormatter.string(fromDistance: Double(metersAway)))") + Text("Distance".localized + ": \(distanceFormatter.string(fromDistance: Double(metersAway)))") .foregroundColor(.primary) } icon: { Image(systemName: "lines.measurement.horizontal") diff --git a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift index 7f834de9..bd2abae8 100644 --- a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift +++ b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift @@ -214,7 +214,7 @@ struct NodeDetail: View { // to use with WeatherKit, or has actual data in the most recent EnvironmentMetrics entity // that will be rendered in this section. if node.hasPositions && UserDefaults.environmentEnableWeatherKit - || node.hasDataForLatestEnvironmentMetrics(attributes: ["iaq", "temperature", "relativeHumidity", "barometricPressure", "windSpeed", "radiation", "weight", "distance", "soilTemperature", "soilMoisture"]) { + || node.hasDataForLatestEnvironmentMetrics(attributes: ["iaq", "temperature", "relativeHumidity", "barometricPressure", "windSpeed", "radiation", "weight", "Distance", "soilTemperature", "soilMoisture"]) { Section("Environment") { if !node.hasEnvironmentMetrics { LocalWeatherConditions(location: node.latestPosition?.nodeLocation) From 939de515b0a0c567f8a73c3d9ab4301e623b8a0e Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 27 Apr 2025 13:06:47 -0700 Subject: [PATCH 08/11] Mark keys as reviewed if they were manually updated --- Localizable.xcstrings | 430 ++++++++++------------- Meshtastic/Enums/SerialConfigEnums.swift | 2 +- 2 files changed, 184 insertions(+), 248 deletions(-) diff --git a/Localizable.xcstrings b/Localizable.xcstrings index f405f17f..c99fa002 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -220,7 +220,8 @@ "value" : "%1$@ - %2$@" } } - } + }, + "shouldTranslate" : false }, "%@ - %@ - %@" : { "localizations" : { @@ -254,7 +255,8 @@ "value" : "%1$@ - %2$@ - %3$@" } } - } + }, + "shouldTranslate" : false }, "%@ - %@ Towards %@ Back" : { "localizations" : { @@ -390,7 +392,8 @@ "value" : "%1$@ (%2$@)" } } - } + }, + "shouldTranslate" : false }, "%@ %@" : { "localizations" : { @@ -424,7 +427,8 @@ "value" : "%1$@ %2$@" } } - } + }, + "shouldTranslate" : false }, "%@ %lld" : { "localizations" : { @@ -458,7 +462,8 @@ "value" : "%1$@ %2$lld" } } - } + }, + "shouldTranslate" : false }, "%@ away" : { "localizations" : { @@ -692,13 +697,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "%@ Aplikacja automatycznie ponownie połączy się z preferowanym radiem, jeśli wróci w zasięg." } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "%@ Appen kommer automatiskt att återansluta till den föredragna radion om den kommer inom räckhåll igen." } }, @@ -750,13 +755,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "%@ Ten błąd zwykle nie może być naprawiony bez zapomnienia urządzenia w Ustawienia > Bluetooth i ponownego połączenia z radiem." } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "%@ Detta fel kan vanligtvis inte åtgärdas utan att glömma enheten under Inställningar > Bluetooth och återansluta till radion." } }, @@ -846,7 +851,8 @@ "value" : "%1$@: %2$lld / %3$lld" } } - } + }, + "shouldTranslate" : false }, "%@%%" : { "localizations" : { @@ -2236,7 +2242,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "זמן אוויר" } }, @@ -2248,13 +2254,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Czas nadawania" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Sändningstid" } }, @@ -2700,7 +2706,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "תמיד דלוק" } }, @@ -2712,13 +2718,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Zawsze włączone" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Alltid på" } }, @@ -2786,7 +2792,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "תאורת סביבה" } }, @@ -2804,7 +2810,7 @@ }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Omgivningsbelysning" } }, @@ -2844,7 +2850,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "הגדרות תאורת סביבה" } }, @@ -2862,7 +2868,7 @@ }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Konfiguration av omgivningsbelysning" } }, @@ -3166,7 +3172,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "האם אתה בטוח?" } }, @@ -3178,13 +3184,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Jesteś pewny?" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Är du säker?" } }, @@ -3302,7 +3308,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "מכשירים זמינים" } }, @@ -3314,13 +3320,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Dostępne radia" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Tillgängliga radioapparater" } }, @@ -3490,13 +3496,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Poziom naładowania baterii" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Batterinivå" } }, @@ -3592,7 +3598,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "שם בלוטוס" } }, @@ -3604,13 +3610,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Nazwa BLE" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "BLE-namn" } }, @@ -3650,7 +3656,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "קוד בלוטוס חייבת להיות בת 6 ספרות." } }, @@ -3662,13 +3668,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Pin BLE musi mieć długość 6 cyfr." } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "BLE-PIN måste vara 6 siffror lång." } }, @@ -3822,7 +3828,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "הגדרות בלוטוס" } }, @@ -3834,13 +3840,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Konfiguracja Bluetooth" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Bluetooth-konfiguration" } }, @@ -3880,7 +3886,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "בלוטוס כבוי" } }, @@ -3892,13 +3898,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Bluetooth jest wyłączony" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Bluetooth är avstängt" } }, @@ -4060,7 +4066,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "בייטים" } }, @@ -4072,13 +4078,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Bajty" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Bytes" } }, @@ -4174,7 +4180,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "בטל" } }, @@ -4186,13 +4192,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Anuluj" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Avbryt" } }, @@ -4232,7 +4238,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "הודעות קבועות" } }, @@ -4244,13 +4250,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Gotowe wiadomości" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Fördefinierade meddelanden" } }, @@ -4290,7 +4296,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "הגדרות הודעות קבועות" } }, @@ -4302,13 +4308,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Konfiguracja gotowych wiadomości" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Konfiguration av fördefinierade meddelanden" } }, @@ -4536,7 +4542,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "ערוץ" } }, @@ -4548,13 +4554,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Kanał" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Kanal" } }, @@ -5006,43 +5012,43 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Kanalbelegung" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Utilisation du canal" } }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "שימוש ערוץ" } }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Utilizzo del canale" } }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Wykorzystanie kanału" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Kanalutnyttjande" } }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Искоришћеност канала" } }, @@ -5092,7 +5098,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "ערוצים" } }, @@ -5104,13 +5110,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Kanały" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Kanaler" } }, @@ -5266,43 +5272,43 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "App Daten löschen" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Effacer les données de l'application" } }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "אפס הגדרות אפליקציה" } }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Cancella i dati dell'app" } }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Wyczyść dane aplikacji" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Rensa appdata" } }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Очисти податке апликације" } }, @@ -5486,49 +5492,49 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Schließen" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Fermer" } }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "סגור" } }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Chiudere" } }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Zamknij" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Stäng" } }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Затвори" } }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "关闭" } }, @@ -7876,16 +7882,10 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Standard" } }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Default" - } - }, "fr" : { "stringUnit" : { "state" : "translated", @@ -7906,13 +7906,13 @@ }, "pl" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Domyślny" } }, "se" : { "stringUnit" : { - "state" : "translated", + "state" : "needs_review", "value" : "Standard" } }, @@ -9808,7 +9808,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "מכשיר תשתית להרחבת המש על ידי העברת הודעות עם דאטה נוסף מינימלי." } }, @@ -9820,13 +9820,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Przekaźnik - Pakiety siatki będą preferować trasowanie przez ten węzeł. Ta rola eliminuje niepotrzebny nadmiar, taki jak NodeInfo, DeviceTelemetry i inne pakiety siatki, skutkując tym, że urządzenie nie będzie widoczne jako część sieci. Proszę zobaczyć tryb Rebroadcast dla dodatkowych ustawień specyficznych dla tej roli." } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Infrastrukturnod för att utöka nätverkstäckningen genom att vidarebefordra meddelanden med minimal overhead. Syns inte i Noder-listan." } }, @@ -9872,7 +9872,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "מכשיר תשתית להרחבת המש על ידי העברת הודעות. מופיע ברשימת מכשירים." } }, @@ -9884,13 +9884,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Router - Pakiety siatki będą preferować trasowanie przez ten węzeł. Zakłada, że urządzenie będzie działać samodzielnie, umieszczone w miejscu z przewagą zasięgu. UWAGA: Radia BLE/Wi-Fi i ekran OLED zostaną uśpione." } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Infrastrukturnod för att utöka nätverkstäckningen genom att vidarebefordra meddelanden. Synlig i Noder-listan." } }, @@ -9954,7 +9954,7 @@ }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Kombination av både ROUTER och CLIENT. Inte för mobila enheter." } }, @@ -10488,7 +10488,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "כבוי" } }, @@ -10500,13 +10500,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Wyłączony" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Inaktiverad" } }, @@ -10546,7 +10546,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "התנתק" } }, @@ -10558,13 +10558,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Rozłącz" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Koppla från" } }, @@ -10604,7 +10604,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "סגור מקלדת" } }, @@ -10616,13 +10616,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Zamknij" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Stäng" } }, @@ -10662,7 +10662,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "צג מכשיר" } }, @@ -10674,13 +10674,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Wyświetlacz (Ekran Urządzenia)" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Skärm" } }, @@ -11310,7 +11310,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "מופעל" } }, @@ -11322,13 +11322,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Włączony" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Aktiverad" } }, @@ -11500,49 +11500,49 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Verschlüsselt" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Encrypté" } }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "מוצפן" } }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Crittografato" } }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Zaszyfrowany" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Krypterad" } }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Шифровано" } }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "加密" } }, @@ -12566,7 +12566,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "סיים" } }, @@ -12578,13 +12578,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Finish" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Avsluta" } }, @@ -12720,7 +12720,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "גרסת קושחה" } }, @@ -12732,13 +12732,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Wersja Oprogramowania" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Firmwareversion" } }, @@ -12892,7 +12892,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "קוד קבוע" } }, @@ -12904,13 +12904,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Stały PIN" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Fast PIN" } }, @@ -15334,25 +15334,25 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Include" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Inclure" } }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "כלול" } }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Includere" } }, @@ -15364,19 +15364,19 @@ }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Inkludera" } }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Укључите" } }, "zh-Hans" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "包含" } }, @@ -15462,7 +15462,7 @@ }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Индија" } }, @@ -18008,13 +18008,13 @@ "localizations" : { "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Corea" } }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Кореја" } }, @@ -19570,43 +19570,43 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Manuelle Konfiguration" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Configuration manuelle" } }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "הגדרה ידנית" } }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Configurazione manuale" } }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Konfiguracja ręczna" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Manuell konfiguration" } }, "sr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Ручна конфигурација" } }, @@ -24308,13 +24308,13 @@ "localizations" : { "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Absent" } }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "לא קיים" } }, @@ -24326,7 +24326,7 @@ }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Inte närvarande" } }, @@ -26728,7 +26728,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "עיקרי" } }, @@ -26740,13 +26740,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Podstawowy" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Primär" } }, @@ -27106,13 +27106,13 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "RAK Drehimpulsgeber Modul" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Module d'encodage rotatif RAK" } }, @@ -27124,14 +27124,14 @@ }, "it" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Modulo encoder rotativo RAK" } }, "pl" : { "stringUnit" : { - "state" : "needs_review", - "value" : "Moduł kodera obrotowego RAK" + "state" : "translated", + "value" : "Kodera obrotowego RAK" } }, "se" : { @@ -28086,7 +28086,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "תגובה" } }, @@ -28098,13 +28098,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Odpowiedz" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Svara" } }, @@ -31760,70 +31760,6 @@ } } }, - "serial.mode.default" : { - "localizations" : { - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Standard" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Default" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Défaut" - } - }, - "he" : { - "stringUnit" : { - "state" : "translated", - "value" : "ברירת מחדל" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Predefinito" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Domyślny" - } - }, - "se" : { - "stringUnit" : { - "state" : "translated", - "value" : "Standard" - } - }, - "sr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Основни" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "默认" - } - }, - "zh-Hant-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "預設" - } - } - } - }, "serial.mode.nmea" : { "localizations" : { "de" : { @@ -33792,7 +33728,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "תגובה מהירה" } }, @@ -33804,13 +33740,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Odpowiedź na stuknięcie" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Svarsreaktion" } }, @@ -35716,19 +35652,19 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Zeitlimit erreicht" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Délai d'expiration" } }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "זמן קצוב" } }, @@ -35740,13 +35676,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Limit czasu" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Tidsgräns överskriden" } }, @@ -35786,7 +35722,7 @@ }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "שעה/תאריך" } }, @@ -35798,13 +35734,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Znacznik czasu" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Tidsstämpel" } }, @@ -36888,13 +36824,13 @@ }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Inconnu" } }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "לא ידוע" } }, @@ -36906,13 +36842,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Nieznany" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Okänd" } }, @@ -37712,19 +37648,19 @@ "localizations" : { "de" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Benutzername" } }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Nom d'utilisateur" } }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "שם משתמש" } }, @@ -37736,13 +37672,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Nazwa użytkownika" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Användarnamn" } }, @@ -38046,13 +37982,13 @@ }, "fr" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Tension" } }, "he" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "וולטז'" } }, @@ -38064,13 +38000,13 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Napięcie" } }, "se" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Spänning" } }, diff --git a/Meshtastic/Enums/SerialConfigEnums.swift b/Meshtastic/Enums/SerialConfigEnums.swift index 5799dbfb..34388f40 100644 --- a/Meshtastic/Enums/SerialConfigEnums.swift +++ b/Meshtastic/Enums/SerialConfigEnums.swift @@ -118,7 +118,7 @@ enum SerialModeTypes: Int, CaseIterable, Identifiable { var description: String { switch self { case .default: - return "serial.mode.default".localized + return "Default".localized case .simple: return "serial.mode.simple".localized case .proto: From defba587e7e2308311f9b3fe1a9e0cc29d4ccd4d Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 27 Apr 2025 14:04:47 -0700 Subject: [PATCH 09/11] Assorted linting updates --- Meshtastic.xcodeproj/project.pbxproj | 20 ++---- .../xcschemes/Meshtastic.xcscheme | 2 +- .../xcschemes/WidgetsExtension.xcscheme | 2 +- Meshtastic/AppIntents/AppIntentErrors.swift | 2 +- .../AppIntents/NavigateToNodeIntent.swift | 18 +++--- .../SaveChannelSettingsIntent.swift | 4 -- Meshtastic/Export/CsvDocument.swift | 5 +- Meshtastic/Helpers/BLEManager.swift | 16 +---- Meshtastic/Helpers/MeshPackets.swift | 8 --- .../Helpers/Mqtt/MqttClientProxyManager.swift | 11 +--- .../MetricsChartSeries.swift | 1 - .../MetricsSeriesList.swift | 4 +- Meshtastic/Views/Helpers/CircleText.swift | 6 +- .../Compact Widgets/CompactWidget.swift | 2 +- .../RadiationCompactWidget.swift | 2 +- .../WeatherConditionsCompactWidget.swift | 1 - .../Views/Messages/ChannelMessageList.swift | 12 ++-- Meshtastic/Views/Messages/MessageText.swift | 1 - .../Views/Messages/UserMessageList.swift | 2 - .../Helpers/Actions/NavigateToButton.swift | 64 +++++++++---------- .../Nodes/Helpers/Map/PositionPopover.swift | 4 +- .../EnvironmentDefaultColumns.swift | 1 - .../EnvironmentDefaultSeries.swift | 8 +-- .../Views/Nodes/Helpers/NodeListItem.swift | 2 +- Meshtastic/Views/Nodes/NodeList.swift | 17 +---- Meshtastic/Views/Nodes/PositionLog.swift | 2 - Meshtastic/Views/Settings/About.swift | 3 +- Meshtastic/Views/Settings/AppLog.swift | 2 +- .../Views/Settings/Config/DeviceConfig.swift | 2 - .../Settings/Config/Module/MQTTConfig.swift | 1 - .../Settings/Config/PositionConfig.swift | 8 +-- Widgets/WidgetsLiveActivity.swift | 2 +- 32 files changed, 80 insertions(+), 155 deletions(-) diff --git a/Meshtastic.xcodeproj/project.pbxproj b/Meshtastic.xcodeproj/project.pbxproj index 59a50868..39426e2f 100644 --- a/Meshtastic.xcodeproj/project.pbxproj +++ b/Meshtastic.xcodeproj/project.pbxproj @@ -56,7 +56,6 @@ B399E8A42B6F486400E4488E /* RetryButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = B399E8A32B6F486400E4488E /* RetryButton.swift */; }; B3E905B12B71F7F300654D07 /* TextMessageField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3E905B02B71F7F300654D07 /* TextMessageField.swift */; }; BC47C2EF2CE0017D008245CA /* MessageNodeIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC47C2EE2CE0017D008245CA /* MessageNodeIntent.swift */; }; - BC5EBA3C2D002A2000C442FF /* MessageNodeIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC5EBA3B2D002A2000C442FF /* MessageNodeIntent.swift */; }; BC6B45FF2CB2F98900723CEB /* SaveChannelSettingsIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC6B45FE2CB2F98900723CEB /* SaveChannelSettingsIntent.swift */; }; BCB613812C67290800485544 /* SendWaypointIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCB613802C67290800485544 /* SendWaypointIntent.swift */; }; BCB613832C672A2600485544 /* MessageChannelIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCB613822C672A2600485544 /* MessageChannelIntent.swift */; }; @@ -1237,7 +1236,7 @@ attributes = { BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 1540; - LastUpgradeCheck = 1600; + LastUpgradeCheck = 1630; TargetAttributes = { 25F5D5C62C4375A8008036E3 = { CreatedOnToolsVersion = 15.4; @@ -1482,7 +1481,6 @@ 251926872C3BAE2200249DF5 /* NodeAlertsButton.swift in Sources */, DDA1C48E28DB49D3009933EC /* ChannelRoles.swift in Sources */, DDD5BB092C285DDC007E03CA /* AppLog.swift in Sources */, - BC5EBA3C2D002A2000C442FF /* MessageNodeIntent.swift in Sources */, DD8ED9C8289CE4B900B3B0AB /* RoutingError.swift in Sources */, 233E99C52D84A0B600CC3A77 /* CompactWidget.swift in Sources */, DDC1B81A2AB5377B00C71E39 /* MessagesTips.swift in Sources */, @@ -1604,7 +1602,6 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = GCH7VS5Y9R; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; GENERATE_INFOPLIST_FILE = YES; @@ -1628,7 +1625,6 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = GCH7VS5Y9R; GCC_C_LANGUAGE_STANDARD = gnu17; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 17.0; @@ -1678,6 +1674,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = GCH7VS5Y9R; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -1742,6 +1739,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = GCH7VS5Y9R; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -1778,12 +1776,11 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"Meshtastic/Preview Content\""; - DEVELOPMENT_TEAM = GCH7VS5Y9R; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = Meshtastic/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Meshtastic; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; - IPHONEOS_DEPLOYMENT_TARGET = 17.2; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1812,12 +1809,11 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"Meshtastic/Preview Content\""; - DEVELOPMENT_TEAM = GCH7VS5Y9R; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = Meshtastic/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Meshtastic; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; - IPHONEOS_DEPLOYMENT_TARGET = 17.2; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1843,12 +1839,11 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = GCH7VS5Y9R; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Widgets/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Widgets; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 17.2; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1876,12 +1871,11 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = GCH7VS5Y9R; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = Widgets/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Widgets; INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 17.2; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/Meshtastic.xcodeproj/xcshareddata/xcschemes/Meshtastic.xcscheme b/Meshtastic.xcodeproj/xcshareddata/xcschemes/Meshtastic.xcscheme index 508a6cab..53ea5ca7 100644 --- a/Meshtastic.xcodeproj/xcshareddata/xcschemes/Meshtastic.xcscheme +++ b/Meshtastic.xcodeproj/xcshareddata/xcschemes/Meshtastic.xcscheme @@ -1,6 +1,6 @@ some IntentResult & ProvidesDialog { if !BLEManager.shared.isConnected { throw AppIntentErrors.AppIntentError.notConnected } - + let fetchNodeInfoRequest: NSFetchRequest = NSFetchRequest(entityName: "NodeInfoEntity") fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeNum)) - + do { guard let fetchedNode = try PersistenceController.shared.container.viewContext.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity], fetchedNode.count == 1 else { throw $nodeNum.needsValueError("Could not find node") } - + let nodeInfo = fetchedNode[0] if let latitude = nodeInfo.latestPosition?.coordinate.latitude, let longitude = nodeInfo.latestPosition?.coordinate.longitude { - + let url = URL(string: "maps://?saddr=&daddr=\(latitude),\(longitude)") - + if let mapURL = url, UIApplication.shared.canOpenURL(mapURL) { // Request to continue in foreground before opening the app try await requestToContinueInForeground() - + // Open Apple Maps for navigation UIApplication.shared.open(mapURL, options: [:], completionHandler: nil) return .result(dialog: "Navigating to node location.") diff --git a/Meshtastic/AppIntents/SaveChannelSettingsIntent.swift b/Meshtastic/AppIntents/SaveChannelSettingsIntent.swift index 902a66cc..095112ff 100644 --- a/Meshtastic/AppIntents/SaveChannelSettingsIntent.swift +++ b/Meshtastic/AppIntents/SaveChannelSettingsIntent.swift @@ -29,12 +29,9 @@ struct SaveChannelSettingsIntent: AppIntent { if channelUrl.absoluteString.lowercased().contains("meshtastic.org/e/#") { // Split the URL to get the portion after "#" let components = channelUrl.absoluteString.components(separatedBy: "#") - // Add channels flag based on the URL query parameter (if present) let addChannels = Bool(channelUrl["add"] ?? "false") ?? false - var channelSettings: String? - // Extract the Base64 encoded channel settings (after "#") if let lastComponent = components.last { channelSettings = lastComponent.components(separatedBy: "?").first // Ignore any query parameters @@ -44,7 +41,6 @@ struct SaveChannelSettingsIntent: AppIntent { if let channelSettings = channelSettings { // Call the BLEManager to save the channel settings let saveResult = BLEManager.shared.saveChannelSet(base64UrlString: channelSettings, addChannels: addChannels) - if !saveResult { throw AppIntentErrors.AppIntentError.message("Failed to save the channel settings.") } diff --git a/Meshtastic/Export/CsvDocument.swift b/Meshtastic/Export/CsvDocument.swift index f4bb04ac..7133633e 100644 --- a/Meshtastic/Export/CsvDocument.swift +++ b/Meshtastic/Export/CsvDocument.swift @@ -20,13 +20,10 @@ struct CsvDocument: FileDocument { } init(configuration: ReadConfiguration) throws { - if let data = configuration.file.regularFileContents { - - csvData = String(decoding: data, as: UTF8.self) + csvData = String(data: data, encoding: .utf8) ?? "" } else { - throw CocoaError(.fileReadCorruptFile) } } diff --git a/Meshtastic/Helpers/BLEManager.swift b/Meshtastic/Helpers/BLEManager.swift index b9f2a7d8..b46e6a46 100644 --- a/Meshtastic/Helpers/BLEManager.swift +++ b/Meshtastic/Helpers/BLEManager.swift @@ -579,7 +579,6 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { if let error { - Logger.services.error("🚫 [BLE] didUpdateValueFor Characteristic error \(error.localizedDescription, privacy: .public)") let errorCode = (error as NSError).code if errorCode == 5 || errorCode == 15 { @@ -633,14 +632,9 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate } catch { Logger.services.error("💥 \(error.localizedDescription, privacy: .public) \(characteristic.value!, privacy: .public)") } - // Publish mqttClientProxyMessages received on the from radio if decodedInfo.payloadVariant == FromRadio.OneOf_PayloadVariant.mqttClientProxyMessage(decodedInfo.mqttClientProxyMessage) { - let message = CocoaMQTTMessage( - topic: decodedInfo.mqttClientProxyMessage.topic, - payload: [UInt8](decodedInfo.mqttClientProxyMessage.data), - retained: decodedInfo.mqttClientProxyMessage.retained - ) + let message = CocoaMQTTMessage(topic: decodedInfo.mqttClientProxyMessage.topic, payload: [UInt8](decodedInfo.mqttClientProxyMessage.data), retained: decodedInfo.mqttClientProxyMessage.retained) mqttManager.mqttClientProxy?.publish(message) } else if decodedInfo.payloadVariant == FromRadio.OneOf_PayloadVariant.clientNotification(decodedInfo.clientNotification) { if decodedInfo.clientNotification.hasReplyID { @@ -782,13 +776,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate adminAppPacket(packet: decodedInfo.packet, context: context) case .replyApp: Logger.mesh.info("🕸️ MESH PACKET received for Reply App handling as a text message") - textMessageAppPacket( - packet: decodedInfo.packet, - wantRangeTestPackets: wantRangeTestPackets, - connectedNode: (self.connectedPeripheral != nil ? connectedPeripheral.num : 0), - context: context, - appState: appState - ) + textMessageAppPacket(packet: decodedInfo.packet, wantRangeTestPackets: wantRangeTestPackets, connectedNode: (self.connectedPeripheral != nil ? connectedPeripheral.num : 0), context: context, appState: appState) case .ipTunnelApp: Logger.mesh.info("🕸️ MESH PACKET received for IP Tunnel App UNHANDLED UNHANDLED") case .serialApp: diff --git a/Meshtastic/Helpers/MeshPackets.swift b/Meshtastic/Helpers/MeshPackets.swift index 83f0b8ef..4b0aa7b4 100644 --- a/Meshtastic/Helpers/MeshPackets.swift +++ b/Meshtastic/Helpers/MeshPackets.swift @@ -686,20 +686,15 @@ func routingPacket (packet: MeshPacket, connectedNodeNum: Int64, context: NSMana func telemetryPacket(packet: MeshPacket, connectedNode: Int64, context: NSManagedObjectContext) { if let telemetryMessage = try? Telemetry(serializedBytes: packet.decoded.payload) { - let logString = String.localizedStringWithFormat("mesh.log.telemetry.received %@".localized, String(packet.from)) Logger.mesh.info("📈 \(logString, privacy: .public)") - if telemetryMessage.variant != Telemetry.OneOf_Variant.deviceMetrics(telemetryMessage.deviceMetrics) && telemetryMessage.variant != Telemetry.OneOf_Variant.environmentMetrics(telemetryMessage.environmentMetrics) && telemetryMessage.variant != Telemetry.OneOf_Variant.localStats(telemetryMessage.localStats) && telemetryMessage.variant != Telemetry.OneOf_Variant.powerMetrics(telemetryMessage.powerMetrics) { /// Other unhandled telemetry packets return } - let telemetry = TelemetryEntity(context: context) - let fetchNodeTelemetryRequest = NodeInfoEntity.fetchRequest() fetchNodeTelemetryRequest.predicate = NSPredicate(format: "num == %lld", Int64(packet.from)) - do { let fetchedNode = try context.fetch(fetchNodeTelemetryRequest) if fetchedNode.count == 1 { @@ -756,7 +751,6 @@ func telemetryPacket(packet: MeshPacket, connectedNode: Int64, context: NSManage Logger.statistics.info("📈 [Mesh Statistics] Channel Utilization: \(telemetryMessage.localStats.channelUtilization, privacy: .public) Airtime: \(telemetryMessage.localStats.airUtilTx, privacy: .public) Packets Sent: \(telemetryMessage.localStats.numPacketsTx, privacy: .public) Packets Received: \(telemetryMessage.localStats.numPacketsRx, privacy: .public) Bad Packets Received: \(telemetryMessage.localStats.numPacketsRxBad, privacy: .public) Nodes Online: \(telemetryMessage.localStats.numOnlineNodes, privacy: .public) of \(telemetryMessage.localStats.numTotalNodes, privacy: .public) nodes for Node: \(packet.from.toHex(), privacy: .public)") } else if telemetryMessage.variant == Telemetry.OneOf_Variant.powerMetrics(telemetryMessage.powerMetrics) { Logger.data.info("📈 [Power Metrics] Received for Node: \(packet.from.toHex(), privacy: .public)") - telemetry.powerCh1Voltage = telemetryMessage.powerMetrics.hasCh1Voltage.then(telemetryMessage.powerMetrics.ch1Voltage) telemetry.powerCh1Current = telemetryMessage.powerMetrics.hasCh1Current.then(telemetryMessage.powerMetrics.ch1Current) telemetry.powerCh2Voltage = telemetryMessage.powerMetrics.hasCh2Voltage.then(telemetryMessage.powerMetrics.ch2Voltage) @@ -764,7 +758,6 @@ func telemetryPacket(packet: MeshPacket, connectedNode: Int64, context: NSManage telemetry.powerCh3Voltage = telemetryMessage.powerMetrics.hasCh3Voltage.then(telemetryMessage.powerMetrics.ch3Voltage) telemetry.powerCh3Current = telemetryMessage.powerMetrics.hasCh3Current.then(telemetryMessage.powerMetrics.ch3Current) telemetry.metricsType = 2 - } telemetry.snr = packet.rxSnr telemetry.rssi = packet.rxRssi @@ -781,7 +774,6 @@ func telemetryPacket(packet: MeshPacket, connectedNode: Int64, context: NSManage fetchedNode[0].telemetries = mutableTelemetries.copy() as? NSOrderedSet } try context.save() - Logger.data.info("💾 [TelemetryEntity] of type \(MetricsTypes(rawValue: Int(telemetry.metricsType))?.name ?? "Unknown Metrics Type", privacy: .public) Saved for Node: \(packet.from.toHex(), privacy: .public)") if telemetry.metricsType == 0 { // Connected Device Metrics diff --git a/Meshtastic/Helpers/Mqtt/MqttClientProxyManager.swift b/Meshtastic/Helpers/Mqtt/MqttClientProxyManager.swift index 6dc1854b..435e162b 100644 --- a/Meshtastic/Helpers/Mqtt/MqttClientProxyManager.swift +++ b/Meshtastic/Helpers/Mqtt/MqttClientProxyManager.swift @@ -43,18 +43,13 @@ class MqttClientProxyManager { let port = defaultServerPort let username = node.mqttConfig?.username let password = node.mqttConfig?.password - // if host == defaultServerAddress { - //username = ProcessInfo.processInfo.environment["PUBLIC_MQTT_USERNAME"] - //password = ProcessInfo.processInfo.environment["PUBLIC_MQTT_PASSWORD"] - // } let root = node.mqttConfig?.root?.count ?? 0 > 0 ? node.mqttConfig?.root : "msh" let prefix = root! topic = prefix + "/2/e" + "/#" - let qos = CocoaMQTTQoS(rawValue: UInt8(1))! - connect(host: host, port: port, useSsl: useSsl, username: username, password: password, topic: topic, qos: qos, cleanSession: true) + connect(host: host, port: port, useSsl: useSsl, username: username, password: password, topic: topic) } } - func connect(host: String, port: Int, useSsl: Bool, username: String?, password: String?, topic: String?, qos: CocoaMQTTQoS, cleanSession: Bool) { + func connect(host: String, port: Int, useSsl: Bool, username: String?, password: String?, topic: String?) { guard !host.isEmpty else { delegate?.onMqttDisconnected() return @@ -67,7 +62,7 @@ class MqttClientProxyManager { mqttClient.username = username mqttClient.password = password mqttClient.keepAlive = 60 - mqttClient.cleanSession = cleanSession + mqttClient.cleanSession = true if debugLog { mqttClient.logLevel = .debug } diff --git a/Meshtastic/Model/Metrics Visualization/MetricsChartSeries.swift b/Meshtastic/Model/Metrics Visualization/MetricsChartSeries.swift index ab68c4cc..42e35ce0 100644 --- a/Meshtastic/Model/Metrics Visualization/MetricsChartSeries.swift +++ b/Meshtastic/Model/Metrics Visualization/MetricsChartSeries.swift @@ -41,7 +41,6 @@ class MetricsChartSeries: ObservableObject { // Used for scaling the Y-axis let initialYAxisRange: ClosedRange? let minumumYAxisSpan: Float? - // Main initializer init( id: String, diff --git a/Meshtastic/Model/Metrics Visualization/MetricsSeriesList.swift b/Meshtastic/Model/Metrics Visualization/MetricsSeriesList.swift index fb68af92..1def5f47 100644 --- a/Meshtastic/Model/Metrics Visualization/MetricsSeriesList.swift +++ b/Meshtastic/Model/Metrics Visualization/MetricsSeriesList.swift @@ -67,12 +67,12 @@ class MetricsSeriesList: ObservableObject, RandomAccessCollection, RangeReplacea for aSeries in self.visible { var seriesUpper = range[aSeries]?.upperBound ?? -.infinity var seriesLower = range[aSeries]?.lowerBound ?? .infinity - + if let value = aSeries.valueFor(te) { // Update the global bounds if value > globalUpper {globalUpper = value} if value < globalLower {globalLower = value} - + // Update the series bounds if necessary if value > seriesUpper || value < seriesLower { if value > seriesUpper { diff --git a/Meshtastic/Views/Helpers/CircleText.swift b/Meshtastic/Views/Helpers/CircleText.swift index c9ee41c6..f85decf4 100644 --- a/Meshtastic/Views/Helpers/CircleText.swift +++ b/Meshtastic/Views/Helpers/CircleText.swift @@ -10,11 +10,11 @@ struct CircleText: View { var text: String var color: Color var circleSize: CGFloat = 45 - var node: NodeInfoEntity? = nil - + var node: NodeInfoEntity? + var body: some View { if let node = node { - NavigationStack{ + NavigationStack { NavigationLink(destination: NodeDetail(node: node)) { circleContent } diff --git a/Meshtastic/Views/Helpers/Compact Widgets/CompactWidget.swift b/Meshtastic/Views/Helpers/Compact Widgets/CompactWidget.swift index 42411cc1..a999dae0 100644 --- a/Meshtastic/Views/Helpers/Compact Widgets/CompactWidget.swift +++ b/Meshtastic/Views/Helpers/Compact Widgets/CompactWidget.swift @@ -31,7 +31,7 @@ import SwiftUI WeightCompactWidget(weight: "123", unit: "kg") SoilTemperatureCompactWidget(temperature: "23", unit: "°C") SoilMoistureCompactWidget(moisture: "23", unit: "%") - + let rain: Float = 10.1 let locale = NSLocale.current as NSLocale let usesMetricSystem = locale.usesMetricSystem // Returns true for metric (mm), false for imperial (inches) diff --git a/Meshtastic/Views/Helpers/Compact Widgets/RadiationCompactWidget.swift b/Meshtastic/Views/Helpers/Compact Widgets/RadiationCompactWidget.swift index b5cd7232..582a1c26 100644 --- a/Meshtastic/Views/Helpers/Compact Widgets/RadiationCompactWidget.swift +++ b/Meshtastic/Views/Helpers/Compact Widgets/RadiationCompactWidget.swift @@ -16,7 +16,7 @@ struct RadiationCompactWidget: View { HStack(alignment: .firstTextBaseline) { Text(verbatim: "☢") .font(.system(size: 30, design: .monospaced)) - .foregroundColor(.accentColor) + .tint(.accentColor) Text("Radiation") .textCase(.uppercase) .font(.callout) diff --git a/Meshtastic/Views/Helpers/Compact Widgets/WeatherConditionsCompactWidget.swift b/Meshtastic/Views/Helpers/Compact Widgets/WeatherConditionsCompactWidget.swift index 4918c7b6..3cac48bf 100644 --- a/Meshtastic/Views/Helpers/Compact Widgets/WeatherConditionsCompactWidget.swift +++ b/Meshtastic/Views/Helpers/Compact Widgets/WeatherConditionsCompactWidget.swift @@ -39,4 +39,3 @@ struct WeatherConditionsCompactWidget: View { } } } - diff --git a/Meshtastic/Views/Messages/ChannelMessageList.swift b/Meshtastic/Views/Messages/ChannelMessageList.swift index 0696e9d8..f787f4f1 100644 --- a/Meshtastic/Views/Messages/ChannelMessageList.swift +++ b/Meshtastic/Views/Messages/ChannelMessageList.swift @@ -14,19 +14,16 @@ struct ChannelMessageList: View { @EnvironmentObject var appState: AppState @Environment(\.managedObjectContext) var context @EnvironmentObject var bleManager: BLEManager - // Keyboard State @FocusState var messageFieldFocused: Bool - @ObservedObject var myInfo: MyInfoEntity @ObservedObject var channel: ChannelEntity @State private var replyMessageId: Int64 = 0 @AppStorage("preferredPeripheralNum") private var preferredPeripheralNum = -1 - // Scroll state - @State private var showScrollToBottomButton = false - @State private var hasReachedBottom = false - @State private var gotFirstUnreadMessage: Bool = false + @State private var showScrollToBottomButton = false + @State private var hasReachedBottom = false + @State private var gotFirstUnreadMessage: Bool = false var body: some View { VStack { @@ -118,7 +115,7 @@ struct ChannelMessageList: View { .frame(maxWidth: .infinity) .id(message.messageId) .onAppear { - if gotFirstUnreadMessage{ + if gotFirstUnreadMessage { if !message.read { message.read = true do { @@ -184,7 +181,6 @@ struct ChannelMessageList: View { showScrollToBottomButton = true } } - // Scroll to bottom button if showScrollToBottomButton { Button { diff --git a/Meshtastic/Views/Messages/MessageText.swift b/Meshtastic/Views/Messages/MessageText.swift index 002d2c4c..c8a994c3 100644 --- a/Meshtastic/Views/Messages/MessageText.swift +++ b/Meshtastic/Views/Messages/MessageText.swift @@ -73,7 +73,6 @@ struct MessageText: View { } else { EmptyView() } - } .contextMenu { MessageContextMenuItems( diff --git a/Meshtastic/Views/Messages/UserMessageList.swift b/Meshtastic/Views/Messages/UserMessageList.swift index 6f995756..9824f621 100644 --- a/Meshtastic/Views/Messages/UserMessageList.swift +++ b/Meshtastic/Views/Messages/UserMessageList.swift @@ -20,7 +20,6 @@ struct UserMessageList: View { // View State Items @ObservedObject var user: UserEntity @State private var replyMessageId: Int64 = 0 - // Scroll state @State private var showScrollToBottomButton = false @State private var hasReachedBottom = false @@ -171,7 +170,6 @@ struct UserMessageList: View { showScrollToBottomButton = true } } - // Scroll to bottom button if showScrollToBottomButton { Button { diff --git a/Meshtastic/Views/Nodes/Helpers/Actions/NavigateToButton.swift b/Meshtastic/Views/Nodes/Helpers/Actions/NavigateToButton.swift index 78917082..403d1b98 100644 --- a/Meshtastic/Views/Nodes/Helpers/Actions/NavigateToButton.swift +++ b/Meshtastic/Views/Nodes/Helpers/Actions/NavigateToButton.swift @@ -14,45 +14,43 @@ struct NavigateToButton: View { var node: NodeInfoEntity var body: some View { - Button { - guard let userNum = node.user?.num else { - Logger.services.error("NavigateToAction: Selected node does not exist") + Button { + guard let userNum = node.user?.num else { + Logger.services.error("NavigateToAction: Selected node does not exist") + return + } + Logger.services.info("Fetching NodeInfoEntity for userNum: \(userNum, privacy: .public)") + + let fetchRequest: NSFetchRequest = NSFetchRequest(entityName: "NodeInfoEntity") + fetchRequest.predicate = NSPredicate(format: "num == %lld", Int64(userNum)) + + do { + let fetchedNodes = try PersistenceController.shared.container.viewContext.fetch(fetchRequest) + guard let nodeInfo = fetchedNodes.first else { + Logger.services.error("NavigateToAction: Node with userNum \(userNum, privacy: .public) not found in Core Data") return } - - Logger.services.info("Fetching NodeInfoEntity for userNum: \(userNum, privacy: .public)") - - let fetchRequest: NSFetchRequest = NSFetchRequest(entityName: "NodeInfoEntity") - fetchRequest.predicate = NSPredicate(format: "num == %lld", Int64(userNum)) - - do { - let fetchedNodes = try PersistenceController.shared.container.viewContext.fetch(fetchRequest) - - guard let nodeInfo = fetchedNodes.first else { - Logger.services.error("NavigateToAction: Node with userNum \(userNum, privacy: .public) not found in Core Data") - return - } - if let latitude = nodeInfo.latestPosition?.latitude, - let longitude = nodeInfo.latestPosition?.longitude { - if let url = URL(string: "maps://?saddr=&daddr=\(latitude),\(longitude)") { - UIApplication.shared.open(url, options: [:], completionHandler: nil) - } else { - Logger.services.error("Failed to create URL for navigation") - } + if let latitude = nodeInfo.latestPosition?.latitude, + let longitude = nodeInfo.latestPosition?.longitude { + if let url = URL(string: "maps://?saddr=&daddr=\(latitude),\(longitude)") { + UIApplication.shared.open(url, options: [:], completionHandler: nil) } else { - Logger.services.warning("NavigateToAction: Node \(userNum, privacy: .public) has invalid or missing coordinates") + Logger.services.error("Failed to create URL for navigation") } - } catch { - Logger.services.error("NavigateToAction: Failed to fetch node with userNum \(userNum, privacy: .public): \(error.localizedDescription, privacy: .public)") - } - } label: { - Label { - Text("Navigate to node") - } icon: { - Image(systemName: "map") - .symbolRenderingMode(.hierarchical) + } else { + Logger.services.warning("NavigateToAction: Node \(userNum, privacy: .public) has invalid or missing coordinates") } + } catch { + Logger.services.error("NavigateToAction: Failed to fetch node with userNum \(userNum, privacy: .public): \(error.localizedDescription, privacy: .public)") + } + } label: { + Label { + Text("Navigate to node") + } icon: { + Image(systemName: "map") + .symbolRenderingMode(.hierarchical) } } + } } diff --git a/Meshtastic/Views/Nodes/Helpers/Map/PositionPopover.swift b/Meshtastic/Views/Nodes/Helpers/Map/PositionPopover.swift index ce7a10ef..97df2327 100644 --- a/Meshtastic/Views/Nodes/Helpers/Map/PositionPopover.swift +++ b/Meshtastic/Views/Nodes/Helpers/Map/PositionPopover.swift @@ -23,7 +23,7 @@ struct PositionPopover: View { var body: some View { // Node Color from node.num let nodeColor = UIColor(hex: UInt32(position.nodePosition?.num ?? 0)) - NavigationStack{ + NavigationStack { VStack { HStack { ZStack { @@ -105,7 +105,6 @@ struct PositionPopover: View { .foregroundColor(.primary) .font(idiom == .phone ? .callout : .body) } - } icon: { Image(systemName: "mountain.2.fill") .symbolRenderingMode(.hierarchical) @@ -180,7 +179,6 @@ struct PositionPopover: View { } .padding(.bottom, 5) if position.nodePosition?.viaMqtt ?? false { - Label { Text("MQTT") .font(idiom == .phone ? .callout : .body) diff --git a/Meshtastic/Views/Nodes/Helpers/Metrics Columns/EnvironmentDefaultColumns.swift b/Meshtastic/Views/Nodes/Helpers/Metrics Columns/EnvironmentDefaultColumns.swift index ffd86987..42cf8663 100644 --- a/Meshtastic/Views/Nodes/Helpers/Metrics Columns/EnvironmentDefaultColumns.swift +++ b/Meshtastic/Views/Nodes/Helpers/Metrics Columns/EnvironmentDefaultColumns.swift @@ -220,7 +220,6 @@ extension MetricsColumnList { ) } ?? Text(Constants.nilValueIndicator) }), - // Rainfall 24-hour MetricsTableColumn( id: "rainfall24H", diff --git a/Meshtastic/Views/Nodes/Helpers/Metrics Columns/EnvironmentDefaultSeries.swift b/Meshtastic/Views/Nodes/Helpers/Metrics Columns/EnvironmentDefaultSeries.swift index d3762845..b2590b51 100644 --- a/Meshtastic/Views/Nodes/Helpers/Metrics Columns/EnvironmentDefaultSeries.swift +++ b/Meshtastic/Views/Nodes/Helpers/Metrics Columns/EnvironmentDefaultSeries.swift @@ -80,7 +80,7 @@ extension MetricsSeriesList { .alignsMarkStylesWithPlotArea() } }), - + // Barometric Pressure Series Configuration MetricsChartSeries( id: "barometricPressure", @@ -106,7 +106,7 @@ extension MetricsSeriesList { .alignsMarkStylesWithPlotArea() } }), - + // Indoor Air Quality Series Configuration MetricsChartSeries( id: "iaq", @@ -134,7 +134,7 @@ extension MetricsSeriesList { .alignsMarkStylesWithPlotArea() } }), - + // Lux MetricsChartSeries( id: "lux", @@ -460,7 +460,7 @@ extension MetricsSeriesList { .lineStyle(StrokeStyle(lineWidth: 4)) .alignsMarkStylesWithPlotArea() } - }), + }) ]) } } diff --git a/Meshtastic/Views/Nodes/Helpers/NodeListItem.swift b/Meshtastic/Views/Nodes/Helpers/NodeListItem.swift index cabfabc6..958906aa 100644 --- a/Meshtastic/Views/Nodes/Helpers/NodeListItem.swift +++ b/Meshtastic/Views/Nodes/Helpers/NodeListItem.swift @@ -77,7 +77,7 @@ struct NodeListItem: View { imageColor: .green, text: "connected".localized) } - if node.lastHeard?.timeIntervalSince1970 ?? 0 > 0 && node.lastHeard! < Calendar.current.date(byAdding: .year, value: 1, to: Date())!{ + if node.lastHeard?.timeIntervalSince1970 ?? 0 > 0 && node.lastHeard! < Calendar.current.date(byAdding: .year, value: 1, to: Date())! { IconAndText(systemName: node.isOnline ? "checkmark.circle.fill" : "moon.circle.fill", imageColor: node.isOnline ? .green : .orange, text: node.lastHeard?.formatted() ?? "unknown.age".localized) diff --git a/Meshtastic/Views/Nodes/NodeList.swift b/Meshtastic/Views/Nodes/NodeList.swift index 49b2d3a1..de1b522a 100644 --- a/Meshtastic/Views/Nodes/NodeList.swift +++ b/Meshtastic/Views/Nodes/NodeList.swift @@ -65,10 +65,7 @@ struct NodeList: View { var nodes: FetchedResults var connectedNode: NodeInfoEntity? { - getNodeInfo( - id: bleManager.connectedPeripheral?.num ?? 0, - context: context - ) + getNodeInfo(id: bleManager.connectedPeripheral?.num ?? 0, context: context) } @ViewBuilder @@ -78,19 +75,11 @@ struct NodeList: View { ) -> some View { /// Allow users to mute notifications for a node even if they are not connected if let user = node.user { - NodeAlertsButton( - context: context, - node: node, - user: user - ) + NodeAlertsButton(context: context, node: node, user: user) } if let connectedNode { /// Favoriting a node requires being connected - FavoriteNodeButton( - bleManager: bleManager, - context: context, - node: node - ) + FavoriteNodeButton(bleManager: bleManager, context: context, node: node) /// Don't show message, trace route, position exchange or delete context menu items for the connected node if connectedNode.num != node.num { if !node.viaMqtt || node.viaMqtt && node.hopsAway == 0 { diff --git a/Meshtastic/Views/Nodes/PositionLog.swift b/Meshtastic/Views/Nodes/PositionLog.swift index 6c78d1c3..5af381c9 100644 --- a/Meshtastic/Views/Nodes/PositionLog.swift +++ b/Meshtastic/Views/Nodes/PositionLog.swift @@ -65,8 +65,6 @@ struct PositionLog: View { .width(min: 180) } .textSelection(.enabled) - - } else { ScrollView { // Use a grid on iOS as a table only shows a single column diff --git a/Meshtastic/Views/Settings/About.swift b/Meshtastic/Views/Settings/About.swift index 84fa4b83..f6854bcb 100644 --- a/Meshtastic/Views/Settings/About.swift +++ b/Meshtastic/Views/Settings/About.swift @@ -14,7 +14,6 @@ struct AboutMeshtastic: View { var body: some View { VStack { - List { Section(header: Text("What is Meshtastic?")) { Text("An open source, off-grid, decentralized, mesh network that runs on affordable, low-power radios.") @@ -44,7 +43,7 @@ struct AboutMeshtastic: View { Button("Review the app") { if let scene = UIApplication.shared.connectedScenes .first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene { - SKStoreReviewController.requestReview(in: scene) + AppStore.requestReview(in: scene) } } .font(.title2) diff --git a/Meshtastic/Views/Settings/AppLog.swift b/Meshtastic/Views/Settings/AppLog.swift index 53a32e07..88f8ab55 100644 --- a/Meshtastic/Views/Settings/AppLog.swift +++ b/Meshtastic/Views/Settings/AppLog.swift @@ -270,4 +270,4 @@ extension AppLog { } } -extension OSLogEntry: Identifiable { } +extension OSLogEntry: @retroactive Identifiable { } diff --git a/Meshtastic/Views/Settings/Config/DeviceConfig.swift b/Meshtastic/Views/Settings/Config/DeviceConfig.swift index 3fdc73b9..d8d0296d 100644 --- a/Meshtastic/Views/Settings/Config/DeviceConfig.swift +++ b/Meshtastic/Views/Settings/Config/DeviceConfig.swift @@ -30,11 +30,9 @@ struct DeviceConfig: View { @State var ledHeartbeatEnabled = true @State var tripleClickAsAdHocPing = true @State var tzdef = "" - @State private var showRouterWarning = false @State private var confirmWarning = false - var body: some View { VStack { Form { diff --git a/Meshtastic/Views/Settings/Config/Module/MQTTConfig.swift b/Meshtastic/Views/Settings/Config/Module/MQTTConfig.swift index 21297a16..f9f9e499 100644 --- a/Meshtastic/Views/Settings/Config/Module/MQTTConfig.swift +++ b/Meshtastic/Views/Settings/Config/Module/MQTTConfig.swift @@ -388,7 +388,6 @@ struct MQTTConfig: View { } if let placemarks = placemarks, let placemark = placemarks.first { - let cc = locale.region?.identifier ?? "UNK" /// Country Topic unless your region is a country if !(region?.isCountry ?? false) { let countryTopic = defaultTopic + "/" + (placemark.isoCountryCode ?? "") diff --git a/Meshtastic/Views/Settings/Config/PositionConfig.swift b/Meshtastic/Views/Settings/Config/PositionConfig.swift index d8e6ad9f..b22e0dfd 100644 --- a/Meshtastic/Views/Settings/Config/PositionConfig.swift +++ b/Meshtastic/Views/Settings/Config/PositionConfig.swift @@ -139,7 +139,6 @@ struct PositionConfig: View { ForEach(GpsMode.allCases, id: \.self) { at in Text(at.description) .tag(at.id) - } } .pickerStyle(SegmentedPickerStyle()) @@ -314,7 +313,6 @@ struct PositionConfig: View { .font(.caption) } } - var saveButton: some View { SaveConfigButton(node: node, hasChanges: $hasChanges) { if fixedPosition && !supportedVersion { @@ -399,11 +397,7 @@ struct PositionConfig: View { .navigationTitle("position.config") .navigationBarItems( trailing: ZStack { - ConnectedDevice( - bluetoothOn: bleManager.isSwitchedOn, - deviceConnected: bleManager.connectedPeripheral != nil, - name: bleManager.connectedPeripheral?.shortName ?? "?" - ) + ConnectedDevice(bluetoothOn: bleManager.isSwitchedOn, deviceConnected: bleManager.connectedPeripheral != nil, name: bleManager.connectedPeripheral?.shortName ?? "?") } ) .onFirstAppear { diff --git a/Widgets/WidgetsLiveActivity.swift b/Widgets/WidgetsLiveActivity.swift index 3923fee7..656cc8a1 100644 --- a/Widgets/WidgetsLiveActivity.swift +++ b/Widgets/WidgetsLiveActivity.swift @@ -224,7 +224,7 @@ struct NodeInfoView: View { .foregroundStyle(.secondary) .opacity(isLuminanceReduced ? 0.8 : 1.0) .fixedSize() - + let now = Date() Text("Last Heard: \(now.formatted())") .font(.caption) From 339317086f40dc95272b98c838de09c4069d1bc5 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 27 Apr 2025 15:08:06 -0700 Subject: [PATCH 10/11] Mark a couple of polish keys as reviewed --- Localizable.xcstrings | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Localizable.xcstrings b/Localizable.xcstrings index c99fa002..f74299df 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -7906,7 +7906,7 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Domyślny" } }, @@ -15358,7 +15358,7 @@ }, "pl" : { "stringUnit" : { - "state" : "needs_review", + "state" : "translated", "value" : "Dołącz" } }, From 0854ead4f28d40d05c1cecdc4e2964fafac285ef Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 27 Apr 2025 15:15:39 -0700 Subject: [PATCH 11/11] Fix typo --- Meshtastic/Enums/PositionConfigEnums.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Meshtastic/Enums/PositionConfigEnums.swift b/Meshtastic/Enums/PositionConfigEnums.swift index 43f9f73e..6ee5059c 100644 --- a/Meshtastic/Enums/PositionConfigEnums.swift +++ b/Meshtastic/Enums/PositionConfigEnums.swift @@ -112,7 +112,7 @@ enum GpsMode: Int, CaseIterable, Equatable { case .disabled: return "Disabled".localized case .enabled: - return "Eenabled".localized + return "Enabled".localized case .notPresent: return "Not Present".localized }