Просмотр исходного кода

missing files in the previous commit

avouspierre 3 лет назад
Родитель
Сommit
76644339b9
100 измененных файлов с 5261 добавлено и 12355 удалено
  1. 36 0
      Dependencies/CGMBLEKit/.gitignore
  2. 13 0
      Dependencies/CGMBLEKit/.travis.yml
  3. 91 0
      Dependencies/G7SensorKit/.gitignore
  4. 99 0
      Dependencies/G7SensorKit/Common/Data.swift
  5. 20 0
      Dependencies/G7SensorKit/Common/HKUnit.swift
  6. 21 0
      Dependencies/G7SensorKit/Common/LocalizedString.swift
  7. 40 0
      Dependencies/G7SensorKit/Common/Locked.swift
  8. 61 0
      Dependencies/G7SensorKit/Common/TimeInterval.swift
  9. 1035 0
      Dependencies/G7SensorKit/G7SensorKit.xcodeproj/project.pbxproj
  10. 7 0
      Dependencies/G7SensorKit/G7SensorKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  11. 8 0
      Dependencies/G7SensorKit/G7SensorKit.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  12. 51 0
      Dependencies/G7SensorKit/G7SensorKit/AlgorithmError.swift
  13. 125 0
      Dependencies/G7SensorKit/G7SensorKit/AlgorithmState.swift
  14. 74 0
      Dependencies/G7SensorKit/G7SensorKit/BluetoothServices.swift
  15. 45 0
      Dependencies/G7SensorKit/G7SensorKit/CBPeripheral.swift
  16. 100 0
      Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7BackfillMessage.swift
  17. 433 0
      Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7BluetoothManager.swift
  18. 470 0
      Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7CGMManager.swift
  19. 47 0
      Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7CGMManagerState.swift
  20. 22 0
      Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7DeviceStatus.swift
  21. 15 0
      Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7LastReading.swift
  22. 567 0
      Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7PeripheralManager.swift
  23. 310 0
      Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7Sensor.swift
  24. 18 0
      Dependencies/G7SensorKit/G7SensorKit/G7SensorKit.h
  25. 14 0
      Dependencies/G7SensorKit/G7SensorKit/GlucoseLimits.swift
  26. 27 0
      Dependencies/G7SensorKit/G7SensorKit/Messages/AuthChallengeRxMessage.swift
  27. 130 0
      Dependencies/G7SensorKit/G7SensorKit/Messages/G7GlucoseMessage.swift
  28. 15 0
      Dependencies/G7SensorKit/G7SensorKit/Messages/G7Opcode.swift
  29. 24 0
      Dependencies/G7SensorKit/G7SensorKit/Messages/SensorMessage.swift
  30. 50 0
      Dependencies/G7SensorKit/G7SensorKit/OSLog.swift
  31. 160 0
      Dependencies/G7SensorKit/G7SensorKitTests/G7GlucoseMessageTests.swift
  32. 36 0
      Dependencies/G7SensorKit/G7SensorKitTests/G7SensorKitTests.swift
  33. 6 0
      Dependencies/G7SensorKit/G7SensorKitUI/Assets.xcassets/Contents.json
  34. 12 0
      Dependencies/G7SensorKit/G7SensorKitUI/Assets.xcassets/g7.imageset/Contents.json
  35. BIN
      Dependencies/G7SensorKit/G7SensorKitUI/Assets.xcassets/g7.imageset/g7.png
  36. 20 0
      Dependencies/G7SensorKit/G7SensorKitUI/Extensions/Image.swift
  37. 139 0
      Dependencies/G7SensorKit/G7SensorKitUI/G7CGMManager/G7CGMManager+UI.swift
  38. 91 0
      Dependencies/G7SensorKit/G7SensorKitUI/G7CGMManager/G7UICoordinator.swift
  39. 18 0
      Dependencies/G7SensorKit/G7SensorKitUI/G7SensorKitUI.h
  40. 50 0
      Dependencies/G7SensorKit/G7SensorKitUI/OSLog.swift
  41. 43 0
      Dependencies/G7SensorKit/G7SensorKitUI/Views/G7ProgressBarState.swift
  42. 208 0
      Dependencies/G7SensorKit/G7SensorKitUI/Views/G7SettingsView.swift
  43. 218 0
      Dependencies/G7SensorKit/G7SensorKitUI/Views/G7SettingsViewModel.swift
  44. 55 0
      Dependencies/G7SensorKit/G7SensorKitUI/Views/G7StartupView.swift
  45. 18 0
      Dependencies/G7SensorKit/G7SensorPlugin/G7SensorPlugin.h
  46. 25 0
      Dependencies/G7SensorKit/G7SensorPlugin/G7SensorPlugin.swift
  47. 30 0
      Dependencies/G7SensorKit/G7SensorPlugin/Info.plist
  48. 50 0
      Dependencies/G7SensorKit/G7SensorPlugin/OSLog.swift
  49. 2 0
      Dependencies/G7SensorKit/README.md
  50. 0 104
      Dependencies/LoopKit/LoopKit/ar.lproj/Localizable.strings
  51. 0 104
      Dependencies/LoopKit/LoopKit/ca.lproj/Localizable.strings
  52. 0 104
      Dependencies/LoopKit/LoopKit/pt-PT.lproj/Localizable.strings
  53. 0 104
      Dependencies/LoopKit/LoopKit/sk.lproj/Localizable.strings
  54. 32 38
      Dependencies/LoopKit/LoopKit/tr.lproj/Localizable.strings
  55. 0 104
      Dependencies/LoopKit/LoopKit/uk.lproj/Localizable.strings
  56. 0 457
      Dependencies/LoopKit/LoopKitUI/Base.lproj/CarbKit.storyboard
  57. 0 434
      Dependencies/LoopKit/LoopKitUI/CarbKit/CarbEntryEditViewController.swift
  58. 0 355
      Dependencies/LoopKit/LoopKitUI/CarbKit/CarbEntryTableViewController.swift
  59. 0 47
      Dependencies/LoopKit/LoopKitUI/CarbKit/CarbEntryValidationNavigationDelegate.swift
  60. 80 0
      Dependencies/LoopKit/LoopKitUI/Views/SingleSelectionCheckList.swift
  61. 0 252
      Dependencies/LoopKit/LoopKitUI/ar.lproj/Localizable.strings
  62. 0 252
      Dependencies/LoopKit/LoopKitUI/ca.lproj/Localizable.strings
  63. 0 60
      Dependencies/LoopKit/LoopKitUI/da.lproj/CarbKit.strings
  64. 0 59
      Dependencies/LoopKit/LoopKitUI/de.lproj/CarbKit.strings
  65. 0 60
      Dependencies/LoopKit/LoopKitUI/es.lproj/CarbKit.strings
  66. 0 60
      Dependencies/LoopKit/LoopKitUI/fi.lproj/CarbKit.strings
  67. 0 81
      Dependencies/LoopKit/LoopKitUI/fr.lproj/CarbKit.strings
  68. 0 60
      Dependencies/LoopKit/LoopKitUI/he.lproj/CarbKit.strings
  69. 0 60
      Dependencies/LoopKit/LoopKitUI/it.lproj/CarbKit.strings
  70. 0 60
      Dependencies/LoopKit/LoopKitUI/ja.lproj/CarbKit.strings
  71. 0 60
      Dependencies/LoopKit/LoopKitUI/nb.lproj/CarbKit.strings
  72. 0 81
      Dependencies/LoopKit/LoopKitUI/nl.lproj/CarbKit.strings
  73. 0 60
      Dependencies/LoopKit/LoopKitUI/pl.lproj/CarbKit.strings
  74. 0 60
      Dependencies/LoopKit/LoopKitUI/pt-BR.lproj/CarbKit.strings
  75. 0 252
      Dependencies/LoopKit/LoopKitUI/pt-PT.lproj/Localizable.strings
  76. 0 60
      Dependencies/LoopKit/LoopKitUI/ro.lproj/CarbKit.strings
  77. 0 81
      Dependencies/LoopKit/LoopKitUI/ru.lproj/CarbKit.strings
  78. 0 252
      Dependencies/LoopKit/LoopKitUI/sk.lproj/Localizable.strings
  79. 0 60
      Dependencies/LoopKit/LoopKitUI/sv.lproj/CarbKit.strings
  80. 0 60
      Dependencies/LoopKit/LoopKitUI/tr.lproj/CarbKit.strings
  81. 0 252
      Dependencies/LoopKit/LoopKitUI/uk.lproj/Localizable.strings
  82. 0 60
      Dependencies/LoopKit/LoopKitUI/vi.lproj/CarbKit.strings
  83. 0 60
      Dependencies/LoopKit/LoopKitUI/zh-Hans.lproj/CarbKit.strings
  84. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/ar.lproj/Localizable.strings
  85. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/ca.lproj/Localizable.strings
  86. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/da.lproj/Localizable.strings
  87. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/de.lproj/Localizable.strings
  88. 0 514
      Dependencies/OmniBLE/Localizations/Localizations/en.lproj/Localizable.strings
  89. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/es.lproj/Localizable.strings
  90. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/fi.lproj/Localizable.strings
  91. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/fr.lproj/Localizable.strings
  92. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/he.lproj/Localizable.strings
  93. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/it.lproj/Localizable.strings
  94. 0 420
      Dependencies/OmniBLE/Localizations/Localizations/ja.lproj/Localizable.strings
  95. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/nb.lproj/Localizable.strings
  96. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/nl.lproj/Localizable.strings
  97. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/pl.lproj/Localizable.strings
  98. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/pt-BR.lproj/Localizable.strings
  99. 0 512
      Dependencies/OmniBLE/Localizations/Localizations/pt-PT.lproj/Localizable.strings
  100. 0 0
      Dependencies/OmniBLE/Localizations/Localizations/ro.lproj/Localizable.strings

+ 36 - 0
Dependencies/CGMBLEKit/.gitignore

@@ -0,0 +1,36 @@
+# OS X
+.DS_Store
+
+# Xcode
+build/
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+*.xccheckout
+profile
+*.moved-aside
+DerivedData
+*.hmap
+*.ipa
+
+# Bundler
+.bundle
+
+Carthage
+# We recommend against adding the Pods directory to your .gitignore. However
+# you should judge for yourself, the pros and cons are mentioned at:
+# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
+#
+# Note: if you ignore the Pods directory, make sure to uncomment
+# `pod install` in .travis.yml
+#
+
+Pods/
+Carthage/
+.gitmodules

+ 13 - 0
Dependencies/CGMBLEKit/.travis.yml

@@ -0,0 +1,13 @@
+language: objective-c
+osx_image: xcode12.2
+
+before_script:
+    - ./Scripts/carthage.sh bootstrap
+
+script:
+    # Build frameworks and run tests
+    - travis_wait 25 xcodebuild -project CGMBLEKit.xcodeproj -scheme Shared build -destination name="iPhone 8" test | xcpretty
+    # Build apps
+    - xcodebuild -project CGMBLEKit.xcodeproj -scheme "CGMBLEKit Example" build -destination name="iPhone 8" | xcpretty
+    - xcodebuild -project CGMBLEKit.xcodeproj -scheme ResetTransmitter build -destination name="iPhone 8"
+

+ 91 - 0
Dependencies/G7SensorKit/.gitignore

@@ -0,0 +1,91 @@
+# Xcode
+#
+# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
+.DS_Store
+
+## User settings
+xcuserdata/
+
+## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
+*.xcscmblueprint
+*.xccheckout
+
+## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
+build/
+DerivedData/
+*.moved-aside
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+
+## Obj-C/Swift specific
+*.hmap
+
+## App packaging
+*.ipa
+*.dSYM.zip
+*.dSYM
+
+## Playgrounds
+timeline.xctimeline
+playground.xcworkspace
+
+# Swift Package Manager
+#
+# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
+# Packages/
+# Package.pins
+# Package.resolved
+# *.xcodeproj
+#
+# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
+# hence it is not needed unless you have added a package configuration file to your project
+# .swiftpm
+
+.build/
+
+# CocoaPods
+#
+# We recommend against adding the Pods directory to your .gitignore. However
+# you should judge for yourself, the pros and cons are mentioned at:
+# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
+#
+# Pods/
+#
+# Add this line if you want to avoid checking in source code from the Xcode workspace
+# *.xcworkspace
+
+# Carthage
+#
+# Add this line if you want to avoid checking in source code from Carthage dependencies.
+# Carthage/Checkouts
+
+Carthage/Build/
+
+# Accio dependency management
+Dependencies/
+.accio/
+
+# fastlane
+#
+# It is recommended to not store the screenshots in the git repo.
+# Instead, use fastlane to re-generate the screenshots whenever they are needed.
+# For more information about the recommended setup visit:
+# https://docs.fastlane.tools/best-practices/source-control/#source-control
+
+fastlane/report.xml
+fastlane/Preview.html
+fastlane/screenshots/**/*.png
+fastlane/test_output
+
+# Code Injection
+#
+# After new code Injection tools there's a generated folder /iOSInjectionProject
+# https://github.com/johnno1962/injectionforxcode
+
+iOSInjectionProject/

+ 99 - 0
Dependencies/G7SensorKit/Common/Data.swift

@@ -0,0 +1,99 @@
+//
+//  NSData.swift
+//  xDripG5
+//
+//  Created by Nathan Racklyeft on 3/5/16.
+//  Copyright © 2016 Nathan Racklyeft. All rights reserved.
+//
+
+import Foundation
+
+
+extension Data {
+    private func toDefaultEndian<T: FixedWidthInteger>(_: T.Type) -> T {
+        return self.withUnsafeBytes({ (rawBufferPointer: UnsafeRawBufferPointer) -> T in
+            let bufferPointer = rawBufferPointer.bindMemory(to: T.self)
+            guard let pointer = bufferPointer.baseAddress else {
+                return 0
+            }
+            return T(pointer.pointee)
+        })
+    }
+
+    func to<T: FixedWidthInteger>(_ type: T.Type) -> T {
+        return T(littleEndian: toDefaultEndian(type))
+    }
+
+    func toInt<T: FixedWidthInteger>() -> T {
+        return to(T.self)
+    }
+
+    func toBigEndian<T: FixedWidthInteger>(_ type: T.Type) -> T {
+        return T(bigEndian: toDefaultEndian(type))
+    }
+
+    mutating func append<T: FixedWidthInteger>(_ newElement: T) {
+        withUnsafePointer(to: newElement.littleEndian) { (ptr: UnsafePointer<T>) in
+            append(UnsafeBufferPointer(start: ptr, count: 1))
+        }
+    }
+
+    mutating func appendBigEndian<T: FixedWidthInteger>(_ newElement: T) {
+        withUnsafePointer(to: newElement.bigEndian) { (ptr: UnsafePointer<T>) in
+            append(UnsafeBufferPointer(start: ptr, count: 1))
+        }
+    }
+
+    init<T: FixedWidthInteger>(_ value: T) {
+        self = withUnsafePointer(to: value.littleEndian) { (ptr: UnsafePointer<T>) -> Data in
+            return Data(buffer: UnsafeBufferPointer(start: ptr, count: 1))
+        }
+    }
+
+    init<T: FixedWidthInteger>(bigEndian value: T) {
+        self = withUnsafePointer(to: value.bigEndian) { (ptr: UnsafePointer<T>) -> Data in
+            return Data(buffer: UnsafeBufferPointer(start: ptr, count: 1))
+        }
+    }
+}
+
+
+// String conversion methods, adapted from https://stackoverflow.com/questions/40276322/hex-binary-string-conversion-in-swift/40278391#40278391
+extension Data {
+    init?(hexadecimalString: String) {
+        self.init(capacity: hexadecimalString.utf16.count / 2)
+
+        // Convert 0 ... 9, a ... f, A ...F to their decimal value,
+        // return nil for all other input characters
+        func decodeNibble(u: UInt16) -> UInt8? {
+            switch u {
+            case 0x30 ... 0x39:  // '0'-'9'
+                return UInt8(u - 0x30)
+            case 0x41 ... 0x46:  // 'A'-'F'
+                return UInt8(u - 0x41 + 10)  // 10 since 'A' is 10, not 0
+            case 0x61 ... 0x66:  // 'a'-'f'
+                return UInt8(u - 0x61 + 10)  // 10 since 'a' is 10, not 0
+            default:
+                return nil
+            }
+        }
+
+        var even = true
+        var byte: UInt8 = 0
+        for c in hexadecimalString.utf16 {
+            guard let val = decodeNibble(u: c) else { return nil }
+            if even {
+                byte = val << 4
+            } else {
+                byte += val
+                self.append(byte)
+            }
+            even = !even
+        }
+        guard even else { return nil }
+    }
+
+    var hexadecimalString: String {
+        return map { String(format: "%02hhx", $0) }.joined()
+    }
+}

+ 20 - 0
Dependencies/G7SensorKit/Common/HKUnit.swift

@@ -0,0 +1,20 @@
+//
+//  HKUnit.swift
+//  xDripG5
+//
+//  Created by Nate Racklyeft on 8/6/16.
+//  Copyright © 2016 Nathan Racklyeft. All rights reserved.
+//
+
+import HealthKit
+
+
+extension HKUnit {
+    static let milligramsPerDeciliter: HKUnit = {
+        return HKUnit.gramUnit(with: .milli).unitDivided(by: HKUnit.literUnit(with: .deci))
+    }()
+
+    static let milligramsPerDeciliterPerMinute: HKUnit = {
+        return HKUnit.milligramsPerDeciliter.unitDivided(by: .minute())
+    }()
+}

+ 21 - 0
Dependencies/G7SensorKit/Common/LocalizedString.swift

@@ -0,0 +1,21 @@
+//
+//  LocalizedString.swift
+//  LoopUI
+//
+//  Created by Kathryn DiSimone on 8/15/18.
+//  Copyright © 2018 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+
+internal class FrameworkBundle {
+    static let main = Bundle(for: FrameworkBundle.self)
+}
+
+func LocalizedString(_ key: String, tableName: String? = nil, value: String? = nil, comment: String) -> String {
+    if let value = value {
+        return NSLocalizedString(key, tableName: tableName, bundle: FrameworkBundle.main, value: value, comment: comment)
+    } else {
+        return NSLocalizedString(key, tableName: tableName, bundle: FrameworkBundle.main, comment: comment)
+    }
+}

+ 40 - 0
Dependencies/G7SensorKit/Common/Locked.swift

@@ -0,0 +1,40 @@
+//
+//  Locked.swift
+//  LoopKit
+//
+//  Copyright © 2018 LoopKit Authors. All rights reserved.
+//
+
+import os.lock
+
+
+internal class Locked<T> {
+    private var lock = os_unfair_lock()
+    private var _value: T
+
+    init(_ value: T) {
+        os_unfair_lock_lock(&lock)
+        defer { os_unfair_lock_unlock(&lock) }
+        _value = value
+    }
+
+    var value: T {
+        get {
+            os_unfair_lock_lock(&lock)
+            defer { os_unfair_lock_unlock(&lock) }
+            return _value
+        }
+        set {
+            os_unfair_lock_lock(&lock)
+            defer { os_unfair_lock_unlock(&lock) }
+            _value = newValue
+        }
+    }
+
+    func mutate(_ changes: (_ value: inout T) -> Void) -> T {
+        os_unfair_lock_lock(&lock)
+        defer { os_unfair_lock_unlock(&lock) }
+        changes(&_value)
+        return _value
+    }
+}

+ 61 - 0
Dependencies/G7SensorKit/Common/TimeInterval.swift

@@ -0,0 +1,61 @@
+//
+//  NSTimeInterval.swift
+//  Naterade
+//
+//  Created by Nathan Racklyeft on 1/9/16.
+//  Copyright © 2016 Nathan Racklyeft. All rights reserved.
+//
+
+import Foundation
+
+
+extension TimeInterval {
+    static func hours(_ hours: Double) -> TimeInterval {
+        return self.init(hours: hours)
+    }
+
+    static func minutes(_ minutes: Int) -> TimeInterval {
+        return self.init(minutes: Double(minutes))
+    }
+
+    static func minutes(_ minutes: Double) -> TimeInterval {
+        return self.init(minutes: minutes)
+    }
+
+    static func seconds(_ seconds: Double) -> TimeInterval {
+        return self.init(seconds)
+    }
+
+    static func milliseconds(_ milliseconds: Double) -> TimeInterval {
+        return self.init(milliseconds / 1000)
+    }
+
+    init(minutes: Double) {
+        self.init(minutes * 60)
+    }
+
+    init(hours: Double) {
+        self.init(minutes: hours * 60)
+    }
+
+    init(seconds: Double) {
+        self.init(seconds)
+    }
+
+    init(milliseconds: Double) {
+        self.init(milliseconds / 1000)
+    }
+
+    var milliseconds: Double {
+        return self * 1000
+    }
+
+    var minutes: Double {
+        return self / 60.0
+    }
+
+    var hours: Double {
+        return minutes / 60.0
+    }
+    
+}

Разница между файлами не показана из-за своего большого размера
+ 1035 - 0
Dependencies/G7SensorKit/G7SensorKit.xcodeproj/project.pbxproj


+ 7 - 0
Dependencies/G7SensorKit/G7SensorKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:">
+   </FileRef>
+</Workspace>

+ 8 - 0
Dependencies/G7SensorKit/G7SensorKit.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>IDEDidComputeMac32BitWarning</key>
+	<true/>
+</dict>
+</plist>

+ 51 - 0
Dependencies/G7SensorKit/G7SensorKit/AlgorithmError.swift

@@ -0,0 +1,51 @@
+//
+//  AlgorithmError.swift
+//  G7SensorKit
+//
+//  Created by Pete Schwamb on 11/11/22.
+//
+
+import Foundation
+
+enum AlgorithmError: Error {
+    case unreliableState(AlgorithmState)
+}
+
+extension AlgorithmError: LocalizedError {
+    var errorDescription: String? {
+        switch self {
+        case .unreliableState:
+            return LocalizedString("Glucose data is unavailable", comment: "Error description for unreliable state")
+        }
+    }
+
+    var failureReason: String? {
+        switch self {
+        case .unreliableState(let state):
+            return state.localizedDescription
+        }
+    }
+}
+
+
+extension AlgorithmState {
+    public var localizedDescription: String {
+        switch self {
+        case .known(let state):
+            switch state {
+            case .ok:
+                return LocalizedString("Sensor is OK", comment: "The description of sensor algorithm state when sensor is ok.")
+            case .stopped:
+                return LocalizedString("Sensor is stopped", comment: "The description of sensor algorithm state when sensor is stopped.")
+            case .warmup, .questionMarks:
+                return LocalizedString("Sensor is warming up", comment: "The description of sensor algorithm state when sensor is warming up.")
+            case .expired:
+                return LocalizedString("Sensor expired", comment: "The description of sensor algorithm state when sensor is expired.")
+            case .sensorFailed:
+                return LocalizedString("Sensor failed", comment: "The description of sensor algorithm state when sensor failed.")
+            }
+        case .unknown(let rawValue):
+            return String(format: LocalizedString("Sensor is in unknown state %1$d", comment: "The description of sensor algorithm state when raw value is unknown. (1: missing data details)"), rawValue)
+        }
+    }
+}

+ 125 - 0
Dependencies/G7SensorKit/G7SensorKit/AlgorithmState.swift

@@ -0,0 +1,125 @@
+//
+//  CalibrationState.swift
+//  xDripG5
+//
+//  Created by Nate Racklyeft on 8/6/16.
+//  Copyright © 2016 Nathan Racklyeft. All rights reserved.
+//
+
+import Foundation
+
+
+public enum AlgorithmState: RawRepresentable {
+    public typealias RawValue = UInt8
+
+    public enum State: RawValue {
+        case stopped = 1
+        case warmup = 2
+        case ok = 6
+        case questionMarks = 18
+        case expired = 24
+        case sensorFailed = 25
+    }
+
+    case known(State)
+    case unknown(RawValue)
+
+    public init(rawValue: RawValue) {
+        guard let state = State(rawValue: rawValue) else {
+            self = .unknown(rawValue)
+            return
+        }
+
+        self = .known(state)
+    }
+
+    public var rawValue: RawValue {
+        switch self {
+        case .known(let state):
+            return state.rawValue
+        case .unknown(let rawValue):
+            return rawValue
+        }
+    }
+
+    public var sensorFailed: Bool {
+        guard case .known(let state) = self else {
+            return false
+        }
+
+        switch state {
+        case .sensorFailed:
+            return true
+        default:
+            return false
+        }
+    }
+
+    public var isInWarmup: Bool {
+        guard case .known(let state) = self else {
+            return false
+        }
+
+        switch state {
+        case .warmup:
+            return true
+        default:
+            return false
+        }
+    }
+
+    public var isInSensorError: Bool {
+        guard case .known(let state) = self else {
+            return false
+        }
+
+        switch state {
+        case .questionMarks:
+            return true
+        default:
+            return false
+        }
+    }
+
+
+    public var hasReliableGlucose: Bool {
+        guard case .known(let state) = self else {
+            return false
+        }
+
+        switch state {
+        case .stopped,
+             .warmup,
+             .questionMarks,
+             .expired,
+             .sensorFailed:
+            return false
+        case .ok:
+            return true
+        }
+    }
+}
+
+extension AlgorithmState: Equatable {
+    public static func ==(lhs: AlgorithmState, rhs: AlgorithmState) -> Bool {
+        switch (lhs, rhs) {
+        case (.known(let lhs), .known(let rhs)):
+            return lhs == rhs
+        case (.unknown(let lhs), .unknown(let rhs)):
+            return lhs == rhs
+        default:
+            return false
+        }
+    }
+}
+
+extension AlgorithmState: CustomStringConvertible {
+    public var description: String {
+        switch self {
+        case .known(let state):
+            return String(describing: state)
+        case .unknown(let value):
+            return ".unknown(\(value))"
+        }
+    }
+}

+ 74 - 0
Dependencies/G7SensorKit/G7SensorKit/BluetoothServices.swift

@@ -0,0 +1,74 @@
+//
+//  BluetoothServices.swift
+//  xDripG5
+//
+//  Created by Nathan Racklyeft on 10/16/15.
+//  Copyright © 2015 Nathan Racklyeft. All rights reserved.
+//
+
+import CoreBluetooth
+
+protocol CBUUIDRawValue: RawRepresentable {}
+extension CBUUIDRawValue where RawValue == String {
+    var cbUUID: CBUUID {
+        return CBUUID(string: rawValue)
+    }
+}
+
+
+enum SensorServiceUUID: String, CBUUIDRawValue {
+    case deviceInfo = "180A"
+    case advertisement = "FEBC"
+    case cgmService = "F8083532-849E-531C-C594-30F1F86A4EA5"
+
+    case serviceB = "F8084532-849E-531C-C594-30F1F86A4EA5"
+}
+
+
+enum DeviceInfoCharacteristicUUID: String, CBUUIDRawValue {
+    // Read
+    // "DexcomUN"
+    case manufacturerNameString = "2A29"
+}
+
+
+enum CGMServiceCharacteristicUUID: String, CBUUIDRawValue {
+
+    // Read/Notify
+    case communication = "F8083533-849E-531C-C594-30F1F86A4EA5"
+
+    // Write/Indicate
+    case control = "F8083534-849E-531C-C594-30F1F86A4EA5"
+
+    // Write/Indicate
+    case authentication = "F8083535-849E-531C-C594-30F1F86A4EA5"
+
+    // Read/Write/Notify
+    case backfill = "F8083536-849E-531C-C594-30F1F86A4EA5"
+}
+
+
+enum ServiceBCharacteristicUUID: String, CBUUIDRawValue {
+    // Write/Indicate
+    case characteristicE = "F8084533-849E-531C-C594-30F1F86A4EA5"
+    // Read/Write/Notify
+    case characteristicF = "F8084534-849E-531C-C594-30F1F86A4EA5"
+}
+
+
+extension G7PeripheralManager.Configuration {
+    static var dexcomG7: G7PeripheralManager.Configuration {
+        return G7PeripheralManager.Configuration(
+            serviceCharacteristics: [
+                SensorServiceUUID.cgmService.cbUUID: [
+                    //CGMServiceCharacteristicUUID.communication.cbUUID, // Unused for now
+                    CGMServiceCharacteristicUUID.authentication.cbUUID,
+                    CGMServiceCharacteristicUUID.control.cbUUID,
+                    CGMServiceCharacteristicUUID.backfill.cbUUID,
+                ]
+            ],
+            notifyingCharacteristics: [:],
+            valueUpdateMacros: [:]
+        )
+    }
+}

+ 45 - 0
Dependencies/G7SensorKit/G7SensorKit/CBPeripheral.swift

@@ -0,0 +1,45 @@
+//
+//  CBPeripheral.swift
+//  xDripG5
+//
+//  Copyright © 2017 LoopKit Authors. All rights reserved.
+//
+
+import CoreBluetooth
+
+
+// MARK: - Discovery helpers.
+extension CBPeripheral {
+    func servicesToDiscover(from serviceUUIDs: [CBUUID]) -> [CBUUID] {
+        let knownServiceUUIDs = services?.compactMap({ $0.uuid }) ?? []
+        return serviceUUIDs.filter({ !knownServiceUUIDs.contains($0) })
+    }
+
+    func characteristicsToDiscover(from characteristicUUIDs: [CBUUID], for service: CBService) -> [CBUUID] {
+        let knownCharacteristicUUIDs = service.characteristics?.compactMap({ $0.uuid }) ?? []
+        return characteristicUUIDs.filter({ !knownCharacteristicUUIDs.contains($0) })
+    }
+}
+
+
+extension Collection where Element: CBAttribute {
+    func itemWithUUID(_ uuid: CBUUID) -> Element? {
+        for attribute in self {
+            if attribute.uuid == uuid {
+                return attribute
+            }
+        }
+
+        return nil
+    }
+
+    func itemWithUUIDString(_ uuidString: String) -> Element? {
+        for attribute in self {
+            if attribute.uuid.uuidString == uuidString {
+                return attribute
+            }
+        }
+
+        return nil
+    }
+}

+ 100 - 0
Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7BackfillMessage.swift

@@ -0,0 +1,100 @@
+//
+//  G7BackfillMessage.swift
+//  CGMBLEKit
+//
+//  Created by Pete Schwamb on 9/25/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+import LoopKit
+
+public struct G7BackfillMessage: Equatable {
+
+    public let timestamp: UInt32 // Seconds since pairing
+    public let glucose: UInt16?
+    public let glucoseIsDisplayOnly: Bool
+    public let algorithmState: AlgorithmState
+    public let trend: Double?
+
+    public let data: Data
+
+    public var hasReliableGlucose: Bool {
+        return algorithmState.hasReliableGlucose
+    }
+
+    init?(data: Data) {
+        //    0 1 2  3  4 5  6  7  8
+        //   TTTTTT    BGBG SS    TR
+        //   45a100 00 9600 06 0f fc
+
+        guard data.count == 9 else {
+            return nil
+        }
+
+        timestamp = data[0..<4].toInt()
+
+        let glucoseBytes = data[4..<6].to(UInt16.self)
+
+        if glucoseBytes != 0xffff {
+            glucose = glucoseBytes & 0xfff
+            glucoseIsDisplayOnly = (glucoseBytes & 0xf000) > 0
+        } else {
+            glucose = nil
+            glucoseIsDisplayOnly = false
+        }
+
+        algorithmState = AlgorithmState(rawValue: data[6])
+
+        if data[8] == 0x7f {
+            trend = nil
+        } else {
+            trend = Double(Int8(bitPattern: data[8])) / 10
+        }
+
+        self.data = data
+    }
+
+    public var trendType: LoopKit.GlucoseTrend? {
+        guard let trend = trend else {
+            return nil
+        }
+
+        switch trend {
+        case let x where x <= -3.0:
+            return .downDownDown
+        case let x where x <= -2.0:
+            return .downDown
+        case let x where x <= -1.0:
+            return .down
+        case let x where x < 1.0:
+            return .flat
+        case let x where x < 2.0:
+            return .up
+        case let x where x < 3.0:
+            return .upUp
+        default:
+            return .upUpUp
+        }
+    }
+
+    public var condition: GlucoseCondition? {
+        guard let glucose = glucose else {
+            return nil
+        }
+
+        if glucose < GlucoseLimits.minimum {
+            return .belowRange
+        } else if glucose > GlucoseLimits.maximum {
+            return .aboveRange
+        } else {
+            return nil
+        }
+    }
+}
+
+extension G7BackfillMessage: CustomDebugStringConvertible {
+    public var debugDescription: String {
+        return "G7BackfillMessage(glucose:\(String(describing: glucose)), glucoseIsDisplayOnly:\(glucoseIsDisplayOnly) timestamp:\(timestamp), data:\(data.hexadecimalString))"
+    }
+}

+ 433 - 0
Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7BluetoothManager.swift

@@ -0,0 +1,433 @@
+//
+//  G7BluetoothManager.swift
+//  CGMBLEKit
+//
+//  Created by Pete Schwamb on 11/11/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import CoreBluetooth
+import Foundation
+import os.log
+
+
+enum PeripheralConnectionCommand {
+    case connect
+    case makeActive
+    case ignore
+}
+
+protocol G7BluetoothManagerDelegate: AnyObject {
+
+    /**
+     Tells the delegate that the bluetooth manager has finished connecting to and discovering all required services of its peripheral
+
+     - parameter manager: The bluetooth manager
+     - parameter peripheralManager: The peripheral manager
+     - parameter error:   An error describing why bluetooth setup failed
+
+     - returns: True if scanning should stop
+     */
+    func bluetoothManager(_ manager: G7BluetoothManager, readied peripheralManager: G7PeripheralManager) -> Bool
+
+    /**
+     Tells the delegate that the bluetooth manager encountered an error while connecting to and discovering required services of a peripheral
+
+     - parameter manager: The bluetooth manager
+     - parameter peripheralManager: The peripheral manager
+     - parameter error:   An error describing why bluetooth setup failed
+     */
+    func bluetoothManager(_ manager: G7BluetoothManager, readyingFailed peripheralManager: G7PeripheralManager, with error: Error)
+
+    /**
+     Asks the delegate if the discovered or restored peripheral is active or should be connected to
+
+     - parameter manager:    The bluetooth manager
+     - parameter peripheral: The found peripheral
+
+     - returns: PeripheralConnectionCommand indicating what should be done with this peripheral
+     */
+    func bluetoothManager(_ manager: G7BluetoothManager, shouldConnectPeripheral peripheral: CBPeripheral) -> PeripheralConnectionCommand
+
+    /// Informs the delegate that the bluetooth manager received new data in the control characteristic
+    ///
+    /// - Parameters:
+    ///   - manager: The bluetooth manager
+    ///   - peripheralManager: The peripheral manager
+    ///   - response: The data received on the control characteristic
+    func bluetoothManager(_ manager: G7BluetoothManager, peripheralManager: G7PeripheralManager, didReceiveControlResponse response: Data)
+
+    /// Informs the delegate that the bluetooth manager received new data in the backfill characteristic
+    ///
+    /// - Parameters:
+    ///   - manager: The bluetooth manager
+    ///   - response: The data received on the backfill characteristic
+    func bluetoothManager(_ manager: G7BluetoothManager, didReceiveBackfillResponse response: Data)
+
+    /// Informs the delegate that the bluetooth manager received new data in the authentication characteristic
+    ///
+    /// - Parameters:
+    ///   - manager: The bluetooth manager
+    ///   - peripheralManager: The peripheral manager
+    ///   - response: The data received on the authentication characteristic
+    func bluetoothManager(_ manager: G7BluetoothManager, peripheralManager: G7PeripheralManager, didReceiveAuthenticationResponse response: Data)
+
+    /// Informs the delegate that the bluetooth manager started or stopped scanning
+    ///
+    /// - Parameters:
+    ///   - manager: The bluetooth manager
+    func bluetoothManagerScanningStatusDidChange(_ manager: G7BluetoothManager)
+
+    /// Informs the delegate that a peripheral disconnected
+    ///
+    /// - Parameters:
+    ///   - manager: The bluetooth manager
+    func peripheralDidDisconnect(_ manager: G7BluetoothManager, peripheralManager: G7PeripheralManager, wasRemoteDisconnect: Bool)
+}
+
+
+class G7BluetoothManager: NSObject {
+
+    weak var delegate: G7BluetoothManagerDelegate?
+
+    private let log = OSLog(category: "G7BluetoothManager")
+
+    /// Isolated to `managerQueue`
+    private var centralManager: CBCentralManager! = nil
+
+    /// Isolated to `managerQueue`
+    private var activePeripheral: CBPeripheral? {
+        get {
+            return activePeripheralManager?.peripheral
+        }
+    }
+
+    /// Isolated to `managerQueue`
+    private var managedPeripherals: [UUID:G7PeripheralManager] = [:]
+
+    var activePeripheralIdentifier: UUID? {
+        get {
+            return lockedPeripheralIdentifier.value
+        }
+    }
+    private let lockedPeripheralIdentifier: Locked<UUID?> = Locked(nil)
+
+    /// Isolated to `managerQueue`
+    private var activePeripheralManager: G7PeripheralManager? {
+        didSet {
+            oldValue?.delegate = nil
+            lockedPeripheralIdentifier.value = activePeripheralManager?.peripheral.identifier
+        }
+    }
+
+    // MARK: - Synchronization
+
+    private let managerQueue = DispatchQueue(label: "com.loudnate.CGMBLEKit.bluetoothManagerQueue", qos: .unspecified)
+
+    override init() {
+        super.init()
+
+        managerQueue.sync {
+            self.centralManager = CBCentralManager(delegate: self, queue: managerQueue, options: [CBCentralManagerOptionRestoreIdentifierKey: "com.loudnate.CGMBLEKit"])
+        }
+    }
+
+    // MARK: - Actions
+
+    func scanForPeripheral() {
+        dispatchPrecondition(condition: .notOnQueue(managerQueue))
+
+        managerQueue.sync {
+            self.managerQueue_scanForPeripheral()
+        }
+    }
+
+    func forgetPeripheral() {
+        managerQueue.sync {
+            self.activePeripheralManager = nil
+        }
+    }
+
+    func stopScanning() {
+        managerQueue.sync {
+            managerQueue_stopScanning()
+        }
+    }
+
+    private func managerQueue_stopScanning() {
+        if centralManager.isScanning {
+            log.debug("Stopping scan")
+            centralManager.stopScan()
+            delegate?.bluetoothManagerScanningStatusDidChange(self)
+        }
+    }
+
+    func disconnect() {
+        dispatchPrecondition(condition: .notOnQueue(managerQueue))
+
+        managerQueue.sync {
+            if centralManager.isScanning {
+                log.debug("Stopping scan on disconnect")
+                centralManager.stopScan()
+                delegate?.bluetoothManagerScanningStatusDidChange(self)
+            }
+
+            if let peripheral = activePeripheral {
+                centralManager.cancelPeripheralConnection(peripheral)
+            }
+        }
+    }
+
+    private func managerQueue_scanForPeripheral() {
+        dispatchPrecondition(condition: .onQueue(managerQueue))
+
+        guard centralManager.state == .poweredOn else {
+            return
+        }
+
+        let currentState = activePeripheral?.state ?? .disconnected
+        guard currentState != .connected else {
+            return
+        }
+
+        if let peripheralID = activePeripheralIdentifier, let peripheral = centralManager.retrievePeripherals(withIdentifiers: [peripheralID]).first {
+            log.debug("Retrieved peripheral %{public}@", peripheral.identifier.uuidString)
+            handleDiscoveredPeripheral(peripheral)
+        } else {
+            for peripheral in centralManager.retrieveConnectedPeripherals(withServices: [
+                SensorServiceUUID.advertisement.cbUUID,
+                SensorServiceUUID.cgmService.cbUUID
+            ]) {
+                handleDiscoveredPeripheral(peripheral)
+            }
+        }
+
+        if activePeripheral == nil {
+            log.debug("Scanning for peripherals")
+            centralManager.scanForPeripherals(withServices: [
+                    SensorServiceUUID.advertisement.cbUUID
+                ],
+                options: nil
+            )
+            delegate?.bluetoothManagerScanningStatusDidChange(self)
+        }
+    }
+
+    /**
+
+     Persistent connections don't seem to work with the transmitter shutoff: The OS won't re-wake the
+     app unless it's scanning.
+
+     The sleep gives the transmitter time to shut down, but keeps the app running.
+
+     */
+    fileprivate func scanAfterDelay() {
+        DispatchQueue.global(qos: .utility).async {
+            Thread.sleep(forTimeInterval: 2)
+
+            self.scanForPeripheral()
+        }
+    }
+
+    // MARK: - Accessors
+
+    var isScanning: Bool {
+        dispatchPrecondition(condition: .notOnQueue(managerQueue))
+
+        var isScanning = false
+        managerQueue.sync {
+            isScanning = centralManager.isScanning
+        }
+        return isScanning
+    }
+
+    var isConnected: Bool {
+        dispatchPrecondition(condition: .notOnQueue(managerQueue))
+
+        var isConnected = false
+        managerQueue.sync {
+            isConnected = activePeripheral?.state == .connected
+        }
+        return isConnected
+    }
+
+    private func handleDiscoveredPeripheral(_ peripheral: CBPeripheral) {
+        dispatchPrecondition(condition: .onQueue(managerQueue))
+
+        if let delegate = delegate {
+            switch delegate.bluetoothManager(self, shouldConnectPeripheral: peripheral) {
+            case .makeActive:
+                log.debug("Making peripheral active: %{public}@", peripheral.identifier.uuidString)
+
+                if let peripheralManager = activePeripheralManager {
+                    peripheralManager.peripheral = peripheral
+                } else {
+                    activePeripheralManager = G7PeripheralManager(
+                        peripheral: peripheral,
+                        configuration: .dexcomG7,
+                        centralManager: centralManager
+                    )
+                    activePeripheralManager?.delegate = self
+                }
+                self.managedPeripherals[peripheral.identifier] = activePeripheralManager
+                self.centralManager.connect(peripheral)
+
+            case .connect:
+                log.debug("Connecting to peripheral: %{public}@", peripheral.identifier.uuidString)
+                self.centralManager.connect(peripheral)
+                let peripheralManager = G7PeripheralManager(
+                    peripheral: peripheral,
+                    configuration: .dexcomG7,
+                    centralManager: centralManager
+                )
+                peripheralManager.delegate = self
+                self.managedPeripherals[peripheral.identifier] = peripheralManager
+            case .ignore:
+                break
+            }
+        }
+    }
+
+    override var debugDescription: String {
+        return [
+            "## BluetoothManager",
+            activePeripheralManager.map(String.init(reflecting:)) ?? "No peripheral",
+        ].joined(separator: "\n")
+    }
+}
+
+
+extension G7BluetoothManager: CBCentralManagerDelegate {
+    func centralManagerDidUpdateState(_ central: CBCentralManager) {
+        dispatchPrecondition(condition: .onQueue(managerQueue))
+
+        activePeripheralManager?.centralManagerDidUpdateState(central)
+        log.default("%{public}@: %{public}@", #function, String(describing: central.state.rawValue))
+
+        switch central.state {
+        case .poweredOn:
+            managerQueue_scanForPeripheral()
+        case .resetting, .poweredOff, .unauthorized, .unknown, .unsupported:
+            fallthrough
+        @unknown default:
+            if central.isScanning {
+                log.debug("Stopping scan on central not powered on")
+                central.stopScan()
+                delegate?.bluetoothManagerScanningStatusDidChange(self)
+            }
+        }
+    }
+
+    func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any]) {
+        dispatchPrecondition(condition: .onQueue(managerQueue))
+
+        if let peripherals = dict[CBCentralManagerRestoredStatePeripheralsKey] as? [CBPeripheral] {
+            for peripheral in peripherals {
+                log.default("Restoring peripheral from state: %{public}@", peripheral.identifier.uuidString)
+                handleDiscoveredPeripheral(peripheral)
+            }
+        }
+    }
+
+    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
+        dispatchPrecondition(condition: .onQueue(managerQueue))
+
+        log.info("%{public}@: %{public}@, data = %{public}@", #function, peripheral, String(describing: advertisementData))
+
+        managerQueue.async {
+            self.handleDiscoveredPeripheral(peripheral)
+        }
+    }
+
+    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
+        dispatchPrecondition(condition: .onQueue(managerQueue))
+
+        log.default("%{public}@: %{public}@", #function, peripheral)
+
+        if let peripheralManager = managedPeripherals[peripheral.identifier] {
+            peripheralManager.centralManager(central, didConnect: peripheral)
+
+            if let delegate = delegate, case .poweredOn = centralManager.state, case .connected = peripheral.state {
+                if delegate.bluetoothManager(self, readied: peripheralManager) {
+                    managerQueue_stopScanning()
+                }
+            }
+        }
+    }
+
+    func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
+        dispatchPrecondition(condition: .onQueue(managerQueue))
+        log.default("%{public}@: %{public}@", #function, peripheral)
+        // Ignore errors indicating the peripheral disconnected remotely, as that's expected behavior
+        if let error = error as NSError?, CBError(_nsError: error).code != .peripheralDisconnected {
+            log.error("%{public}@: %{public}@", #function, error)
+            if let peripheralManager = activePeripheralManager {
+                self.delegate?.bluetoothManager(self, readyingFailed: peripheralManager, with: error)
+            }
+        }
+
+        if let peripheralManager = managedPeripherals[peripheral.identifier] {
+            let remoteDisconnect: Bool
+            if let error = error as NSError?, CBError(_nsError: error).code == .peripheralDisconnected {
+                remoteDisconnect = true
+            } else {
+                remoteDisconnect = false
+            }
+            self.delegate?.peripheralDidDisconnect(self, peripheralManager: peripheralManager, wasRemoteDisconnect: remoteDisconnect)
+        }
+
+        if peripheral != activePeripheral {
+            managedPeripherals.removeValue(forKey: peripheral.identifier)
+        }
+
+        scanAfterDelay()
+    }
+
+    func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
+        dispatchPrecondition(condition: .onQueue(managerQueue))
+
+        log.error("%{public}@: %{public}@", #function, String(describing: error))
+        if let error = error, let peripheralManager = activePeripheralManager {
+            self.delegate?.bluetoothManager(self, readyingFailed: peripheralManager, with: error)
+        }
+
+        if peripheral != activePeripheral {
+            managedPeripherals.removeValue(forKey: peripheral.identifier)
+        }
+
+        scanAfterDelay()
+    }
+}
+
+
+extension G7BluetoothManager: G7PeripheralManagerDelegate {
+    func peripheralManager(_ manager: G7PeripheralManager, didReadRSSI RSSI: NSNumber, error: Error?) {
+
+    }
+
+    func peripheralManagerDidUpdateName(_ manager: G7PeripheralManager) {
+    }
+
+    func peripheralManagerDidConnect(_ manager: G7PeripheralManager) {
+    }
+
+    func completeConfiguration(for manager: G7PeripheralManager) throws {
+    }
+
+    func peripheralManager(_ manager: G7PeripheralManager, didUpdateValueFor characteristic: CBCharacteristic) {
+        guard let value = characteristic.value else {
+            return
+        }
+
+        switch CGMServiceCharacteristicUUID(rawValue: characteristic.uuid.uuidString.uppercased()) {
+        case .none, .communication?:
+            return
+        case .control?:
+            self.delegate?.bluetoothManager(self, peripheralManager: manager, didReceiveControlResponse: value)
+        case .backfill?:
+            self.delegate?.bluetoothManager(self, didReceiveBackfillResponse: value)
+        case .authentication?:
+            self.delegate?.bluetoothManager(self, peripheralManager: manager, didReceiveAuthenticationResponse: value)
+        }
+    }
+}

+ 470 - 0
Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7CGMManager.swift

@@ -0,0 +1,470 @@
+//
+//  G7CGMManager.swift
+//  CGMBLEKit
+//
+//  Created by Pete Schwamb on 9/24/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+import LoopKit
+import os.log
+import HealthKit
+
+
+
+public protocol G7StateObserver: AnyObject {
+    func g7StateDidUpdate(_ state: G7CGMManagerState?)
+    func g7ConnectionStatusDidChange()
+}
+
+public class G7CGMManager: CGMManager {
+    private let log = OSLog(category: "G7CGMManager")
+
+    public var state: G7CGMManagerState {
+        return lockedState.value
+    }
+
+    private func setState(_ changes: (_ state: inout G7CGMManagerState) -> Void) -> Void {
+        return setStateWithResult(changes)
+    }
+
+    @discardableResult
+    private func mutateState(_ changes: (_ state: inout G7CGMManagerState) -> Void) -> G7CGMManagerState {
+        return setStateWithResult({ (state) -> G7CGMManagerState in
+            changes(&state)
+            return state
+        })
+    }
+
+    private func setStateWithResult<ReturnType>(_ changes: (_ state: inout G7CGMManagerState) -> ReturnType) -> ReturnType {
+        var oldValue: G7CGMManagerState!
+        var returnType: ReturnType!
+        let newValue = lockedState.mutate { (state) in
+            oldValue = state
+            returnType = changes(&state)
+        }
+
+        if oldValue != newValue {
+            delegate.notify { delegate in
+                delegate?.cgmManagerDidUpdateState(self)
+                delegate?.cgmManager(self, didUpdate: self.cgmManagerStatus)
+            }
+
+            g7StateObservers.forEach { (observer) in
+                observer.g7StateDidUpdate(newValue)
+            }
+        }
+
+        return returnType
+    }
+    private let lockedState: Locked<G7CGMManagerState>
+
+    private let g7StateObservers = WeakSynchronizedSet<G7StateObserver>()
+
+    public weak var cgmManagerDelegate: CGMManagerDelegate? {
+        get {
+            return delegate.delegate
+        }
+        set {
+            delegate.delegate = newValue
+        }
+    }
+
+    public var delegateQueue: DispatchQueue! {
+        get {
+            return delegate.queue
+        }
+        set {
+            delegate.queue = newValue
+        }
+    }
+
+    private let delegate = WeakSynchronizedDelegate<CGMManagerDelegate>()
+
+    public var providesBLEHeartbeat: Bool = true
+
+    public var managedDataInterval: TimeInterval? {
+        return .hours(3)
+    }
+
+    public var shouldSyncToRemoteService: Bool {
+        return state.uploadReadings
+    }
+
+    public var glucoseDisplay: GlucoseDisplayable? {
+        return latestReading
+    }
+
+    public var isScanning: Bool {
+        return sensor.isScanning
+    }
+
+    public var isConnected: Bool {
+        return sensor.isConnected
+    }
+
+    public var sensorName: String? {
+        return state.sensorID
+    }
+
+    public var sensorActivatedAt: Date? {
+        return state.activatedAt
+    }
+
+    public var sensorExpiresAt: Date? {
+        guard let activatedAt = sensorActivatedAt else {
+            return nil
+        }
+        return activatedAt.addingTimeInterval(G7Sensor.lifetime)
+    }
+
+    public var sensorEndsAt: Date? {
+        guard let activatedAt = sensorActivatedAt else {
+            return nil
+        }
+        return activatedAt.addingTimeInterval(G7Sensor.lifetime + G7Sensor.gracePeriod)
+    }
+
+
+    public var sensorFinishesWarmupAt: Date? {
+        guard let activatedAt = sensorActivatedAt else {
+            return nil
+        }
+        return activatedAt.addingTimeInterval(G7Sensor.warmupDuration)
+    }
+
+    public var latestReading: G7GlucoseMessage? {
+        return state.latestReading
+    }
+
+    public var lastConnect: Date? {
+        return state.latestConnect
+    }
+
+    public var latestReadingTimestamp: Date? {
+        return state.latestReadingTimestamp
+    }
+
+    public var uploadReadings: Bool {
+        get {
+            return state.uploadReadings
+        }
+        set {
+            mutateState { state in
+                state.uploadReadings = newValue
+            }
+        }
+    }
+
+    public let sensor: G7Sensor
+
+    public var cgmManagerStatus: LoopKit.CGMManagerStatus {
+        return CGMManagerStatus(hasValidSensorSession: true, device: device)
+    }
+
+    public var lifecycleState: G7SensorLifecycleState {
+        if state.sensorID == nil {
+            return .searching
+        }
+        if let sensorEndsAt = sensorEndsAt, sensorEndsAt.timeIntervalSinceNow < 0 {
+            return .expired
+        }
+        if let algorithmState = latestReading?.algorithmState {
+            if algorithmState.isInWarmup {
+                return .warmup
+            }
+            if algorithmState.sensorFailed {
+                return .failed
+            }
+        }
+        if let sensorExpiresAt = sensorExpiresAt, sensorExpiresAt.timeIntervalSinceNow < 0 {
+            return .gracePeriod
+        }
+        return .ok
+    }
+
+
+    public func fetchNewDataIfNeeded(_ completion: @escaping (LoopKit.CGMReadingResult) -> Void) {
+        sensor.resumeScanning()
+        completion(.noData)
+    }
+
+    public init() {
+        lockedState = Locked(G7CGMManagerState())
+        sensor = G7Sensor(sensorID: nil)
+        sensor.delegate = self
+    }
+
+    public required init?(rawState: RawStateValue) {
+        let state = G7CGMManagerState(rawValue: rawState)
+        lockedState = Locked(state)
+        sensor = G7Sensor(sensorID: state.sensorID)
+        sensor.delegate = self
+    }
+
+    public var rawState: RawStateValue {
+        return state.rawValue
+    }
+
+    public var debugDescription: String {
+        let lines = [
+            "## G7CGMManager",
+            "sensorID: \(String(describing: state.sensorID))",
+            "activatedAt: \(String(describing: state.activatedAt))",
+            "latestReading: \(String(describing: state.latestReading))",
+            "latestReadingTimestamp: \(String(describing: state.latestReadingTimestamp))",
+            "latestConnect: \(String(describing: state.latestConnect))",
+            "uploadReadings: \(String(describing: state.uploadReadings))",
+        ]
+        return lines.joined(separator: "\n")
+    }
+
+    public func acknowledgeAlert(alertIdentifier: LoopKit.Alert.AlertIdentifier, completion: @escaping (Error?) -> Void) {
+        completion(nil)
+    }
+
+    public func getSoundBaseURL() -> URL? { return nil }
+    public func getSounds() -> [Alert.Sound] { return [] }
+
+    public let managerIdentifier: String = "G7CGMManager"
+
+    public let localizedTitle = LocalizedString("Dexcom G7", comment: "CGM display title")
+
+    public let isOnboarded = true   // No distinction between created and onboarded
+
+    public var appURL: URL? {
+        return nil
+    }
+
+    public func scanForNewSensor() {
+        logDeviceCommunication("Forgetting existing sensor and starting scan for new sensor.", type: .connection)
+
+        mutateState { state in
+            state.sensorID = nil
+            state.activatedAt = nil
+        }
+        sensor.scanForNewSensor()
+    }
+
+    public var device: HKDevice? {
+        return HKDevice(
+            name: "CGMBLEKit",
+            manufacturer: "Dexcom",
+            model: "G7",
+            hardwareVersion: nil,
+            firmwareVersion: nil,
+            softwareVersion: String(G7SensorKitVersionNumber),
+            localIdentifier: nil,
+            udiDeviceIdentifier: "00386270001863"
+        )
+    }
+
+    func logDeviceCommunication(_ message: String, type: DeviceLogEntryType = .send) {
+        self.cgmManagerDelegate?.deviceManager(self, logEventForDeviceIdentifier: state.sensorID, type: type, message: message, completion: nil)
+    }
+
+    private func updateDelegate(with result: CGMReadingResult) {
+        delegateQueue?.async {
+            self.cgmManagerDelegate?.cgmManager(self, hasNew: result)
+        }
+    }
+}
+
+extension G7CGMManager {
+    // MARK: - G7StateObserver
+
+    public func addStateObserver(_ observer: G7StateObserver, queue: DispatchQueue) {
+        g7StateObservers.insert(observer, queue: queue)
+    }
+
+    public func removeStateObserver(_ observer: G7StateObserver) {
+        g7StateObservers.removeElement(observer)
+    }
+}
+
+extension G7CGMManager: G7SensorDelegate {
+    public func sensor(_ sensor: G7Sensor, didDiscoverNewSensor name: String, activatedAt: Date) -> Bool {
+        logDeviceCommunication("New sensor \(name) discovered, activated at \(activatedAt)", type: .connection)
+
+        let shouldSwitchToNewSensor = true
+
+        if shouldSwitchToNewSensor {
+            mutateState { state in
+                state.sensorID = name
+                state.activatedAt = activatedAt
+            }
+        }
+
+        return shouldSwitchToNewSensor
+    }
+
+    public func sensorDidConnect(_ sensor: G7Sensor, name: String) {
+        mutateState { state in
+            state.latestConnect = Date()
+        }
+        logDeviceCommunication("Sensor connected", type: .connection)
+    }
+
+    public func sensorDisconnected(_ sensor: G7Sensor, suspectedEndOfSession: Bool) {
+        logDeviceCommunication("Sensor disconnected: suspectedEndOfSession=\(suspectedEndOfSession)", type: .connection)
+        if suspectedEndOfSession {
+            scanForNewSensor()
+        }
+    }
+
+    public func sensor(_ sensor: G7Sensor, didError error: Error) {
+        logDeviceCommunication("Sensor error \(error)", type: .error)
+    }
+
+    public func sensor(_ sensor: G7Sensor, didRead message: G7GlucoseMessage) {
+
+        guard message != latestReading else {
+            logDeviceCommunication("Sensor reading duplicate: \(message)", type: .error)
+            updateDelegate(with: .noData)
+            return
+        }
+
+        guard let activationDate = sensor.activationDate else {
+            logDeviceCommunication("Unable to process sensor reading without activation date.", type: .error)
+            return
+        }
+
+        logDeviceCommunication("Sensor didRead \(message)", type: .receive)
+
+        let latestReadingTimestamp = activationDate.addingTimeInterval(TimeInterval(message.glucoseTimestamp))
+
+        mutateState { state in
+            state.latestReading = message
+            state.latestReadingTimestamp = latestReadingTimestamp
+        }
+
+        guard let glucose = message.glucose else {
+            updateDelegate(with: .noData)
+            return
+        }
+
+        guard message.hasReliableGlucose else {
+            updateDelegate(with: .error(AlgorithmError.unreliableState(message.algorithmState)))
+            return
+        }
+
+        let unit = HKUnit.milligramsPerDeciliter
+        let quantity = HKQuantity(unit: unit, doubleValue: Double(min(max(glucose, GlucoseLimits.minimum), GlucoseLimits.maximum)))
+
+        updateDelegate(with: .newData([
+            NewGlucoseSample(
+                date: latestReadingTimestamp,
+                quantity: quantity,
+                condition: message.condition,
+                trend: message.trendType,
+                trendRate: message.trendRate,
+                isDisplayOnly: message.glucoseIsDisplayOnly,
+                wasUserEntered: message.glucoseIsDisplayOnly,
+                syncIdentifier: generateSyncIdentifier(timestamp: message.glucoseTimestamp),
+                device: device
+            )
+        ]))
+    }
+
+    private func generateSyncIdentifier(timestamp: UInt32) -> String {
+        guard let activatedAt = state.activatedAt, let sensorID = state.sensorID else {
+            return "invalid"
+        }
+
+        return "\(activatedAt.timeIntervalSince1970.hours) \(sensorID) \(timestamp)"
+    }
+
+    public func sensor(_ sensor: G7Sensor, didReadBackfill backfill: [G7BackfillMessage]) {
+        for msg in backfill {
+            logDeviceCommunication("Sensor didReadBackfill \(msg)", type: .receive)
+        }
+
+        guard let activationDate = sensor.activationDate else {
+            log.error("Unable to process backfill without activation date.")
+            return
+        }
+
+        let unit = HKUnit.milligramsPerDeciliter
+
+        let samples = backfill.compactMap { entry -> NewGlucoseSample? in
+            guard let glucose = entry.glucose else {
+                return nil
+            }
+
+            guard entry.hasReliableGlucose else {
+                logDeviceCommunication("Backfill reading unreliable: \(entry)", type: .receive)
+                return nil
+            }
+
+            let quantity = HKQuantity(unit: unit, doubleValue: Double(min(max(glucose, GlucoseLimits.minimum), GlucoseLimits.maximum)))
+
+            return NewGlucoseSample(
+                date: activationDate.addingTimeInterval(TimeInterval(entry.timestamp)),
+                quantity: quantity,
+                condition: entry.condition,
+                trend: entry.trendType,
+                trendRate: entry.trendRate,
+                isDisplayOnly: entry.glucoseIsDisplayOnly,
+                wasUserEntered: entry.glucoseIsDisplayOnly,
+                syncIdentifier: generateSyncIdentifier(timestamp: entry.timestamp),
+                device: device
+            )
+        }
+
+        updateDelegate(with: .newData(samples))
+    }
+
+    public func sensorConnectionStatusDidUpdate(_ sensor: G7Sensor) {
+        g7StateObservers.forEach { (observer) in
+            observer.g7ConnectionStatusDidChange()
+        }
+    }
+}
+
+extension G7BackfillMessage {
+    public var trendRate: HKQuantity? {
+        guard let trend = trend else {
+            return nil
+        }
+        return HKQuantity(unit: .milligramsPerDeciliterPerMinute, doubleValue: trend)
+    }
+}
+
+extension G7GlucoseMessage: GlucoseDisplayable {
+    public var isStateValid: Bool {
+        return hasReliableGlucose
+    }
+
+    public var trendRate: HKQuantity? {
+        guard let trend = trend else {
+            return nil
+        }
+        return HKQuantity(unit: .milligramsPerDeciliterPerMinute, doubleValue: trend)
+    }
+
+    public var glucoseQuantity: HKQuantity? {
+        guard let glucose = glucose else {
+            return nil
+        }
+        return HKQuantity(unit: .milligramsPerDeciliter, doubleValue: Double(glucose))
+    }
+
+    public var isLocal: Bool {
+        return true
+    }
+
+    public var glucoseRangeCategory: LoopKit.GlucoseRangeCategory? {
+        guard let glucose = glucose else {
+            return nil
+        }
+
+        if glucose < GlucoseLimits.minimum {
+            return .belowRange
+        } else if glucose > GlucoseLimits.maximum {
+            return .aboveRange
+        } else {
+            return nil
+        }
+    }
+}

+ 47 - 0
Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7CGMManagerState.swift

@@ -0,0 +1,47 @@
+//
+//  G7CGMManagerState.swift
+//  CGMBLEKit
+//
+//  Created by Pete Schwamb on 9/26/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+import LoopKit
+
+
+public struct G7CGMManagerState: RawRepresentable, Equatable {
+    public typealias RawValue = CGMManager.RawStateValue
+
+    public var sensorID: String?
+    public var activatedAt: Date?
+    public var latestReading: G7GlucoseMessage?
+    public var latestReadingTimestamp: Date?
+    public var latestConnect: Date?
+    public var uploadReadings: Bool = false
+
+    init() {
+    }
+
+    public init(rawValue: RawValue) {
+        self.sensorID = rawValue["sensorID"] as? String
+        self.activatedAt = rawValue["activatedAt"] as? Date
+        if let readingData = rawValue["latestReading"] as? Data {
+            latestReading = G7GlucoseMessage(data: readingData)
+        }
+        self.latestReadingTimestamp = rawValue["latestReadingTimestamp"] as? Date
+        self.latestConnect = rawValue["latestConnect"] as? Date
+        self.uploadReadings = rawValue["uploadReadings"] as? Bool ?? false
+    }
+
+    public var rawValue: RawValue {
+        var rawValue: RawValue = [:]
+        rawValue["sensorID"] = sensorID
+        rawValue["activatedAt"] = activatedAt
+        rawValue["latestReading"] = latestReading?.data
+        rawValue["latestReadingTimestamp"] = latestReadingTimestamp
+        rawValue["latestConnect"] = latestConnect
+        rawValue["uploadReadings"] = uploadReadings
+        return rawValue
+    }
+}

+ 22 - 0
Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7DeviceStatus.swift

@@ -0,0 +1,22 @@
+//
+//  G7DeviceStatus.swift
+//  CGMBLEKit
+//
+//  Created by Pete Schwamb on 10/23/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import LoopKit
+import LoopKitUI
+
+public struct G7DeviceStatusHighlight: DeviceStatusHighlight, Equatable {
+    public let localizedMessage: String
+    public let imageName: String
+    public let state: DeviceStatusHighlightState
+    init(localizedMessage: String, imageName: String, state: DeviceStatusHighlightState) {
+        self.localizedMessage = localizedMessage
+        self.imageName = imageName
+        self.state = state
+    }
+}
+

+ 15 - 0
Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7LastReading.swift

@@ -0,0 +1,15 @@
+//
+//  G7LastReading.swift
+//  CGMBLEKit
+//
+//  Created by Pete Schwamb on 10/4/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+
+struct G7LastReading {
+    let glucose: Int?
+    let timestamp: Date
+    let sensorTimestamp: Date
+}

+ 567 - 0
Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7PeripheralManager.swift

@@ -0,0 +1,567 @@
+//
+//  G7PeripheralManager.swift
+//  CGMBLEKit
+//
+//  Created by Pete Schwamb on 11/11/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import CoreBluetooth
+import Foundation
+import os.log
+
+
+enum PeripheralManagerError: Error {
+    case cbPeripheralError(Error)
+    case notReady
+    case invalidConfiguration
+    case timeout
+    case unknownCharacteristic
+}
+
+class G7PeripheralManager: NSObject {
+
+    private let log = OSLog(category: "G7PeripheralManager")
+
+    ///
+    /// This is mutable, because CBPeripheral instances can seemingly become invalid, and need to be periodically re-fetched from CBCentralManager
+    var peripheral: CBPeripheral {
+        didSet {
+            guard oldValue !== peripheral else {
+                return
+            }
+
+            log.error("Replacing peripheral reference %{public}@ -> %{public}@", oldValue, peripheral)
+
+            oldValue.delegate = nil
+            peripheral.delegate = self
+
+            queue.sync {
+                self.needsConfiguration = true
+            }
+        }
+    }
+
+    /// The dispatch queue used to serialize operations on the peripheral
+    let queue = DispatchQueue(label: "com.loopkit.PeripheralManager.queue", qos: .unspecified)
+
+    /// The condition used to signal command completion
+    private let commandLock = NSCondition()
+
+    /// The required conditions for the operation to complete
+    private var commandConditions = [CommandCondition]()
+
+    /// Any error surfaced during the active operation
+    private var commandError: Error?
+
+    private(set) weak var central: CBCentralManager?
+
+    let configuration: Configuration
+
+    // Confined to `queue`
+    private var needsConfiguration = true
+
+    weak var delegate: G7PeripheralManagerDelegate? {
+        didSet {
+            queue.sync {
+                needsConfiguration = true
+            }
+        }
+    }
+
+    init(peripheral: CBPeripheral, configuration: Configuration, centralManager: CBCentralManager) {
+        self.peripheral = peripheral
+        self.central = centralManager
+        self.configuration = configuration
+
+        super.init()
+
+        peripheral.delegate = self
+
+        assertConfiguration()
+    }
+}
+
+
+// MARK: - Nested types
+extension G7PeripheralManager {
+    struct Configuration {
+        var serviceCharacteristics: [CBUUID: [CBUUID]] = [:]
+        var notifyingCharacteristics: [CBUUID: [CBUUID]] = [:]
+        var valueUpdateMacros: [CBUUID: (_ manager: G7PeripheralManager) -> Void] = [:]
+    }
+
+    enum CommandCondition {
+        case notificationStateUpdate(characteristicUUID: CBUUID, enabled: Bool)
+        case valueUpdate(characteristic: CBCharacteristic, matching: ((Data?) -> Bool)?)
+        case write(characteristic: CBCharacteristic)
+        case discoverServices
+        case discoverCharacteristicsForService(serviceUUID: CBUUID)
+    }
+}
+
+protocol G7PeripheralManagerDelegate: AnyObject {
+    func peripheralManager(_ manager: G7PeripheralManager, didUpdateValueFor characteristic: CBCharacteristic)
+
+    func peripheralManager(_ manager: G7PeripheralManager, didReadRSSI RSSI: NSNumber, error: Error?)
+
+    func peripheralManagerDidUpdateName(_ manager: G7PeripheralManager)
+
+    func completeConfiguration(for manager: G7PeripheralManager) throws
+}
+
+
+// MARK: - Operation sequence management
+extension G7PeripheralManager {
+    func configureAndRun(_ block: @escaping (_ manager: G7PeripheralManager) -> Void) -> (() -> Void) {
+        return {
+            if !self.needsConfiguration && self.peripheral.services == nil {
+                self.log.error("Configured peripheral has no services. Reconfiguring…")
+            }
+
+            if self.needsConfiguration || self.peripheral.services == nil {
+                do {
+                    try self.applyConfiguration()
+                    self.log.default("Peripheral configuration completed")
+                    if let delegate = self.delegate {
+                        try delegate.completeConfiguration(for: self)
+                        self.log.default("Delegate configuration completed")
+                        self.needsConfiguration = false
+                    } else {
+                        self.log.error("No delegate set configured")
+                    }
+                } catch let error {
+                    self.log.error("Error applying peripheral configuration: %@", String(describing: error))
+                    // Will retry
+                }
+
+            }
+
+            block(self)
+        }
+    }
+
+    func perform(_ block: @escaping (_ manager: G7PeripheralManager) -> Void) {
+        queue.async(execute: configureAndRun(block))
+    }
+
+    private func assertConfiguration() {
+        log.debug("assertConfiguration")
+        perform { (_) in
+            // Intentionally empty to trigger configuration if necessary
+        }
+    }
+
+    private func applyConfiguration(discoveryTimeout: TimeInterval = 2) throws {
+        try discoverServices(configuration.serviceCharacteristics.keys.map { $0 }, timeout: discoveryTimeout)
+
+        for service in peripheral.services ?? [] {
+            guard let characteristics = configuration.serviceCharacteristics[service.uuid] else {
+                // Not all services may have characteristics
+                continue
+            }
+
+            try discoverCharacteristics(characteristics, for: service, timeout: discoveryTimeout)
+        }
+
+        for (serviceUUID, characteristicUUIDs) in configuration.notifyingCharacteristics {
+            guard let service = peripheral.services?.itemWithUUID(serviceUUID) else {
+                throw PeripheralManagerError.unknownCharacteristic
+            }
+
+            for characteristicUUID in characteristicUUIDs {
+                guard let characteristic = service.characteristics?.itemWithUUID(characteristicUUID) else {
+                    throw PeripheralManagerError.unknownCharacteristic
+                }
+
+                guard !characteristic.isNotifying else {
+                    continue
+                }
+
+                try setNotifyValue(true, for: characteristic, timeout: discoveryTimeout)
+            }
+        }
+    }
+}
+
+extension CBManagerState {
+    var description: String {
+        switch self {
+        case .poweredOff:
+            return "poweredOff"
+        case .poweredOn:
+            return "poweredOff"
+        case .resetting:
+            return "resetting"
+        case .unauthorized:
+            return "unauthorized"
+        case .unknown:
+            return "unknown"
+        case .unsupported:
+            return "unsupported"
+        @unknown default:
+            return "unknown(\(rawValue))"
+        }
+    }
+}
+
+extension CBPeripheralState {
+    var description: String {
+        switch self {
+        case .connected:
+            return "connected"
+        case .disconnected:
+            return "disconnected"
+        case .connecting:
+            return "connecting"
+        case .disconnecting:
+            return "disconnecting"
+        @unknown default:
+            return "unknown(\(rawValue))"
+        }
+    }
+}
+
+
+// MARK: - Synchronous Commands
+extension G7PeripheralManager {
+    /// - Throws: PeripheralManagerError
+    func runCommand(timeout: TimeInterval, command: () -> Void) throws {
+        // Prelude
+        dispatchPrecondition(condition: .onQueue(queue))
+        guard central?.state == .poweredOn && peripheral.state == .connected else {
+            log.debug("Unable to run command: central state = %{public}@, peripheral state = %{public}@", String(describing: central?.state.description), String(describing: peripheral.state))
+            throw PeripheralManagerError.notReady
+        }
+
+        commandLock.lock()
+
+        defer {
+            commandLock.unlock()
+        }
+
+        guard commandConditions.isEmpty else {
+            throw PeripheralManagerError.invalidConfiguration
+        }
+
+        // Run
+        command()
+
+        guard !commandConditions.isEmpty else {
+            // If the command didn't add any conditions, then finish immediately
+            return
+        }
+
+        // Postlude
+        let signaled = commandLock.wait(until: Date(timeIntervalSinceNow: timeout))
+
+        defer {
+            commandError = nil
+            commandConditions = []
+        }
+
+        guard signaled else {
+            throw PeripheralManagerError.timeout
+        }
+
+        if let error = commandError {
+            throw PeripheralManagerError.cbPeripheralError(error)
+        }
+    }
+
+    /// It's illegal to call this without first acquiring the commandLock
+    ///
+    /// - Parameter condition: The condition to add
+    func addCondition(_ condition: CommandCondition) {
+        dispatchPrecondition(condition: .onQueue(queue))
+        commandConditions.append(condition)
+    }
+
+    func discoverServices(_ serviceUUIDs: [CBUUID], timeout: TimeInterval) throws {
+        let servicesToDiscover = peripheral.servicesToDiscover(from: serviceUUIDs)
+
+        log.debug("Discovering servicesToDiscover %@", String(describing: servicesToDiscover))
+
+        guard servicesToDiscover.count > 0 else {
+            return
+        }
+
+        try runCommand(timeout: timeout) {
+            addCondition(.discoverServices)
+
+            log.debug("discoverServices %@", String(describing: serviceUUIDs))
+
+            peripheral.discoverServices(serviceUUIDs)
+        }
+    }
+
+    func discoverCharacteristics(_ characteristicUUIDs: [CBUUID], for service: CBService, timeout: TimeInterval) throws {
+
+        log.debug("all uuids: %@", String(describing: characteristicUUIDs))
+
+        let knownCharacteristicUUIDs = service.characteristics?.compactMap({ $0.uuid }) ?? []
+        log.debug("knownCharacteristicUUIDs: %@", String(describing: knownCharacteristicUUIDs))
+
+        let characteristicsToDiscover = peripheral.characteristicsToDiscover(from: characteristicUUIDs, for: service)
+
+        log.debug("characteristicsToDiscover: %@", String(describing: characteristicsToDiscover))
+
+        guard characteristicsToDiscover.count > 0 else {
+            return
+        }
+
+        try runCommand(timeout: timeout) {
+            addCondition(.discoverCharacteristicsForService(serviceUUID: service.uuid))
+
+            log.debug("Discovering characteristics %@ for %@", String(describing: characteristicsToDiscover), String(describing: peripheral))
+            peripheral.discoverCharacteristics(characteristicsToDiscover, for: service)
+        }
+    }
+
+    /// - Throws: PeripheralManagerError
+    func setNotifyValue(_ enabled: Bool, for characteristic: CBCharacteristic, timeout: TimeInterval) throws {
+        try runCommand(timeout: timeout) {
+            addCondition(.notificationStateUpdate(characteristicUUID: characteristic.uuid, enabled: enabled))
+            log.debug("Set notify %@ for %@", String(describing: enabled), String(describing: peripheral))
+            peripheral.setNotifyValue(enabled, for: characteristic)
+        }
+    }
+
+    /// - Throws: PeripheralManagerError
+    func readValue(for characteristic: CBCharacteristic, timeout: TimeInterval) throws -> Data? {
+        try runCommand(timeout: timeout) {
+            addCondition(.valueUpdate(characteristic: characteristic, matching: nil))
+
+            peripheral.readValue(for: characteristic)
+        }
+
+        return characteristic.value
+    }
+
+    /// - Throws: PeripheralManagerError
+    func wait(for characteristic: CBCharacteristic, timeout: TimeInterval) throws -> Data {
+        try runCommand(timeout: timeout) {
+            addCondition(.valueUpdate(characteristic: characteristic, matching: nil))
+        }
+
+        guard let value = characteristic.value else {
+            throw PeripheralManagerError.timeout
+        }
+
+        return value
+    }
+
+    /// - Throws: PeripheralManagerError
+    func writeValue(_ value: Data, for characteristic: CBCharacteristic, type: CBCharacteristicWriteType, timeout: TimeInterval) throws {
+        try runCommand(timeout: timeout) {
+            if case .withResponse = type {
+                addCondition(.write(characteristic: characteristic))
+            }
+
+            peripheral.writeValue(value, for: characteristic, type: type)
+        }
+    }
+}
+
+
+// MARK: - Delegate methods executed on the central's queue
+extension G7PeripheralManager: CBPeripheralDelegate {
+
+    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
+        commandLock.lock()
+
+        if let index = commandConditions.firstIndex(where: { (condition) -> Bool in
+            if case .discoverServices = condition {
+                return true
+            } else {
+                return false
+            }
+        }) {
+            commandConditions.remove(at: index)
+            commandError = error
+
+            if commandConditions.isEmpty {
+                commandLock.broadcast()
+            }
+        }
+
+        commandLock.unlock()
+    }
+
+    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
+        commandLock.lock()
+
+        if let index = commandConditions.firstIndex(where: { (condition) -> Bool in
+            if case .discoverCharacteristicsForService(serviceUUID: service.uuid) = condition {
+                return true
+            } else {
+                return false
+            }
+        }) {
+            commandConditions.remove(at: index)
+            commandError = error
+
+            if commandConditions.isEmpty {
+                commandLock.broadcast()
+            }
+        }
+
+        commandLock.unlock()
+    }
+
+    func peripheral(_ peripheral: CBPeripheral, didUpdateNotificationStateFor characteristic: CBCharacteristic, error: Error?) {
+        commandLock.lock()
+
+        if let index = commandConditions.firstIndex(where: { (condition) -> Bool in
+            if case .notificationStateUpdate(characteristicUUID: characteristic.uuid, enabled: characteristic.isNotifying) = condition {
+                return true
+            } else {
+                return false
+            }
+        }) {
+            commandConditions.remove(at: index)
+            commandError = error
+
+            if commandConditions.isEmpty {
+                commandLock.broadcast()
+            }
+        }
+
+        commandLock.unlock()
+    }
+
+    func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {
+        commandLock.lock()
+
+        if let index = commandConditions.firstIndex(where: { (condition) -> Bool in
+            if case .write(characteristic: characteristic) = condition {
+                return true
+            } else {
+                return false
+            }
+        }) {
+            commandConditions.remove(at: index)
+            commandError = error
+
+            if commandConditions.isEmpty {
+                commandLock.broadcast()
+            }
+        }
+
+        commandLock.unlock()
+    }
+
+    func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
+        commandLock.lock()
+
+        var notifyDelegate = false
+
+        if let index = commandConditions.firstIndex(where: { (condition) -> Bool in
+            if case .valueUpdate(characteristic: characteristic, matching: let matching) = condition {
+                return matching?(characteristic.value) ?? true
+            } else {
+                return false
+            }
+        }) {
+            commandConditions.remove(at: index)
+            commandError = error
+
+            if commandConditions.isEmpty {
+                commandLock.broadcast()
+            }
+        } else if let macro = configuration.valueUpdateMacros[characteristic.uuid] {
+            macro(self)
+        } else if commandConditions.isEmpty {
+            notifyDelegate = true // execute after the unlock
+        }
+
+        commandLock.unlock()
+
+        if notifyDelegate {
+            // If we weren't expecting this notification, pass it along to the delegate
+            delegate?.peripheralManager(self, didUpdateValueFor: characteristic)
+        }
+    }
+
+    func peripheral(_ peripheral: CBPeripheral, didReadRSSI RSSI: NSNumber, error: Error?) {
+        delegate?.peripheralManager(self, didReadRSSI: RSSI, error: error)
+    }
+
+    func peripheralDidUpdateName(_ peripheral: CBPeripheral) {
+        delegate?.peripheralManagerDidUpdateName(self)
+    }
+}
+
+
+extension G7PeripheralManager: CBCentralManagerDelegate {
+    func centralManagerDidUpdateState(_ central: CBCentralManager) {
+        switch central.state {
+        case .poweredOn:
+            log.debug("centralManagerDidUpdateState to poweredOn")
+            assertConfiguration()
+        default:
+            break
+        }
+    }
+
+    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
+        log.debug("didConnect to %{public}@", peripheral.identifier.uuidString)
+        switch peripheral.state {
+        case .connected:
+            assertConfiguration()
+        default:
+            break
+        }
+    }
+}
+
+
+extension G7PeripheralManager {
+    public override var debugDescription: String {
+        var items = [
+            "## G7PeripheralManager",
+            "peripheral: \(peripheral)",
+        ]
+        queue.sync {
+            items.append("needsConfiguration: \(needsConfiguration)")
+        }
+        return items.joined(separator: "\n")
+    }
+}
+
+extension G7PeripheralManager {
+    private func getCharacteristicWithUUID(_ uuid: CGMServiceCharacteristicUUID) -> CBCharacteristic? {
+        return peripheral.getCharacteristicWithUUID(uuid)
+    }
+
+    func setNotifyValue(_ enabled: Bool,
+        for characteristicUUID: CGMServiceCharacteristicUUID,
+        timeout: TimeInterval = 2) throws
+    {
+        guard let characteristic = getCharacteristicWithUUID(characteristicUUID) else {
+            throw PeripheralManagerError.unknownCharacteristic
+        }
+
+        try setNotifyValue(enabled, for: characteristic, timeout: timeout)
+    }
+
+}
+
+
+fileprivate extension CBPeripheral {
+    func getServiceWithUUID(_ uuid: SensorServiceUUID) -> CBService? {
+        return services?.itemWithUUIDString(uuid.rawValue)
+    }
+
+    func getCharacteristicForServiceUUID(_ serviceUUID: SensorServiceUUID, withUUIDString UUIDString: String) -> CBCharacteristic? {
+        guard let characteristics = getServiceWithUUID(serviceUUID)?.characteristics else {
+            return nil
+        }
+
+        return characteristics.itemWithUUIDString(UUIDString)
+    }
+
+    func getCharacteristicWithUUID(_ uuid: CGMServiceCharacteristicUUID) -> CBCharacteristic? {
+        return getCharacteristicForServiceUUID(.cgmService, withUUIDString: uuid.rawValue)
+    }
+}

+ 310 - 0
Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7Sensor.swift

@@ -0,0 +1,310 @@
+//
+//  G7Sensor.swift
+//  CGMBLEKit
+//
+//  Created by Pete Schwamb on 9/24/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+import CoreBluetooth
+import HealthKit
+import os.log
+
+
+public protocol G7SensorDelegate: AnyObject {
+    func sensorDidConnect(_ sensor: G7Sensor, name: String)
+
+    func sensorDisconnected(_ sensor: G7Sensor, suspectedEndOfSession: Bool)
+
+    func sensor(_ sensor: G7Sensor, didError error: Error)
+
+    func sensor(_ sensor: G7Sensor, didRead glucose: G7GlucoseMessage)
+
+    func sensor(_ sensor: G7Sensor, didReadBackfill backfill: [G7BackfillMessage])
+
+    // If this returns true, then start following this sensor
+    func sensor(_ sensor: G7Sensor, didDiscoverNewSensor name: String, activatedAt: Date) -> Bool
+
+    // This is triggered for connection/disconnection events, and enabling/disabling scan
+    func sensorConnectionStatusDidUpdate(_ sensor: G7Sensor)
+}
+
+public enum G7SensorError: Error {
+    case authenticationError(String)
+    case controlError(String)
+    case observationError(String)
+}
+
+extension G7SensorError: CustomStringConvertible {
+    public var description: String {
+        switch self {
+        case .authenticationError(let description):
+            return description
+        case .controlError(let description):
+            return description
+        case .observationError(let description):
+            return description
+        }
+    }
+}
+
+public enum G7SensorLifecycleState {
+    case searching
+    case warmup
+    case ok
+    case failed
+    case gracePeriod
+    case expired
+}
+
+
+public final class G7Sensor: G7BluetoothManagerDelegate {
+    public static let lifetime = TimeInterval(hours: 10 * 24)
+    public static let warmupDuration = TimeInterval(minutes: 25)
+    public static let gracePeriod = TimeInterval(hours: 12)
+
+    public weak var delegate: G7SensorDelegate?
+
+    // MARK: - Passive observation state, confined to `bluetoothManager.managerQueue`
+
+    /// The initial activation date of the sensor
+    var activationDate: Date?
+
+    /// The date of last connection
+    private var lastConnection: Date?
+
+    /// Used to detect connections that do not authenticate, signalling possible sensor switchover
+    private var pendingAuth: Bool = false
+
+    /// The backfill data buffer
+    private var backfillBuffer: [G7BackfillMessage] = []
+
+    // MARK: -
+
+    private let log = OSLog(category: "G7Sensor")
+
+    private let bluetoothManager = G7BluetoothManager()
+
+    private let delegateQueue = DispatchQueue(label: "com.loopkit.G7Sensor.delegateQueue", qos: .unspecified)
+
+    private var sensorID: String?
+
+    public func setSensorId(_ newId: String) {
+        self.sensorID = newId
+    }
+
+    public init(sensorID: String?) {
+        self.sensorID = sensorID
+        bluetoothManager.delegate = self
+    }
+
+    public func scanForNewSensor() {
+        self.sensorID = nil
+        bluetoothManager.disconnect()
+        bluetoothManager.forgetPeripheral()
+        bluetoothManager.scanForPeripheral()
+    }
+
+    public func resumeScanning() {
+        bluetoothManager.scanForPeripheral()
+    }
+
+    public func stopScanning() {
+        bluetoothManager.disconnect()
+    }
+
+    public var isScanning: Bool {
+        return bluetoothManager.isScanning
+    }
+
+    public var isConnected: Bool {
+        return bluetoothManager.isConnected
+    }
+
+    private func handleGlucoseMessage(message: G7GlucoseMessage, peripheralManager: G7PeripheralManager) {
+        activationDate = Date().addingTimeInterval(-TimeInterval(message.glucoseTimestamp))
+        peripheralManager.perform { (peripheral) in
+            self.log.debug("Listening for backfill responses")
+            // Subscribe to backfill updates
+            do {
+                try peripheral.listenToCharacteristic(.backfill)
+            } catch let error {
+                self.log.error("Error trying to enable notifications on backfill characteristic: %{public}@", String(describing: error))
+                self.delegateQueue.async {
+                    self.delegate?.sensor(self, didError: error)
+                }
+            }
+        }
+        if sensorID == nil, let name = peripheralManager.peripheral.name, let activationDate = activationDate  {
+            delegateQueue.async {
+                guard let delegate = self.delegate else {
+                    return
+                }
+
+                if delegate.sensor(self, didDiscoverNewSensor: name, activatedAt: activationDate) {
+                    self.sensorID = name
+                    self.activationDate = activationDate
+                    self.delegate?.sensor(self, didRead: message)
+                    self.bluetoothManager.stopScanning()
+                }
+            }
+        } else if sensorID != nil {
+            delegateQueue.async {
+                self.delegate?.sensor(self, didRead: message)
+            }
+        } else {
+            self.log.error("Dropping unhandled glucose message: %{public}@", String(describing: message))
+        }
+    }
+
+    // MARK: - BluetoothManagerDelegate
+
+    func bluetoothManager(_ manager: G7BluetoothManager, readied peripheralManager: G7PeripheralManager) -> Bool {
+        var shouldStopScanning = false;
+
+        if let sensorID = sensorID, sensorID == peripheralManager.peripheral.name {
+            shouldStopScanning = true
+            delegateQueue.async {
+                self.delegate?.sensorDidConnect(self, name: sensorID)
+            }
+        }
+
+        peripheralManager.perform { (peripheral) in
+            self.log.info("Listening for authentication responses for %{public}@", String(describing: peripheralManager.peripheral.name))
+            do {
+                try peripheral.listenToCharacteristic(.authentication)
+                self.pendingAuth = true
+            } catch let error {
+                self.delegateQueue.async {
+                    self.delegate?.sensor(self, didError: error)
+                }
+            }
+        }
+        return shouldStopScanning
+    }
+
+    func bluetoothManager(_ manager: G7BluetoothManager, readyingFailed peripheralManager: G7PeripheralManager, with error: Error) {
+        delegateQueue.async {
+            self.delegate?.sensor(self, didError: error)
+        }
+    }
+
+    func peripheralDidDisconnect(_ manager: G7BluetoothManager, peripheralManager: G7PeripheralManager, wasRemoteDisconnect: Bool) {
+        if let sensorID = sensorID, sensorID == peripheralManager.peripheral.name {
+
+            let suspectedEndOfSession: Bool
+            if pendingAuth && wasRemoteDisconnect {
+                suspectedEndOfSession = true // Normal disconnect without auth is likely that G7 app stopped this session
+            } else {
+                suspectedEndOfSession = false
+            }
+            pendingAuth = false
+
+            delegateQueue.async {
+                self.delegate?.sensorDisconnected(self, suspectedEndOfSession: suspectedEndOfSession)
+            }
+        }
+    }
+
+    func bluetoothManager(_ manager: G7BluetoothManager, shouldConnectPeripheral peripheral: CBPeripheral) -> PeripheralConnectionCommand {
+
+        guard let name = peripheral.name else {
+            log.debug("Not connecting to unnamed peripheral: %{public}@", String(describing: peripheral))
+            return .ignore
+        }
+
+        /// The Dexcom G7 advertises a peripheral name of "DXCMxx", and later reports a full name of "Dexcomxx"
+        if name.hasPrefix("DXCM") {
+            // If we're following this name or if we're scanning, connect
+            if let sensorName = sensorID, name.suffix(2) == sensorName.suffix(2) {
+                return .makeActive
+            } else if sensorID == nil {
+                return .connect
+            }
+        }
+
+        log.info("Not connecting to peripheral: %{public}@", name)
+        return .ignore
+    }
+
+    func bluetoothManager(_ manager: G7BluetoothManager, peripheralManager: G7PeripheralManager, didReceiveControlResponse response: Data) {
+
+        guard response.count > 0 else { return }
+
+        log.debug("Received control response: %{public}@", response.hexadecimalString)
+
+        switch G7Opcode(rawValue: response[0]) {
+        case .glucoseTx?:
+            if let glucoseMessage = G7GlucoseMessage(data: response) {
+                handleGlucoseMessage(message: glucoseMessage, peripheralManager: peripheralManager)
+            } else {
+                delegateQueue.async {
+                    self.delegate?.sensor(self, didError: G7SensorError.observationError("Unable to handle glucose control response"))
+                }
+            }
+        case .backfillFinished:
+            if backfillBuffer.count > 0 {
+                delegateQueue.async {
+                    self.delegate?.sensor(self, didReadBackfill: self.backfillBuffer)
+                    self.backfillBuffer = []
+                }
+            }
+        default:
+            // We ignore all other known opcodes
+            break
+        }
+    }
+
+    func bluetoothManager(_ manager: G7BluetoothManager, didReceiveBackfillResponse response: Data) {
+
+        log.debug("Received backfill response: %{public}@", response.hexadecimalString)
+
+        guard response.count == 9 else {
+            return
+        }
+
+        if let msg = G7BackfillMessage(data: response) {
+            backfillBuffer.append(msg)
+        }
+    }
+
+    func bluetoothManager(_ manager: G7BluetoothManager, peripheralManager: G7PeripheralManager, didReceiveAuthenticationResponse response: Data) {
+
+        if let message = AuthChallengeRxMessage(data: response), message.isBonded, message.isAuthenticated {
+            log.debug("Observed authenticated session. enabling notifications for control characteristic.")
+            pendingAuth = false
+            peripheralManager.perform { (peripheral) in
+                do {
+                    try peripheral.listenToCharacteristic(.control)
+                } catch let error {
+                    self.log.error("Error trying to enable notifications on control characteristic: %{public}@", String(describing: error))
+                    self.delegateQueue.async {
+                        self.delegate?.sensor(self, didError: error)
+                    }
+                }
+            }
+        } else {
+            log.debug("Ignoring authentication response: %{public}@", response.hexadecimalString)
+        }
+    }
+
+    func bluetoothManagerScanningStatusDidChange(_ manager: G7BluetoothManager) {
+        self.delegateQueue.async {
+            self.delegate?.sensorConnectionStatusDidUpdate(self)
+        }
+    }
+}
+
+
+// MARK: - Helpers
+fileprivate extension G7PeripheralManager {
+
+    func listenToCharacteristic(_ characteristic: CGMServiceCharacteristicUUID) throws {
+        do {
+            try setNotifyValue(true, for: characteristic)
+        } catch let error {
+            throw G7SensorError.controlError("Error enabling notification for \(characteristic): \(error)")
+        }
+    }
+}

+ 18 - 0
Dependencies/G7SensorKit/G7SensorKit/G7SensorKit.h

@@ -0,0 +1,18 @@
+//
+//  G7SensorKit.h
+//  G7SensorKit
+//
+//  Created by Pete Schwamb on 11/11/22.
+//
+
+#import <Foundation/Foundation.h>
+
+//! Project version number for G7SensorKit.
+FOUNDATION_EXPORT double G7SensorKitVersionNumber;
+
+//! Project version string for G7SensorKit.
+FOUNDATION_EXPORT const unsigned char G7SensorKitVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <G7SensorKit/PublicHeader.h>
+
+

+ 14 - 0
Dependencies/G7SensorKit/G7SensorKit/GlucoseLimits.swift

@@ -0,0 +1,14 @@
+//
+//  GlucoseLimits.swift
+//  G7SensorKit
+//
+//  Created by Pete Schwamb on 9/24/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+
+enum GlucoseLimits {
+    static var minimum: UInt16 = 40
+    static var maximum: UInt16 = 400
+}

+ 27 - 0
Dependencies/G7SensorKit/G7SensorKit/Messages/AuthChallengeRxMessage.swift

@@ -0,0 +1,27 @@
+//
+//  AuthChallengeRxMessage.swift
+//  xDrip5
+//
+//  Created by Nathan Racklyeft on 11/22/15.
+//  Copyright © 2015 Nathan Racklyeft. All rights reserved.
+//
+
+import Foundation
+
+struct AuthChallengeRxMessage: SensorMessage {
+    let isAuthenticated: Bool
+    let isBonded: Bool
+
+    init?(data: Data) {
+        guard data.count >= 3 else {
+            return nil
+        }
+
+        guard data.starts(with: .authChallengeRx) else {
+            return nil
+        }
+
+        isAuthenticated = data[1] == 0x1
+        isBonded = data[2] == 0x1
+    }
+}

+ 130 - 0
Dependencies/G7SensorKit/G7SensorKit/Messages/G7GlucoseMessage.swift

@@ -0,0 +1,130 @@
+//
+//  G7GlucoseMessage.swift
+//  CGMBLEKit
+//
+//  Created by Pete Schwamb on 9/24/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+import LoopKit
+
+public struct G7GlucoseMessage: SensorMessage, Equatable {
+    //public let status: UInt8
+    //public let sequence: UInt32
+    public let glucose: UInt16?
+    public let predicted: UInt16?
+    public let glucoseIsDisplayOnly: Bool
+    public let messageTimestamp: UInt32 // Seconds since pairing of the *message*. Subtract age to get timestamp of glucose
+    public let algorithmState: AlgorithmState
+    public let sequence: UInt16
+    public let trend: Double?
+    public let data: Data
+    public let age: UInt8 // Amount of time elapsed (seconds) from sensor reading to BLE comms
+
+    public var hasReliableGlucose: Bool {
+        return algorithmState.hasReliableGlucose
+    }
+
+    public var glucoseTimestamp: UInt32 {
+        return messageTimestamp - UInt32(age)
+    }
+
+    public var trendType: LoopKit.GlucoseTrend? {
+        guard let trend = trend else {
+            return nil
+        }
+
+        switch trend {
+        case let x where x <= -3.0:
+            return .downDownDown
+        case let x where x <= -2.0:
+            return .downDown
+        case let x where x <= -1.0:
+            return .down
+        case let x where x < 1.0:
+            return .flat
+        case let x where x < 2.0:
+            return .up
+        case let x where x < 3.0:
+            return .upUp
+        default:
+            return .upUpUp
+        }
+    }
+
+    public var condition: GlucoseCondition? {
+        guard let glucose = glucose else {
+            return nil
+        }
+
+        if glucose < GlucoseLimits.minimum {
+            return .belowRange
+        } else if glucose > GlucoseLimits.maximum {
+            return .aboveRange
+        } else {
+            return nil
+        }
+    }
+
+    init?(data: Data) {
+        //    0  1  2 3 4 5  6 7  8  9 10 11 1213 14 15 1617 18
+        //         TTTTTTTT SQSQ       AG    BGBG SS TR PRPR C
+        // 0x4e 00 d5070000 0900 00 01 05 00 6100 06 01 ffff 0e
+        // TTTTTTTT = timestamp
+        //     SQSQ = sequence
+        //       AG = age
+        //     BGBG = glucose
+        //       SS = algorithm state
+        //       TR = trend
+        //     PRPR = predicted
+        //        C = calibration
+
+        guard data.count >= 19 else {
+            return nil
+        }
+
+        guard data[1] == 00 else {
+            return nil
+        }
+
+        messageTimestamp = data[2..<6].toInt()
+
+        sequence = data[6..<8].to(UInt16.self)
+
+        age = data[10]
+
+        let glucoseData = data[12..<14].to(UInt16.self)
+        if glucoseData != 0xffff {
+            glucose = glucoseData & 0xfff
+            glucoseIsDisplayOnly = (data[18] & 0x10) > 0
+        } else {
+            glucose = nil
+            glucoseIsDisplayOnly = false
+        }
+
+        let predictionData = data[16..<18].to(UInt16.self)
+        if predictionData != 0xffff {
+            predicted = predictionData & 0xfff
+        } else {
+            predicted = nil
+        }
+
+        algorithmState = AlgorithmState(rawValue: data[14])
+
+        if data[15] == 0x7f {
+            trend = nil
+        } else {
+            trend = Double(Int8(bitPattern: data[15])) / 10
+        }
+
+        self.data = data
+    }
+
+}
+
+extension G7GlucoseMessage: CustomDebugStringConvertible {
+    public var debugDescription: String {
+        return "G7GlucoseMessage(glucose:\(String(describing: glucose)), sequence:\(sequence) glucoseIsDisplayOnly:\(glucoseIsDisplayOnly) state:\(String(describing: algorithmState)) messageTimestamp:\(messageTimestamp) age:\(age), data:\(data.hexadecimalString))"
+    }
+}

+ 15 - 0
Dependencies/G7SensorKit/G7SensorKit/Messages/G7Opcode.swift

@@ -0,0 +1,15 @@
+//
+//  G7Opcode.swift
+//  CGMBLEKit
+//
+//  Created by Pete Schwamb on 9/24/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+
+enum G7Opcode: UInt8 {
+    case authChallengeRx = 0x05
+    case glucoseTx = 0x4e
+    case backfillFinished = 0x59
+}

+ 24 - 0
Dependencies/G7SensorKit/G7SensorKit/Messages/SensorMessage.swift

@@ -0,0 +1,24 @@
+//
+//  SensorMessage.swift
+//  G7SensorKit
+//
+//  Created by Pete Schwamb on 9/24/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+
+extension Data {
+    func starts(with opcode: G7Opcode) -> Bool {
+        guard count > 0 else {
+            return false
+        }
+
+        return self[startIndex] == opcode.rawValue
+    }
+}
+
+/// A data sequence received by the sensor
+protocol SensorMessage {
+    init?(data: Data)
+}

+ 50 - 0
Dependencies/G7SensorKit/G7SensorKit/OSLog.swift

@@ -0,0 +1,50 @@
+//
+//  OSLog.swift
+//  Loop
+//
+//  Copyright © 2017 LoopKit Authors. All rights reserved.
+//
+
+import os.log
+
+
+extension OSLog {
+    convenience init(category: String) {
+        self.init(subsystem: "org.loopkit.G7SensorKit", category: category)
+    }
+
+    func debug(_ message: StaticString, _ args: CVarArg...) {
+        log(message, type: .debug, args)
+    }
+
+    func info(_ message: StaticString, _ args: CVarArg...) {
+        log(message, type: .info, args)
+    }
+
+    func `default`(_ message: StaticString, _ args: CVarArg...) {
+        log(message, type: .default, args)
+    }
+
+    func error(_ message: StaticString, _ args: CVarArg...) {
+        log(message, type: .error, args)
+    }
+
+    private func log(_ message: StaticString, type: OSLogType, _ args: [CVarArg]) {
+        switch args.count {
+        case 0:
+            os_log(message, log: self, type: type)
+        case 1:
+            os_log(message, log: self, type: type, args[0])
+        case 2:
+            os_log(message, log: self, type: type, args[0], args[1])
+        case 3:
+            os_log(message, log: self, type: type, args[0], args[1], args[2])
+        case 4:
+            os_log(message, log: self, type: type, args[0], args[1], args[2], args[3])
+        case 5:
+            os_log(message, log: self, type: type, args[0], args[1], args[2], args[3], args[4])
+        default:
+            os_log(message, log: self, type: type, args)
+        }
+    }
+}

+ 160 - 0
Dependencies/G7SensorKit/G7SensorKitTests/G7GlucoseMessageTests.swift

@@ -0,0 +1,160 @@
+//
+//  G7GlucoseMessageTests.swift
+//  CGMBLEKitTests
+//
+//  Created by Pete Schwamb on 9/25/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import XCTest
+@testable import G7SensorKit
+
+final class G7GlucoseMessageTests: XCTestCase {
+
+    func testG7MessageData() {
+        let data = Data(hexadecimalString: "4e00c35501002601000106008a00060187000f")!
+        let message = G7GlucoseMessage(data: data)!
+
+        XCTAssertEqual(138, message.glucose)
+        XCTAssertEqual(87485, message.glucoseTimestamp)
+        XCTAssert(!message.glucoseIsDisplayOnly)
+    }
+
+    func testG7MessageDataWithCalibration() {
+        let data = Data(hexadecimalString: "4e000ec10d00c00b00010000680006fe63001f")!
+        let message = G7GlucoseMessage(data: data)!
+
+        XCTAssertEqual(104, message.glucose)
+        XCTAssertEqual(901390, message.glucoseTimestamp)
+        XCTAssert(message.glucoseIsDisplayOnly)
+    }
+
+    func testG7MessageDataLifecycle() {
+        let startupMessagesHex = [
+            "4e00b6000000010000006600ffff017fffff00", // 0
+            "4e00cd000000030000010500ffff027fffff01", // 1
+            "4e00f90100000400000105009100027effff02", // 2
+            "4e00250300000500000105007d00027effff02", // 3
+            "4e0051040000060000010500650002dfffff02", // 4
+            "4e007d0500000700000105004e0002e7ffff02", // 5
+            "4e00ab060000080000010700540006f5ffff0e", // 6
+            "4e00d507000009000001050061000601ffff0e", // 7
+            "4e004d440e00d40b0001d46b650018036a000e", // 8
+        ]
+        let messages = startupMessagesHex.map { G7GlucoseMessage(data: Data(hexadecimalString: $0)!)! }
+
+        XCTAssertNil(messages[0].glucose)
+        XCTAssertNil(messages[1].glucose)
+        XCTAssertEqual(145, messages[2].glucose)
+
+        XCTAssertEqual(.known(.stopped), messages[0].algorithmState)
+        XCTAssertEqual(.known(.warmup), messages[1].algorithmState)
+        XCTAssertEqual(.known(.warmup), messages[2].algorithmState)
+        XCTAssertEqual(.known(.warmup), messages[3].algorithmState)
+        XCTAssertEqual(.known(.warmup), messages[4].algorithmState)
+        XCTAssertEqual(.known(.warmup), messages[5].algorithmState)
+        XCTAssertEqual(.known(.ok), messages[6].algorithmState)
+        XCTAssertEqual(.known(.ok), messages[7].algorithmState)
+        XCTAssertEqual(.known(.expired), messages[8].algorithmState)
+
+        XCTAssertEqual(1, messages[0].sequence)
+        XCTAssertEqual(3, messages[1].sequence)
+        XCTAssertEqual(4, messages[2].sequence)
+        XCTAssertEqual(5, messages[3].sequence)
+        XCTAssertEqual(6, messages[4].sequence)
+        XCTAssertEqual(7, messages[5].sequence)
+        XCTAssertEqual(8, messages[6].sequence)
+        XCTAssertEqual(9, messages[7].sequence)
+        XCTAssertEqual(3028, messages[8].sequence)
+
+
+        XCTAssertEqual(80, messages[0].glucoseTimestamp)
+        XCTAssertEqual(200, messages[1].glucoseTimestamp)
+        XCTAssertEqual(500, messages[2].glucoseTimestamp)
+        XCTAssertEqual(800, messages[3].glucoseTimestamp)
+        XCTAssertEqual(1100, messages[4].glucoseTimestamp)
+        XCTAssertEqual(1400, messages[5].glucoseTimestamp)
+        XCTAssertEqual(1700, messages[6].glucoseTimestamp)
+        XCTAssertEqual(2000, messages[7].glucoseTimestamp)
+        XCTAssertEqual(934777, messages[8].glucoseTimestamp)
+    }
+
+    func testG7MessageDataDetails() {
+        //  0  1  2 3 4 5  6 7  8  9 10 11 1213 14 15 16 17 18
+        //       TTTTTTTT SQSQ       AG    BGBG SS          C
+        // 4e 00 a89c0000 8800 00 01 04 00 8d00 06 03 8a 00 0f
+
+        //2022-09-12 09:18:06.821253 readEGV(txTime=40104,seq=136,session=1,age=4,value=141,pred=138,algo=6,subAlgo=15,rate=3)
+        let data = Data(hexadecimalString: "4e00a89c00008800000104008d0006038a000f")!
+        let message = G7GlucoseMessage(data: data)!
+
+        XCTAssertEqual(141, message.glucose)
+        XCTAssertEqual(40100, message.glucoseTimestamp)
+        XCTAssertEqual(136, message.sequence)
+        XCTAssertEqual(4, message.age)
+        XCTAssertEqual(138, message.predicted)
+        XCTAssertEqual(0.3, message.trend)
+        XCTAssertEqual(.known(.ok), message.algorithmState)
+
+        XCTAssert(!message.glucoseIsDisplayOnly)
+    }
+
+    func testG7MessageDataNegativeRate() {
+        let data = Data(hexadecimalString: "4e00c6cc0d00ca0b00010500610006fe5b000f")!
+        let message = G7GlucoseMessage(data: data)!
+        XCTAssertEqual(-0.2, message.trend)
+    }
+
+    func testG7MessageDataMissingRate() {
+        let data = Data(hexadecimalString: "4e00c6cc0d00ca0b000105006100067f5b000f")!
+        let message = G7GlucoseMessage(data: data)!
+        XCTAssertNil(message.trend)
+    }
+}
+
+
+
+// Activated 2022-09-24 17:39:31 +0000
+
+//                                0  1  2 3 4 5  6  7  8  9 10 11 1213 14 15 16 17 18
+//                                     TTTTTTTT                   BGBG SS          C
+// 2022-09-24 17:47:23           4e 00 ea010000 04 00 00 01 05 00 6c00 02 7e ff ff 02
+// 2022-09-24 17:52:27           4e 00 1a030000 05 00 00 01 09 00 5300 02 7e ff ff 02
+// 2022-09-24 17:57:25           4e 00 44040000 06 00 00 01 07 00 4500 02 e7 ff ff 02
+// 2022-09-24 18:02:27           4e 00 73050000 07 00 00 01 0a 00 3a00 02 f4 ff ff 02
+// 2022-09-24 18:07:21           4e 00 99060000 08 00 00 01 04 00 4800 06 02 ff ff 0e
+// 2022-09-24 18:22:26           4e 00 220a0000 0b 00 00 01 09 00 4f00 06 fe ff ff 0e
+
+// 2022-09-24 18:27:22           4e 00 4a0b0000 0c 00 00 01 05 00 4900 06 f9 37 00 0f
+// 2022-09-24 18:27:23  (txInfo: 7815(379013053518), SW13354, 73 mg⁠/⁠dL, Predictive: 55 mg⁠/⁠dL, Rate: -0.7 @ 2022-09-24T13:27:17-05:00, sessionInfo: Optional(Start: 2022-09-24T12:40:17-05:00, End: 2022-10-05T00:40:17-05:00)), isTimeCertain: true
+
+// 2022-09-24 22:32:24           4e 00 b7440000 3d 00 00 01 06 00 7f00 06 03 83 00 0f
+//2022-09-24 17:32:27.248461 -0500    info    388    <Missing Description>    Dexcom G7    DisplayState: displayingGlucose(txInfo: 7815(379013053518), SW13354, 127 mg⁠/⁠dL, Predictive: 131 mg⁠/⁠dL, Rate: 0.3 @ 2022-09-24T17:32:18-05:00, sessionInfo: Optional(Start: 2022-09-24T12:40:18-05:00, End: 2022-10-05T00:40:18-05:00)), isTimeCertain: true
+
+
+
+
+//                                            0  1  2 3 4 5  6  7  8  9 10 11 1213 14 15 16 17 18
+//                                                 TTTTTTTT                   BGBG SS          C
+// 2022-10-04 23:27:39  106 timestamp:902888 4e 00 e8c60d00 c5 0b 00 01 03 00 6a00 06 01 6a 00 0f
+// 2022-10-04 23:32:40  101 timestamp:903189 4e 00 15c80d00 c6 0b 00 01 04 00 6500 06 fe 61 00 0f
+// 2022-10-04 23:37:39  98  timestamp:903488 4e 00 40c90d00 c7 0b 00 01 03 00 6200 06 fc 5e 00 0f
+// 2022-10-04 23:42:39  100 timestamp:903789 4e 00 6dca0d00 c8 0b 00 01 04 00 6400 06 ff 5e 00 0f
+// 2022-10-04 23:47:41  97  timestamp:904090 4e 00 9acb0d00 c9 0b 00 01 05 00 6100 06 fd 5c 00 0f
+
+// 2022-10-04 23:52:41  97  timestamp:904390 4e 00 c6cc0d00 ca 0b 00 01 05 00 6100 06 fe 5b 00 0f
+
+// 2022-10-04 23:52:41.100991 -0500    info    289    <Missing Description>    Dexcom G7    calBounds(signature=65,lastBG=100,lastBGTime=901259,processing=completeHigh,permitted=true,lastDisplay=phone,lastProcessingTime=901565)
+// 2022-10-04 23:52:41.260740 -0500    info    289    <Missing Description>    Dexcom G7    DisplayState: displayingGlucose(txInfo: 7815(379013053518), SW13354, 97 mg⁠/⁠dL, Predictive: 91 mg⁠/⁠dL, Rate: -0.2 @ 2022-10-04T23:52:36-05:00, sessionInfo: Optional(Start: 2022-09-24T12:40:36-05:00, End: 2022-10-05T00:40:36-05:00)), isTimeCertain: true
+//
+
+// 2022-10-04 23:57:52  98  timestamp:904701 4e 00 fdcd0d00 cb 0b 00 01 10 00 6200 06 00 5c 00 0f
+// 2022-10-05 00:02:40  96  timestamp:904989 4e 00 1dcf0d00 cc 0b 00 01 04 00 6000 06 fe 5b 00 0f
+// 2022-10-05 00:07:39  95  timestamp:905288 4e 00 48d00d00 cd 0b 00 01 03 00 5f00 06 fe 5a 00 0f
+// 2022-10-05 08:17:43  101 timestamp:934692 4e 00 24430e00 d4 0b 00 01 ab 6a 6500 18 03 6a 00 0e
+// 2022-10-05 08:22:40  101 timestamp:934989 4e 00 4d440e00 d4 0b 00 01 d4 6b 6500 18 03 6a 00 0e
+// 2022-10-05 08:27:40  101 timestamp:935289 4e 00 79450e00 d4 0b 00 01 00 6d 6500 18 03 6a 00 0e
+// 2022-10-05 08:32:42  101 timestamp:935590 4e 00 a6460e00 d4 0b 00 01 2d 6e 6500 18 03 6a 00 0e
+// 2022-10-05 08:37:42  101 timestamp:935890 4e 00 d2470e00 d4 0b 00 01 59 6f 6500 18 03 6a 00 0e
+// 2022-10-05 08:42:39  101 timestamp:936188 4e 00 fc480e00 d4 0b 00 01 83 70 6500 18 03 6a 00 0e
+// 2022-10-05 08:47:39  101 timestamp:936488 4e 00 284a0e00 d4 0b 00 01 af 71 6500 18 03 6a 00 0e

+ 36 - 0
Dependencies/G7SensorKit/G7SensorKitTests/G7SensorKitTests.swift

@@ -0,0 +1,36 @@
+//
+//  G7SensorKitTests.swift
+//  G7SensorKitTests
+//
+//  Created by Pete Schwamb on 11/11/22.
+//
+
+import XCTest
+@testable import G7SensorKit
+
+class G7SensorKitTests: XCTestCase {
+
+    override func setUpWithError() throws {
+        // Put setup code here. This method is called before the invocation of each test method in the class.
+    }
+
+    override func tearDownWithError() throws {
+        // Put teardown code here. This method is called after the invocation of each test method in the class.
+    }
+
+    func testExample() throws {
+        // This is an example of a functional test case.
+        // Use XCTAssert and related functions to verify your tests produce the correct results.
+        // Any test you write for XCTest can be annotated as throws and async.
+        // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.
+        // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.
+    }
+
+    func testPerformanceExample() throws {
+        // This is an example of a performance test case.
+        self.measure {
+            // Put the code you want to measure the time of here.
+        }
+    }
+
+}

+ 6 - 0
Dependencies/G7SensorKit/G7SensorKitUI/Assets.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 12 - 0
Dependencies/G7SensorKit/G7SensorKitUI/Assets.xcassets/g7.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "g7.png",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Dependencies/G7SensorKit/G7SensorKitUI/Assets.xcassets/g7.imageset/g7.png


+ 20 - 0
Dependencies/G7SensorKit/G7SensorKitUI/Extensions/Image.swift

@@ -0,0 +1,20 @@
+//
+//  Image.swift
+//  CGMBLEKitUI
+//
+//  Created by Pete Schwamb on 9/24/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+import SwiftUI
+
+extension Image {
+    init(frameworkImage name: String, decorative: Bool = false) {
+        if decorative {
+            self.init(decorative: name, bundle: FrameworkBundle.main)
+        } else {
+            self.init(name, bundle: FrameworkBundle.main)
+        }
+    }
+}

+ 139 - 0
Dependencies/G7SensorKit/G7SensorKitUI/G7CGMManager/G7CGMManager+UI.swift

@@ -0,0 +1,139 @@
+//
+//  G7CGMManager+UI.swift
+//  CGMBLEKitUI
+//
+//  Created by Pete Schwamb on 9/24/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+import G7SensorKit
+import LoopKitUI
+import LoopKit
+
+public struct G7DeviceStatusHighlight: DeviceStatusHighlight, Equatable {
+    public let localizedMessage: String
+    public let imageName: String
+    public let state: DeviceStatusHighlightState
+    init(localizedMessage: String, imageName: String, state: DeviceStatusHighlightState) {
+        self.localizedMessage = localizedMessage
+        self.imageName = imageName
+        self.state = state
+    }
+}
+
+extension G7CGMManager: CGMManagerUI {
+    public static var onboardingImage: UIImage? {
+        return nil
+    }
+
+    public static func setupViewController(bluetoothProvider: BluetoothProvider, displayGlucoseUnitObservable: DisplayGlucoseUnitObservable, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool) -> SetupUIResult<CGMManagerViewController, CGMManagerUI> {
+
+        let vc = G7UICoordinator(colorPalette: colorPalette, displayGlucoseUnitObservable: displayGlucoseUnitObservable, allowDebugFeatures: allowDebugFeatures)
+        return .userInteractionRequired(vc)
+    }
+
+    public func settingsViewController(bluetoothProvider: BluetoothProvider, displayGlucoseUnitObservable: DisplayGlucoseUnitObservable, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool) ->CGMManagerViewController {
+
+        return G7UICoordinator(cgmManager: self, colorPalette: colorPalette, displayGlucoseUnitObservable: displayGlucoseUnitObservable, allowDebugFeatures: allowDebugFeatures)
+    }
+
+    public var smallImage: UIImage? {
+        UIImage(named: "g7", in: Bundle(for: G7SettingsViewModel.self), compatibleWith: nil)!
+    }
+
+    // TODO Placeholder.
+    public var cgmStatusHighlight: DeviceStatusHighlight? {
+
+        if lifecycleState == .searching {
+            return G7DeviceStatusHighlight(
+                localizedMessage: LocalizedString("Searching for\nSensor", comment: "G7 Status highlight text for searching for sensor"),
+                imageName: "dot.radiowaves.left.and.right",
+                state: .normalCGM)
+        }
+
+        if lifecycleState == .expired {
+            return G7DeviceStatusHighlight(
+                localizedMessage: LocalizedString("Sensor\nExpired", comment: "G7 Status highlight text for sensor expired"),
+                imageName: "clock",
+                state: .normalCGM)
+        }
+
+        if lifecycleState == .failed {
+            return G7DeviceStatusHighlight(
+                localizedMessage: LocalizedString("Sensor\nFailed", comment: "G7 Status highlight text for sensor failed"),
+                imageName: "exclamationmark.circle.fill",
+                state: .critical)
+        }
+
+        if let latestReadingReceivedAt = state.latestReadingTimestamp, latestReadingReceivedAt.timeIntervalSinceNow < -.minutes(15) {
+            return G7DeviceStatusHighlight(
+                localizedMessage: LocalizedString("Signal\nLoss", comment: "G7 Status highlight text for signal loss"),
+                imageName: "exclamationmark.circle.fill",
+                state: .warning)
+        }
+
+        if let latestReading = latestReading, latestReading.algorithmState.isInSensorError {
+            return G7DeviceStatusHighlight(
+                localizedMessage: LocalizedString("Sensor\nIssue", comment: "G7 Status highlight text for sensor error"),
+                imageName: "exclamationmark.circle.fill",
+                state: .warning)
+        }
+
+        if lifecycleState == .warmup {
+            return G7DeviceStatusHighlight(
+                localizedMessage: LocalizedString("Sensor\nWarmup", comment: "G7 Status highlight text for sensor warmup"),
+                imageName: "clock",
+                state: .normalCGM)
+        }
+        return nil
+    }
+
+    // TODO Placeholder.
+    public var cgmStatusBadge: DeviceStatusBadge? {
+        if lifecycleState == .gracePeriod {
+            return G7DeviceStatusBadge(image: UIImage(systemName: "clock"), state: .critical)
+        }
+        return nil
+    }
+
+    // TODO Placeholder.
+    public var cgmLifecycleProgress: DeviceLifecycleProgress? {
+        switch lifecycleState {
+        case .ok:
+            // show remaining lifetime, if < 24 hours
+            guard let expiration = sensorExpiresAt else {
+                return nil
+            }
+            let remaining = max(0, expiration.timeIntervalSinceNow)
+
+            if remaining < .hours(24) {
+                return G7LifecycleProgress(percentComplete: 1-(remaining/G7Sensor.lifetime), progressState: .warning)
+            }
+            return nil
+        case .gracePeriod:
+            guard let endTime = sensorEndsAt else {
+                return nil
+            }
+            let remaining = max(0, endTime.timeIntervalSinceNow)
+            return G7LifecycleProgress(percentComplete: 1-(remaining/G7Sensor.gracePeriod), progressState: .critical)
+        case .expired:
+            return G7LifecycleProgress(percentComplete: 1, progressState: .critical)
+        default:
+            return nil
+        }
+    }
+}
+
+struct G7DeviceStatusBadge: DeviceStatusBadge {
+    var image: UIImage?
+
+    var state: LoopKitUI.DeviceStatusBadgeState
+}
+
+
+struct G7LifecycleProgress: DeviceLifecycleProgress {
+    var percentComplete: Double
+
+    var progressState: LoopKit.DeviceLifecycleProgressState
+}

+ 91 - 0
Dependencies/G7SensorKit/G7SensorKitUI/G7CGMManager/G7UICoordinator.swift

@@ -0,0 +1,91 @@
+//
+//  G7UICoordinator.swift
+//  CGMBLEKitUI
+//
+//  Created by Pete Schwamb on 9/24/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+import LoopKitUI
+import G7SensorKit
+
+class G7UICoordinator: UINavigationController, CGMManagerOnboarding, CompletionNotifying, UINavigationControllerDelegate {
+    var cgmManagerOnboardingDelegate: LoopKitUI.CGMManagerOnboardingDelegate?
+    var completionDelegate: LoopKitUI.CompletionDelegate?
+    var cgmManager: G7CGMManager?
+    var displayGlucoseUnitObservable: DisplayGlucoseUnitObservable
+
+    var colorPalette: LoopUIColorPalette
+
+    init(cgmManager: G7CGMManager? = nil,
+         colorPalette: LoopUIColorPalette,
+         displayGlucoseUnitObservable: DisplayGlucoseUnitObservable,
+         allowDebugFeatures: Bool)
+    {
+        self.cgmManager = cgmManager
+        self.colorPalette = colorPalette
+        self.displayGlucoseUnitObservable = displayGlucoseUnitObservable
+        super.init(navigationBarClass: UINavigationBar.self, toolbarClass: UIToolbar.self)
+    }
+
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+
+        delegate = self
+
+        navigationBar.prefersLargeTitles = true // Ensure nav bar text is displayed correctly
+
+        let viewController = initialView()
+        setViewControllers([viewController], animated: false)
+    }
+
+    private func initialView() -> UIViewController {
+        if cgmManager == nil {
+            let rootView = G7StartupView(
+                didContinue: { [weak self] in self?.completeSetup() },
+                didCancel: { [weak self] in
+                    if let self = self {
+                        self.completionDelegate?.completionNotifyingDidComplete(self)
+                    }
+                }
+            )
+            let hostingController = DismissibleHostingController(rootView: rootView, colorPalette: colorPalette)
+            hostingController.navigationItem.largeTitleDisplayMode = .never
+            hostingController.title = nil
+            return hostingController
+        } else {
+            let view = G7SettingsView(
+                didFinish: { [weak self] in
+                    if let self = self {
+                        self.completionDelegate?.completionNotifyingDidComplete(self)
+                    }
+                },
+                deleteCGM: { [ weak self] in
+                    self?.cgmManager?.notifyDelegateOfDeletion {
+                        DispatchQueue.main.async {
+                            if let self = self {
+                                self.completionDelegate?.completionNotifyingDidComplete(self)
+                                self.dismiss(animated: true)
+                            }
+                        }
+                    }
+                },
+                viewModel: G7SettingsViewModel(cgmManager: cgmManager!, displayGlucoseUnitObservable: displayGlucoseUnitObservable)
+            )
+            let hostingController = DismissibleHostingController(rootView: view, colorPalette: colorPalette)
+            return hostingController
+        }
+    }
+
+    func completeSetup() {
+        cgmManager = G7CGMManager()
+        cgmManagerOnboardingDelegate?.cgmManagerOnboarding(didCreateCGMManager: cgmManager!)
+        cgmManagerOnboardingDelegate?.cgmManagerOnboarding(didOnboardCGMManager: cgmManager!)
+        completionDelegate?.completionNotifyingDidComplete(self)
+    }
+}

+ 18 - 0
Dependencies/G7SensorKit/G7SensorKitUI/G7SensorKitUI.h

@@ -0,0 +1,18 @@
+//
+//  G7SensorKitUI.h
+//  G7SensorKitUI
+//
+//  Created by Pete Schwamb on 11/11/22.
+//
+
+#import <Foundation/Foundation.h>
+
+//! Project version number for G7SensorKitUI.
+FOUNDATION_EXPORT double G7SensorKitUIVersionNumber;
+
+//! Project version string for G7SensorKitUI.
+FOUNDATION_EXPORT const unsigned char G7SensorKitUIVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <G7SensorKitUI/PublicHeader.h>
+
+

+ 50 - 0
Dependencies/G7SensorKit/G7SensorKitUI/OSLog.swift

@@ -0,0 +1,50 @@
+//
+//  OSLog.swift
+//  Loop
+//
+//  Copyright © 2017 LoopKit Authors. All rights reserved.
+//
+
+import os.log
+
+
+extension OSLog {
+    convenience init(category: String) {
+        self.init(subsystem: "org.loopkit.G7SensorKitUI", category: category)
+    }
+
+    func debug(_ message: StaticString, _ args: CVarArg...) {
+        log(message, type: .debug, args)
+    }
+
+    func info(_ message: StaticString, _ args: CVarArg...) {
+        log(message, type: .info, args)
+    }
+
+    func `default`(_ message: StaticString, _ args: CVarArg...) {
+        log(message, type: .default, args)
+    }
+
+    func error(_ message: StaticString, _ args: CVarArg...) {
+        log(message, type: .error, args)
+    }
+
+    private func log(_ message: StaticString, type: OSLogType, _ args: [CVarArg]) {
+        switch args.count {
+        case 0:
+            os_log(message, log: self, type: type)
+        case 1:
+            os_log(message, log: self, type: type, args[0])
+        case 2:
+            os_log(message, log: self, type: type, args[0], args[1])
+        case 3:
+            os_log(message, log: self, type: type, args[0], args[1], args[2])
+        case 4:
+            os_log(message, log: self, type: type, args[0], args[1], args[2], args[3])
+        case 5:
+            os_log(message, log: self, type: type, args[0], args[1], args[2], args[3], args[4])
+        default:
+            os_log(message, log: self, type: type, args)
+        }
+    }
+}

+ 43 - 0
Dependencies/G7SensorKit/G7SensorKitUI/Views/G7ProgressBarState.swift

@@ -0,0 +1,43 @@
+//
+//  G7ProgressBarState.swift
+//  G7SensorKitUI
+//
+//  Created by Pete Schwamb on 11/22/22.
+//
+
+import Foundation
+
+enum G7ProgressBarState {
+    case warmupProgress
+    case lifetimeRemaining
+    case gracePeriodRemaining
+    case sensorFailed
+    case sensorExpired
+    case searchingForSensor
+
+    var label: String {
+        switch self {
+        case .searchingForSensor:
+            return LocalizedString("Searching for sensor", comment: "G7 Progress bar label when searching for sensor")
+        case .sensorExpired:
+            return LocalizedString("Sensor expired", comment: "G7 Progress bar label when sensor expired")
+        case .warmupProgress:
+            return LocalizedString("Warmup completes", comment: "G7 Progress bar label when sensor in warmup")
+        case .sensorFailed:
+            return LocalizedString("Sensor failed", comment: "G7 Progress bar label when sensor failed")
+        case .lifetimeRemaining:
+            return LocalizedString("Sensor expires", comment: "G7 Progress bar label when sensor lifetime progress showing")
+        case .gracePeriodRemaining:
+            return LocalizedString("Grace period remaining", comment: "G7 Progress bar label when sensor grace period progress showing")
+        }
+    }
+
+    var labelColor: ColorStyle {
+        switch self {
+        case .sensorExpired:
+            return .critical
+        default:
+            return .normal
+        }
+    }
+}

+ 208 - 0
Dependencies/G7SensorKit/G7SensorKitUI/Views/G7SettingsView.swift

@@ -0,0 +1,208 @@
+//
+//  G7SettingsView.swift
+//  CGMBLEKitUI
+//
+//  Created by Pete Schwamb on 9/25/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+import SwiftUI
+import G7SensorKit
+import LoopKitUI
+
+struct G7SettingsView: View {
+
+    private var durationFormatter: RelativeDateTimeFormatter = {
+        let formatter = RelativeDateTimeFormatter()
+        formatter.unitsStyle = .full
+        return formatter
+    }()
+
+    @Environment(\.guidanceColors) private var guidanceColors
+    @Environment(\.glucoseTintColor) private var glucoseTintColor
+
+    var didFinish: (() -> Void)
+    var deleteCGM: (() -> Void)
+    @ObservedObject var viewModel: G7SettingsViewModel
+
+    @State private var showingDeletionSheet = false
+
+    init(didFinish: @escaping () -> Void, deleteCGM: @escaping () -> Void, viewModel: G7SettingsViewModel) {
+        self.didFinish = didFinish
+        self.deleteCGM = deleteCGM
+        self.viewModel = viewModel
+    }
+
+    private var timeFormatter: DateFormatter = {
+        let formatter = DateFormatter()
+
+        formatter.dateStyle = .short
+        formatter.timeStyle = .short
+
+        return formatter
+    }()
+
+    var body: some View {
+        List {
+            Section() {
+                VStack {
+                    headerImage
+                    progressBar
+                }
+            }
+            if let activatedAt = viewModel.activatedAt {
+                HStack {
+                    Text(LocalizedString("Sensor Start", comment: "title for g7 settings row showing sensor start time"))
+                    Spacer()
+                    Text(timeFormatter.string(from: activatedAt))
+                        .foregroundColor(.secondary)
+                }
+                HStack {
+                    Text(LocalizedString("Sensor Expiration", comment: "title for g7 settings row showing sensor expiration time"))
+                    Spacer()
+                    Text(timeFormatter.string(from: activatedAt.addingTimeInterval(G7Sensor.lifetime)))
+                        .foregroundColor(.secondary)
+                }
+                HStack {
+                    Text(LocalizedString("Grace Period End", comment: "title for g7 settings row showing sensor grace period end time"))
+                    Spacer()
+                    Text(timeFormatter.string(from: activatedAt.addingTimeInterval(G7Sensor.lifetime + G7Sensor.gracePeriod)))
+                        .foregroundColor(.secondary)
+                }
+            }
+
+            Section("Last Reading") {
+                LabeledValueView(label: LocalizedString("Glucose", comment: "Field label"),
+                                 value: viewModel.lastGlucoseString)
+                LabeledDateView(label: LocalizedString("Time", comment: "Field label"),
+                                date: viewModel.latestReadingTimestamp,
+                                dateFormatter: viewModel.dateFormatter)
+                LabeledValueView(label: LocalizedString("Trend", comment: "Field label"),
+                                 value: viewModel.lastGlucoseTrendString)
+            }
+
+            Section("Bluetooth") {
+                if let name = viewModel.sensorName {
+                    HStack {
+                        Text(LocalizedString("Name", comment: "title for g7 settings row showing BLE Name"))
+                        Spacer()
+                        Text(name)
+                            .foregroundColor(.secondary)
+                    }
+                }
+                if viewModel.scanning {
+                    HStack {
+                        Text(LocalizedString("Scanning", comment: "title for g7 settings connection status when scanning"))
+                        Spacer()
+                        SwiftUI.ProgressView()
+                    }
+                } else {
+                    if viewModel.connected {
+                        Text(LocalizedString("Connected", comment: "title for g7 settings connection status when connected"))
+                    } else {
+                        HStack {
+                            Text(LocalizedString("Connecting", comment: "title for g7 settings connection status when connecting"))
+                            Spacer()
+                            SwiftUI.ProgressView()
+                        }
+                    }
+                }
+                if let lastConnect = viewModel.lastConnect {
+                    LabeledValueView(label: LocalizedString("Last Connect", comment: "title for g7 settings row showing sensor last connect time"),
+                                     value: timeFormatter.string(from: lastConnect))
+                }
+            }
+
+            Section("Configuration") {
+                HStack {
+                    Toggle(LocalizedString("Upload Readings", comment: "title for g7 config settings to upload readings"), isOn: $viewModel.uploadReadings)
+                }
+            }
+
+            Section () {
+                if !self.viewModel.scanning {
+                    Button("Scan for new sensor", action: {
+                        self.viewModel.scanForNewSensor()
+                    })
+                }
+
+                deleteCGMButton
+            }
+        }
+        .insetGroupedListStyle()
+        .navigationBarItems(trailing: doneButton)
+        .navigationBarTitle(LocalizedString("Dexcom G7", comment: "Navigation bar title for G7SettingsView"))
+    }
+
+    private var deleteCGMButton: some View {
+        Button(action: {
+            showingDeletionSheet = true
+        }, label: {
+            Text(LocalizedString("Delete CGM", comment: "Button label for removing CGM"))
+                .foregroundColor(.red)
+        }).actionSheet(isPresented: $showingDeletionSheet) {
+            ActionSheet(
+                title: Text("Are you sure you want to delete this CGM?"),
+                buttons: [
+                    .destructive(Text("Delete CGM")) {
+                        self.deleteCGM()
+                    },
+                    .cancel(),
+                ]
+            )
+        }
+    }
+
+    private var headerImage: some View {
+        VStack(alignment: .center) {
+            Image(frameworkImage: "g7")
+                .resizable()
+                .aspectRatio(contentMode: ContentMode.fit)
+                .frame(height: 150)
+                .padding(.horizontal)
+        }.frame(maxWidth: .infinity)
+    }
+
+    @ViewBuilder
+    private var progressBar: some View {
+        VStack(alignment: .leading, spacing: 4) {
+            HStack(alignment: .firstTextBaseline) {
+                Text(viewModel.progressBarState.label)
+                    .font(.system(size: 17))
+                    .foregroundColor(color(for: viewModel.progressBarState.labelColor))
+
+                Spacer()
+                if let referenceDate = viewModel.progressReferenceDate {
+                    Text(durationFormatter.localizedString(for: referenceDate, relativeTo: Date()))
+                        .foregroundColor(.secondary)
+                }
+            }
+            ProgressView(value: viewModel.progressBarProgress)
+                .accentColor(color(for: viewModel.progressBarColorStyle))
+        }
+    }
+
+    private func color(for colorStyle: ColorStyle) -> Color {
+        switch colorStyle {
+        case .glucose:
+            return glucoseTintColor
+        case .warning:
+            return guidanceColors.warning
+        case .critical:
+            return guidanceColors.critical
+        case .normal:
+            return .primary
+        case .dimmed:
+            return .secondary
+        }
+    }
+
+
+    private var doneButton: some View {
+        Button("Done", action: {
+            self.didFinish()
+        })
+    }
+
+}

+ 218 - 0
Dependencies/G7SensorKit/G7SensorKitUI/Views/G7SettingsViewModel.swift

@@ -0,0 +1,218 @@
+//
+//  G7SettingsViewModel.swift
+//  CGMBLEKitUI
+//
+//  Created by Pete Schwamb on 10/4/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+import G7SensorKit
+import LoopKit
+import LoopKitUI
+import HealthKit
+
+public enum ColorStyle {
+    case glucose, warning, critical, normal, dimmed
+}
+
+class G7SettingsViewModel: ObservableObject {
+    @Published private(set) var scanning: Bool = false
+    @Published private(set) var connected: Bool = false
+    @Published private(set) var sensorName: String?
+    @Published private(set) var activatedAt: Date?
+    @Published private(set) var lastConnect: Date?
+    @Published private(set) var latestReadingTimestamp: Date?
+    @Published var uploadReadings: Bool = false {
+        didSet {
+            cgmManager.uploadReadings = uploadReadings
+        }
+    }
+    
+    var displayGlucoseUnitObservable: DisplayGlucoseUnitObservable
+
+    private var lastReading: G7GlucoseMessage?
+
+    lazy var dateFormatter: DateFormatter = {
+        let formatter = DateFormatter()
+        formatter.dateStyle = .short
+        formatter.timeStyle = .short
+        return formatter
+    }()
+
+    private lazy var glucoseFormatter: QuantityFormatter = {
+        let formatter = QuantityFormatter()
+        formatter.setPreferredNumberFormatter(for: displayGlucoseUnitObservable.displayGlucoseUnit)
+        formatter.numberFormatter.notANumberSymbol = "–"
+        return formatter
+    }()
+
+    private let quantityFormatter = QuantityFormatter()
+
+    private var cgmManager: G7CGMManager
+
+    var progressBarState: G7ProgressBarState {
+        switch cgmManager.lifecycleState {
+        case .searching:
+            return .searchingForSensor
+        case .ok:
+            return .lifetimeRemaining
+        case .warmup:
+            return .warmupProgress
+        case .failed:
+            return .sensorFailed
+        case .gracePeriod:
+            return .gracePeriodRemaining
+        case .expired:
+            return .sensorExpired
+        }
+    }
+
+    init(cgmManager: G7CGMManager, displayGlucoseUnitObservable: DisplayGlucoseUnitObservable) {
+        self.cgmManager = cgmManager
+        self.displayGlucoseUnitObservable = displayGlucoseUnitObservable
+        updateValues()
+
+        self.cgmManager.addStateObserver(self, queue: DispatchQueue.main)
+    }
+
+    func updateValues() {
+        scanning = cgmManager.isScanning
+        sensorName = cgmManager.sensorName
+        activatedAt = cgmManager.sensorActivatedAt
+        connected = cgmManager.isConnected
+        lastConnect = cgmManager.lastConnect
+        lastReading = cgmManager.latestReading
+        latestReadingTimestamp = cgmManager.latestReadingTimestamp
+        uploadReadings = cgmManager.state.uploadReadings
+    }
+
+    var progressBarColorStyle: ColorStyle {
+        switch progressBarState {
+        case .warmupProgress:
+            return .glucose
+        case .searchingForSensor:
+            return .dimmed
+        case .sensorExpired, .sensorFailed:
+            return .critical
+        case .lifetimeRemaining:
+            guard let remaining = progressValue else {
+                return .dimmed
+            }
+            if remaining > .hours(24) {
+                return .glucose
+            } else {
+                return .warning
+            }
+        case .gracePeriodRemaining:
+            return .critical
+        }
+    }
+
+    var progressBarProgress: Double {
+        switch progressBarState {
+        case .searchingForSensor:
+            return 0
+        case .warmupProgress:
+            guard let value = progressValue, value > 0 else {
+                return 0
+            }
+            return 1 - value / G7Sensor.warmupDuration
+        case .lifetimeRemaining:
+            guard let value = progressValue, value > 0 else {
+                return 0
+            }
+            return 1 - value / G7Sensor.lifetime
+        case .gracePeriodRemaining:
+            guard let value = progressValue, value > 0 else {
+                return 0
+            }
+            return 1 - value / G7Sensor.gracePeriod
+        case .sensorExpired, .sensorFailed:
+            return 1
+        }
+    }
+
+    var progressReferenceDate: Date? {
+        switch progressBarState {
+        case .searchingForSensor:
+            return nil
+        case .sensorExpired, .gracePeriodRemaining:
+            return cgmManager.sensorEndsAt
+        case .warmupProgress:
+            return cgmManager.sensorFinishesWarmupAt
+        case .lifetimeRemaining:
+            return cgmManager.sensorExpiresAt
+        case .sensorFailed:
+            return nil
+        }
+    }
+
+    var progressValue: TimeInterval? {
+        switch progressBarState {
+        case .sensorExpired, .sensorFailed, .searchingForSensor:
+            guard let sensorEndsAt = cgmManager.sensorEndsAt else {
+                return nil
+            }
+            return sensorEndsAt.timeIntervalSinceNow
+        case .warmupProgress:
+            guard let warmupFinishedAt = cgmManager.sensorFinishesWarmupAt else {
+                return nil
+            }
+            return max(0, warmupFinishedAt.timeIntervalSinceNow)
+        case .lifetimeRemaining:
+            guard let expiration = cgmManager.sensorExpiresAt else {
+                return nil
+            }
+            return max(0, expiration.timeIntervalSinceNow)
+        case .gracePeriodRemaining:
+            guard let sensorEndsAt = cgmManager.sensorEndsAt else {
+                return nil
+            }
+            return max(0, sensorEndsAt.timeIntervalSinceNow)
+        }
+    }
+
+    func scanForNewSensor() {
+        cgmManager.scanForNewSensor()
+    }
+
+    var lastGlucoseString: String {
+        guard let lastReading = lastReading, lastReading.hasReliableGlucose, let quantity = lastReading.glucoseQuantity else {
+            return LocalizedString("– – –", comment: "No glucose value representation (3 dashes for mg/dL)")
+        }
+
+        switch lastReading.glucoseRangeCategory {
+        case .some(.belowRange):
+            return LocalizedString("LOW", comment: "String displayed instead of a glucose value below the CGM range")
+        case .some(.aboveRange):
+            return LocalizedString("HIGH", comment: "String displayed instead of a glucose value above the CGM range")
+        default:
+            quantityFormatter.setPreferredNumberFormatter(for: displayGlucoseUnitObservable.displayGlucoseUnit)
+            let valueStr = quantityFormatter.string(from: quantity, for: displayGlucoseUnitObservable.displayGlucoseUnit, includeUnit: false) ?? ""
+            return String(format: "%@ %@", valueStr, displayGlucoseUnitObservable.displayGlucoseUnit.shortLocalizedUnitString())
+        }
+    }
+
+    var lastGlucoseTrendString: String {
+        if let lastReading = lastReading, lastReading.hasReliableGlucose, let trendRate = lastReading.trendRate {
+            let glucoseUnitPerMinute = displayGlucoseUnitObservable.displayGlucoseUnit.unitDivided(by: .minute())
+            // This seemingly strange replacement of glucose units is only to display the unit string correctly
+            let trendPerMinute = HKQuantity(unit: displayGlucoseUnitObservable.displayGlucoseUnit, doubleValue: trendRate.doubleValue(for: glucoseUnitPerMinute))
+            let formatted = glucoseFormatter.string(from: trendPerMinute, for: displayGlucoseUnitObservable.displayGlucoseUnit)!
+            return String(format: LocalizedString("%@/min", comment: "Format string for glucose trend per minute. (1: glucose value and unit)"), formatted)
+        } else {
+            return ""
+        }
+    }
+}
+
+extension G7SettingsViewModel: G7StateObserver {
+    func g7StateDidUpdate(_ state: G7CGMManagerState?) {
+        updateValues()
+    }
+
+    func g7ConnectionStatusDidChange() {
+        updateValues()
+    }
+}

+ 55 - 0
Dependencies/G7SensorKit/G7SensorKitUI/Views/G7StartupView.swift

@@ -0,0 +1,55 @@
+//
+//  G7StartupView.swift
+//  CGMBLEKitUI
+//
+//  Created by Pete Schwamb on 9/24/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+import SwiftUI
+
+struct G7StartupView: View {
+    var didContinue: (() -> Void)?
+    var didCancel: (() -> Void)?
+
+    var body: some View {
+        VStack(alignment: .center, spacing: 20) {
+            Spacer()
+            Text(LocalizedString("Dexcom G7", comment: "Title on WelcomeView"))
+                .font(.largeTitle)
+                .fontWeight(.semibold)
+            VStack(alignment: .center) {
+                Image(frameworkImage: "g7")
+                    .resizable()
+                    .aspectRatio(contentMode: ContentMode.fit)
+                    .frame(height: 120)
+                    .padding(.horizontal)
+            }.frame(maxWidth: .infinity)
+            Text(LocalizedString("Loop can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management.", comment: "Descriptive text on G7StartupView"))
+                .fixedSize(horizontal: false, vertical: true)
+                .foregroundColor(.secondary)
+            Spacer()
+            Button(action: { self.didContinue?() }) {
+                Text(LocalizedString("Continue", comment:"Button title for starting setup"))
+                    .actionButtonStyle(.primary)
+            }
+            Button(action: { self.didCancel?() } ) {
+                Text(LocalizedString("Cancel", comment: "Button text to cancel G7 setup")).padding(.top, 20)
+            }
+        }
+        .padding()
+        .environment(\.horizontalSizeClass, .compact)
+        .navigationBarTitle("")
+        .navigationBarHidden(true)
+    }
+}
+
+struct WelcomeView_Previews: PreviewProvider {
+    static var previews: some View {
+        NavigationView {
+            G7StartupView()
+        }
+        .previewDevice("iPod touch (7th generation)")
+    }
+}

+ 18 - 0
Dependencies/G7SensorKit/G7SensorPlugin/G7SensorPlugin.h

@@ -0,0 +1,18 @@
+//
+//  G7SensorPlugin.h
+//  G7SensorPlugin
+//
+//  Created by Pete Schwamb on 11/11/22.
+//
+
+#import <Foundation/Foundation.h>
+
+//! Project version number for G7SensorPlugin.
+FOUNDATION_EXPORT double G7SensorPluginVersionNumber;
+
+//! Project version string for G7SensorPlugin.
+FOUNDATION_EXPORT const unsigned char G7SensorPluginVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <G7SensorPlugin/PublicHeader.h>
+
+

+ 25 - 0
Dependencies/G7SensorKit/G7SensorPlugin/G7SensorPlugin.swift

@@ -0,0 +1,25 @@
+//
+//  CGMBLEKitG7Plugin.swift
+//  CGMBLEKitG7Plugin
+//
+//  Created by Pete Schwamb on 9/24/22.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import os.log
+import LoopKitUI
+import G7SensorKit
+import G7SensorKitUI
+
+class G7SensorPlugin: NSObject, CGMManagerUIPlugin {
+    private let log = OSLog(category: "G7Plugin")
+
+    public var cgmManagerType: CGMManagerUI.Type? {
+        return G7CGMManager.self
+    }
+
+    override init() {
+        super.init()
+        log.default("Instantiated")
+    }
+}

+ 30 - 0
Dependencies/G7SensorKit/G7SensorPlugin/Info.plist

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>$(DEVELOPMENT_LANGUAGE)</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>NSHumanReadableCopyright</key>
+	<string>Copyright © 2019 LoopKit Authors. All rights reserved.</string>
+	<key>NSPrincipalClass</key>
+	<string>G7SensorPlugin</string>
+	<key>com.loopkit.Loop.CGMManagerDisplayName</key>
+	<string>Dexcom G7</string>
+	<key>com.loopkit.Loop.CGMManagerIdentifier</key>
+	<string>G7CGMManager</string>
+</dict>
+</plist>

+ 50 - 0
Dependencies/G7SensorKit/G7SensorPlugin/OSLog.swift

@@ -0,0 +1,50 @@
+//
+//  OSLog.swift
+//  Loop
+//
+//  Copyright © 2017 LoopKit Authors. All rights reserved.
+//
+
+import os.log
+
+
+extension OSLog {
+    convenience init(category: String) {
+        self.init(subsystem: "org.loopkit.G7SensorPlugin", category: category)
+    }
+
+    func debug(_ message: StaticString, _ args: CVarArg...) {
+        log(message, type: .debug, args)
+    }
+
+    func info(_ message: StaticString, _ args: CVarArg...) {
+        log(message, type: .info, args)
+    }
+
+    func `default`(_ message: StaticString, _ args: CVarArg...) {
+        log(message, type: .default, args)
+    }
+
+    func error(_ message: StaticString, _ args: CVarArg...) {
+        log(message, type: .error, args)
+    }
+
+    private func log(_ message: StaticString, type: OSLogType, _ args: [CVarArg]) {
+        switch args.count {
+        case 0:
+            os_log(message, log: self, type: type)
+        case 1:
+            os_log(message, log: self, type: type, args[0])
+        case 2:
+            os_log(message, log: self, type: type, args[0], args[1])
+        case 3:
+            os_log(message, log: self, type: type, args[0], args[1], args[2])
+        case 4:
+            os_log(message, log: self, type: type, args[0], args[1], args[2], args[3])
+        case 5:
+            os_log(message, log: self, type: type, args[0], args[1], args[2], args[3], args[4])
+        default:
+            os_log(message, log: self, type: type, args)
+        }
+    }
+}

+ 2 - 0
Dependencies/G7SensorKit/README.md

@@ -0,0 +1,2 @@
+# Loop Plugin for G7 Sensor
+Requires use of official G7 app

+ 0 - 104
Dependencies/LoopKit/LoopKit/ar.lproj/Localizable.strings

@@ -1,104 +0,0 @@
-/* Describes a certain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus failed" = "%1$@ U bolus failed";
-
-/* Describes an uncertain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus may not have succeeded" = "%1$@ U bolus may not have succeeded";
-
-/* The error description describing when Health sharing was denied */
-"Authorization Denied" = "Authorization Denied";
-
-/* Recovery instruction for an uncertain bolus failure */
-"Check your pump before retrying" = "Check your pump before retrying";
-
-/* The description of an error returned when attempting to delete a sample not shared by the current app */
-"com.loudnate.CarbKit.deleteCarbEntryUnownedErrorDescription" = "Authorization Denied";
-
-/* The error recovery suggestion when attempting to delete a sample not shared by the current app */
-"com.loudnate.carbKit.sharingDeniedErrorRecoverySuggestion" = "This sample can be deleted from the Health app";
-
-/* Generic pump error description */
-"Communication Failure" = "Communication Failure";
-
-/* Generic pump error description */
-"Connection Failure" = "Connection Failure";
-
-/* Generic pump error description */
-"Device Refused" = "Device Refused";
-
-/* Recovery suggestion for a no data error */
-"Ensure carb data exists for the specified date" = "Ensure carb data exists for the specified date";
-
-/* Glucose trend down */
-"Falling" = "Falling";
-
-/* Glucose trend down-down */
-"Falling fast" = "Falling fast";
-
-/* Glucose trend down-down-down */
-"Falling very fast" = "Falling very fast";
-
-/* Glucose trend flat */
-"Flat" = "Flat";
-
-/* The short unit display string for grams per U */
-"g/U" = "g/U";
-
-/* Generic pump error description */
-"Invalid Configuration" = "Invalid Configuration";
-
-/* Recovery instruction for a certain bolus failure */
-"It is safe to retry" = "It is safe to retry";
-
-/* The short unit display string for milligrams per deciliter per U */
-"mg/dL/U" = "mg/dL/U";
-
-/* The short unit display string for millimoles per liter */
-"mmol/L" = "mmol/L";
-
-/* The short unit display string for millimoles per liter per U */
-"mmol/L/U" = "mmol/L/U";
-
-/* Sensor state description for the non-valid state */
-"Needs Attention" = "Needs Attention";
-
-/* Describes an error for no data found in a CarbStore request */
-"No values found" = "No values found";
-
-/* Sensor state description for the valid state */
-"OK" = "OK";
-
-/* The error recovery suggestion when Health sharing was denied */
-"Please re-enable sharing in Health" = "Please re-enable sharing in Health";
-
-/* Glucose trend up */
-"Rising" = "Rising";
-
-/* Glucose trend up-up */
-"Rising fast" = "Rising fast";
-
-/* Glucose trend up-up-up */
-"Rising very fast" = "Rising very fast";
-
-/* The short unit display string for international units of insulin */
-"U" = "U";
-
-/* The short unit display string for international units of insulin per hour */
-"U/hr" = "U/hr";
-
-/* The long unit display string for a singular international unit of insulin */
-"Unit" = "Unit";
-
-/* The long unit display string for a singular international unit of insulin per hour */
-"Unit/hour" = "Unit/hour";
-
-/* The long unit display string for international units of insulin */
-"Units" = "Units";
-
-/* The long unit display string for international units of insulin per hour */
-"Units/hour" = "Units/hour";
-
-/* The long unit display string for a singular hour */
-"Hour" = "Hour";
-
-/* The long unit display string for hours */
-"Hours" = "Hours";

+ 0 - 104
Dependencies/LoopKit/LoopKit/ca.lproj/Localizable.strings

@@ -1,104 +0,0 @@
-/* Describes a certain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus failed" = "%1$@ U bolus failed";
-
-/* Describes an uncertain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus may not have succeeded" = "%1$@ U bolus may not have succeeded";
-
-/* The error description describing when Health sharing was denied */
-"Authorization Denied" = "Authorization Denied";
-
-/* Recovery instruction for an uncertain bolus failure */
-"Check your pump before retrying" = "Check your pump before retrying";
-
-/* The description of an error returned when attempting to delete a sample not shared by the current app */
-"com.loudnate.CarbKit.deleteCarbEntryUnownedErrorDescription" = "Authorization Denied";
-
-/* The error recovery suggestion when attempting to delete a sample not shared by the current app */
-"com.loudnate.carbKit.sharingDeniedErrorRecoverySuggestion" = "This sample can be deleted from the Health app";
-
-/* Generic pump error description */
-"Communication Failure" = "Communication Failure";
-
-/* Generic pump error description */
-"Connection Failure" = "Connection Failure";
-
-/* Generic pump error description */
-"Device Refused" = "Device Refused";
-
-/* Recovery suggestion for a no data error */
-"Ensure carb data exists for the specified date" = "Ensure carb data exists for the specified date";
-
-/* Glucose trend down */
-"Falling" = "Falling";
-
-/* Glucose trend down-down */
-"Falling fast" = "Falling fast";
-
-/* Glucose trend down-down-down */
-"Falling very fast" = "Falling very fast";
-
-/* Glucose trend flat */
-"Flat" = "Flat";
-
-/* The short unit display string for grams per U */
-"g/U" = "g/U";
-
-/* Generic pump error description */
-"Invalid Configuration" = "Invalid Configuration";
-
-/* Recovery instruction for a certain bolus failure */
-"It is safe to retry" = "It is safe to retry";
-
-/* The short unit display string for milligrams per deciliter per U */
-"mg/dL/U" = "mg/dL/U";
-
-/* The short unit display string for millimoles per liter */
-"mmol/L" = "mmol/L";
-
-/* The short unit display string for millimoles per liter per U */
-"mmol/L/U" = "mmol/L/U";
-
-/* Sensor state description for the non-valid state */
-"Needs Attention" = "Needs Attention";
-
-/* Describes an error for no data found in a CarbStore request */
-"No values found" = "No values found";
-
-/* Sensor state description for the valid state */
-"OK" = "OK";
-
-/* The error recovery suggestion when Health sharing was denied */
-"Please re-enable sharing in Health" = "Please re-enable sharing in Health";
-
-/* Glucose trend up */
-"Rising" = "Rising";
-
-/* Glucose trend up-up */
-"Rising fast" = "Rising fast";
-
-/* Glucose trend up-up-up */
-"Rising very fast" = "Rising very fast";
-
-/* The short unit display string for international units of insulin */
-"U" = "U";
-
-/* The short unit display string for international units of insulin per hour */
-"U/hr" = "U/hr";
-
-/* The long unit display string for a singular international unit of insulin */
-"Unit" = "Unit";
-
-/* The long unit display string for a singular international unit of insulin per hour */
-"Unit/hour" = "Unit/hour";
-
-/* The long unit display string for international units of insulin */
-"Units" = "Units";
-
-/* The long unit display string for international units of insulin per hour */
-"Units/hour" = "Units/hour";
-
-/* The long unit display string for a singular hour */
-"Hour" = "Hour";
-
-/* The long unit display string for hours */
-"Hours" = "Hours";

+ 0 - 104
Dependencies/LoopKit/LoopKit/pt-PT.lproj/Localizable.strings

@@ -1,104 +0,0 @@
-/* Describes a certain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus failed" = "%1$@ U bolus failed";
-
-/* Describes an uncertain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus may not have succeeded" = "%1$@ U bolus may not have succeeded";
-
-/* The error description describing when Health sharing was denied */
-"Authorization Denied" = "Authorization Denied";
-
-/* Recovery instruction for an uncertain bolus failure */
-"Check your pump before retrying" = "Check your pump before retrying";
-
-/* The description of an error returned when attempting to delete a sample not shared by the current app */
-"com.loudnate.CarbKit.deleteCarbEntryUnownedErrorDescription" = "Authorization Denied";
-
-/* The error recovery suggestion when attempting to delete a sample not shared by the current app */
-"com.loudnate.carbKit.sharingDeniedErrorRecoverySuggestion" = "This sample can be deleted from the Health app";
-
-/* Generic pump error description */
-"Communication Failure" = "Communication Failure";
-
-/* Generic pump error description */
-"Connection Failure" = "Connection Failure";
-
-/* Generic pump error description */
-"Device Refused" = "Device Refused";
-
-/* Recovery suggestion for a no data error */
-"Ensure carb data exists for the specified date" = "Ensure carb data exists for the specified date";
-
-/* Glucose trend down */
-"Falling" = "Falling";
-
-/* Glucose trend down-down */
-"Falling fast" = "Falling fast";
-
-/* Glucose trend down-down-down */
-"Falling very fast" = "Falling very fast";
-
-/* Glucose trend flat */
-"Flat" = "Flat";
-
-/* The short unit display string for grams per U */
-"g/U" = "g/U";
-
-/* Generic pump error description */
-"Invalid Configuration" = "Invalid Configuration";
-
-/* Recovery instruction for a certain bolus failure */
-"It is safe to retry" = "It is safe to retry";
-
-/* The short unit display string for milligrams per deciliter per U */
-"mg/dL/U" = "mg/dL/U";
-
-/* The short unit display string for millimoles per liter */
-"mmol/L" = "mmol/L";
-
-/* The short unit display string for millimoles per liter per U */
-"mmol/L/U" = "mmol/L/U";
-
-/* Sensor state description for the non-valid state */
-"Needs Attention" = "Needs Attention";
-
-/* Describes an error for no data found in a CarbStore request */
-"No values found" = "No values found";
-
-/* Sensor state description for the valid state */
-"OK" = "OK";
-
-/* The error recovery suggestion when Health sharing was denied */
-"Please re-enable sharing in Health" = "Please re-enable sharing in Health";
-
-/* Glucose trend up */
-"Rising" = "Rising";
-
-/* Glucose trend up-up */
-"Rising fast" = "Rising fast";
-
-/* Glucose trend up-up-up */
-"Rising very fast" = "Rising very fast";
-
-/* The short unit display string for international units of insulin */
-"U" = "U";
-
-/* The short unit display string for international units of insulin per hour */
-"U/hr" = "U/hr";
-
-/* The long unit display string for a singular international unit of insulin */
-"Unit" = "Unit";
-
-/* The long unit display string for a singular international unit of insulin per hour */
-"Unit/hour" = "Unit/hour";
-
-/* The long unit display string for international units of insulin */
-"Units" = "Units";
-
-/* The long unit display string for international units of insulin per hour */
-"Units/hour" = "Units/hour";
-
-/* The long unit display string for a singular hour */
-"Hour" = "Hour";
-
-/* The long unit display string for hours */
-"Hours" = "Hours";

+ 0 - 104
Dependencies/LoopKit/LoopKit/sk.lproj/Localizable.strings

@@ -1,104 +0,0 @@
-/* Describes a certain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus failed" = "%1$@ U bolus failed";
-
-/* Describes an uncertain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus may not have succeeded" = "%1$@ U bolus may not have succeeded";
-
-/* The error description describing when Health sharing was denied */
-"Authorization Denied" = "Authorization Denied";
-
-/* Recovery instruction for an uncertain bolus failure */
-"Check your pump before retrying" = "Check your pump before retrying";
-
-/* The description of an error returned when attempting to delete a sample not shared by the current app */
-"com.loudnate.CarbKit.deleteCarbEntryUnownedErrorDescription" = "Authorization Denied";
-
-/* The error recovery suggestion when attempting to delete a sample not shared by the current app */
-"com.loudnate.carbKit.sharingDeniedErrorRecoverySuggestion" = "This sample can be deleted from the Health app";
-
-/* Generic pump error description */
-"Communication Failure" = "Communication Failure";
-
-/* Generic pump error description */
-"Connection Failure" = "Connection Failure";
-
-/* Generic pump error description */
-"Device Refused" = "Device Refused";
-
-/* Recovery suggestion for a no data error */
-"Ensure carb data exists for the specified date" = "Ensure carb data exists for the specified date";
-
-/* Glucose trend down */
-"Falling" = "Falling";
-
-/* Glucose trend down-down */
-"Falling fast" = "Falling fast";
-
-/* Glucose trend down-down-down */
-"Falling very fast" = "Falling very fast";
-
-/* Glucose trend flat */
-"Flat" = "Flat";
-
-/* The short unit display string for grams per U */
-"g/U" = "g/U";
-
-/* Generic pump error description */
-"Invalid Configuration" = "Invalid Configuration";
-
-/* Recovery instruction for a certain bolus failure */
-"It is safe to retry" = "It is safe to retry";
-
-/* The short unit display string for milligrams per deciliter per U */
-"mg/dL/U" = "mg/dL/U";
-
-/* The short unit display string for millimoles per liter */
-"mmol/L" = "mmol/L";
-
-/* The short unit display string for millimoles per liter per U */
-"mmol/L/U" = "mmol/L/U";
-
-/* Sensor state description for the non-valid state */
-"Needs Attention" = "Needs Attention";
-
-/* Describes an error for no data found in a CarbStore request */
-"No values found" = "No values found";
-
-/* Sensor state description for the valid state */
-"OK" = "OK";
-
-/* The error recovery suggestion when Health sharing was denied */
-"Please re-enable sharing in Health" = "Please re-enable sharing in Health";
-
-/* Glucose trend up */
-"Rising" = "Rising";
-
-/* Glucose trend up-up */
-"Rising fast" = "Rising fast";
-
-/* Glucose trend up-up-up */
-"Rising very fast" = "Rising very fast";
-
-/* The short unit display string for international units of insulin */
-"U" = "U";
-
-/* The short unit display string for international units of insulin per hour */
-"U/hr" = "U/hr";
-
-/* The long unit display string for a singular international unit of insulin */
-"Unit" = "Unit";
-
-/* The long unit display string for a singular international unit of insulin per hour */
-"Unit/hour" = "Unit/hour";
-
-/* The long unit display string for international units of insulin */
-"Units" = "Units";
-
-/* The long unit display string for international units of insulin per hour */
-"Units/hour" = "Units/hour";
-
-/* The long unit display string for a singular hour */
-"Hour" = "Hour";
-
-/* The long unit display string for hours */
-"Hours" = "Hours";

+ 32 - 38
Dependencies/LoopKit/LoopKit/tr.lproj/Localizable.strings

@@ -1,104 +1,98 @@
 /* Describes a certain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus failed" = "%1$@ Ü bolus başarısız";
+"%1$@ U bolus failed" = "%1$@ U bolus failed";
 
 /* Describes an uncertain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus may not have succeeded" = "%1$@ Ü bolus başarılı olmayabilir";
+"%1$@ U bolus may not have succeeded" = "%1$@ U bolus may not have succeeded";
 
 /* The error description describing when Health sharing was denied */
-"Authorization Denied" = "Yetkilendirme Reddedildi";
+"Authorization Denied" = "Authorization Denied";
 
 /* Recovery instruction for an uncertain bolus failure */
-"Check your pump before retrying" = "Yeniden denemeden önce pompanızı kontrol edin";
+"Check your pump before retrying" = "Check your pump before retrying";
 
 /* The description of an error returned when attempting to delete a sample not shared by the current app */
-"com.loudnate.CarbKit.deleteCarbEntryUnownedErrorDescription" = "Yetkilendirme Reddedildi";
+"com.loudnate.CarbKit.deleteCarbEntryUnownedErrorDescription" = "Authorization Denied";
 
 /* The error recovery suggestion when attempting to delete a sample not shared by the current app */
-"com.loudnate.carbKit.sharingDeniedErrorRecoverySuggestion" = "Bu örnek Health uygulamasından silinebilir";
+"com.loudnate.carbKit.sharingDeniedErrorRecoverySuggestion" = "This sample can be deleted from the Health app";
 
 /* Generic pump error description */
-"Communication Failure" = "İletişim Hatası";
+"Communication Failure" = "Communication Failure";
 
 /* Generic pump error description */
-"Connection Failure" = "Bağlantı Hatası";
+"Connection Failure" = "Connection Failure";
 
 /* Generic pump error description */
-"Device Refused" = "Aygıt Reddedildi";
+"Device Refused" = "Device Refused";
 
 /* Recovery suggestion for a no data error */
-"Ensure carb data exists for the specified date" = "Belirtilen tarih için karbonhidrat verilerinin mevcut olduğundan emin olun";
+"Ensure carb data exists for the specified date" = "Ensure carb data exists for the specified date";
 
 /* Glucose trend down */
-"Falling" = "Düşmekte";
+"Falling" = "Falling";
 
 /* Glucose trend down-down */
-"Falling fast" = "Hızlı düşmekte";
+"Falling fast" = "Falling fast";
 
 /* Glucose trend down-down-down */
-"Falling very fast" = "Çok hızlı düşmekte";
+"Falling very fast" = "Falling very fast";
 
 /* Glucose trend flat */
-"Flat" = "Değişmeyen";
+"Flat" = "Flat";
 
 /* The short unit display string for grams per U */
-"g/U" = "g/Ü";
+"g/U" = "g/U";
 
 /* Generic pump error description */
-"Invalid Configuration" = "Geçersiz Yapılandırma";
+"Invalid Configuration" = "Invalid Configuration";
 
 /* Recovery instruction for a certain bolus failure */
-"It is safe to retry" = "Tekrar denemek güvenlidir";
+"It is safe to retry" = "It is safe to retry";
 
 /* The short unit display string for milligrams per deciliter per U */
-"mg/dL/U" = "mg/dL/Ü";
+"mg/dL/U" = "mg/dL/U";
 
 /* The short unit display string for millimoles per liter */
 "mmol/L" = "mmol/L";
 
 /* The short unit display string for millimoles per liter per U */
-"mmol/L/U" = "mmol/L/Ü";
+"mmol/L/U" = "mmol/L/U";
 
 /* Sensor state description for the non-valid state */
-"Needs Attention" = "Dikkat Gerekli";
+"Needs Attention" = "Needs Attention";
 
 /* Describes an error for no data found in a CarbStore request */
-"No values found" = "Değer bulunamadı";
+"No values found" = "No values found";
 
 /* Sensor state description for the valid state */
-"OK" = "Tamam";
+"OK" = "OK";
 
 /* The error recovery suggestion when Health sharing was denied */
-"Please re-enable sharing in Health" = "Lütfen Health paylaşımı yeniden etkinleştirin";
+"Please re-enable sharing in Health" = "Please re-enable sharing in Health";
 
 /* Glucose trend up */
-"Rising" = "Yükselmekte";
+"Rising" = "Rising";
 
 /* Glucose trend up-up */
-"Rising fast" = "Hızlı yükselmekte";
+"Rising fast" = "Rising fast";
 
 /* Glucose trend up-up-up */
-"Rising very fast" = "Çok hızlı yükselmekte";
+"Rising very fast" = "Rising very fast";
 
 /* The short unit display string for international units of insulin */
-"U" = "Ü";
+"U" = "U";
 
 /* The short unit display string for international units of insulin per hour */
-"U/hr" = "Ü/Sa";
+"U/hr" = "U/hr";
 
 /* The long unit display string for a singular international unit of insulin */
-"Unit" = "Ünite";
+"Unit" = "Unit";
 
 /* The long unit display string for a singular international unit of insulin per hour */
-"Unit/hour" = "Ünite/saat";
+"Unit/hour" = "Unit/hour";
 
 /* The long unit display string for international units of insulin */
-"Units" = "Ünite";
+"Units" = "Units";
 
 /* The long unit display string for international units of insulin per hour */
-"Units/hour" = "Ünite/saat";
-
-/* The long unit display string for a singular hour */
-"Hour" = "Saat";
-
-/* The long unit display string for hours */
-"Hours" = "Saat";
+"Units/hour" = "Units/hour";

+ 0 - 104
Dependencies/LoopKit/LoopKit/uk.lproj/Localizable.strings

@@ -1,104 +0,0 @@
-/* Describes a certain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus failed" = "%1$@ од Болюс не відбувся";
-
-/* Describes an uncertain bolus failure (1: size of the bolus in units) */
-"%1$@ U bolus may not have succeeded" = "%1$@ од. можлива невдача подачі болюса";
-
-/* The error description describing when Health sharing was denied */
-"Authorization Denied" = "В авторизації відмовлено";
-
-/* Recovery instruction for an uncertain bolus failure */
-"Check your pump before retrying" = "Перевірте свою помпу перед повторною спробою";
-
-/* The description of an error returned when attempting to delete a sample not shared by the current app */
-"com.loudnate.CarbKit.deleteCarbEntryUnownedErrorDescription" = "В авторизації відмовлено";
-
-/* The error recovery suggestion when attempting to delete a sample not shared by the current app */
-"com.loudnate.carbKit.sharingDeniedErrorRecoverySuggestion" = "Цей приклад можна видалити з додатка Health App";
-
-/* Generic pump error description */
-"Communication Failure" = "Помилка з’єднання";
-
-/* Generic pump error description */
-"Connection Failure" = "Помилка з’єднання";
-
-/* Generic pump error description */
-"Device Refused" = "Пристрій відхилено";
-
-/* Recovery suggestion for a no data error */
-"Ensure carb data exists for the specified date" = "Переконайтесь, що данні про вуглеводи є на зазначену дату";
-
-/* Glucose trend down */
-"Falling" = "Падіння";
-
-/* Glucose trend down-down */
-"Falling fast" = "Швидке падіння";
-
-/* Glucose trend down-down-down */
-"Falling very fast" = "Дуже швидке падіння";
-
-/* Glucose trend flat */
-"Flat" = "Стабільний";
-
-/* The short unit display string for grams per U */
-"g/U" = "гр/U";
-
-/* Generic pump error description */
-"Invalid Configuration" = "Недопустима конфігурація";
-
-/* Recovery instruction for a certain bolus failure */
-"It is safe to retry" = "Можна спробувати ще раз";
-
-/* The short unit display string for milligrams per deciliter per U */
-"mg/dL/U" = "mg/dL/U";
-
-/* The short unit display string for millimoles per liter */
-"mmol/L" = "ммол/Л";
-
-/* The short unit display string for millimoles per liter per U */
-"mmol/L/U" = "mmol/L/U";
-
-/* Sensor state description for the non-valid state */
-"Needs Attention" = "Потребує уваги";
-
-/* Describes an error for no data found in a CarbStore request */
-"No values found" = "Не знайдено значень";
-
-/* Sensor state description for the valid state */
-"OK" = "OK";
-
-/* The error recovery suggestion when Health sharing was denied */
-"Please re-enable sharing in Health" = "Будь ласка, повторно увімкніть спільний доступ до історії Heaith";
-
-/* Glucose trend up */
-"Rising" = "Зростаючий";
-
-/* Glucose trend up-up */
-"Rising fast" = "Швидко зростає";
-
-/* Glucose trend up-up-up */
-"Rising very fast" = "Дуже швидко зростає";
-
-/* The short unit display string for international units of insulin */
-"U" = "U";
-
-/* The short unit display string for international units of insulin per hour */
-"U/hr" = "U/год";
-
-/* The long unit display string for a singular international unit of insulin */
-"Unit" = "Unit";
-
-/* The long unit display string for a singular international unit of insulin per hour */
-"Unit/hour" = "Unit/hour";
-
-/* The long unit display string for international units of insulin */
-"Units" = "Одиниці";
-
-/* The long unit display string for international units of insulin per hour */
-"Units/hour" = "Units/hour";
-
-/* The long unit display string for a singular hour */
-"Hour" = "Година";
-
-/* The long unit display string for hours */
-"Hours" = "Години";

+ 0 - 457
Dependencies/LoopKit/LoopKitUI/Base.lproj/CarbKit.storyboard

@@ -1,457 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14854.2" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="rUL-yg-cFX">
-    <device id="retina4_7" orientation="portrait" appearance="light"/>
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14806.4"/>
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <scenes>
-        <!--Carbohydrates-->
-        <scene sceneID="CCS-LD-Cvq">
-            <objects>
-                <tableViewController storyboardIdentifier="CarbEntryTableViewController" id="rUL-yg-cFX" customClass="CarbEntryTableViewController" customModule="LoopKitUI" customModuleProvider="target" sceneMemberID="viewController">
-                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="b1s-8o-0Wp">
-                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
-                        <view key="tableHeaderView" hidden="YES" contentMode="scaleToFill" id="5Zp-NO-vMs">
-                            <rect key="frame" x="0.0" y="0.0" width="375" height="90"/>
-                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                            <subviews>
-                                <stackView opaque="NO" contentMode="scaleToFill" distribution="fillProportionally" alignment="center" spacing="10" translatesAutoresizingMaskIntoConstraints="NO" id="cOU-SQ-x7W">
-                                    <rect key="frame" x="15" y="8" width="345" height="74"/>
-                                    <subviews>
-                                        <stackView opaque="NO" contentMode="scaleToFill" alignment="lastBaseline" spacing="2" translatesAutoresizingMaskIntoConstraints="NO" id="9Sg-Pm-2m0">
-                                            <rect key="frame" x="0.0" y="0.0" width="169" height="74"/>
-                                            <subviews>
-                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="..." textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lbE-wQ-pFK">
-                                                    <rect key="frame" x="0.0" y="20" width="35" height="54"/>
-                                                    <fontDescription key="fontDescription" type="system" weight="light" pointSize="45"/>
-                                                    <nil key="textColor"/>
-                                                    <nil key="highlightedColor"/>
-                                                </label>
-                                                <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="CzL-qw-IBz">
-                                                    <rect key="frame" x="37" y="0.0" width="132" height="66.5"/>
-                                                    <subviews>
-                                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" text="g COB" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QZb-e1-xwb">
-                                                            <rect key="frame" x="0.0" y="0.0" width="132" height="16.5"/>
-                                                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                                                            <nil key="textColor"/>
-                                                            <nil key="highlightedColor"/>
-                                                        </label>
-                                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Eur-ji-qsH">
-                                                            <rect key="frame" x="0.0" y="16.5" width="132" height="50"/>
-                                                            <fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
-                                                            <nil key="textColor"/>
-                                                            <nil key="highlightedColor"/>
-                                                        </label>
-                                                    </subviews>
-                                                </stackView>
-                                            </subviews>
-                                        </stackView>
-                                        <stackView opaque="NO" contentMode="scaleToFill" alignment="lastBaseline" spacing="2" translatesAutoresizingMaskIntoConstraints="NO" id="1Zc-wa-yKx">
-                                            <rect key="frame" x="179" y="0.0" width="166" height="74"/>
-                                            <subviews>
-                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="..." textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WZV-l9-Ek1">
-                                                    <rect key="frame" x="0.0" y="20" width="35" height="54"/>
-                                                    <fontDescription key="fontDescription" type="system" weight="light" pointSize="45"/>
-                                                    <nil key="textColor"/>
-                                                    <nil key="highlightedColor"/>
-                                                </label>
-                                                <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="PCb-FR-N60">
-                                                    <rect key="frame" x="37" y="0.0" width="129" height="66.5"/>
-                                                    <subviews>
-                                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" text="g Total" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pHI-f4-pJp">
-                                                            <rect key="frame" x="0.0" y="0.0" width="129" height="16.5"/>
-                                                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                                                            <nil key="textColor"/>
-                                                            <nil key="highlightedColor"/>
-                                                        </label>
-                                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oBa-v1-XQP">
-                                                            <rect key="frame" x="0.0" y="16.5" width="129" height="50"/>
-                                                            <fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
-                                                            <nil key="textColor"/>
-                                                            <nil key="highlightedColor"/>
-                                                        </label>
-                                                    </subviews>
-                                                </stackView>
-                                            </subviews>
-                                        </stackView>
-                                    </subviews>
-                                </stackView>
-                            </subviews>
-                            <constraints>
-                                <constraint firstItem="cOU-SQ-x7W" firstAttribute="top" secondItem="5Zp-NO-vMs" secondAttribute="topMargin" id="SN9-4D-maL"/>
-                                <constraint firstItem="cOU-SQ-x7W" firstAttribute="leading" secondItem="5Zp-NO-vMs" secondAttribute="leadingMargin" constant="7" id="V0r-4W-z8O"/>
-                                <constraint firstAttribute="bottomMargin" secondItem="cOU-SQ-x7W" secondAttribute="bottom" id="jc7-pj-cCN"/>
-                                <constraint firstAttribute="trailingMargin" secondItem="cOU-SQ-x7W" secondAttribute="trailing" constant="7" id="w7E-8O-9j1"/>
-                            </constraints>
-                        </view>
-                        <view key="tableFooterView" contentMode="scaleToFill" id="icL-h4-vtz">
-                            <rect key="frame" x="0.0" y="190" width="375" height="8"/>
-                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                        </view>
-                        <prototypes>
-                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="CarbEntry" textLabel="vM9-H7-t3C" detailTextLabel="m95-PG-bTq" style="IBUITableViewCellStyleValue1" id="i7x-SU-PRi">
-                                <rect key="frame" x="0.0" y="118" width="375" height="44"/>
-                                <autoresizingMask key="autoresizingMask"/>
-                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="i7x-SU-PRi" id="Fje-90-ner">
-                                    <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
-                                    <autoresizingMask key="autoresizingMask"/>
-                                    <subviews>
-                                        <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="vM9-H7-t3C">
-                                            <rect key="frame" x="16" y="12" width="33.5" height="20.5"/>
-                                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                                            <fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
-                                            <nil key="textColor"/>
-                                            <nil key="highlightedColor"/>
-                                        </label>
-                                        <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Detail" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="m95-PG-bTq">
-                                            <rect key="frame" x="315" y="12" width="44" height="20.5"/>
-                                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                                            <fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
-                                            <color key="textColor" systemColor="secondaryLabelColor" red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
-                                            <nil key="highlightedColor"/>
-                                        </label>
-                                    </subviews>
-                                </tableViewCellContentView>
-                                <connections>
-                                    <segue destination="LyL-9U-twn" kind="show" id="rV7-J1-5KP"/>
-                                </connections>
-                            </tableViewCell>
-                        </prototypes>
-                        <connections>
-                            <outlet property="dataSource" destination="rUL-yg-cFX" id="Mo4-jP-4be"/>
-                            <outlet property="delegate" destination="rUL-yg-cFX" id="Hwo-ME-91Z"/>
-                        </connections>
-                    </tableView>
-                    <navigationItem key="navigationItem" title="Carbohydrates" id="Qgq-n1-hm4">
-                        <barButtonItem key="rightBarButtonItem" enabled="NO" systemItem="add" id="ddV-Ce-IIn">
-                            <connections>
-                                <segue destination="wgu-gT-TgV" kind="presentation" id="jMZ-bg-GVE"/>
-                            </connections>
-                        </barButtonItem>
-                    </navigationItem>
-                    <simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
-                    <connections>
-                        <outlet property="COBDateLabel" destination="Eur-ji-qsH" id="YHw-7r-Mw0"/>
-                        <outlet property="COBValueLabel" destination="lbE-wQ-pFK" id="um6-qB-9Od"/>
-                        <outlet property="authorizationRequiredMessageView" destination="tEe-h4-1UT" id="OK2-d8-aLn"/>
-                        <outlet property="totalDateLabel" destination="oBa-v1-XQP" id="hcX-ed-bel"/>
-                        <outlet property="totalValueLabel" destination="WZV-l9-Ek1" id="54A-72-11g"/>
-                        <outlet property="unavailableMessageView" destination="X5E-7c-9de" id="Bwk-Ig-goH"/>
-                    </connections>
-                </tableViewController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="y16-eD-Eid" userLabel="First Responder" sceneMemberID="firstResponder"/>
-                <view contentMode="scaleToFill" id="tEe-h4-1UT">
-                    <rect key="frame" x="0.0" y="0.0" width="300" height="300"/>
-                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                    <subviews>
-                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="euH-1G-uYm">
-                            <rect key="frame" x="20" y="94" width="260" height="112.5"/>
-                            <subviews>
-                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8sx-XB-DRV">
-                                    <rect key="frame" x="93" y="79.5" width="74" height="33"/>
-                                    <fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
-                                    <state key="normal" title="Authorize"/>
-                                    <connections>
-                                        <action selector="authorizeHealth:" destination="rUL-yg-cFX" eventType="touchUpInside" id="QFA-0t-kNV"/>
-                                    </connections>
-                                </button>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Authorize access to Health to continue" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7xi-Om-Y53">
-                                    <rect key="frame" x="0.0" y="8" width="260" height="63.5"/>
-                                    <fontDescription key="fontDescription" style="UICTFontTextStyleTitle1"/>
-                                    <color key="textColor" systemColor="secondaryLabelColor" red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                            </subviews>
-                            <constraints>
-                                <constraint firstAttribute="trailing" secondItem="7xi-Om-Y53" secondAttribute="trailing" id="2xh-qh-j5n"/>
-                                <constraint firstItem="8sx-XB-DRV" firstAttribute="top" secondItem="7xi-Om-Y53" secondAttribute="bottom" constant="8" symbolic="YES" id="5uc-kK-cJK"/>
-                                <constraint firstAttribute="bottom" secondItem="8sx-XB-DRV" secondAttribute="bottom" id="D0X-zZ-WLA"/>
-                                <constraint firstAttribute="bottomMargin" secondItem="7xi-Om-Y53" secondAttribute="bottom" id="HjF-Tt-qJA"/>
-                                <constraint firstItem="7xi-Om-Y53" firstAttribute="leading" secondItem="euH-1G-uYm" secondAttribute="leading" id="jlM-P3-28N"/>
-                                <constraint firstItem="7xi-Om-Y53" firstAttribute="top" secondItem="euH-1G-uYm" secondAttribute="topMargin" id="jxD-mV-Cfa"/>
-                                <constraint firstItem="8sx-XB-DRV" firstAttribute="centerX" secondItem="euH-1G-uYm" secondAttribute="centerX" id="zof-l2-Nas"/>
-                            </constraints>
-                            <variation key="default">
-                                <mask key="constraints">
-                                    <exclude reference="HjF-Tt-qJA"/>
-                                </mask>
-                            </variation>
-                        </view>
-                    </subviews>
-                    <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
-                    <constraints>
-                        <constraint firstAttribute="trailing" secondItem="euH-1G-uYm" secondAttribute="trailing" constant="20" symbolic="YES" id="GAi-Qi-Hzs"/>
-                        <constraint firstItem="euH-1G-uYm" firstAttribute="leading" secondItem="tEe-h4-1UT" secondAttribute="leading" constant="20" symbolic="YES" id="HFu-Pt-Zoi"/>
-                        <constraint firstItem="euH-1G-uYm" firstAttribute="centerY" secondItem="tEe-h4-1UT" secondAttribute="centerY" id="U6D-Sj-ilZ"/>
-                        <constraint firstItem="euH-1G-uYm" firstAttribute="centerX" secondItem="tEe-h4-1UT" secondAttribute="centerX" id="djl-i6-ieu"/>
-                    </constraints>
-                    <viewLayoutGuide key="safeArea" id="vOo-Rm-zxs"/>
-                </view>
-                <view contentMode="scaleToFill" id="X5E-7c-9de">
-                    <rect key="frame" x="0.0" y="0.0" width="300" height="300"/>
-                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                    <subviews>
-                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="G0z-rK-KG9">
-                            <rect key="frame" x="20" y="110.5" width="260" height="79.5"/>
-                            <subviews>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="HealthKit is not available on this device" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nXh-BM-MuC">
-                                    <rect key="frame" x="0.0" y="8" width="260" height="63.5"/>
-                                    <fontDescription key="fontDescription" style="UICTFontTextStyleTitle1"/>
-                                    <color key="textColor" systemColor="secondaryLabelColor" red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                            </subviews>
-                            <constraints>
-                                <constraint firstItem="nXh-BM-MuC" firstAttribute="leading" secondItem="G0z-rK-KG9" secondAttribute="leading" id="8le-Wq-GTz"/>
-                                <constraint firstItem="nXh-BM-MuC" firstAttribute="top" secondItem="G0z-rK-KG9" secondAttribute="topMargin" id="VTU-gc-CDU"/>
-                                <constraint firstAttribute="bottomMargin" secondItem="nXh-BM-MuC" secondAttribute="bottom" id="aBM-Oq-wEQ"/>
-                                <constraint firstAttribute="trailing" secondItem="nXh-BM-MuC" secondAttribute="trailing" id="b21-g7-8Lb"/>
-                            </constraints>
-                        </view>
-                    </subviews>
-                    <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
-                    <constraints>
-                        <constraint firstItem="G0z-rK-KG9" firstAttribute="centerY" secondItem="X5E-7c-9de" secondAttribute="centerY" id="8bo-Je-Rz1"/>
-                        <constraint firstAttribute="trailing" secondItem="G0z-rK-KG9" secondAttribute="trailing" constant="20" symbolic="YES" id="B06-SX-PKB"/>
-                        <constraint firstItem="G0z-rK-KG9" firstAttribute="centerX" secondItem="X5E-7c-9de" secondAttribute="centerX" id="gRi-I4-p79"/>
-                        <constraint firstItem="G0z-rK-KG9" firstAttribute="leading" secondItem="X5E-7c-9de" secondAttribute="leading" constant="20" symbolic="YES" id="yo1-2T-5ph"/>
-                    </constraints>
-                    <viewLayoutGuide key="safeArea" id="k1h-jG-n3F"/>
-                </view>
-            </objects>
-            <point key="canvasLocation" x="2445" y="-810"/>
-        </scene>
-        <!--Navigation Controller-->
-        <scene sceneID="mfE-Nk-SIy">
-            <objects>
-                <navigationController id="wgu-gT-TgV" sceneMemberID="viewController">
-                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="dds-bM-bvt">
-                        <rect key="frame" x="0.0" y="0.0" width="375" height="56"/>
-                        <autoresizingMask key="autoresizingMask"/>
-                    </navigationBar>
-                    <connections>
-                        <segue destination="LyL-9U-twn" kind="relationship" relationship="rootViewController" id="9fZ-7e-aMq"/>
-                    </connections>
-                </navigationController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="UVT-Hv-hpW" userLabel="First Responder" sceneMemberID="firstResponder"/>
-            </objects>
-            <point key="canvasLocation" x="3319" y="-1638"/>
-        </scene>
-        <!--Add/Edit Carb Entry-->
-        <scene sceneID="BUy-hU-2jT">
-            <objects>
-                <tableViewController storyboardIdentifier="CarbEntryEditViewController" id="LyL-9U-twn" customClass="CarbEntryEditViewController" customModule="LoopKitUI" customModuleProvider="target" sceneMemberID="viewController">
-                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="onDrag" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="9Ci-XW-6nA">
-                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
-                        <prototypes>
-                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="DecimalTextFieldTableViewCell" id="Ace-JU-zKh" customClass="DecimalTextFieldTableViewCell" customModule="LoopKitUI" customModuleProvider="target">
-                                <rect key="frame" x="0.0" y="55.5" width="375" height="44"/>
-                                <autoresizingMask key="autoresizingMask"/>
-                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Ace-JU-zKh" id="vvs-Vh-Dbj">
-                                    <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
-                                    <autoresizingMask key="autoresizingMask"/>
-                                    <subviews>
-                                        <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="0" textAlignment="right" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="qU9-hG-hMu">
-                                            <rect key="frame" x="171.5" y="15" width="175.5" height="14"/>
-                                            <color key="textColor" systemColor="secondaryLabelColor" red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
-                                            <fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
-                                            <textInputTraits key="textInputTraits" keyboardType="decimalPad" returnKeyType="next"/>
-                                        </textField>
-                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="g" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="D2S-2h-yH6">
-                                            <rect key="frame" x="349" y="11.5" width="10" height="20.5"/>
-                                            <fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
-                                            <color key="textColor" systemColor="secondaryLabelColor" red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
-                                            <nil key="highlightedColor"/>
-                                        </label>
-                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Amount Consumed" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="K0S-my-3qL">
-                                            <rect key="frame" x="16" y="12" width="147.5" height="20.5"/>
-                                            <fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
-                                            <nil key="textColor"/>
-                                            <nil key="highlightedColor"/>
-                                        </label>
-                                    </subviews>
-                                    <constraints>
-                                        <constraint firstItem="D2S-2h-yH6" firstAttribute="baseline" secondItem="qU9-hG-hMu" secondAttribute="baseline" id="AXU-cq-Gxc"/>
-                                        <constraint firstItem="D2S-2h-yH6" firstAttribute="leading" secondItem="qU9-hG-hMu" secondAttribute="trailing" constant="2" id="G8z-4v-USb"/>
-                                        <constraint firstAttribute="bottomMargin" secondItem="qU9-hG-hMu" secondAttribute="bottom" priority="750" constant="4" id="OX0-CW-gmF"/>
-                                        <constraint firstItem="qU9-hG-hMu" firstAttribute="top" secondItem="vvs-Vh-Dbj" secondAttribute="topMargin" constant="4" id="bq2-k4-4AD"/>
-                                        <constraint firstItem="K0S-my-3qL" firstAttribute="centerY" secondItem="vvs-Vh-Dbj" secondAttribute="centerY" id="dZW-pJ-gS5"/>
-                                        <constraint firstAttribute="trailingMargin" secondItem="D2S-2h-yH6" secondAttribute="trailing" id="mfG-AP-DuG"/>
-                                        <constraint firstItem="K0S-my-3qL" firstAttribute="leading" secondItem="vvs-Vh-Dbj" secondAttribute="leadingMargin" id="msn-9C-u2W"/>
-                                        <constraint firstItem="qU9-hG-hMu" firstAttribute="leading" secondItem="K0S-my-3qL" secondAttribute="trailing" constant="8" symbolic="YES" id="sED-aS-6m4"/>
-                                        <constraint firstItem="qU9-hG-hMu" firstAttribute="centerY" secondItem="vvs-Vh-Dbj" secondAttribute="centerY" id="z3u-0p-Mby"/>
-                                    </constraints>
-                                </tableViewCellContentView>
-                                <connections>
-                                    <outlet property="textField" destination="qU9-hG-hMu" id="PP5-os-4aH"/>
-                                    <outlet property="unitLabel" destination="D2S-2h-yH6" id="HBr-nn-Pb2"/>
-                                </connections>
-                            </tableViewCell>
-                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="TextFieldTableViewCell" id="99D-xi-Yp9" customClass="TextFieldTableViewCell" customModule="LoopKitUI" customModuleProvider="target">
-                                <rect key="frame" x="0.0" y="99.5" width="375" height="44"/>
-                                <autoresizingMask key="autoresizingMask"/>
-                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="99D-xi-Yp9" id="Zoy-aN-TbY">
-                                    <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
-                                    <autoresizingMask key="autoresizingMask"/>
-                                    <subviews>
-                                        <textField opaque="NO" contentMode="scaleToFill" verticalCompressionResistancePriority="751" contentHorizontalAlignment="left" contentVerticalAlignment="center" textAlignment="right" minimumFontSize="15" translatesAutoresizingMaskIntoConstraints="NO" id="BU1-sg-61t" customClass="CustomInputTextField" customModule="LoopKitUI" customModuleProvider="target">
-                                            <rect key="frame" x="105" y="15" width="254" height="24"/>
-                                            <color key="textColor" systemColor="secondaryLabelColor" red="0.23529411764705882" green="0.23529411764705882" blue="0.2627450980392157" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
-                                            <fontDescription key="fontDescription" style="UICTFontTextStyleTitle3"/>
-                                            <textInputTraits key="textInputTraits" returnKeyType="next"/>
-                                        </textField>
-                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="751" text="Food Type" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bdP-2A-DB8">
-                                            <rect key="frame" x="16" y="18" width="81" height="8"/>
-                                            <fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
-                                            <nil key="textColor"/>
-                                            <nil key="highlightedColor"/>
-                                        </label>
-                                    </subviews>
-                                    <constraints>
-                                        <constraint firstItem="BU1-sg-61t" firstAttribute="top" secondItem="Zoy-aN-TbY" secondAttribute="topMargin" constant="4" id="GR5-KC-idh"/>
-                                        <constraint firstItem="BU1-sg-61t" firstAttribute="firstBaseline" secondItem="bdP-2A-DB8" secondAttribute="firstBaseline" id="Uw8-Ib-Aqx"/>
-                                        <constraint firstAttribute="trailingMargin" secondItem="BU1-sg-61t" secondAttribute="trailing" id="W90-gg-fS0"/>
-                                        <constraint firstItem="bdP-2A-DB8" firstAttribute="leading" secondItem="Zoy-aN-TbY" secondAttribute="leadingMargin" id="Yp5-s7-3kJ"/>
-                                        <constraint firstItem="BU1-sg-61t" firstAttribute="leading" secondItem="bdP-2A-DB8" secondAttribute="trailing" constant="8" symbolic="YES" id="ato-cb-C4h"/>
-                                        <constraint firstItem="bdP-2A-DB8" firstAttribute="centerY" secondItem="Zoy-aN-TbY" secondAttribute="centerY" id="cNN-yH-xbN"/>
-                                        <constraint firstAttribute="bottomMargin" secondItem="BU1-sg-61t" secondAttribute="bottom" priority="750" constant="4" id="lSf-am-liy"/>
-                                    </constraints>
-                                </tableViewCellContentView>
-                                <connections>
-                                    <outlet property="textField" destination="BU1-sg-61t" id="onx-xO-uI7"/>
-                                </connections>
-                            </tableViewCell>
-                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="FoodTypeShortcutCell" id="WC7-gw-ru6" customClass="FoodTypeShortcutCell" customModule="LoopKitUI" customModuleProvider="target">
-                                <rect key="frame" x="0.0" y="143.5" width="375" height="44"/>
-                                <autoresizingMask key="autoresizingMask"/>
-                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="WC7-gw-ru6" id="9ds-EY-fUr">
-                                    <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
-                                    <autoresizingMask key="autoresizingMask"/>
-                                    <subviews>
-                                        <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="KGo-Jr-uxw">
-                                            <rect key="frame" x="184" y="4" width="175" height="40"/>
-                                            <subviews>
-                                                <button opaque="NO" contentMode="center" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XaD-wV-oiS">
-                                                    <rect key="frame" x="0.0" y="0.0" width="40" height="40"/>
-                                                    <constraints>
-                                                        <constraint firstAttribute="width" secondItem="XaD-wV-oiS" secondAttribute="height" multiplier="1:1" id="4Hh-Pk-m4d"/>
-                                                    </constraints>
-                                                    <fontDescription key="fontDescription" style="UICTFontTextStyleTitle3"/>
-                                                    <inset key="contentEdgeInsets" minX="2" minY="0.0" maxX="0.0" maxY="0.0"/>
-                                                    <state key="normal" title="🍭"/>
-                                                    <state key="selected" backgroundImage="Oval Selection"/>
-                                                    <state key="highlighted" backgroundImage="Oval Selection"/>
-                                                    <connections>
-                                                        <action selector="buttonTapped:" destination="WC7-gw-ru6" eventType="touchUpInside" id="5Ft-9l-7gu"/>
-                                                    </connections>
-                                                </button>
-                                                <button opaque="NO" contentMode="center" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Me5-3D-C34">
-                                                    <rect key="frame" x="45" y="0.0" width="40" height="40"/>
-                                                    <constraints>
-                                                        <constraint firstAttribute="width" secondItem="Me5-3D-C34" secondAttribute="height" multiplier="1:1" id="pPD-0m-Rie"/>
-                                                    </constraints>
-                                                    <fontDescription key="fontDescription" style="UICTFontTextStyleTitle3"/>
-                                                    <inset key="contentEdgeInsets" minX="3" minY="0.0" maxX="0.0" maxY="0.0"/>
-                                                    <state key="normal" title="🌮"/>
-                                                    <state key="selected" backgroundImage="Oval Selection"/>
-                                                    <state key="highlighted" backgroundImage="Oval Selection"/>
-                                                    <connections>
-                                                        <action selector="buttonTapped:" destination="WC7-gw-ru6" eventType="touchUpInside" id="8cP-Ht-Rdm"/>
-                                                    </connections>
-                                                </button>
-                                                <button opaque="NO" contentMode="center" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dyX-Zv-8wU">
-                                                    <rect key="frame" x="90" y="0.0" width="40" height="40"/>
-                                                    <constraints>
-                                                        <constraint firstAttribute="width" secondItem="dyX-Zv-8wU" secondAttribute="height" multiplier="1:1" id="i1A-Yl-2K4"/>
-                                                    </constraints>
-                                                    <fontDescription key="fontDescription" style="UICTFontTextStyleTitle3"/>
-                                                    <inset key="contentEdgeInsets" minX="3" minY="0.0" maxX="0.0" maxY="0.0"/>
-                                                    <state key="normal" title="🍕"/>
-                                                    <state key="selected" backgroundImage="Oval Selection"/>
-                                                    <state key="highlighted" backgroundImage="Oval Selection"/>
-                                                    <connections>
-                                                        <action selector="buttonTapped:" destination="WC7-gw-ru6" eventType="touchUpInside" id="LMf-YH-Glr"/>
-                                                    </connections>
-                                                </button>
-                                                <button opaque="NO" contentMode="center" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Mde-by-DTA">
-                                                    <rect key="frame" x="135" y="0.0" width="40" height="40"/>
-                                                    <constraints>
-                                                        <constraint firstAttribute="width" secondItem="Mde-by-DTA" secondAttribute="height" multiplier="1:1" id="WPt-ZL-25c"/>
-                                                    </constraints>
-                                                    <fontDescription key="fontDescription" style="UICTFontTextStyleTitle3"/>
-                                                    <inset key="contentEdgeInsets" minX="3" minY="0.0" maxX="0.0" maxY="0.0"/>
-                                                    <state key="normal" title="🍽"/>
-                                                    <state key="selected" backgroundImage="Oval Selection"/>
-                                                    <state key="highlighted" backgroundImage="Oval Selection"/>
-                                                    <connections>
-                                                        <action selector="buttonTapped:" destination="WC7-gw-ru6" eventType="touchUpInside" id="DSe-7Q-Kgv"/>
-                                                    </connections>
-                                                </button>
-                                            </subviews>
-                                            <constraints>
-                                                <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="40" id="pOj-cM-U6l"/>
-                                            </constraints>
-                                        </stackView>
-                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="751" text="Food Type" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NRZ-dT-iqj">
-                                            <rect key="frame" x="16" y="12" width="81" height="20.5"/>
-                                            <fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
-                                            <nil key="textColor"/>
-                                            <nil key="highlightedColor"/>
-                                        </label>
-                                    </subviews>
-                                    <constraints>
-                                        <constraint firstAttribute="trailingMargin" secondItem="KGo-Jr-uxw" secondAttribute="trailing" id="3hY-2e-LYK"/>
-                                        <constraint firstItem="KGo-Jr-uxw" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="NRZ-dT-iqj" secondAttribute="trailing" constant="8" symbolic="YES" id="7Qr-6r-lcu"/>
-                                        <constraint firstItem="NRZ-dT-iqj" firstAttribute="centerY" secondItem="9ds-EY-fUr" secondAttribute="centerY" id="Atr-bf-Ddi"/>
-                                        <constraint firstAttribute="bottom" secondItem="KGo-Jr-uxw" secondAttribute="bottom" priority="750" constant="4" id="cvP-zZ-cgY"/>
-                                        <constraint firstItem="NRZ-dT-iqj" firstAttribute="leading" secondItem="9ds-EY-fUr" secondAttribute="leadingMargin" id="m6A-Bd-Uai"/>
-                                        <constraint firstItem="KGo-Jr-uxw" firstAttribute="top" secondItem="9ds-EY-fUr" secondAttribute="top" constant="4" id="qZp-0X-xDh"/>
-                                    </constraints>
-                                </tableViewCellContentView>
-                                <connections>
-                                    <outlet property="buttonStack" destination="KGo-Jr-uxw" id="I4m-BA-Xwi"/>
-                                </connections>
-                            </tableViewCell>
-                        </prototypes>
-                        <sections/>
-                        <connections>
-                            <outlet property="dataSource" destination="LyL-9U-twn" id="5UQ-wx-mja"/>
-                            <outlet property="delegate" destination="LyL-9U-twn" id="2jX-b3-pDH"/>
-                        </connections>
-                    </tableView>
-                    <navigationItem key="navigationItem" title="Add/Edit Carb Entry" id="bM2-yI-YmX">
-                        <barButtonItem key="leftBarButtonItem" systemItem="cancel" id="7Qi-am-Msi">
-                            <connections>
-                                <segue destination="T5h-mI-vtL" kind="unwind" identifier="" unwindAction="unwindFromEditing:" id="UWh-NX-iGp"/>
-                            </connections>
-                        </barButtonItem>
-                        <barButtonItem key="rightBarButtonItem" style="done" systemItem="save" id="V0S-Me-oAl">
-                            <connections>
-                                <segue destination="T5h-mI-vtL" kind="unwind" unwindAction="unwindFromEditing:" id="h8M-r9-ToD"/>
-                            </connections>
-                        </barButtonItem>
-                    </navigationItem>
-                    <connections>
-                        <outlet property="saveButtonItem" destination="V0S-Me-oAl" id="jte-UB-Cfb"/>
-                    </connections>
-                </tableViewController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="71E-eW-u0n" userLabel="First Responder" sceneMemberID="firstResponder"/>
-                <exit id="T5h-mI-vtL" userLabel="Exit" sceneMemberID="exit"/>
-            </objects>
-            <point key="canvasLocation" x="3317.5999999999999" y="-810.0449775112445"/>
-        </scene>
-    </scenes>
-    <resources>
-        <image name="Oval Selection" width="21" height="21"/>
-    </resources>
-    <inferredMetricsTieBreakers>
-        <segue reference="rV7-J1-5KP"/>
-    </inferredMetricsTieBreakers>
-</document>

+ 0 - 434
Dependencies/LoopKit/LoopKitUI/CarbKit/CarbEntryEditViewController.swift

@@ -1,434 +0,0 @@
-//
-//  CarbEntryEditViewController.swift
-//  CarbKit
-//
-//  Created by Nathan Racklyeft on 1/15/16.
-//  Copyright © 2016 Nathan Racklyeft. All rights reserved.
-//
-
-import UIKit
-import HealthKit
-import LoopKit
-
-
-public final class CarbEntryEditViewController: UITableViewController {
-    
-    var navigationDelegate = CarbEntryNavigationDelegate()
-    
-    public var defaultAbsorptionTimes: CarbStore.DefaultAbsorptionTimes? {
-        didSet {
-            if let times = defaultAbsorptionTimes {
-                orderedAbsorptionTimes = [times.fast, times.medium, times.slow]
-            }
-        }
-    }
-
-    fileprivate var orderedAbsorptionTimes = [TimeInterval]()
-
-    public var preferredUnit = HKUnit.gram()
-
-    public var maxQuantity = HKQuantity(unit: .gram(), doubleValue: 250)
-
-    /// Entry configuration values. Must be set before presenting.
-    public var absorptionTimePickerInterval = TimeInterval(minutes: 30)
-
-    public var maxAbsorptionTime = TimeInterval(hours: 8)
-
-    public var maximumDateFutureInterval = TimeInterval(hours: 4)
-
-    public var originalCarbEntry: StoredCarbEntry? {
-        didSet {
-            if let entry = originalCarbEntry {
-                quantity = entry.quantity
-                date = entry.startDate
-                foodType = entry.foodType
-                absorptionTime = entry.absorptionTime
-
-                absorptionTimeWasEdited = true
-                usesCustomFoodType = true
-
-                shouldBeginEditingQuantity = false
-            }
-        }
-    }
-
-    fileprivate var lastEntryDate: Date?
-
-    fileprivate func updateLastEntryDate() { lastEntryDate = Date() }
-
-    fileprivate var quantity: HKQuantity? {
-        didSet {
-            if quantity != oldValue {
-                updateLastEntryDate()
-            }
-        }
-    }
-
-    fileprivate var date = Date() {
-        didSet {
-            if date != oldValue {
-                updateLastEntryDate()
-            }
-        }
-    }
-
-    fileprivate var foodType: String? {
-        didSet {
-            if foodType != oldValue {
-                updateLastEntryDate()
-            }
-        }
-    }
-
-    fileprivate var absorptionTime: TimeInterval? {
-        didSet {
-            if absorptionTime != oldValue {
-                updateLastEntryDate()
-            }
-        }
-    }
-
-    fileprivate var absorptionTimeWasEdited = false
-
-    fileprivate var usesCustomFoodType = false
-
-    private var shouldBeginEditingQuantity = true
-
-    private var shouldBeginEditingFoodType = false
-
-    public var updatedCarbEntry: NewCarbEntry? {
-        if  let lastEntryDate = lastEntryDate,
-            let quantity = quantity,
-            let absorptionTime = absorptionTime ?? defaultAbsorptionTimes?.medium
-        {
-            if let o = originalCarbEntry, o.quantity == quantity && o.startDate == date && o.foodType == foodType && o.absorptionTime == absorptionTime {
-                return nil  // No changes were made
-            }
-            
-            return NewCarbEntry(
-                date: lastEntryDate,
-                quantity: quantity,
-                startDate: date,
-                foodType: foodType,
-                absorptionTime: absorptionTime
-            )
-        } else {
-            return nil
-        }
-    }
-
-    private var isSampleEditable: Bool {
-        return originalCarbEntry?.createdByCurrentApp != false
-    }
-
-    public override func viewDidLoad() {
-        super.viewDidLoad()
-
-        tableView.rowHeight = UITableView.automaticDimension
-        tableView.estimatedRowHeight = 44
-        tableView.register(DateAndDurationTableViewCell.nib(), forCellReuseIdentifier: DateAndDurationTableViewCell.className)
-
-        if originalCarbEntry != nil {
-            title = LocalizedString("Edit Carb Entry", value: "Edit Carb Entry", comment: "The title of the view controller to edit an existing carb entry")
-        } else {
-            title = LocalizedString("Add Carb Entry", value: "Add Carb Entry", comment: "The title of the view controller to create a new carb entry")
-        }
-    }
-
-    public override func viewDidAppear(_ animated: Bool) {
-        super.viewDidAppear(animated)
-
-        if shouldBeginEditingQuantity, let cell = tableView.cellForRow(at: IndexPath(row: Row.value.rawValue, section: 0)) as? DecimalTextFieldTableViewCell {
-            shouldBeginEditingQuantity = false
-            cell.textField.becomeFirstResponder()
-        }
-    }
-
-    private var foodKeyboard: EmojiInputController!
-
-    @IBOutlet weak var saveButtonItem: UIBarButtonItem!
-
-    // MARK: - Table view data source
-
-    fileprivate enum Row: Int {
-        case value
-        case date
-        case foodType
-        case absorptionTime
-
-        static let count = 4
-    }
-
-    public override func numberOfSections(in tableView: UITableView) -> Int {
-        return 1
-    }
-
-    public override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-        return Row.count
-    }
-
-    public override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        switch Row(rawValue: indexPath.row)! {
-        case .value:
-            let cell = tableView.dequeueReusableCell(withIdentifier: DecimalTextFieldTableViewCell.className) as! DecimalTextFieldTableViewCell
-
-            if let quantity = quantity {
-                cell.number = NSNumber(value: quantity.doubleValue(for: preferredUnit))
-            }
-            cell.textField.isEnabled = isSampleEditable
-            cell.unitLabel?.text = String(describing: preferredUnit)
-            cell.delegate = self
-
-            return cell
-        case .date:
-            let cell = tableView.dequeueReusableCell(withIdentifier: DateAndDurationTableViewCell.className) as! DateAndDurationTableViewCell
-
-            cell.titleLabel.text = LocalizedString("Date", comment: "Title of the carb entry date picker cell")
-            cell.datePicker.isEnabled = isSampleEditable
-            cell.datePicker.datePickerMode = .dateAndTime
-            cell.datePicker.preferredDatePickerStyle = .wheels
-            cell.datePicker.maximumDate = Date(timeIntervalSinceNow: maximumDateFutureInterval)
-            cell.datePicker.minuteInterval = 1
-            cell.date = date
-            cell.delegate = self
-
-            return cell
-        case .foodType:
-            if usesCustomFoodType {
-                let cell = tableView.dequeueReusableCell(withIdentifier: TextFieldTableViewCell.className, for: indexPath) as! TextFieldTableViewCell
-
-                cell.textField.text = foodType
-                cell.delegate = self
-
-                if let textField = cell.textField as? CustomInputTextField {
-                    if foodKeyboard == nil {
-                        foodKeyboard = CarbAbsorptionInputController()
-                        foodKeyboard.delegate = self
-                    }
-
-                    textField.customInput = foodKeyboard
-                }
-
-                return cell
-            } else {
-                let cell = tableView.dequeueReusableCell(withIdentifier: FoodTypeShortcutCell.className, for: indexPath) as! FoodTypeShortcutCell
-
-                if absorptionTime == nil {
-                    cell.selectionState = .medium
-                }
-
-                cell.delegate = self
-
-                return cell
-            }
-        case .absorptionTime:
-            let cell = tableView.dequeueReusableCell(withIdentifier: DateAndDurationTableViewCell.className) as! DateAndDurationTableViewCell
-
-            cell.titleLabel.text = LocalizedString("Absorption Time", comment: "Title of the carb entry absorption time cell")
-            cell.datePicker.isEnabled = isSampleEditable
-            cell.datePicker.datePickerMode = .countDownTimer
-            cell.datePicker.minuteInterval = Int(absorptionTimePickerInterval.minutes)
-
-            if let duration = absorptionTime ?? defaultAbsorptionTimes?.medium {
-                cell.duration = duration
-            }
-
-            cell.maximumDuration = maxAbsorptionTime
-            cell.delegate = self
-
-            return cell
-        }
-    }
-
-    public override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
-        switch Row(rawValue: indexPath.row)! {
-        case .value, .date:
-            break
-        case .foodType:
-            if usesCustomFoodType, shouldBeginEditingFoodType, let cell = cell as? TextFieldTableViewCell {
-                shouldBeginEditingFoodType = false
-                cell.textField.becomeFirstResponder()
-            }
-        case .absorptionTime:
-            break
-        }
-    }
-
-    public override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
-        return LocalizedString("Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact.", comment: "Carb entry section footer text explaining absorption time")
-    }
-
-    // MARK: - UITableViewDelegate
-
-    public override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
-        tableView.endEditing(false)
-        tableView.beginUpdates()
-        hideDatePickerCells(excluding: indexPath)
-        return indexPath
-    }
-
-    public override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-        switch tableView.cellForRow(at: indexPath) {
-        case is FoodTypeShortcutCell:
-            usesCustomFoodType = true
-            shouldBeginEditingFoodType = true
-            tableView.reloadRows(at: [IndexPath(row: Row.foodType.rawValue, section: 0)], with: .none)
-        default:
-            break
-        }
-
-        tableView.endUpdates()
-        tableView.deselectRow(at: indexPath, animated: true)
-    }
-
-    // MARK: - Navigation
-
-    public override func restoreUserActivityState(_ activity: NSUserActivity) {
-        if let entry = activity.newCarbEntry {
-            lastEntryDate = entry.date
-            quantity = entry.quantity
-            date = entry.startDate
-
-            if let foodType = entry.foodType {
-                self.foodType = foodType
-                usesCustomFoodType = true
-            }
-
-            if let absorptionTime = entry.absorptionTime {
-                self.absorptionTime = absorptionTime
-                absorptionTimeWasEdited = true
-            }
-        }
-    }
-
-    public override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
-        self.tableView.endEditing(true)
-
-        guard let button = sender as? UIBarButtonItem, button == saveButtonItem else {
-            quantity = nil
-            return super.shouldPerformSegue(withIdentifier: identifier, sender: sender)
-        }
-
-        guard let absorptionTime = absorptionTime ?? defaultAbsorptionTimes?.medium else {
-            return false
-        }
-        guard absorptionTime <= maxAbsorptionTime else {
-            navigationDelegate.showAbsorptionTimeValidationWarning(for: self, maxAbsorptionTime: maxAbsorptionTime)
-            return false
-        }
-
-        guard let quantity = quantity, quantity.doubleValue(for: HKUnit.gram()) > 0 else { return false }
-        guard quantity.compare(maxQuantity) != .orderedDescending else {
-            navigationDelegate.showMaxQuantityValidationWarning(for: self, maxQuantityGrams: maxQuantity.doubleValue(for: .gram()))
-            return false
-        }
-
-        return true
-    }
-}
-
-
-extension CarbEntryEditViewController: TextFieldTableViewCellDelegate {
-    public func textFieldTableViewCellDidBeginEditing(_ cell: TextFieldTableViewCell) {
-        // Collapse any date picker cells to save space
-        tableView.beginUpdates()
-        hideDatePickerCells()
-        tableView.endUpdates()
-    }
-
-    public func textFieldTableViewCellDidChangeEditing(_ cell: TextFieldTableViewCell) {
-        guard let row = tableView.indexPath(for: cell)?.row else { return }
-
-        switch Row(rawValue: row) {
-        case .value?:
-            if let cell = cell as? DecimalTextFieldTableViewCell, let number = cell.number {
-                quantity = HKQuantity(unit: preferredUnit, doubleValue: number.doubleValue)
-            } else {
-                quantity = nil
-            }
-        case .foodType?:
-            foodType = cell.textField.text
-        default:
-            break
-        }
-    }
-
-    public func textFieldTableViewCellDidEndEditing(_ cell: TextFieldTableViewCell) {
-        textFieldTableViewCellDidChangeEditing(cell)
-    }
-}
-
-
-extension CarbEntryEditViewController: DatePickerTableViewCellDelegate {
-    public func datePickerTableViewCellDidUpdateDate(_ cell: DatePickerTableViewCell) {
-        guard let row = tableView.indexPath(for: cell)?.row else { return }
-
-        switch Row(rawValue: row) {
-        case .date?:
-            date = cell.date
-        case .absorptionTime?:
-            absorptionTime = cell.duration
-            absorptionTimeWasEdited = true
-        default:
-            break
-        }
-    }
-}
-
-
-extension CarbEntryEditViewController: FoodTypeShortcutCellDelegate {
-    public func foodTypeShortcutCellDidUpdateSelection(_ cell: FoodTypeShortcutCell) {
-        var absorptionTime: TimeInterval?
-
-        switch cell.selectionState {
-        case .fast:
-            absorptionTime = defaultAbsorptionTimes?.fast
-        case .medium:
-            absorptionTime = defaultAbsorptionTimes?.medium
-        case .slow:
-            absorptionTime = defaultAbsorptionTimes?.slow
-        case .custom:
-            tableView.beginUpdates()
-            usesCustomFoodType = true
-            shouldBeginEditingFoodType = true
-            tableView.reloadRows(at: [IndexPath(row: Row.foodType.rawValue, section: 0)], with: .fade)
-            tableView.endUpdates()
-        }
-
-        if let absorptionTime = absorptionTime {
-            self.absorptionTime = absorptionTime
-
-            if let cell = tableView.cellForRow(at: IndexPath(row: Row.absorptionTime.rawValue, section: 0)) as? DateAndDurationTableViewCell {
-                cell.duration = absorptionTime
-            }
-        }
-    }
-}
-
-
-extension CarbEntryEditViewController: EmojiInputControllerDelegate {
-    public func emojiInputControllerDidAdvanceToStandardInputMode(_ controller: EmojiInputController) {
-        if let cell = tableView.cellForRow(at: IndexPath(row: Row.foodType.rawValue, section: 0)) as? TextFieldTableViewCell, let textField = cell.textField as? CustomInputTextField, textField.customInput != nil {
-            let customInput = textField.customInput
-            textField.customInput = nil
-            textField.resignFirstResponder()
-            textField.becomeFirstResponder()
-            textField.customInput = customInput
-        }
-    }
-
-    public func emojiInputControllerDidSelectItemInSection(_ section: Int) {
-        guard !absorptionTimeWasEdited, section < orderedAbsorptionTimes.count else {
-            return
-        }
-
-        if absorptionTime == nil {
-            // only adjust the absorption time if it wasn't already set.
-            absorptionTime = orderedAbsorptionTimes[section]
-            
-            if let cell = tableView.cellForRow(at: IndexPath(row: Row.absorptionTime.rawValue, section: 0)) as? DateAndDurationTableViewCell {
-                cell.duration = orderedAbsorptionTimes[section]
-            }
-        }
-    }
-}

+ 0 - 355
Dependencies/LoopKit/LoopKitUI/CarbKit/CarbEntryTableViewController.swift

@@ -1,355 +0,0 @@
-//
-//  CarbEntryTableViewController.swift
-//  CarbKit
-//
-//  Created by Nathan Racklyeft on 1/10/16.
-//  Copyright © 2016 Nathan Racklyeft. All rights reserved.
-//
-
-import UIKit
-import HealthKit
-import LoopKit
-
-private let ReuseIdentifier = "CarbEntry"
-
-
-public final class CarbEntryTableViewController: UITableViewController {
-
-    @IBOutlet var unavailableMessageView: UIView!
-
-    @IBOutlet var authorizationRequiredMessageView: UIView!
-
-    @IBOutlet weak var COBValueLabel: UILabel!
-
-    @IBOutlet weak var COBDateLabel: UILabel!
-
-    @IBOutlet weak var totalValueLabel: UILabel!
-
-    @IBOutlet weak var totalDateLabel: UILabel!
-
-    public var carbStore: CarbStore? {
-        didSet {
-            if let carbStore = carbStore {
-                carbStoreObserver = NotificationCenter.default.addObserver(forName: nil,
-                    object: carbStore,
-                    queue: OperationQueue.main,
-                    using: { [weak self] (note) -> Void in
-                        switch note.name {
-                        case CarbStore.carbEntriesDidChange:
-                            if let strongSelf = self, strongSelf.isViewLoaded {
-                                strongSelf.reloadData()
-                            }
-                        case Notification.Name.StoreAuthorizationStatusDidChange:
-                            break
-                        default:
-                            break
-                        }
-                    }
-                )
-            } else {
-                carbStoreObserver = nil
-            }
-        }
-    }
-
-    private var updateTimer: Timer? {
-        willSet {
-            if let timer = updateTimer {
-                timer.invalidate()
-            }
-        }
-    }
-
-    public override func viewDidLoad() {
-        super.viewDidLoad()
-
-        if let carbStore = carbStore {
-            if carbStore.authorizationRequired {
-                state = .authorizationRequired
-            } else if carbStore.sharingDenied {
-                state = .unavailable
-            } else {
-                state = .display
-            }
-        } else {
-            state = .unavailable
-        }
-
-        navigationItem.rightBarButtonItems?.append(editButtonItem)
-    }
-
-    public override func viewWillAppear(_ animated: Bool) {
-        super.viewWillAppear(animated)
-
-        updateTimelyStats(nil)
-    }
-
-    public override func viewDidAppear(_ animated: Bool) {
-        super.viewDidAppear(animated)
-
-        let updateInterval = TimeInterval(minutes: 5)
-        let timer = Timer(
-            fireAt: Date().dateCeiledToTimeInterval(updateInterval).addingTimeInterval(2),
-            interval: updateInterval,
-            target: self,
-            selector: #selector(updateTimelyStats(_:)),
-            userInfo: nil,
-            repeats: true
-        )
-        updateTimer = timer
-
-        RunLoop.current.add(timer, forMode: RunLoop.Mode.default)
-    }
-
-    public override func viewWillDisappear(_ animated: Bool) {
-        super.viewWillDisappear(animated)
-
-        updateTimer = nil
-    }
-
-    deinit {
-        if let observer = carbStoreObserver {
-            NotificationCenter.default.removeObserver(observer)
-        }
-    }
-
-    // MARK: - Data
-
-    private var carbEntries: [StoredCarbEntry] = []
-
-    private enum State {
-        case unknown
-        case unavailable
-        case authorizationRequired
-        case display
-    }
-
-    private var state = State.unknown {
-        didSet {
-            if isViewLoaded {
-                reloadData()
-            }
-        }
-    }
-
-    private func reloadData() {
-        switch state {
-        case .unknown:
-            break
-        case .unavailable:
-            tableView.backgroundView = unavailableMessageView
-        case .authorizationRequired:
-            tableView.backgroundView = authorizationRequiredMessageView
-        case .display:
-            navigationItem.rightBarButtonItems?.forEach { $0.isEnabled = true }
-
-            tableView.backgroundView = nil
-            tableView.tableHeaderView?.isHidden = false
-            tableView.tableFooterView = nil
-
-            guard let carbStore = carbStore else { return }
-
-            let start = min(Calendar.current.startOfDay(for: Date()), Date(timeIntervalSinceNow: -2 * carbStore.defaultAbsorptionTimes.slow))
-            carbStore.getCarbEntries(start: start) { (result) in
-                DispatchQueue.main.async {
-                    switch result {
-                    case .success(let entries):
-                        self.carbEntries = entries
-                        self.tableView.reloadData()
-                    case .failure(let error):
-                        self.present(UIAlertController(with: error), animated: true)
-                    }
-
-                    self.updateTimelyStats(nil)
-                    self.updateTotal()
-                }
-            }
-        }
-    }
-
-    @objc func updateTimelyStats(_: Timer?) {
-        updateCOB()
-    }
-
-    private func updateCOB() {
-        if case .display = state, let carbStore = carbStore {
-            carbStore.carbsOnBoard(at: Date()) { (result) in
-                DispatchQueue.main.async {
-                    switch result {
-                    case .success(let value):
-                        self.COBValueLabel.text = NumberFormatter.localizedString(from: NSNumber(value: value.quantity.doubleValue(for: carbStore.preferredUnit)), number: .none)
-                        self.COBDateLabel.text = String(format: LocalizedString("com.loudnate.CarbKit.COBDateLabel", value: "at %1$@", comment: "The format string describing the date of a COB value. The first format argument is the localized date."), DateFormatter.localizedString(from: value.startDate, dateStyle: .none, timeStyle: .short))
-                    case .failure:
-                        self.COBValueLabel.text = NumberFormatter.localizedString(from: 0, number: .none)
-                        self.COBDateLabel.text = nil
-                    }
-                }
-            }
-        }
-    }
-
-    private func updateTotal() {
-        if case .display = state, let carbStore = carbStore {
-            carbStore.getTotalCarbs(since: Calendar.current.startOfDay(for: Date())) { (result) -> Void in
-                DispatchQueue.main.async {
-                    switch result {
-                    case .success(let value):
-                        self.totalValueLabel.text = NumberFormatter.localizedString(from: NSNumber(value: value.quantity.doubleValue(for: carbStore.preferredUnit)), number: .none)
-                        self.totalDateLabel.text = String(format: LocalizedString("com.loudnate.CarbKit.totalDateLabel", value: "since %1$@", comment: "The format string describing the starting date of a total value. The first format argument is the localized date."), DateFormatter.localizedString(from: value.startDate, dateStyle: .none, timeStyle: .short))
-                    case .failure:
-                        self.totalValueLabel.text = NumberFormatter.localizedString(from: 0, number: .none)
-                        self.totalDateLabel.text = nil
-                    }
-                }
-            }
-        }
-    }
-
-    private var carbStoreObserver: Any? {
-        willSet {
-            if let observer = carbStoreObserver {
-                NotificationCenter.default.removeObserver(observer)
-            }
-        }
-    }
-
-    // MARK: - Table view data source
-
-    public override func numberOfSections(in tableView: UITableView) -> Int {
-        switch state {
-        case .unknown, .unavailable, .authorizationRequired:
-            return 0
-        case .display:
-            return 1
-        }
-    }
-
-    public override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-        return carbEntries.count
-    }
-
-    public override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        let cell = tableView.dequeueReusableCell(withIdentifier: ReuseIdentifier, for: indexPath)
-
-        if case .display = state, let carbStore = carbStore {
-            let entry = carbEntries[indexPath.row]
-            let value = NumberFormatter.localizedString(from: NSNumber(value: entry.quantity.doubleValue(for: carbStore.preferredUnit)), number: .none)
-
-            var titleText = "\(value) \(carbStore.preferredUnit!)"
-
-            if let foodType = entry.foodType {
-                titleText += ": \(foodType)"
-            }
-
-            cell.textLabel?.text = titleText
-
-            var detailText = DateFormatter.localizedString(from: entry.startDate, dateStyle: .none, timeStyle: .short)
-
-            if let absorptionTime = entry.absorptionTime {
-                let minutes = NumberFormatter.localizedString(from: NSNumber(value: absorptionTime.minutes), number: .none)
-                detailText += " + \(minutes) min"
-            }
-
-            cell.detailTextLabel?.text = detailText
-        }
-        return cell
-    }
-
-    public override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
-        return carbEntries[indexPath.row].createdByCurrentApp
-    }
-
-    public override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
-        if editingStyle == .delete, case .display = state, let carbStore = carbStore {
-            let entry = carbEntries.remove(at: indexPath.row)
-            carbStore.deleteCarbEntry(entry) { (result) -> Void in
-                DispatchQueue.main.async {
-                    switch result {
-                    case .failure(let error):
-                        self.present(UIAlertController(with: error), animated: true)
-                    case .success:
-                        tableView.deleteRows(at: [indexPath], with: .automatic)
-                        self.updateTimelyStats(nil)
-                        self.updateTotal()
-                    }
-                }
-            }
-        }
-    }
-
-    // MARK: - UITableViewDelegate
-
-    public override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
-        let entry = carbEntries[indexPath.row]
-
-        if !entry.createdByCurrentApp {
-            return nil
-        }
-
-        return indexPath
-    }
-
-    // MARK: - Navigation
-
-    @IBAction func unwindFromEditing(_ segue: UIStoryboardSegue) {
-        if let  editVC = segue.source as? CarbEntryEditViewController,
-                let updatedEntry = editVC.updatedCarbEntry
-        {
-            if let originalEntry = editVC.originalCarbEntry {
-                carbStore?.replaceCarbEntry(originalEntry, withEntry: updatedEntry) { (result) -> Void in
-                    DispatchQueue.main.async {
-                        switch result {
-                        case .failure(let error):
-                            self.present(UIAlertController(with: error), animated: true)
-                        case .success:
-                            self.reloadData()
-                        }
-                    }
-                }
-            } else {
-                carbStore?.addCarbEntry(updatedEntry) { (result) -> Void in
-                    DispatchQueue.main.async {
-                        switch result {
-                        case .failure(let error):
-                            self.present(UIAlertController(with: error), animated: true)
-                        case .success:
-                            self.reloadData()
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    public override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
-        var editVC = segue.destination as? CarbEntryEditViewController
-
-        if editVC == nil, let navVC = segue.destination as? UINavigationController {
-            editVC = navVC.viewControllers.first as? CarbEntryEditViewController
-        }
-
-        if let editVC = editVC {
-            if let selectedCell = sender as? UITableViewCell, let indexPath = tableView.indexPath(for: selectedCell), indexPath.row < carbEntries.count {
-                editVC.originalCarbEntry = carbEntries[indexPath.row]
-            }
-
-            editVC.defaultAbsorptionTimes = carbStore?.defaultAbsorptionTimes
-        }
-    }
-
-    @IBAction func authorizeHealth(_ sender: Any) {
-        if case .authorizationRequired = state, let carbStore = carbStore {
-            carbStore.authorize { (result) in
-                DispatchQueue.main.async {
-                    switch result {
-                    case .success:
-                        self.state = .display
-                    case .failure(let error):
-                        self.present(UIAlertController(with: error), animated: true)
-                    }
-                }
-            }
-        }
-    }
-
-}

+ 0 - 47
Dependencies/LoopKit/LoopKitUI/CarbKit/CarbEntryValidationNavigationDelegate.swift

@@ -1,47 +0,0 @@
-//
-//  CarbEntryNavigationDelegate.swift
-//  LoopKit
-//
-//  Created by Jaim Zuber on 2/7/17.
-//  Copyright © 2017 LoopKit Authors. All rights reserved.
-//
-
-import Foundation
-
-public class CarbEntryNavigationDelegate {
-    private lazy var validationTitle = LocalizedString("Warning", comment: "Title of an alert containing a validation warning")
-    private lazy var dismissActionTitle = LocalizedString("com.loudnate.LoopKit.errorAlertActionTitle", value: "OK", comment: "The title of the action used to dismiss an error alert")
-
-    public init() {}
-
-    public func showAbsorptionTimeValidationWarning(for viewController: UIViewController, maxAbsorptionTime: TimeInterval) {
-        let formatter = DateComponentsFormatter()
-        formatter.allowedUnits = [.minute]
-        formatter.unitsStyle = .full
-
-        let message = String(
-            format: LocalizedString("The maximum absorption time is %@", comment: "Alert body displayed absorption time greater than max (1: maximum absorption time)"),
-            formatter.string(from: maxAbsorptionTime) ?? String(describing: maxAbsorptionTime))
-        let alert = UIAlertController(title: validationTitle, message: message, preferredStyle: .alert)
-
-        let action = UIAlertAction(title: dismissActionTitle, style: .default)
-        alert.addAction(action)
-        alert.preferredAction = action
-
-        viewController.present(alert, animated: true)
-    }
-
-    public func showMaxQuantityValidationWarning(for viewController: UIViewController, maxQuantityGrams: Double) {
-        let message = String(
-            format: LocalizedString("The maximum allowed amount is %@ grams", comment: "Alert body displayed for quantity greater than max (1: maximum quantity in grams)"),
-            NumberFormatter.localizedString(from: NSNumber(value: maxQuantityGrams), number: .none)
-        )
-        let alert = UIAlertController(title: validationTitle, message: message, preferredStyle: .alert)
-
-        let action = UIAlertAction(title: dismissActionTitle, style: .default)
-        alert.addAction(action)
-        alert.preferredAction = action
-
-        viewController.present(alert, animated: true)
-    }
-}

+ 80 - 0
Dependencies/LoopKit/LoopKitUI/Views/SingleSelectionCheckList.swift

@@ -0,0 +1,80 @@
+//
+//  SingleSelectionCheckList.swift
+//  LoopKitUI
+//
+//  Created by Nathaniel Hamming on 2022-09-09.
+//  Copyright © 2022 LoopKit Authors. All rights reserved.
+//
+
+import SwiftUI
+
+public struct SingleSelectionCheckList<Item: Hashable>: View {
+    let header: String?
+    let footer: String?
+    let items: [Item]
+    @Binding var selectedItem: Item
+
+    public init(header: String? = nil,
+                footer: String? = nil,
+                items: [Item],
+                selectedItem: Binding<Item>,
+                formatter: ((Item) -> Item)? = nil) {
+        self.header = header
+        self.footer = footer
+        self.items = items
+        _selectedItem = selectedItem
+    }
+
+    public var body: some View {
+        Section(header: header.map { Text($0) }, footer: footer.map { Text($0) }) {
+            ForEach(items, id:\.self) { item in
+                CheckSelectionRow<Item>(item: item,
+                                        selectedItem: self.$selectedItem)
+            }
+        }
+    }
+}
+
+struct CheckSelectionRow<Item>: View where Item: Hashable {
+    var item: Item
+    @Binding var selectedItem: Item
+
+    var isSelected: Bool {
+        selectedItem == item
+    }
+
+    var body: some View {
+        HStack {
+            Button(action: { selectedItem = item } ) {
+                Text(String(describing: item))
+                    .foregroundColor(.primary)
+            }
+            Spacer()
+            if isSelected {
+                Image(systemName: "checkmark.circle.fill")
+                    .foregroundColor(.accentColor)
+            }
+        }
+    }
+}
+
+struct SingleSelectionCheckList_Previews: PreviewProvider {
+    static var previews: some View {
+        PreviewWrapper()
+    }
+
+    struct PreviewWrapper: View {
+        enum Shape: String, CaseIterable {
+            case square = "Square"
+            case circle = "Circle"
+            case triangle = "Triangle"
+            case rectangle = "Rectangle"
+        }
+        @State var selectedFruit: Shape = .square
+
+        var body: some View {
+            SingleSelectionCheckList<Shape>(items: Shape.allCases,
+                                            selectedItem: $selectedFruit)
+        }
+    }
+}

+ 0 - 252
Dependencies/LoopKit/LoopKitUI/ar.lproj/Localizable.strings

@@ -1,252 +0,0 @@
-/* The format for an override preset cell. (1: symbol)(2: name)
-   The format for an override symbol and name (1: symbol)(2: name) */
-"%1$@ %2$@" = "%1$@ %2$@";
-
-/* Accessibility format string for (1: localized volume)(2: time) */
-"%1$@ units remaining at %2$@" = "%1$@ units remaining at %2$@";
-
-/* The format for a glucose target range. (1: min target)(2: max target)(3: glucose unit) */
-"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@";
-
-/* The format for an insulin needs percentage. */
-"%@%% of normal insulin" = "%@%% of normal insulin";
-
-/* Appends a full-stop to a statement */
-"%@." = "%@.";
-
-/* Format string for reservoir volume. (1: The localized volume) */
-"%@U" = "%@U";
-
-/* Title of the carb entry absorption time cell */
-"Absorption Time" = "Absorption Time";
-
-/* The title for the override emoji activity section */
-"Activity" = "Activity";
-
-/* Action sheet confirmation message for pump history deletion */
-"Are you sure you want to delete all history entries?" = "Are you sure you want to delete all history entries?";
-
-/* Action sheet confirmation message for reservoir deletion */
-"Are you sure you want to delete all reservoir values?" = "Are you sure you want to delete all reservoir values?";
-
-/* The title of the button to add the credentials for a service */
-"Add Account" = "Add Account";
-
-/* The title of the button to remove the credentials for a service */
-"Delete Account" = "Delete Account";
-
-/* Describes a percentage decrease in overall insulin needs */
-"Basal, bolus, and correction insulin dose amounts are decreased by %@%%." = "Basal, bolus, and correction insulin dose amounts are decreased by %@%%.";
-
-/* Describes a percentage increase in overall insulin needs */
-"Basal, bolus, and correction insulin dose amounts are increased by %@%%." = "Basal, bolus, and correction insulin dose amounts are increased by %@%%.";
-
-/* Describes a lack of change in overall insulin needs */
-"Basal, bolus, and correction insulin dose amounts are unaffected." = "Basal, bolus, and correction insulin dose amounts are unaffected.";
-
-/* The title of the cancel action in an action sheet */
-"Cancel" = "Cancel";
-
-/* The text for the override cancellation button */
-"Cancel Override" = "Cancel Override";
-
-/* Title text for suspend resume button when temp basal canceling */
-"Canceling Temp Basal" = "Canceling Temp Basal";
-
-/* The title of the view controller to create a new carb entry */
-"Add Carb Entry" = "Add Carb Entry";
-
-/* The title of the view controller to edit an existing carb entry */
-"Edit Carb Entry" = "Edit Carb Entry";
-
-/* Footer text for customizing an override from a preset (1: preset name) */
-"Changes will only apply this time you enable the override. The default settings of %@ will not be affected." = "Changes will only apply this time you enable the override. The default settings of %@ will not be affected.";
-
-/* Carb entry section footer text explaining absorption time */
-"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact.";
-
-/* The format string describing the date of a COB value. The first format argument is the localized date. */
-"com.loudnate.CarbKit.COBDateLabel" = "at %1$@";
-
-/* The format string describing the starting date of a total value. The first format argument is the localized date. */
-"com.loudnate.CarbKit.totalDateLabel" = "since %1$@";
-
-/* The format string describing the date of an IOB value. The first format argument is the localized date. */
-"com.loudnate.InsulinKit.IOBDateLabel" = "at %1$@";
-
-/* The format string describing the starting date of a total value. The first format argument is the localized date. */
-"com.loudnate.InsulinKit.totalDateLabel" = "since %1$@";
-
-/* The title of the action used to dismiss an error alert */
-"com.loudnate.LoopKit.errorAlertActionTitle" = "OK";
-
-/* The title for the override emoji condition section */
-"Condition" = "Condition";
-
-/* Title of the setup button to continue */
-"Continue" = "Continue";
-
-/* The section footer of correction range schedule */
-"Correction range is the blood glucose range that you would like Loop to correct to." = "Correction range is the blood glucose range that you would like Loop to correct to.";
-
-/* The text for a custom override */
-"Custom" = "Custom";
-
-/* The title for the custom override entry screen */
-"Custom Override" = "Custom Override";
-
-/* Title of the carb entry date picker cell */
-"Date" = "Date";
-
-/* Button title to delete all objects */
-"Delete All" = "Delete All";
-
-/* The text for the override duration setting */
-"Duration" = "Duration";
-
-/* The title for the override editing screen */
-"Edit Override" = "Edit Override";
-
-/* Footer text for editing an active override (1: preset name) */
-"Editing affects only the active override. The default settings of %@ will not be affected." = "Editing affects only the active override. The default settings of %@ will not be affected.";
-
-/* The text for the indefinite override duration setting */
-"Enable Indefinitely" = "Enable Indefinitely";
-
-/* The detail text describing an enabled setting */
-"Enabled" = "Enabled";
-
-/* The placeholder text instructing users how to enter a maximum bolus */
-"Enter a number of units" = "Enter a number of units";
-
-/* The placeholder text instructing users how to enter a maximum basal rate */
-"Enter a rate in units per hour" = "Enter a rate in units per hour";
-
-/* Section title for fast absorbing food */
-"Fast" = "Fast";
-
-/* The description shown on the insulin sensitivity schedule interface. */
-"Insulin sensitivity describes how your blood glucose should respond to a 1 Unit dose of insulin. Smaller values mean more insulin will be given when above target. Values that are too small can cause dangerously low blood glucose." = "Insulin sensitivity describes how your blood glucose should respond to a 1 Unit dose of insulin. Smaller values mean more insulin will be given when above target. Values that are too small can cause dangerously low blood glucose.";
-
-/* Placeholder for maximum value in glucose range */
-"max" = "max";
-
-/* The title text for the maximum basal rate value */
-"Maximum Basal Rate" = "Maximum Basal Rate";
-
-/* The title text for the maximum bolus value */
-"Maximum Bolus" = "Maximum Bolus";
-
-/* Section title for medium absorbing food */
-"Medium" = "Medium";
-
-/* Placeholder for minimum value in glucose range */
-"min" = "min";
-
-/* Alert action title to open error help */
-"More Info" = "More Info";
-
-/* The text for the override preset name setting */
-"Name" = "Name";
-
-/* The title for the new override preset entry screen */
-"New Preset" = "New Preset";
-
-/* Section title for no-carb food
-   The title for override emoji miscellaneous section */
-"Other" = "Other";
-
-/* The title text for the insulin sensitivity scaling setting */
-"Overall Insulin Needs" = "Overall Insulin Needs";
-
-/* The title text for the override presets screen */
-"Override Presets" = "Override Presets";
-
-/* Text directing the user to configure override presets */
-"Override presets can be set up under the 'Configuration' section of the settings screen." = "Override presets can be set up under the 'Configuration' section of the settings screen.";
-
-/* The section title of glucose overrides */
-"Overrides" = "Overrides";
-
-/* Title for the pre-meal override range */
-"Pre-Meal" = "Pre-Meal";
-
-/* The section header text override presets */
-"PRESETS" = "PRESETS";
-
-/* The title of the screen displaying a pump event */
-"Pump Event" = "Pump Event";
-
-/* Title text for button to resume insulin delivery */
-"Resume Delivery" = "Resume Delivery";
-
-/* Title text for button when insulin delivery is in the process of being resumed */
-"Resuming" = "Resuming";
-
-/* The text for the override preset name field placeholder */
-"Running" = "Running";
-
-/* Button text for saving glucose correction range schedule
-   Button text for saving insulin sensitivity schedule */
-"Save" = "Save";
-
-/* The section header text for a scheduled override */
-"SCHEDULED OVERRIDE" = "SCHEDULED OVERRIDE";
-
-/* Section title for slow absorbing food */
-"Slow" = "Slow";
-
-/* The text for the override start time */
-"Start Time" = "Start Time";
-
-/* Title text for suspend resume button when temp basal starting */
-"Starting Temp Basal" = "Starting Temp Basal";
-
-/* Title text for button to suspend insulin delivery */
-"Suspend Delivery" = "Suspend Delivery";
-
-/* Title text for button when insulin delivery is in the process of being stopped */
-"Suspending" = "Suspending";
-
-/* The text for the override preset symbol setting */
-"Symbol" = "Symbol";
-
-/* The empty-state text for a configuration value */
-"Tap to set" = "Tap to set";
-
-/* The text for the override target range setting */
-"Target Range" = "Target Range";
-
-/* The title for the override selection screen */
-"Temporary Override" = "Temporary Override";
-
-/* The default placeholder string for a credential */
-"Required" = "Required";
-
-/* Alert body displayed absorption time greater than max (1: maximum absorption time) */
-"The maximum absorption time is %@" = "The maximum absorption time is %@";
-
-/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */
-"The maximum allowed amount is %@ grams" = "The maximum allowed amount is %@ grams";
-
-/* The schedule table view header describing the configured time zone difference from the default time zone. The substitution parameters are: (1: time zone name)(2: +/-)(3: time interval) */
-"Times in %1$@%2$@%3$@" = "Times in %1$@%2$@%3$@";
-
-/* The unit string for units per hour */
-"U/hour" = "U/hour";
-
-/* The unit string for units */
-"Units" = "Units";
-
-/* Accessibility value for an unknown value
-   The default title to use when an entry has none */
-"Unknown" = "Unknown";
-
-/* Label indicating validation is occurring */
-"Verifying" = "Verifying";
-
-/* Title of an alert containing a validation warning */
-"Warning" = "Warning";
-
-/* Title for the workout override range */
-"Workout" = "Workout";

+ 0 - 252
Dependencies/LoopKit/LoopKitUI/ca.lproj/Localizable.strings

@@ -1,252 +0,0 @@
-/* The format for an override preset cell. (1: symbol)(2: name)
-   The format for an override symbol and name (1: symbol)(2: name) */
-"%1$@ %2$@" = "%1$@ %2$@";
-
-/* Accessibility format string for (1: localized volume)(2: time) */
-"%1$@ units remaining at %2$@" = "%1$@ units remaining at %2$@";
-
-/* The format for a glucose target range. (1: min target)(2: max target)(3: glucose unit) */
-"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@";
-
-/* The format for an insulin needs percentage. */
-"%@%% of normal insulin" = "%@%% of normal insulin";
-
-/* Appends a full-stop to a statement */
-"%@." = "%@.";
-
-/* Format string for reservoir volume. (1: The localized volume) */
-"%@U" = "%@U";
-
-/* Title of the carb entry absorption time cell */
-"Absorption Time" = "Absorption Time";
-
-/* The title for the override emoji activity section */
-"Activity" = "Activity";
-
-/* Action sheet confirmation message for pump history deletion */
-"Are you sure you want to delete all history entries?" = "Are you sure you want to delete all history entries?";
-
-/* Action sheet confirmation message for reservoir deletion */
-"Are you sure you want to delete all reservoir values?" = "Are you sure you want to delete all reservoir values?";
-
-/* The title of the button to add the credentials for a service */
-"Add Account" = "Add Account";
-
-/* The title of the button to remove the credentials for a service */
-"Delete Account" = "Delete Account";
-
-/* Describes a percentage decrease in overall insulin needs */
-"Basal, bolus, and correction insulin dose amounts are decreased by %@%%." = "Basal, bolus, and correction insulin dose amounts are decreased by %@%%.";
-
-/* Describes a percentage increase in overall insulin needs */
-"Basal, bolus, and correction insulin dose amounts are increased by %@%%." = "Basal, bolus, and correction insulin dose amounts are increased by %@%%.";
-
-/* Describes a lack of change in overall insulin needs */
-"Basal, bolus, and correction insulin dose amounts are unaffected." = "Basal, bolus, and correction insulin dose amounts are unaffected.";
-
-/* The title of the cancel action in an action sheet */
-"Cancel" = "Cancel";
-
-/* The text for the override cancellation button */
-"Cancel Override" = "Cancel Override";
-
-/* Title text for suspend resume button when temp basal canceling */
-"Canceling Temp Basal" = "Canceling Temp Basal";
-
-/* The title of the view controller to create a new carb entry */
-"Add Carb Entry" = "Add Carb Entry";
-
-/* The title of the view controller to edit an existing carb entry */
-"Edit Carb Entry" = "Edit Carb Entry";
-
-/* Footer text for customizing an override from a preset (1: preset name) */
-"Changes will only apply this time you enable the override. The default settings of %@ will not be affected." = "Changes will only apply this time you enable the override. The default settings of %@ will not be affected.";
-
-/* Carb entry section footer text explaining absorption time */
-"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact.";
-
-/* The format string describing the date of a COB value. The first format argument is the localized date. */
-"com.loudnate.CarbKit.COBDateLabel" = "at %1$@";
-
-/* The format string describing the starting date of a total value. The first format argument is the localized date. */
-"com.loudnate.CarbKit.totalDateLabel" = "since %1$@";
-
-/* The format string describing the date of an IOB value. The first format argument is the localized date. */
-"com.loudnate.InsulinKit.IOBDateLabel" = "at %1$@";
-
-/* The format string describing the starting date of a total value. The first format argument is the localized date. */
-"com.loudnate.InsulinKit.totalDateLabel" = "since %1$@";
-
-/* The title of the action used to dismiss an error alert */
-"com.loudnate.LoopKit.errorAlertActionTitle" = "OK";
-
-/* The title for the override emoji condition section */
-"Condition" = "Condition";
-
-/* Title of the setup button to continue */
-"Continue" = "Continue";
-
-/* The section footer of correction range schedule */
-"Correction range is the blood glucose range that you would like Loop to correct to." = "Correction range is the blood glucose range that you would like Loop to correct to.";
-
-/* The text for a custom override */
-"Custom" = "Custom";
-
-/* The title for the custom override entry screen */
-"Custom Override" = "Custom Override";
-
-/* Title of the carb entry date picker cell */
-"Date" = "Date";
-
-/* Button title to delete all objects */
-"Delete All" = "Delete All";
-
-/* The text for the override duration setting */
-"Duration" = "Duration";
-
-/* The title for the override editing screen */
-"Edit Override" = "Edit Override";
-
-/* Footer text for editing an active override (1: preset name) */
-"Editing affects only the active override. The default settings of %@ will not be affected." = "Editing affects only the active override. The default settings of %@ will not be affected.";
-
-/* The text for the indefinite override duration setting */
-"Enable Indefinitely" = "Enable Indefinitely";
-
-/* The detail text describing an enabled setting */
-"Enabled" = "Enabled";
-
-/* The placeholder text instructing users how to enter a maximum bolus */
-"Enter a number of units" = "Enter a number of units";
-
-/* The placeholder text instructing users how to enter a maximum basal rate */
-"Enter a rate in units per hour" = "Enter a rate in units per hour";
-
-/* Section title for fast absorbing food */
-"Fast" = "Fast";
-
-/* The description shown on the insulin sensitivity schedule interface. */
-"Insulin sensitivity describes how your blood glucose should respond to a 1 Unit dose of insulin. Smaller values mean more insulin will be given when above target. Values that are too small can cause dangerously low blood glucose." = "Insulin sensitivity describes how your blood glucose should respond to a 1 Unit dose of insulin. Smaller values mean more insulin will be given when above target. Values that are too small can cause dangerously low blood glucose.";
-
-/* Placeholder for maximum value in glucose range */
-"max" = "max";
-
-/* The title text for the maximum basal rate value */
-"Maximum Basal Rate" = "Maximum Basal Rate";
-
-/* The title text for the maximum bolus value */
-"Maximum Bolus" = "Maximum Bolus";
-
-/* Section title for medium absorbing food */
-"Medium" = "Medium";
-
-/* Placeholder for minimum value in glucose range */
-"min" = "min";
-
-/* Alert action title to open error help */
-"More Info" = "More Info";
-
-/* The text for the override preset name setting */
-"Name" = "Name";
-
-/* The title for the new override preset entry screen */
-"New Preset" = "New Preset";
-
-/* Section title for no-carb food
-   The title for override emoji miscellaneous section */
-"Other" = "Other";
-
-/* The title text for the insulin sensitivity scaling setting */
-"Overall Insulin Needs" = "Overall Insulin Needs";
-
-/* The title text for the override presets screen */
-"Override Presets" = "Override Presets";
-
-/* Text directing the user to configure override presets */
-"Override presets can be set up under the 'Configuration' section of the settings screen." = "Override presets can be set up under the 'Configuration' section of the settings screen.";
-
-/* The section title of glucose overrides */
-"Overrides" = "Overrides";
-
-/* Title for the pre-meal override range */
-"Pre-Meal" = "Pre-Meal";
-
-/* The section header text override presets */
-"PRESETS" = "PRESETS";
-
-/* The title of the screen displaying a pump event */
-"Pump Event" = "Pump Event";
-
-/* Title text for button to resume insulin delivery */
-"Resume Delivery" = "Resume Delivery";
-
-/* Title text for button when insulin delivery is in the process of being resumed */
-"Resuming" = "Resuming";
-
-/* The text for the override preset name field placeholder */
-"Running" = "Running";
-
-/* Button text for saving glucose correction range schedule
-   Button text for saving insulin sensitivity schedule */
-"Save" = "Save";
-
-/* The section header text for a scheduled override */
-"SCHEDULED OVERRIDE" = "SCHEDULED OVERRIDE";
-
-/* Section title for slow absorbing food */
-"Slow" = "Slow";
-
-/* The text for the override start time */
-"Start Time" = "Start Time";
-
-/* Title text for suspend resume button when temp basal starting */
-"Starting Temp Basal" = "Starting Temp Basal";
-
-/* Title text for button to suspend insulin delivery */
-"Suspend Delivery" = "Suspend Delivery";
-
-/* Title text for button when insulin delivery is in the process of being stopped */
-"Suspending" = "Suspending";
-
-/* The text for the override preset symbol setting */
-"Symbol" = "Symbol";
-
-/* The empty-state text for a configuration value */
-"Tap to set" = "Tap to set";
-
-/* The text for the override target range setting */
-"Target Range" = "Target Range";
-
-/* The title for the override selection screen */
-"Temporary Override" = "Temporary Override";
-
-/* The default placeholder string for a credential */
-"Required" = "Required";
-
-/* Alert body displayed absorption time greater than max (1: maximum absorption time) */
-"The maximum absorption time is %@" = "The maximum absorption time is %@";
-
-/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */
-"The maximum allowed amount is %@ grams" = "The maximum allowed amount is %@ grams";
-
-/* The schedule table view header describing the configured time zone difference from the default time zone. The substitution parameters are: (1: time zone name)(2: +/-)(3: time interval) */
-"Times in %1$@%2$@%3$@" = "Times in %1$@%2$@%3$@";
-
-/* The unit string for units per hour */
-"U/hour" = "U/hour";
-
-/* The unit string for units */
-"Units" = "Units";
-
-/* Accessibility value for an unknown value
-   The default title to use when an entry has none */
-"Unknown" = "Unknown";
-
-/* Label indicating validation is occurring */
-"Verifying" = "Verifying";
-
-/* Title of an alert containing a validation warning */
-"Warning" = "Warning";
-
-/* Title for the workout override range */
-"Workout" = "Workout";

+ 0 - 60
Dependencies/LoopKit/LoopKitUI/da.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Authorize access to Health to continue";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Authorize";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Amount Consumed";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Food Type";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Carbohydrates";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Add/Edit Carb Entry";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Food Type";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Detail";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit is not available on this device";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g Total";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Title";

+ 0 - 59
Dependencies/LoopKit/LoopKitUI/de.lproj/CarbKit.strings

@@ -1,59 +0,0 @@
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Autorisieren Sie den Zugriff auf die Health App, um fortzufahren";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Autorisieren";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Art von Essen";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Hinzufügen/Bearbeiten von Kohlenhydrateintrag";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Menge gegessen";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Detail";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Art von Essen";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit ist auf diesem Gerät nicht verfügbar";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g Insgesamt";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Kohlenhydrate";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Titel";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";

+ 0 - 60
Dependencies/LoopKit/LoopKitUI/es.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Autorizar el acceso a Salud para continuar";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Autorizar";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Tipo de Comida";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Agregar/Editar Entrada de Carbs";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Cantidad Consumida";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Detalle";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Tipo de Comida";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "Kit de Salud no está disponible en este dispositivo";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g Total";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Carbohidratos";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g CaB";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Título";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-

+ 0 - 60
Dependencies/LoopKit/LoopKitUI/fi.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Authorize access to Health to continue";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Authorize";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Amount Consumed";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Food Type";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Carbohydrates";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Add/Edit Carb Entry";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Food Type";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Detail";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit is not available on this device";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g Total";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Title";

+ 0 - 81
Dependencies/LoopKit/LoopKitUI/fr.lproj/CarbKit.strings

@@ -1,81 +0,0 @@
-
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Autoriser l'accès à l'application Health pour continuer";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Autoriser";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Montant consommé";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Type de nourriture";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Glucides";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-
-/* Class = "UILabel"; text = "🍕"; ObjectID = "Zpw-Di-X7C"; */
-"Zpw-Di-X7C.text" = "🍕";
-
-/* Class = "UIButton"; normalTitle = "abc"; ObjectID = "act-DJ-aXh"; */
-"act-DJ-aXh.normalTitle" = "abc";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Ajouter/modifier une entrée de glucides";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Type de nourriture";
-
-/* Class = "UILabel"; text = "🌮"; ObjectID = "blb-Re-Esx"; */
-"blb-Re-Esx.text" = "🌮";
-
-/* Class = "UILabel"; text = "🍇"; ObjectID = "dug-Vc-f5B"; */
-"dug-Vc-f5B.text" = "🍇";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = " 🍭 "; ObjectID = "ez9-lR-yD7"; */
-"ez9-lR-yD7.text" = " 🍭 ";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Détail";
-
-/* Class = "UILabel"; text = "⋯ "; ObjectID = "nBf-1A-P2k"; */
-"nBf-1A-P2k.text" = "⋯ ";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "Health App n'est pas disponible sur cet appareil";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g Totaux";
-
-/* Class = "UILabel"; text = "MEDIUM"; ObjectID = "qMe-TA-UCA"; */
-"qMe-TA-UCA.text" = "Moyen";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Titre";

+ 0 - 60
Dependencies/LoopKit/LoopKitUI/he.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Authorize access to Health to continue";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Authorize";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Amount Consumed";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Food Type";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Carbohydrates";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Add/Edit Carb Entry";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Food Type";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Detail";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit is not available on this device";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g Total";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Title";

+ 0 - 60
Dependencies/LoopKit/LoopKitUI/it.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Autorizza l’accesso a Salute";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Autorizzare";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Tipo di Cibo";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Aggiungi/Modifica carboidrati assunti";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Quantita consumata";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Dettaglio";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Tipo di Cibo";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit non e disponibile su questo dispositivo";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g Totale";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Carboidrati";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Titolo";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-

+ 0 - 60
Dependencies/LoopKit/LoopKitUI/ja.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Authorize access to Health to continue";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Authorize";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Amount Consumed";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Food Type";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Carbohydrates";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Add/Edit Carb Entry";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Food Type";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Detail";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit is not available on this device";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g Total";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Title";

+ 0 - 60
Dependencies/LoopKit/LoopKitUI/nb.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Tillat tilgang til Health for å fortsette";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Tillat tilgang";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Mattype";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Legg til/endre karbohydratoppføring";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Inntatte karbohydrater";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Detaljert";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Mattype";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit er ikke tilgjengelig på denne enheten";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g totalt";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Karbohydrater";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Tittel";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-

+ 0 - 81
Dependencies/LoopKit/LoopKitUI/nl.lproj/CarbKit.strings

@@ -1,81 +0,0 @@
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Geef toestemming tot Gezondheid om verder te gaan";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Geef toestemming";
-
-/* Class = "UIButton"; normalTitle = "abc"; ObjectID = "act-DJ-aXh"; */
-"act-DJ-aXh.normalTitle" = "abc";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Type voedsel";
-
-/* Class = "UILabel"; text = "🌮"; ObjectID = "blb-Re-Esx"; */
-"blb-Re-Esx.text" = "🌮";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Toevoegen/bewerken koolhydraten invoer";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UILabel"; text = "🍇"; ObjectID = "dug-Vc-f5B"; */
-"dug-Vc-f5B.text" = "🍇";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = " 🍭 "; ObjectID = "ez9-lR-yD7"; */
-"ez9-lR-yD7.text" = " 🍭 ";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Hoeveelheid geconsumeerd";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Detail";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "⋯ "; ObjectID = "nBf-1A-P2k"; */
-"nBf-1A-P2k.text" = "⋯ ";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Type voedsel";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "Gezondheid is niet beschikbaar op dit apparaat";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "gr totaal";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Koolhydraten";
-
-/* Class = "UILabel"; text = "MEDIUM"; ObjectID = "qMe-TA-UCA"; */
-"qMe-TA-UCA.text" = "Middel";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "gr KaB";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Titel";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-
-/* Class = "UILabel"; text = "🍕"; ObjectID = "Zpw-Di-X7C"; */
-"Zpw-Di-X7C.text" = "🍕";
-

+ 0 - 60
Dependencies/LoopKit/LoopKitUI/pl.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Autoryzuj dostęp do aplikacji Zdrowie, aby kontynuować";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Autoryzuj";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Rodzaj żywności";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Dodaj/Edytuj wpis węglowodanów";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Zużyta ilość";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Szczegóły";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Rodzaj żywności";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit jest niedostępny na tym urządzeniu";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g łącznie";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Węglowodany";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Tytuł";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-

+ 0 - 60
Dependencies/LoopKit/LoopKitUI/pt-BR.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Authorize access to Health to continue";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Authorize";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Amount Consumed";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Food Type";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Carbohydrates";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Add/Edit Carb Entry";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Food Type";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Detail";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit is not available on this device";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g Total";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Title";

+ 0 - 252
Dependencies/LoopKit/LoopKitUI/pt-PT.lproj/Localizable.strings

@@ -1,252 +0,0 @@
-/* The format for an override preset cell. (1: symbol)(2: name)
-   The format for an override symbol and name (1: symbol)(2: name) */
-"%1$@ %2$@" = "%1$@ %2$@";
-
-/* Accessibility format string for (1: localized volume)(2: time) */
-"%1$@ units remaining at %2$@" = "%1$@ units remaining at %2$@";
-
-/* The format for a glucose target range. (1: min target)(2: max target)(3: glucose unit) */
-"%1$@ – %2$@ %3$@" = "%1$@ – %2$@ %3$@";
-
-/* The format for an insulin needs percentage. */
-"%@%% of normal insulin" = "%@%% of normal insulin";
-
-/* Appends a full-stop to a statement */
-"%@." = "%@.";
-
-/* Format string for reservoir volume. (1: The localized volume) */
-"%@U" = "%@U";
-
-/* Title of the carb entry absorption time cell */
-"Absorption Time" = "Absorption Time";
-
-/* The title for the override emoji activity section */
-"Activity" = "Activity";
-
-/* Action sheet confirmation message for pump history deletion */
-"Are you sure you want to delete all history entries?" = "Are you sure you want to delete all history entries?";
-
-/* Action sheet confirmation message for reservoir deletion */
-"Are you sure you want to delete all reservoir values?" = "Are you sure you want to delete all reservoir values?";
-
-/* The title of the button to add the credentials for a service */
-"Add Account" = "Add Account";
-
-/* The title of the button to remove the credentials for a service */
-"Delete Account" = "Delete Account";
-
-/* Describes a percentage decrease in overall insulin needs */
-"Basal, bolus, and correction insulin dose amounts are decreased by %@%%." = "Basal, bolus, and correction insulin dose amounts are decreased by %@%%.";
-
-/* Describes a percentage increase in overall insulin needs */
-"Basal, bolus, and correction insulin dose amounts are increased by %@%%." = "Basal, bolus, and correction insulin dose amounts are increased by %@%%.";
-
-/* Describes a lack of change in overall insulin needs */
-"Basal, bolus, and correction insulin dose amounts are unaffected." = "Basal, bolus, and correction insulin dose amounts are unaffected.";
-
-/* The title of the cancel action in an action sheet */
-"Cancel" = "Cancelar";
-
-/* The text for the override cancellation button */
-"Cancel Override" = "Cancel Override";
-
-/* Title text for suspend resume button when temp basal canceling */
-"Canceling Temp Basal" = "Canceling Temp Basal";
-
-/* The title of the view controller to create a new carb entry */
-"Add Carb Entry" = "Add Carb Entry";
-
-/* The title of the view controller to edit an existing carb entry */
-"Edit Carb Entry" = "Edit Carb Entry";
-
-/* Footer text for customizing an override from a preset (1: preset name) */
-"Changes will only apply this time you enable the override. The default settings of %@ will not be affected." = "Changes will only apply this time you enable the override. The default settings of %@ will not be affected.";
-
-/* Carb entry section footer text explaining absorption time */
-"Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact." = "Choose a longer absorption time for larger meals, or those containing fats and proteins. This is only guidance to the algorithm and need not be exact.";
-
-/* The format string describing the date of a COB value. The first format argument is the localized date. */
-"com.loudnate.CarbKit.COBDateLabel" = "at %1$@";
-
-/* The format string describing the starting date of a total value. The first format argument is the localized date. */
-"com.loudnate.CarbKit.totalDateLabel" = "since %1$@";
-
-/* The format string describing the date of an IOB value. The first format argument is the localized date. */
-"com.loudnate.InsulinKit.IOBDateLabel" = "at %1$@";
-
-/* The format string describing the starting date of a total value. The first format argument is the localized date. */
-"com.loudnate.InsulinKit.totalDateLabel" = "since %1$@";
-
-/* The title of the action used to dismiss an error alert */
-"com.loudnate.LoopKit.errorAlertActionTitle" = "OK";
-
-/* The title for the override emoji condition section */
-"Condition" = "Condition";
-
-/* Title of the setup button to continue */
-"Continue" = "Continue";
-
-/* The section footer of correction range schedule */
-"Correction range is the blood glucose range that you would like Loop to correct to." = "Correction range is the blood glucose range that you would like Loop to correct to.";
-
-/* The text for a custom override */
-"Custom" = "Definir";
-
-/* The title for the custom override entry screen */
-"Custom Override" = "Custom Override";
-
-/* Title of the carb entry date picker cell */
-"Date" = "Data";
-
-/* Button title to delete all objects */
-"Delete All" = "Delete All";
-
-/* The text for the override duration setting */
-"Duration" = "Duração";
-
-/* The title for the override editing screen */
-"Edit Override" = "Edit Override";
-
-/* Footer text for editing an active override (1: preset name) */
-"Editing affects only the active override. The default settings of %@ will not be affected." = "Editing affects only the active override. The default settings of %@ will not be affected.";
-
-/* The text for the indefinite override duration setting */
-"Enable Indefinitely" = "Enable Indefinitely";
-
-/* The detail text describing an enabled setting */
-"Enabled" = "Enabled";
-
-/* The placeholder text instructing users how to enter a maximum bolus */
-"Enter a number of units" = "Enter a number of units";
-
-/* The placeholder text instructing users how to enter a maximum basal rate */
-"Enter a rate in units per hour" = "Enter a rate in units per hour";
-
-/* Section title for fast absorbing food */
-"Fast" = "Fast";
-
-/* The description shown on the insulin sensitivity schedule interface. */
-"Insulin sensitivity describes how your blood glucose should respond to a 1 Unit dose of insulin. Smaller values mean more insulin will be given when above target. Values that are too small can cause dangerously low blood glucose." = "Insulin sensitivity describes how your blood glucose should respond to a 1 Unit dose of insulin. Smaller values mean more insulin will be given when above target. Values that are too small can cause dangerously low blood glucose.";
-
-/* Placeholder for maximum value in glucose range */
-"max" = "max";
-
-/* The title text for the maximum basal rate value */
-"Maximum Basal Rate" = "Maximum Basal Rate";
-
-/* The title text for the maximum bolus value */
-"Maximum Bolus" = "Maximum Bolus";
-
-/* Section title for medium absorbing food */
-"Medium" = "Medium";
-
-/* Placeholder for minimum value in glucose range */
-"min" = "min";
-
-/* Alert action title to open error help */
-"More Info" = "More Info";
-
-/* The text for the override preset name setting */
-"Name" = "Nome";
-
-/* The title for the new override preset entry screen */
-"New Preset" = "New Preset";
-
-/* Section title for no-carb food
-   The title for override emoji miscellaneous section */
-"Other" = "Outro";
-
-/* The title text for the insulin sensitivity scaling setting */
-"Overall Insulin Needs" = "Overall Insulin Needs";
-
-/* The title text for the override presets screen */
-"Override Presets" = "Override Presets";
-
-/* Text directing the user to configure override presets */
-"Override presets can be set up under the 'Configuration' section of the settings screen." = "Override presets can be set up under the 'Configuration' section of the settings screen.";
-
-/* The section title of glucose overrides */
-"Overrides" = "Overrides";
-
-/* Title for the pre-meal override range */
-"Pre-Meal" = "Pre-Meal";
-
-/* The section header text override presets */
-"PRESETS" = "PRESETS";
-
-/* The title of the screen displaying a pump event */
-"Pump Event" = "Pump Event";
-
-/* Title text for button to resume insulin delivery */
-"Resume Delivery" = "Resume Delivery";
-
-/* Title text for button when insulin delivery is in the process of being resumed */
-"Resuming" = "Resuming";
-
-/* The text for the override preset name field placeholder */
-"Running" = "Running";
-
-/* Button text for saving glucose correction range schedule
-   Button text for saving insulin sensitivity schedule */
-"Save" = "Salvar";
-
-/* The section header text for a scheduled override */
-"SCHEDULED OVERRIDE" = "SCHEDULED OVERRIDE";
-
-/* Section title for slow absorbing food */
-"Slow" = "Slow";
-
-/* The text for the override start time */
-"Start Time" = "Start Time";
-
-/* Title text for suspend resume button when temp basal starting */
-"Starting Temp Basal" = "Starting Temp Basal";
-
-/* Title text for button to suspend insulin delivery */
-"Suspend Delivery" = "Suspend Delivery";
-
-/* Title text for button when insulin delivery is in the process of being stopped */
-"Suspending" = "Suspending";
-
-/* The text for the override preset symbol setting */
-"Symbol" = "Symbol";
-
-/* The empty-state text for a configuration value */
-"Tap to set" = "Tap to set";
-
-/* The text for the override target range setting */
-"Target Range" = "Target Range";
-
-/* The title for the override selection screen */
-"Temporary Override" = "Temporary Override";
-
-/* The default placeholder string for a credential */
-"Required" = "Required";
-
-/* Alert body displayed absorption time greater than max (1: maximum absorption time) */
-"The maximum absorption time is %@" = "The maximum absorption time is %@";
-
-/* Alert body displayed for quantity greater than max (1: maximum quantity in grams) */
-"The maximum allowed amount is %@ grams" = "The maximum allowed amount is %@ grams";
-
-/* The schedule table view header describing the configured time zone difference from the default time zone. The substitution parameters are: (1: time zone name)(2: +/-)(3: time interval) */
-"Times in %1$@%2$@%3$@" = "Times in %1$@%2$@%3$@";
-
-/* The unit string for units per hour */
-"U/hour" = "U/hour";
-
-/* The unit string for units */
-"Units" = "Units";
-
-/* Accessibility value for an unknown value
-   The default title to use when an entry has none */
-"Unknown" = "Unknown";
-
-/* Label indicating validation is occurring */
-"Verifying" = "Verifying";
-
-/* Title of an alert containing a validation warning */
-"Warning" = "Warning";
-
-/* Title for the workout override range */
-"Workout" = "Workout";

+ 0 - 60
Dependencies/LoopKit/LoopKitUI/ro.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Authorize access to Health to continue";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Authorize";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Amount Consumed";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Food Type";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Carbohydrates";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Add/Edit Carb Entry";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Food Type";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Detail";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit is not available on this device";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g Total";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Title";

+ 0 - 81
Dependencies/LoopKit/LoopKitUI/ru.lproj/CarbKit.strings

@@ -1,81 +0,0 @@
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Разрешите доступ к панели Здоровье чтобы продолжить";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Разрешить";
-
-/* Class = "UIButton"; normalTitle = "abc"; ObjectID = "act-DJ-aXh"; */
-"act-DJ-aXh.normalTitle" = "abc";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Тип пищи";
-
-/* Class = "UILabel"; text = "🌮"; ObjectID = "blb-Re-Esx"; */
-"blb-Re-Esx.text" = "🌮";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Добавить/изменить введенные углеводы";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "г";
-
-/* Class = "UILabel"; text = "🍇"; ObjectID = "dug-Vc-f5B"; */
-"dug-Vc-f5B.text" = "🍇";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = " 🍭 "; ObjectID = "ez9-lR-yD7"; */
-"ez9-lR-yD7.text" = " 🍭 ";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Количество потребленного";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Детали";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "⋯ "; ObjectID = "nBf-1A-P2k"; */
-"nBf-1A-P2k.text" = "⋯ ";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Тип пищи";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit недоступен на этом устройстве";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "всего грамм";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Углеводы";
-
-/* Class = "UILabel"; text = "MEDIUM"; ObjectID = "qMe-TA-UCA"; */
-"qMe-TA-UCA.text" = "Средний";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "грамм углеводов COB";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Название";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-
-/* Class = "UILabel"; text = "🍕"; ObjectID = "Zpw-Di-X7C"; */
-"Zpw-Di-X7C.text" = "🍕";
-

Разница между файлами не показана из-за своего большого размера
+ 0 - 252
Dependencies/LoopKit/LoopKitUI/sk.lproj/Localizable.strings


+ 0 - 60
Dependencies/LoopKit/LoopKitUI/sv.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Authorize access to Health to continue";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Authorize";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Amount Consumed";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Food Type";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Carbohydrates";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Add/Edit Carb Entry";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Food Type";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Detail";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit is not available on this device";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g Total";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Title";

+ 0 - 60
Dependencies/LoopKit/LoopKitUI/tr.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Authorize access to Health to continue";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Authorize";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Amount Consumed";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Food Type";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Carbohydrates";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Add/Edit Carb Entry";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Food Type";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Detail";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit is not available on this device";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g Total";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Title";

Разница между файлами не показана из-за своего большого размера
+ 0 - 252
Dependencies/LoopKit/LoopKitUI/uk.lproj/Localizable.strings


+ 0 - 60
Dependencies/LoopKit/LoopKitUI/vi.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "Authorize access to Health to continue";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "Authorize";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "g";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "Amount Consumed";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "Food Type";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "g COB";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "Carbohydrates";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "Add/Edit Carb Entry";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "Food Type";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "Detail";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "HealthKit is not available on this device";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "g Total";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "Title";

+ 0 - 60
Dependencies/LoopKit/LoopKitUI/zh-Hans.lproj/CarbKit.strings

@@ -1,60 +0,0 @@
-/* Class = "UILabel"; text = "Authorize access to Health to continue"; ObjectID = "7xi-Om-Y53"; */
-"7xi-Om-Y53.text" = "请在健康应用中给予相应权限以继续";
-
-/* Class = "UIButton"; normalTitle = "Authorize"; ObjectID = "8sx-XB-DRV"; */
-"8sx-XB-DRV.normalTitle" = "授权";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "bdP-2A-DB8"; */
-"bdP-2A-DB8.text" = "食物类型";
-
-/* Class = "UINavigationItem"; title = "Add/Edit Carb Entry"; ObjectID = "bM2-yI-YmX"; */
-"bM2-yI-YmX.title" = "添加/编辑 碳水录入";
-
-/* Class = "UILabel"; text = "g"; ObjectID = "D2S-2h-yH6"; */
-"D2S-2h-yH6.text" = "克";
-
-/* Class = "UIButton"; normalTitle = "🍕"; ObjectID = "dyX-Zv-8wU"; */
-"dyX-Zv-8wU.normalTitle" = "🍕";
-
-/* Class = "UILabel"; text = "Amount Consumed"; ObjectID = "K0S-my-3qL"; */
-"K0S-my-3qL.text" = "已消耗部分";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "lbE-wQ-pFK"; */
-"lbE-wQ-pFK.text" = "...";
-
-/* Class = "UILabel"; text = "Detail"; ObjectID = "m95-PG-bTq"; */
-"m95-PG-bTq.text" = "详情";
-
-/* Class = "UIButton"; normalTitle = "🍽"; ObjectID = "Mde-by-DTA"; */
-"Mde-by-DTA.normalTitle" = "🍽";
-
-/* Class = "UIButton"; normalTitle = "🌮"; ObjectID = "Me5-3D-C34"; */
-"Me5-3D-C34.normalTitle" = "🌮";
-
-/* Class = "UILabel"; text = "Food Type"; ObjectID = "NRZ-dT-iqj"; */
-"NRZ-dT-iqj.text" = "食物类型";
-
-/* Class = "UILabel"; text = "HealthKit is not available on this device"; ObjectID = "nXh-BM-MuC"; */
-"nXh-BM-MuC.text" = "健康应用不支持该设备";
-
-/* Class = "UILabel"; text = "g Total"; ObjectID = "pHI-f4-pJp"; */
-"pHI-f4-pJp.text" = "克 总计";
-
-/* Class = "UINavigationItem"; title = "Carbohydrates"; ObjectID = "Qgq-n1-hm4"; */
-"Qgq-n1-hm4.title" = "碳水化合物";
-
-/* Class = "UITextField"; placeholder = "0"; ObjectID = "qU9-hG-hMu"; */
-"qU9-hG-hMu.placeholder" = "0";
-
-/* Class = "UILabel"; text = "g COB"; ObjectID = "QZb-e1-xwb"; */
-"QZb-e1-xwb.text" = "克 活性碳水化合物";
-
-/* Class = "UILabel"; text = "Title"; ObjectID = "vM9-H7-t3C"; */
-"vM9-H7-t3C.text" = "标题";
-
-/* Class = "UILabel"; text = "..."; ObjectID = "WZV-l9-Ek1"; */
-"WZV-l9-Ek1.text" = "...";
-
-/* Class = "UIButton"; normalTitle = "🍭"; ObjectID = "XaD-wV-oiS"; */
-"XaD-wV-oiS.normalTitle" = "🍭";
-

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/ar.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Notification Settings";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "hours";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minutes";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Fault";
-
-/* Label describing pod age view */
-"Pod Age" = "Pod Age";
-
-/* Label describing time remaining view */
-"Remaining" = "Remaining";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Replace Pod";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Play Test Beeps";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Read Pulse Log";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Suspend";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Resume";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "U/hr";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Insulin Type";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Suspend Delivery";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Deactivate Pod";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Continue";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "U";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Cancel";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Continue";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Time";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/ca.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Notification Settings";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "hours";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minutes";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Fault";
-
-/* Label describing pod age view */
-"Pod Age" = "Pod Age";
-
-/* Label describing time remaining view */
-"Remaining" = "Remaining";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Replace Pod";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Play Test Beeps";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Read Pulse Log";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Suspend";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Resume";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "U/hr";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Insulin Type";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Suspend Delivery";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Deactivate Pod";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Continue";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "U";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Cancel";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Continue";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Time";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/da.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Notification Settings";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Udskift Pod";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "hours";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minutes";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Aktivitet";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Udskift Pod";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Udskift Pod";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Fejl";
-
-/* Label describing pod age view */
-"Pod Age" = "Pod Alder";
-
-/* Label describing time remaining view */
-"Remaining" = "Tilbage";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Udskift Pod";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Afspil Test Bip";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Read Pulse Log";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Suspend";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Resume";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "U/hr";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Aktivitet";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Insulin Type";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Pause Indgivelse";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Deaktiver Pod";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Fortsæt";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "U";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Cancel";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Fortsæt";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Time";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/de.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Benachrichtigungseinstellungen";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Pod ersetzen";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "Stunden";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "Minuten";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Aktivität";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Konfiguration";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Pod ersetzen";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Pod ersetzen";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Störung";
-
-/* Label describing pod age view */
-"Pod Age" = "Pod-Alter";
-
-/* Label describing time remaining view */
-"Remaining" = "Verbleibend";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Pod ersetzen";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Testtöne abspielen";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Pulse-Log lesen";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Unterbrechen";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Fortsetzen";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "IE/Std";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Aktivität";
-
-/* Section header for configuration section */
-"Configuration" = "Konfiguration";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Insulin Typ";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Abgabe unterbrechen";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Pod deaktivieren";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Fortsetzen";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = " IE";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Abbrechen";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Fortsetzen";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Uhrzeit";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 514
Dependencies/OmniBLE/Localizations/Localizations/en.lproj/Localizable.strings

@@ -1,514 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-
-/* Alert content title for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Notification Settings";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "hours";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minutes";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Fault";
-
-/* Label describing pod age view */
-"Pod Age" = "Pod Age";
-
-/* Label describing time remaining view */
-"Remaining" = "Remaining";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Replace Pod";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Play Test Beeps";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Read Pulse Log";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Suspend";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Resume";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "U/hr";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Insulin Type";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Suspend Delivery";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-    
- /* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-    
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Deactivate Pod";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Continue";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "U";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Cancel";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Continue";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Time";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/es.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Notification Settings";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Cambie el Pod";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "horas";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minutos";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Actividad";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Configuracion";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Cambie el Pod";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Cambie el Pod";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Fallo";
-
-/* Label describing pod age view */
-"Pod Age" = "Edad del Pod";
-
-/* Label describing time remaining view */
-"Remaining" = "Restante";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Cambie el Pod";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Tocar Pitidos de Prueba";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Read Pulse Log";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Suspend";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Resume";
-
-/* */
-"Bolus" = "Bolo";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "U/h";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Actividad";
-
-/* Section header for configuration section */
-"Configuration" = "Configuracion";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Insulin Type";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Suspender la infusión";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Desactivar Pod";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Continuar";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "U";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Cancelar";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Continuar";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Tiempo";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/fi.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Notification Settings";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Vaihda pumppu";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "hours";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minutes";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Liikunta";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Vaihda pumppu";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Vaihda pumppu";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Virhe";
-
-/* Label describing pod age view */
-"Pod Age" = "Pumpun ikä";
-
-/* Label describing time remaining view */
-"Remaining" = "Jäljellä";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Vaihda pumppu";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Soita testiäänet";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Lue pulssiloki";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Suspend";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Resume";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "U/hr";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Liikunta";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Insulin Type";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Pysäytä annostelu";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Deaktivoi pumppu";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Jatka";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "U";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Cancel";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Jatka";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Time";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/fr.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Paramètres des notifications";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Remplacer le pod";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "heures";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minutes";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Activité";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Remplacer le pod";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Remplacer le pod";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Erreur";
-
-/* Label describing pod age view */
-"Pod Age" = "Âge du pod";
-
-/* Label describing time remaining view */
-"Remaining" = "Restant";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Remplacer le pod";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Jouer des bips de test";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Lecture journal d'impulsion";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Suspendre";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Reprendre";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "U/h";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Activité";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Type d'Insuline";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Suspendre la distribution";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Désactiver le pod";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Continuer";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "U";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Annuler";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Continuer";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Heure";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/he.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Notification Settings";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "hours";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minutes";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Fault";
-
-/* Label describing pod age view */
-"Pod Age" = "Pod Age";
-
-/* Label describing time remaining view */
-"Remaining" = "Remaining";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Replace Pod";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Play Test Beeps";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Read Pulse Log";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Suspend";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Resume";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "U/hr";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Insulin Type";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Suspend Delivery";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Deactivate Pod";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Continue";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "U";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Cancel";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Continue";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Time";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/it.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Impostazioni di Notifica";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Sostituisci Pod";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "ore";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minuti";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Impostazioni";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Sostituisci Pod";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Sostituisci Pod";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Guasto";
-
-/* Label describing pod age view */
-"Pod Age" = "Età Pod";
-
-/* Label describing time remaining view */
-"Remaining" = "Rimanente";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Sostituisci Pod";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Emetti bip di prova";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Leggi Registro Battiti";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Sospendi";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Riprendi";
-
-/* */
-"Bolus" = "Bolo";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "Unità/ora";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* Section header for configuration section */
-"Configuration" = "Impostazioni";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Tipo di Insulina";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Sospendi erogazione";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Disattiva Pod";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Continua";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "U";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Cancella";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Continua";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Tempo";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 420
Dependencies/OmniBLE/Localizations/Localizations/ja.lproj/Localizable.strings

@@ -1,420 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-
-/* Alert content title for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Notification Settings";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "hours";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minutes";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Fault";
-
-/* Label describing pod age view */
-"Pod Age" = "Pod Age";
-
-/* Label describing time remaining view */
-"Remaining" = "Remaining";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Replace Pod";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Deactivate pod" = "Deactivate pod";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Play Test Beeps";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Read Pulse Log";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Suspend";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Resume";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "U/hr";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Insulin Type";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Suspend Delivery";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-    
- /* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-    
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Deactivate Pod";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Continue";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "U";

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/nb.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Utløpspåminnelse";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod utløpt";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod utløper om %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Vennligst fullfør sammenkoblingen av poden.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Ufullstendig aktivering";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod utløper om";
-
-/* */
-"Pod Expires" = "Pod utløper";
-
-/* */
-"Pod Activated" = "Pod aktivert";
-
-/* */
-"Notification Settings" = "Varslingsinnstillinger";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Stopp insulintilførsel";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Utløpt pod";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Ufullstendig deaktivering";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "Ingen pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Fullfør deaktiveringen";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Bytt pod";
-
-/* Unit for singular day in pod life remaining */
-"day" = "dag";
-
-/* Unit for plural days in pod life remaining */
-"days" = "dager";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "time";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "timer";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minutt";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minutter";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulintilførsel";
-
-/* */
-"Scheduled Basal" = "Planlagt basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin som gjenstår";
-
-/* Section header for activity section */
-"Activity" = "Aktivitet";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Oppsett";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Fullfør deaktiveringen";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Bytt pod";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Bytt pod";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Ufullstendig aktivering";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod utløper om";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Utløpt pod";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Ufullstendig deaktivering";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "Ingen pod";
-
-/* Pod life HUD view label */
-"Fault" = "Feil";
-
-/* Label describing pod age view */
-"Pod Age" = "Pod-alder";
-
-/* Label describing time remaining view */
-"Remaining" = "Gjenstående";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Bytt pod";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "Ingen sammenkoblet pod";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod er allerede sammenkoblet";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulintype ikke konfigurert";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod er ikke klar for å sette inn kanyle.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Ugyldig innstilling";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Vennligst koble til ny pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Kommunikasjons-problem";
-
-/* */
-"Finish Pairing" = "Fullfør sammenkobling";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Fullfør deaktiveringen";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "Ingen pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "Tom for insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod utløpt";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "Tom for insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Spill test-toner";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Les pulslogg";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Pause leveranse";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Gjenoppta leveranse";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "Ok";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "E/t";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin som gjenstår";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Aktivitet";
-
-/* Section header for configuration section */
-"Configuration" = "Oppsett";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Insulintype";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Pause leveranse";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Deaktiver Pod";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Fortsett";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "E";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fyll en ny pod med U-100 insulin (la blått beskyttelsesdeksel være på).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Lytt etter 2 pip.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Sammenkoblet";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Avbryt";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Er du sikker på at du vil avbryte oppsett av pod?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "Hvis du avbryter oppsett av pod, vil poden bli deaktivert og kan ikke lenger brukes.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Ja, deaktiver pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "Nei, fortsett med pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Fortsett";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Tidspunkt";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/nl.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Instellingen voor meldingen";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Vervang pod";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "uur";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minuten";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Activiteit";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Instellingen";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Vervang pod";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Vervang pod";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Fout";
-
-/* Label describing pod age view */
-"Pod Age" = "Pod leeftijd";
-
-/* Label describing time remaining view */
-"Remaining" = "Resterend";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Vervang pod";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Speel test piepjes af";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Pulslog uitlezen";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Onderbreek";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Hervat";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "Ok";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "E/uur";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Activiteit";
-
-/* Section header for configuration section */
-"Configuration" = "Instellingen";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Insuline soort";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Onderbreek toediening";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Deactiveer pod";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Vervolg";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "E";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Annuleer";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Vervolg";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Tijd";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/pl.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Notification Settings";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Wymień PODa";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "hours";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minut";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Aktywność";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Wymień PODa";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Wymień PODa";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Usterka";
-
-/* Label describing pod age view */
-"Pod Age" = "Wiek PODa";
-
-/* Label describing time remaining view */
-"Remaining" = "Pozostało";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Wymień PODa";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Odtwarzaj dźwięki testu";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Read Pulse Log";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Suspend";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Resume";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "U/hr";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Aktywność";
-
-/* Section header for configuration section */
-"Configuration" = "Configuration";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Insulin Type";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Wstrzymaj podawanie";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Dezaktywuj PODa";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Kontynuuj";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "U";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Anuluj";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Kontynuuj";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Czas";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/pt-BR.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Notification Settings";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Substituir Pod";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "horas";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minutos";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Atividade";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Ajustes";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Substituir Pod";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Substituir Pod";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Falha";
-
-/* Label describing pod age view */
-"Pod Age" = "Idade do Pod";
-
-/* Label describing time remaining view */
-"Remaining" = "Restante";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Substituir Pod";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Tocar bipes de teste";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Ler Log do Pulse";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Suspend";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Resume";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "U/hr";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Atividade";
-
-/* Section header for configuration section */
-"Configuration" = "Ajustes";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Tipo de Insulina";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Suspender Entrega";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Desativar Pod";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Continuar";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "U";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Cancelar";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Continuar";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Hora";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 512
Dependencies/OmniBLE/Localizations/Localizations/pt-PT.lproj/Localizable.strings

@@ -1,512 +0,0 @@
-/* 
-  Localizable.strings
-  OmniBLE
-  Created by Jon Mårtensson on 2022-08-28.
-  Copyright © 2022 Randall Knutson. All rights reserved.
-*/
-/* Alert content title for multiCommand pod alert */
-
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Alert content title for userPodExpiration pod alert */
-"Pod Expiration Reminder" = "Pod Expiration Reminder";
-
-/* Alert content title for podExpiring pod alert */
-"Pod Expired" = "Pod Expired";
-
-/* Alert content title for lowReservoir pod alert */
-"Low Reservoir" = "Low Reservoir";
-
-/* Alert content title for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content title for suspendEnded pod alert */
-"Resume Insulin" = "Resume Insulin";
-
-/* Alert content title for finishSetupReminder pod alert */
-"Pod Pairing Incomplete" = "Pod Pairing Incomplete";
-
-/* Alert content title for timeOffsetChangeDetected pod alert */
-"Time Change Detected" = "Time Change Detected";
-
-/* Alert content body for multiCommand pod alert */
-"Multiple Command Alert" = "Multiple Command Alert";
-
-/* Format string for alert content body for userPodExpiration pod alert. (1: time until expiration) */
-"Pod expires in %1$@." = "Pod expires in %1$@.";
-
-/* Alert content body for podExpiring pod alert */
-"Change Pod now. Pod has been active for 72 hours." = "Change Pod now. Pod has been active for 72 hours.";
-
-/* Alert content body for podExpireImminent pod alert */
-"Change Pod now. Insulin delivery will stop in 1 hour." = "Change Pod now. Insulin delivery will stop in 1 hour.";
-
-/* Format string for alert content body for lowReservoir pod alert. (1: reminder value) */
-"%1$@ insulin or less remaining in Pod. Change Pod soon." = "%1$@ insulin or less remaining in Pod. Change Pod soon.";
-
-/* Alert content body for suspendInProgress pod alert */
-"Suspend In Progress Reminder" = "Suspend In Progress Reminder";
-
-/* Alert content body for suspendEnded pod alert */
-"The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes." = "The insulin suspension period has ended.\n\nYou can resume delivery from the banner on the home screen or from your pump settings screen. You will be reminded again in 15 minutes.";
-
-/* Alert content body for finishSetupReminder pod alert */
-"Please finish pairing your pod." = "Please finish pairing your pod.";
-
-/* Alert content body for timeOffsetChangeDetected pod alert */
-"The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings." = "The time on your pump is different from the current time. You can review the pump time and and sync to current time in settings.";
-
-/* Alert notification body for suspendEnded pod alert user notification */
-"Suspension time is up. Open the app and resume." = "Suspension time is up. Open the app and resume.";
-
-/* Action button default text for PodAlerts */
-"Ok" = "Ok";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* */
-"Pod Expires" = "Pod Expires";
-
-/* */
-"Pod Activated" = "Pod Activated";
-
-/* */
-"Notification Settings" = "Notification Settings";
-
-/* */
-"Confidence Reminders" = "Confidence Reminders";
-
-/* Text for suspend resume button when insulin delivery active */
-"Suspend Insulin Delivery" = "Suspend Insulin Delivery";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Settings page link description when next lifecycle action is to pair new pod */
-"Pair Pod" = "Pair Pod";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Unit for singular day in pod life remaining */
-"day" = "day";
-
-/* Unit for plural days in pod life remaining */
-"days" = "days";
-
-/* Unit for singular hour in pod life remaining */
-"hour" = "hour";
-
-/* Unit for plural hours in pod life remaining */
-"hours" = "horas";
-
-/* Unit for singular minute in pod life remaining */
-"minute" = "minute";
-
-/* Unit for plural minutes in pod life remaining */
-"minutes" = "minutos";
-
-/* Title of insulin delivery section */
-"Insulin Delivery" = "Insulin Delivery";
-
-/* */
-"Scheduled Basal" = "Scheduled Basal";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* title for device details page */
-"Device Details" = "Device Details";
-
-/* Section header for configuration section */
-"Configuration" = "Ajustes";
-
-/* Settings page link description when next lifecycle action is to finish deactivation */
-"Finish deactivation" = "Finish deactivation";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Settings page link description when next lifecycle action is to replace pod */
-"Replace Pod" = "Replace Pod";
-
-/* Label for pod life state when pod not fully activated */
-"Unfinished Activation" = "Unfinished Activation";
-
-/* Label for pod life state when time remaining */
-"Pod expires in" = "Pod expires in";
-
-/* Label for pod life state when within pod expiration window */
-"Pod expired" = "Pod expired";
-
-/* Label for pod life state when pod not fully deactivated */
-"Unfinished deactivation" = "Unfinished deactivation";
-
-/* Label for pod life state when no pod paired */
-"No Pod" = "No Pod";
-
-/* Pod life HUD view label */
-"Fault" = "Fault";
-
-/* Label describing pod age view */
-"Pod Age" = "Pod Age";
-
-/* Label describing time remaining view */
-"Remaining" = "Remaining";
-
-/* Label indicating pod replacement necessary */
-"Replace Pod" = "Replace Pod";
-
-/* Error message shown when no pod is paired */
-"No pod paired" = "No pod paired";
-
-/* Error message shown when user cannot pair because pod is already paired */
-"Pod already paired" = "Pod already paired";
-
-/* Error description for OmniBLEPumpManagerError.insulinTypeNotConfigured */
-"Insulin type not configured" = "Insulin type not configured";
-
-/* Error message when cannula insertion fails because the pod is in an unexpected state */
-"Pod is not in a state ready for cannula insertion." = "Pod is not in a state ready for cannula insertion.";
-
-/* Error description for OmniBLEPumpManagerError.invalidSetting */
-"Invalid Setting" = "Invalid Setting";
-
-/* Recovery suggestion shown when no pod is paired */
-"Please pair a new pod" = "Please pair a new pod";
-
-/* Generic title of the OmniBLE pump manager */
-"Omnipod DASH" = "Omnipod DASH";
-
-/* Status highlight that delivery is uncertain. */
-"Comms Issue" = "Comms Issue";
-
-/* */
-"Finish Pairing" = "Finish Pairing";
-
-/* Status highlight that when pod is deactivating */
-"Finish Deactivation" = "Finish Deactivation";
-
-/* Status highlight that when no pod is paired. */
-"No Pod" = "No Pod";
-
-/* Status highlight message for emptyReservoir alarm. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight message for podExpired alarm. */
-"Pod Expired" = "Pod Expired";
-
-/* Status highlight message for occlusion alarm. */
-"Pod Occlusion" = "Pod Occlusion";
-
-/* Status highlight message for other alarm. */
-"Pod Error" = "Pod Error";
-
-/* Status highlight that a pump is out of insulin. */
-"No Insulin" = "No Insulin";
-
-/* Status highlight that insulin delivery was suspended. */
-"Insulin Suspended" = "Insulin Suspended";
-
-/* Status highlight when communications with the pod haven't happened recently. */
-"Signal Loss" = "Signal Loss";
-
-/* Status highlight when manual temp basal is running. */
-"Manual Basal" = "Manual Basal";
-
-/* */
-"Insert cannula" = "Insert cannula";
-
-/* */
-"Check cannula insertion finished" = "Check cannula insertion finished";
-
-/* */
-"Get pod status" = "Get pod status";
-
-/* */
-"Save Basal Profile" = "Save Basal Profile";
-
-/* */
-"Save basal profile failed: %{public}@" = "Save basal profile failed: %{public}@";
-
-/* */
-"Skipping Play Test Beeps due to bolus still in progress." = "Skipping Play Test Beeps due to bolus still in progress.";
-
-/* */
-"Play Test Beeps" = "Play Test Beeps";
-
-/* */
-"Skipping Read Pulse Log due to bolus still in progress." = "Skipping Read Pulse Log due to bolus still in progress.";
-
-/* */
-"Read Pulse Log" = "Read Pulse Log";
-
-/* */
-"Set Confirmation Beeps to %s" = "Set Confirmation Beeps to %s";
-
-/* */
-"Set Confirmation Beeps Preference" = "Set Confirmation Beeps Preference";
-
-/* */
-"Suspend" = "Suspend";
-
-/* */
-"Failed to suspend: %{public}@" = "Failed to suspend: %{public}@";
-
-/* */
-"Resume" = "Resume";
-
-/* */
-"Bolus" = "Bolus";
-
-/* */
-"Cancel Bolus" = "Cancel Bolus";
-
-/* Alert acknowledgment OK button */
-"OK" = "OK";
-
-/* The title for Empty Reservoir alarm notification */
-"Empty Reservoir" = "Empty Reservoir";
-
-/* The title for Occlusion alarm notification */
-"Occlusion Detected" = "Occlusion Detected";
-
-/* The title for AlarmCode.other notification */
-"Critical Pod Error" = "Critical Pod Error";
-
-/* The default notification body for AlarmCodes */
-"Insulin delivery stopped. Change Pod now." = "Insulin delivery stopped. Change Pod now.";
-
-/* Units for showing temp basal rate */
-"U/hr" = "U/hr";
-
-/* Header for insulin remaining on pod settings screen */
-"Insulin Remaining" = "Insulin Remaining";
-
-/* Button title to set temporary basal rate */
-"Set Temporary Basal Rate" = "Set Temporary Basal Rate";
-
-/* Section header for activity section */
-"Activity" = "Activity";
-
-/* Section header for configuration section */
-"Configuration" = "Ajustes";
-
-/* Title for previous pod page */
-"Previous Pod" = "Previous Pod";
-
-/* The title of the command to change pump time zone */
-"Pump Time" = "Pump Time";
-
-/* Text indicating ongoing pump time synchronization */
-"Adjusting Pump Time..." = "Adjusting Pump Time...";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Label for PumpManager deletion button */
-"Switch to other insulin delivery device" = "Switch to other insulin delivery device";
-
-/* Title for pod sync time action sheet. */
-"The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?" = "The time on your pump is different from the current time. Do you want to update the time on your pump to the current time?";
-
-/* Button text to confirm pump time sync */
-"Yes, Sync to Current Time" = "Yes, Sync to Current Time";
-
-/* Button text to cancel pump time sync */
-"No, Keep Pump As Is" = "No, Keep Pump As Is";
-
-/* Title for Omnipod DASH PumpManager deletion action sheet. */
-"Remove Pump" = "Remove Pump";
-
-/* Message for Omnipod DASH PumpManager deletion action sheet */
-"Are you sure you want to stop using Omnipod DASH?" = "Are you sure you want to stop using Omnipod DASH?";
-
-/* Button text to confirm Omnipod DASH PumpManager deletion */
-"Delete Omnipod DASH" = "Delete Omnipod DASH";
-
-/* Text for confidence reminders navigation link" */
-"Insulin Type" = "Insulin Type";
-
-/* The title of the command to change pump time zone */
-"Sync to Current Time" = "Sync to Current Time";
-
-/* Title for suspend duration selection action sheet */
-"Suspend Delivery" = "Suspend Delivery";
-
-/* Message for suspend duration selection action sheet */
-"Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?" = "Insulin delivery will be stopped until you resume manually. When would you like Loop to remind you to resume delivery?";
-
-/* Button text for 30 minute suspend duration */
-"30 minutes" = "30 minutes";
-
-/* Button text for 1 hour suspend duration" */
-"1 hour" = "1 hour";
-/* Button text for 1 hour 30 minute suspend duration */
-"1 hour 30 minutes" = "1 hour 30 minutes";
-/* Button text for 2 hour suspend duration */
-"2 hours" = "2 hours";
-
-/* Alert title for suspend error */
-"Failed to Suspend Insulin Delivery" = "Failed to Suspend Insulin Delivery";
-
-/* Alert title for resume error */
-"Failed to Resume Insulin Delivery" = "Failed to Resume Insulin Delivery";
-
-/* Alert title for time sync error */
-"Failed to Set Pump Time" = "Failed to Set Pump Time";
-
-/* Alert title for failing to cancel manual basal error */
-"Failed to Cancel Manual Basal" = "Failed to Cancel Manual Basal";
-
-/* */
-"Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may remove it and pair a new pod.";
-
-/* Instructions for deactivate pod when pod not on body */
-"Please deactivate the pod. When deactivation is complete, you may pair a new pod." = "Please deactivate the pod. When deactivation is complete, you may pair a new pod.";
-
-/* Deactivate pod action button */
-"Deactivate Pod" = "Deactivate Pod";
-
-/* Deactivate pod action button accessibility label while deactivating */
-"Deactivating." = "Deactivating.";
-
-/* Deactivate pod action button accessibility label when deactivation complete */
-"Pod deactivated successfully. Continue." = "Pod deactivated successfully. Continue.";
-
-/* Action button description for deactivate after failed attempt */
-"Retry" = "Retry";
-
-/* Action button description when deactivated */
-"Continue" = "Continue";
-
-/* Format string for recovery suggestion during deactivate pod. */
-"There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod." = "There was a problem communicating with the pod. If this problem persists, tap Discard Pod. You can then activate a new Pod.";
-
-/* Text for discard pod button */
-"Discard Pod" = "Discard Pod";
-
-/* Title for remove pod modal */
-"Remove Pod from Body" = "Remove Pod from Body";
-
-/* Alert message body for confirm pod attachment */
-"Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“" = "Your Pod may still be delivering Insulin.\nRemove it from your body, then tap “Continue.“";
-
-/* Insulin Unit */
-"U" = "U";
-
-/* The action string on pod status page when pod expired */
-"Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains." = "Change Pod now. Insulin delivery will stop 8 hours after the Pod has expired or when no more insulin remains.";
-
-/* Label text for step 1 of pair pod instructions */
-"Fill a new pod with U-100 Insulin (leave blue Pod needle cap on)." = "Fill a new pod with U-100 Insulin (leave blue Pod needle cap on).";
-
-/* Label text for step 2 of pair pod instructions */
-"Listen for 2 beeps." = "Listen for 2 beeps.";
-
-/* Label text indicating pairing finished.*/
-"Paired" = "Paired";
-
-/* Cancel button text in navigation bar on pair pod UI */
-"Cancel" = "Cancelar";
-
-/* Alert title for cancel pairing modal */
-"Are you sure you want to cancel Pod setup?" = "Are you sure you want to cancel Pod setup?";
-
-/* Alert message body for confirm pod attachment */
-"If you cancel Pod setup, the current Pod will be deactivated and will be unusable." = "If you cancel Pod setup, the current Pod will be deactivated and will be unusable.";
-
-/* Button title for confirm deactivation option */
-"Yes, Deactivate Pod" = "Yes, Deactivate Pod";
-
-/* Continue pairing button title of in pairing cancel modal */
-"No, Continue With Pod" = "No, Continue With Pod";
-
-/* Label text for step one of attach pod instructions */
-"Prepare site." = "Prepare site.";
-
-/* Label text for step two of attach pod instructions */
-"Remove blue Pod needle cap and check cannula. Then remove paper backing." = "Remove blue Pod needle cap and check cannula. Then remove paper backing.";
-
-/* Label text for step three of attach pod instructions */
-"Check Pod, apply to site, then confirm pod attachment." = "Check Pod, apply to site, then confirm pod attachment.";
-
-
-/* Action button title for attach pod view */
-"Continue" = "Continue";
-
-/* */
-"Attach Pod" = "Attach Pod";
-
-/* Alert title for confirm pod attachment */
-"Confirm Pod Attachment" = "Confirm Pod Attachment";
-
-/* Alert message body for confirm pod attachment */
-"Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached." = "Please confirm that the Pod is securely attached to your body.\n\nThe cannula can be inserted only once with each Pod. Tap “Confirm” when Pod is attached.";
-
-/* Button title for confirm attachment option */
-"Confirm" = "Confirm";
-
-/* Label text for step one of insert cannula instructions */
-"Tap below to start cannula insertion." = "Tap below to start cannula insertion.";
-
-/* Label text for step two of insert cannula instructions */
-"Wait until insertion is completed." = "Wait until insertion is completed.";
-
-/* Label text indicating insertion finished. */
-"Inserted" = "Inserted";
-
-/* */
-"Check Cannula" = "Check Cannula";
-
-/* */
-"Is the cannula inserted properly?" = "Is the cannula inserted properly?";
-
-/* Description of proper cannula insertion */
-"The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin." = "The window on the top of the Pod should be colored pink when the cannula is properly inserted into the skin.";
-
-/* Button label for user to answer cannula was properly inserted */
-"Yes" = "Yes";
-
-/* Button label for user to answer cannula was not properly inserted" */
-"No" = "No";
-
-/* Pod pairing action button text while pairing */
-"Pairing..." = "Pairing...";
-
-/* Pod pairing action button text while priming */
-"Priming..." = "Priming...";
-
-/* Format string for instructions for setup complete view. (1: app name) */
-"Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you." = "Your Pod is ready for use.\n\n%1$@ will remind you to change your pod before it expires. You can change this to a time convenient for you.";
-
-/* */
-"Scheduled Reminder" = "Scheduled Reminder";
-
-/* Label for expiration reminder row */
-"Time" = "Hora";
-
-/* Action button title to continue at Setup Complete */
-"Finish Setup" = "Finish Setup";
-
-/* */
-"Setup Complete" = "Setup Complete";
-
-/* Value text for no expiration reminder */
-"No Reminder" = "No Reminder";

+ 0 - 0
Dependencies/OmniBLE/Localizations/Localizations/ro.lproj/Localizable.strings


Некоторые файлы не были показаны из-за большого количества измененных файлов