diff --git a/Meshtastic.xcodeproj/project.pbxproj b/Meshtastic.xcodeproj/project.pbxproj index 7380d000..5b5fcca8 100644 --- a/Meshtastic.xcodeproj/project.pbxproj +++ b/Meshtastic.xcodeproj/project.pbxproj @@ -68,6 +68,7 @@ DD913639270DFF4C00D7ACF3 /* LocalNotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD913638270DFF4C00D7ACF3 /* LocalNotificationManager.swift */; }; DD97E96628EFD9820056DDA4 /* MeshtasticLogo.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD97E96528EFD9820056DDA4 /* MeshtasticLogo.swift */; }; DD97E96828EFE9A00056DDA4 /* About.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD97E96728EFE9A00056DDA4 /* About.swift */; }; + DD994B69295F88B60013760A /* UpdateIntervals.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD994B68295F88B60013760A /* UpdateIntervals.swift */; }; DDA0B6B2294CDC55001356EC /* Channels.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA0B6B1294CDC55001356EC /* Channels.swift */; }; DDA1C48E28DB49D3009933EC /* ChannelRoles.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA1C48D28DB49D3009933EC /* ChannelRoles.swift */; }; DDA6B2E928419CF2003E8C16 /* MeshPackets.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA6B2E828419CF2003E8C16 /* MeshPackets.swift */; }; @@ -104,6 +105,7 @@ DDD3BBD5292D763200D609B3 /* MeshtasticTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD3BBD4292D763200D609B3 /* MeshtasticTests.swift */; }; DDD94A502845C8F5004A87A0 /* DateTimeText.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD94A4F2845C8F5004A87A0 /* DateTimeText.swift */; }; DDD9E4E4284B208E003777C5 /* UserEntityExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDD9E4E3284B208E003777C5 /* UserEntityExtension.swift */; }; + DDE0F7C5295F77B700B8AAB3 /* AppSettingsEnums.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDE0F7C4295F77B700B8AAB3 /* AppSettingsEnums.swift */; }; DDF924CA26FBB953009FE055 /* ConnectedDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDF924C926FBB953009FE055 /* ConnectedDevice.swift */; }; /* End PBXBuildFile section */ @@ -187,6 +189,7 @@ DD913638270DFF4C00D7ACF3 /* LocalNotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalNotificationManager.swift; sourceTree = ""; }; DD97E96528EFD9820056DDA4 /* MeshtasticLogo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeshtasticLogo.swift; sourceTree = ""; }; DD97E96728EFE9A00056DDA4 /* About.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = About.swift; sourceTree = ""; }; + DD994B68295F88B60013760A /* UpdateIntervals.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateIntervals.swift; sourceTree = ""; }; DDA0B6B1294CDC55001356EC /* Channels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Channels.swift; sourceTree = ""; }; DDA1C48D28DB49D3009933EC /* ChannelRoles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChannelRoles.swift; sourceTree = ""; }; DDA6B2E828419CF2003E8C16 /* MeshPackets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeshPackets.swift; sourceTree = ""; }; @@ -231,6 +234,7 @@ DDD3BBD4292D763200D609B3 /* MeshtasticTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeshtasticTests.swift; sourceTree = ""; }; DDD94A4F2845C8F5004A87A0 /* DateTimeText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateTimeText.swift; sourceTree = ""; }; DDD9E4E3284B208E003777C5 /* UserEntityExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserEntityExtension.swift; sourceTree = ""; }; + DDE0F7C4295F77B700B8AAB3 /* AppSettingsEnums.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettingsEnums.swift; sourceTree = ""; }; DDEE03EC29544A1000FCAD57 /* MeshtasticDataModelV4.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MeshtasticDataModelV4.xcdatamodel; sourceTree = ""; }; DDF924C926FBB953009FE055 /* ConnectedDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectedDevice.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -360,6 +364,7 @@ DD8ED9C6289CE4A100B3B0AB /* Enums */ = { isa = PBXGroup; children = ( + DDE0F7C4295F77B700B8AAB3 /* AppSettingsEnums.swift */, DDB6ABD828B0A4BA00384BA1 /* BluetoothModes.swift */, DD1925B628CDA5A400720036 /* CannedMessagesConfigEnums.swift */, DDA1C48D28DB49D3009933EC /* ChannelRoles.swift */, @@ -371,6 +376,7 @@ DDB6ABE128B13FB500384BA1 /* PositionConfigEnums.swift */, DD8ED9C7289CE4B900B3B0AB /* RoutingError.swift */, DD1925B828CDA93900720036 /* SerialConfigEnums.swift */, + DD994B68295F88B60013760A /* UpdateIntervals.swift */, ); path = Enums; sourceTree = ""; @@ -753,6 +759,7 @@ DD3CC6B528E33FD100FA9159 /* ShareChannels.swift in Sources */, DD1BF2F92776FE2E008C8D2F /* UserMessageList.swift in Sources */, DD3CC6C228EB9D4900FA9159 /* UpdateCoreData.swift in Sources */, + DDE0F7C5295F77B700B8AAB3 /* AppSettingsEnums.swift in Sources */, DDB6ABE628B1406100384BA1 /* LoraConfigEnums.swift in Sources */, DDB2CC6E27F3EB47009C5FCC /* telemetry.pb.swift in Sources */, DD23A50F26FD1B4400D9B90C /* PeripheralModel.swift in Sources */, @@ -794,6 +801,7 @@ C9A88B57278B559900BD810A /* apponly.pb.swift in Sources */, DD4C158E2824AA7E0032668E /* config.pb.swift in Sources */, DDB6ABE228B13FB500384BA1 /* PositionConfigEnums.swift in Sources */, + DD994B69295F88B60013760A /* UpdateIntervals.swift in Sources */, DD415828285859C4009B0E59 /* TelemetryConfig.swift in Sources */, DD73FD1128750779000852D6 /* PositionLog.swift in Sources */, DD3CC6C028E7A60700FA9159 /* MessagingEnums.swift in Sources */, diff --git a/Meshtastic/Enums/AppSettingsEnums.swift b/Meshtastic/Enums/AppSettingsEnums.swift new file mode 100644 index 00000000..f94a9b6c --- /dev/null +++ b/Meshtastic/Enums/AppSettingsEnums.swift @@ -0,0 +1,93 @@ +// +// AppSettingsEnums.swift +// Meshtastic +// +// Copyright(c) Garth Vander Houwen 12/30/22. +// + +import Foundation + +enum KeyboardType: Int, CaseIterable, Identifiable { + + case defaultKeyboard = 0 + case asciiCapable = 1 + case twitter = 9 + case emailAddress = 7 + case numbersAndPunctuation = 2 + + var id: Int { self.rawValue } + var description: String { + get { + switch self { + case .defaultKeyboard: + return NSLocalizedString("default", comment: "Default Keyboard") + case .asciiCapable: + return NSLocalizedString("ascii.capable", comment: "ASCII Capable Keyboard") + case .twitter: + return NSLocalizedString("twitter", comment: "Twitter Keyboard") + case .emailAddress: + return NSLocalizedString("email.address", comment: "Email Address Keyboard") + case .numbersAndPunctuation: + return NSLocalizedString("numbers.punctuation", comment: "Numbers and Punctuation Keyboard") + } + } + } +} + +enum MeshMapType: String, CaseIterable, Identifiable { + + case satellite = "satellite" + case hybrid = "hybrid" + case standard = "standard" + + var id: String { self.rawValue } + + var description: String { + get { + switch self { + case .satellite: + return NSLocalizedString("satellite", comment: "Satellite Map Type") + case .standard: + return NSLocalizedString("standard", comment: "Standard Map Type") + case .hybrid: + return NSLocalizedString("hybrid", comment: "Hybrid Map Type") + } + } + } +} + +enum LocationUpdateInterval: Int, CaseIterable, Identifiable { + + case fiveSeconds = 5 + case tenSeconds = 10 + case fifteenSeconds = 15 + case thirtySeconds = 30 + case oneMinute = 60 + case fiveMinutes = 300 + case tenMinutes = 600 + case fifteenMinutes = 900 + + var id: Int { self.rawValue } + var description: String { + get { + switch self { + case .fiveSeconds: + return NSLocalizedString("interval.five.seconds", comment: "Five Seconds") + case .tenSeconds: + return NSLocalizedString("interval.ten.seconds", comment: "Ten Seconds") + case .fifteenSeconds: + return NSLocalizedString("interval.fifteen.seconds", comment: "Fifteen Seconds") + case .thirtySeconds: + return NSLocalizedString("interval.thirty.seconds", comment: "Thirty Seconds") + case .oneMinute: + return NSLocalizedString("interval.one.minute", comment: "One Minute") + case .fiveMinutes: + return NSLocalizedString("interval.five.minutes", comment: "Five Minutes") + case .tenMinutes: + return NSLocalizedString("interval.ten.minutes", comment: "Ten Minutes") + case .fifteenMinutes: + return NSLocalizedString("interval.fifteen.minutes", comment: "Fifteen Minutes") + } + } + } +} diff --git a/Meshtastic/Enums/PositionConfigEnums.swift b/Meshtastic/Enums/PositionConfigEnums.swift index 081420f0..e353e88f 100644 --- a/Meshtastic/Enums/PositionConfigEnums.swift +++ b/Meshtastic/Enums/PositionConfigEnums.swift @@ -7,52 +7,6 @@ import Foundation -enum PositionBroadcastIntervals: Int, CaseIterable, Identifiable { - - case fifteenSeconds = 15 - case thirtySeconds = 30 - case oneMinute = 60 - case fiveMinutes = 300 - case tenMinutes = 600 - case fifteenMinutes = 900 - case thirtyMinutes = 1800 - case oneHour = 3600 - case sixHours = 21600 - case twelveHours = 43200 - case twentyFourHours = 86400 - - var id: Int { self.rawValue } - var description: String { - get { - switch self { - - case .fifteenSeconds: - return NSLocalizedString("interval.fifteen.seconds", comment: "Fifteen Seconds") - case .thirtySeconds: - return NSLocalizedString("interval.thirty.seconds", comment: "Thirty Seconds") - case .oneMinute: - return NSLocalizedString("interval.one.minute", comment: "One Minute") - case .fiveMinutes: - return NSLocalizedString("interval.five.minutes", comment: "Five Minutes") - case .tenMinutes: - return NSLocalizedString("interval.ten.minutes", comment: "Ten Minutes") - case .fifteenMinutes: - return NSLocalizedString("interval.fifteen.minutes", comment: "Fifteen Minutes") - case .thirtyMinutes: - return NSLocalizedString("interval.thirty.minutes", comment: "Thirty Minutes") - case .oneHour: - return NSLocalizedString("interval.one.hour", comment: "One Hour") - case .sixHours: - return NSLocalizedString("interval.six.hours", comment: "Six Hours") - case .twelveHours: - return NSLocalizedString("interval.twelve.hours", comment: "Twelve Hours") - case .twentyFourHours: - return NSLocalizedString("interval.twentyfour.hours", comment: "Twenty Four Hours") - } - } - } -} - enum GpsFormats: Int, CaseIterable, Identifiable { case gpsFormatDec = 0 diff --git a/Meshtastic/Enums/UpdateIntervals.swift b/Meshtastic/Enums/UpdateIntervals.swift new file mode 100644 index 00000000..05524eed --- /dev/null +++ b/Meshtastic/Enums/UpdateIntervals.swift @@ -0,0 +1,78 @@ +// +// UpdateIntervals.swift +// Meshtastic +// +// Created by Garth Vander Houwen on 12/30/22. +// + +import Foundation + +enum UpdateIntervals: Int, CaseIterable, Identifiable { + + case fifteenSeconds = 15 + case thirtySeconds = 30 + case oneMinute = 60 + case fiveMinutes = 300 + case tenMinutes = 600 + case fifteenMinutes = 900 + case thirtyMinutes = 1800 + case oneHour = 3600 + case twoHours = 7200 + case threeHours = 10800 + case fourHours = 14400 + case fiveHours = 18000 + case sixHours = 21600 + case twelveHours = 43200 + case eighteenHours = 64800 + case twentyFourHours = 86400 + case thirtySixHours = 129600 + case fortyeightHours = 172800 + case seventyTwoHours = 259200 + + var id: Int { self.rawValue } + var description: String { + get { + switch self { + + case .fifteenSeconds: + return NSLocalizedString("interval.fifteen.seconds", comment: "Fifteen Seconds") + case .thirtySeconds: + return NSLocalizedString("interval.thirty.seconds", comment: "Thirty Seconds") + case .oneMinute: + return NSLocalizedString("interval.one.minute", comment: "One Minute") + case .fiveMinutes: + return NSLocalizedString("interval.five.minutes", comment: "Five Minutes") + case .tenMinutes: + return NSLocalizedString("interval.ten.minutes", comment: "Ten Minutes") + case .fifteenMinutes: + return NSLocalizedString("interval.fifteen.minutes", comment: "Fifteen Minutes") + case .thirtyMinutes: + return NSLocalizedString("interval.thirty.minutes", comment: "Thirty Minutes") + case .oneHour: + return NSLocalizedString("interval.one.hour", comment: "One Hour") + case .twoHours: + return NSLocalizedString("interval.two.hours", comment: "Two Hours") + case .threeHours: + return NSLocalizedString("interval.three.hours", comment: "Three Hours") + case .fourHours: + return NSLocalizedString("interval.four.hours", comment: "Four Hours") + case .fiveHours: + return NSLocalizedString("interval.five.hours", comment: "Five Hours") + case .sixHours: + return NSLocalizedString("interval.six.hours", comment: "Six Hours") + case .twelveHours: + return NSLocalizedString("interval.twelve.hours", comment: "Twelve Hours") + case .eighteenHours: + return NSLocalizedString("interval.eighteen.hours", comment: "Eighteen Hours") + case .twentyFourHours: + return NSLocalizedString("interval.twentyfour.hours", comment: "Twenty Four Hours") + case .thirtySixHours: + return NSLocalizedString("interval.thirtysix.hours", comment: "Thirty Six Hours") + case .fortyeightHours: + return NSLocalizedString("interval.fortyeight.hours", comment: "Forty Eight Hours") + case .seventyTwoHours: + return NSLocalizedString("interval.seventytwo.hours", comment: "Seventy Two Hours") + } + } + } +} diff --git a/Meshtastic/Views/Map/Custom/PositionAnnotationView.swift b/Meshtastic/Views/Map/Custom/PositionAnnotationView.swift index 47c20197..3c3e0f79 100644 --- a/Meshtastic/Views/Map/Custom/PositionAnnotationView.swift +++ b/Meshtastic/Views/Map/Custom/PositionAnnotationView.swift @@ -7,6 +7,7 @@ import UIKit import MapKit +import SwiftUI // a simple circle annotation, with a string in it class PositionAnnotation: NSObject, MKAnnotation { @@ -53,11 +54,7 @@ class PositionAnnotationView: MKAnnotationView { guard let context = UIGraphicsGetCurrentContext() else { return } let circleRect = CGRect(x: 1, y: 1, width: 38, height: 38) - - context.setFillColor(CGColor(red: 0, green: 0.5, blue: 1.0, alpha: 1.0)) - + context.setFillColor(Color.accentColor.cgColor ?? CGColor(red: 0, green: 0.5, blue: 1.0, alpha: 1.0)) context.fillEllipse(in: circleRect) - } - } diff --git a/Meshtastic/Views/Nodes/NodeMap.swift b/Meshtastic/Views/Nodes/NodeMap.swift index 9442e16c..3f968bab 100644 --- a/Meshtastic/Views/Nodes/NodeMap.swift +++ b/Meshtastic/Views/Nodes/NodeMap.swift @@ -84,8 +84,6 @@ struct NodeMap: View { var body: some View { - //self.$userLocation = LocationHelper.currentLocation - NavigationStack { ZStack { @@ -112,11 +110,9 @@ struct NodeMap: View { ) .frame(maxHeight: .infinity) - .ignoresSafeArea(.all, edges: [.leading, .trailing]) - } + .ignoresSafeArea(.all, edges: [.top, .leading, .trailing]) + } } - .navigationTitle("Mesh Map") - .navigationBarTitleDisplayMode(.inline) .navigationBarItems(leading: MeshtasticLogo(), trailing: diff --git a/Meshtastic/Views/Settings/AppSettings.swift b/Meshtastic/Views/Settings/AppSettings.swift index 7a1cd178..a9d9ada1 100644 --- a/Meshtastic/Views/Settings/AppSettings.swift +++ b/Meshtastic/Views/Settings/AppSettings.swift @@ -4,91 +4,6 @@ import SwiftUI import SwiftProtobuf import MapKit -enum KeyboardType: Int, CaseIterable, Identifiable { - - case defaultKeyboard = 0 - case asciiCapable = 1 - case twitter = 9 - case emailAddress = 7 - case numbersAndPunctuation = 2 - - var id: Int { self.rawValue } - var description: String { - get { - switch self { - case .defaultKeyboard: - return NSLocalizedString("default", comment: "Default Keyboard") - case .asciiCapable: - return NSLocalizedString("ascii.capable", comment: "ASCII Capable Keyboard") - case .twitter: - return NSLocalizedString("twitter", comment: "Twitter Keyboard") - case .emailAddress: - return NSLocalizedString("email.address", comment: "Email Address Keyboard") - case .numbersAndPunctuation: - return NSLocalizedString("numbers.punctuation", comment: "Numbers and Punctuation Keyboard") - } - } - } -} - -enum MeshMapType: String, CaseIterable, Identifiable { - - case satellite = "satellite" - case hybrid = "hybrid" - case standard = "standard" - - var id: String { self.rawValue } - - var description: String { - get { - switch self { - case .satellite: - return NSLocalizedString("satellite", comment: "Satellite Map Type") - case .standard: - return NSLocalizedString("standard", comment: "Standard Map Type") - case .hybrid: - return NSLocalizedString("hybrid", comment: "Hybrid Map Type") - } - } - } -} - -enum LocationUpdateInterval: Int, CaseIterable, Identifiable { - - case fiveSeconds = 5 - case tenSeconds = 10 - case fifteenSeconds = 15 - case thirtySeconds = 30 - case oneMinute = 60 - case fiveMinutes = 300 - case tenMinutes = 600 - case fifteenMinutes = 900 - - var id: Int { self.rawValue } - var description: String { - get { - switch self { - case .fiveSeconds: - return NSLocalizedString("interval.five.seconds", comment: "Five Seconds") - case .tenSeconds: - return NSLocalizedString("interval.ten.seconds", comment: "Ten Seconds") - case .fifteenSeconds: - return NSLocalizedString("interval.fifteen.seconds", comment: "Fifteen Seconds") - case .thirtySeconds: - return NSLocalizedString("interval.thirty.seconds", comment: "Thirty Seconds") - case .oneMinute: - return NSLocalizedString("interval.one.minute", comment: "One Minute") - case .fiveMinutes: - return NSLocalizedString("interval.five.minutes", comment: "Five Minutes") - case .tenMinutes: - return NSLocalizedString("interval.ten.minutes", comment: "Ten Minutes") - case .fifteenMinutes: - return NSLocalizedString("interval.fifteen.minutes", comment: "Fifteen Minutes") - } - } - } -} - struct AppSettings: View { @Environment(\.managedObjectContext) var context diff --git a/Meshtastic/Views/Settings/Channels.swift b/Meshtastic/Views/Settings/Channels.swift index 2f70dfcd..4a6bb4a5 100644 --- a/Meshtastic/Views/Settings/Channels.swift +++ b/Meshtastic/Views/Settings/Channels.swift @@ -276,7 +276,6 @@ struct Channels: View { } } .navigationTitle("channels") - .navigationSplitViewStyle(.automatic) .navigationBarItems(trailing: ZStack { ConnectedDevice(bluetoothOn: bleManager.isSwitchedOn, deviceConnected: bleManager.connectedPeripheral != nil, name: (bleManager.connectedPeripheral != nil) ? bleManager.connectedPeripheral.shortName : "????") diff --git a/Meshtastic/Views/Settings/Config/Module/TelemetryConfig.swift b/Meshtastic/Views/Settings/Config/Module/TelemetryConfig.swift index 148b9981..af1cfb79 100644 --- a/Meshtastic/Views/Settings/Config/Module/TelemetryConfig.swift +++ b/Meshtastic/Views/Settings/Config/Module/TelemetryConfig.swift @@ -6,66 +6,6 @@ // import SwiftUI -enum UpdateIntervals: Int, CaseIterable, Identifiable { - - case fifteenSeconds = 15 - case thirtySeconds = 30 - case oneMinute = 60 - case fiveMinutes = 300 - case tenMinutes = 600 - case fifteenMinutes = 900 - case thirtyMinutes = 1800 - case oneHour = 3600 - case twoHours = 7200 - case threeHours = 10800 - case fourHours = 14400 - case fiveHours = 18000 - case sixHours = 21600 - case twelveHours = 43200 - case eighteenHours = 64800 - case twentyFourHours = 86400 - - var id: Int { self.rawValue } - var description: String { - get { - switch self { - case .fifteenSeconds: - return "Fifteen Seconds" - case .thirtySeconds: - return "Thirty Seconds" - case .oneMinute: - return "One Minute" - case .fiveMinutes: - return "Five Minutes" - case .tenMinutes: - return "Ten Minutes" - case .fifteenMinutes: - return "Fifteen Minutes" - case .thirtyMinutes: - return "Thirty Minutes" - case .oneHour: - return "One Hour" - case .twoHours: - return "Two Hours" - case .threeHours: - return "Three Hours" - case .fourHours: - return "Four Hours" - case .fiveHours: - return "Five Hours" - case .sixHours: - return "Six Hours" - case .twelveHours: - return "Twelve Hours" - case .eighteenHours: - return "Eighteen Hours" - case .twentyFourHours: - return "Twenty Four Hours" - } - } - } -} - struct TelemetryConfig: View { @Environment(\.managedObjectContext) var context diff --git a/Meshtastic/Views/Settings/Config/PositionConfig.swift b/Meshtastic/Views/Settings/Config/PositionConfig.swift index 6006109f..1a979dbc 100644 --- a/Meshtastic/Views/Settings/Config/PositionConfig.swift +++ b/Meshtastic/Views/Settings/Config/PositionConfig.swift @@ -113,7 +113,7 @@ struct PositionConfig: View { .toggleStyle(SwitchToggleStyle(tint: .accentColor)) Picker("Position Broadcast Interval", selection: $positionBroadcastSeconds) { - ForEach(PositionBroadcastIntervals.allCases) { at in + ForEach(UpdateIntervals.allCases) { at in Text(at.description) } } diff --git a/de.lproj/Localizable.strings b/de.lproj/Localizable.strings index 06a62a0e..e16f3a06 100644 --- a/de.lproj/Localizable.strings +++ b/de.lproj/Localizable.strings @@ -102,9 +102,17 @@ "interval.fifteen.minutes"="Fünfzehn Minutes"; "interval.thirty.minutes"="Dreißig Minutes"; "interval.one.hour"="Eine Stunde"; +"interval.two.hours"="Two Hours"; +"interval.three.hours"="Three Hours"; +"interval.four.hours"="Four Hours"; +"interval.five.hours"="Five Hours"; "interval.six.hours"="Sechs Stunden"; "interval.twelve.hours"="Zwölf Stunden"; +"interval.eighteen.hours"="Eighteen Hours"; "interval.twentyfour.hours"="Vierundzwanzig Stunden"; +"interval.thirtysix.hours"="Thirty Six Hours"; +"interval.fortyeight.hours"="Forty Eight Hours Hours"; +"interval.seventytwo.hours"="Seventy Two Hours"; "keyboard.type"="Keyboard Typ"; "logging"="Logging"; "lora"="LoRa"; diff --git a/en.lproj/Localizable.strings b/en.lproj/Localizable.strings index db240f32..b2ac86a9 100644 --- a/en.lproj/Localizable.strings +++ b/en.lproj/Localizable.strings @@ -99,9 +99,17 @@ "interval.fifteen.minutes"="Fifteen Minutes"; "interval.thirty.minutes"="Thirty Minutes"; "interval.one.hour"="One Hour"; +"interval.two.hours"="Two Hours"; +"interval.three.hours"="Three Hours"; +"interval.four.hours"="Four Hours"; +"interval.five.hours"="Five Hours"; "interval.six.hours"="Six Hours"; "interval.twelve.hours"="Twelve Hours"; +"interval.eighteen.hours"="Eighteen Hours"; "interval.twentyfour.hours"="Twenty Four Hours"; +"interval.thirtysix.hours"="Thirty Six Hours"; +"interval.fortyeight.hours"="Forty Eight Hours Hours"; +"interval.seventytwo.hours"="Seventy Two Hours"; "keyboard.type"="Keyboard Type"; "logging"="Logging"; "lora"="LoRa";