Przeglądaj źródła

wip:does not build:Copied LoopKit dependencies from LoopWorkspace dev

- LoopWorkspace dev ce74cf4 'Bring in OmniBLE updates' (Feb 21, 2024)
- Deleted Open-iAPS/Dependencies/rileylink_ios, and copied RileyLinkKit into /Dependencies
- Added RileyLinkKit to the Xcode workspace
- Add missing frameworks to projects: Link binary with libraries

	- OmniKit: RileyLinkKit, RileyLinkBLEKit, RileyLinkKitUI
	- OmniKitUI: OmniKit
	- LoopKitUI
G7SensorKit: LoopKitUI

- The update_loopkit_dependencies.sh script adds git references to Open-iAPS/Dependencies/LoopKit_dependencies.txt
bjornoleh 2 lat temu
rodzic
commit
6498856260
100 zmienionych plików z 1249 dodań i 1108 usunięć
  1. 1 1
      Dependencies/CGMBLEKit/CGMBLEKit Example/de.lproj/Main.strings
  2. 3 0
      Dependencies/CGMBLEKit/CGMBLEKit Example/he.lproj/InfoPlist.strings
  3. 3 3
      Dependencies/CGMBLEKit/CGMBLEKit Example/he.lproj/Localizable.strings
  4. 7 7
      Dependencies/CGMBLEKit/CGMBLEKit Example/he.lproj/Main.strings
  5. 36 9
      Dependencies/CGMBLEKit/CGMBLEKit.xcodeproj/project.pbxproj
  6. 97 0
      Dependencies/CGMBLEKit/CGMBLEKit.xcodeproj/xcshareddata/xcschemes/CGMBLEKit Example.xcscheme
  7. 87 0
      Dependencies/CGMBLEKit/CGMBLEKit.xcodeproj/xcshareddata/xcschemes/ResetTransmitter.xcscheme
  8. 76 0
      Dependencies/CGMBLEKit/CGMBLEKit.xcodeproj/xcshareddata/xcschemes/Shared-watchOS.xcscheme
  9. 137 0
      Dependencies/CGMBLEKit/CGMBLEKit.xcodeproj/xcshareddata/xcschemes/Shared.xcscheme
  10. 1 3
      Dependencies/CGMBLEKit/CGMBLEKit/Base.lproj/Localizable.strings
  11. 2 1
      Dependencies/CGMBLEKit/CGMBLEKit/Transmitter.swift
  12. 87 40
      Dependencies/CGMBLEKit/CGMBLEKit/TransmitterManager.swift
  13. 70 0
      Dependencies/CGMBLEKit/CGMBLEKit/TransmitterManagerState.swift
  14. 0 38
      Dependencies/CGMBLEKit/CGMBLEKit/ar.lproj/Localizable.strings
  15. 3 0
      Dependencies/CGMBLEKit/CGMBLEKit/cs.lproj/Localizable.strings
  16. 1 0
      Dependencies/CGMBLEKit/CGMBLEKit/da.lproj/Localizable.strings
  17. 6 5
      Dependencies/CGMBLEKit/CGMBLEKit/de.lproj/Localizable.strings
  18. 1 0
      Dependencies/CGMBLEKit/CGMBLEKit/es.lproj/Localizable.strings
  19. 1 0
      Dependencies/CGMBLEKit/CGMBLEKit/fi.lproj/Localizable.strings
  20. 1 0
      Dependencies/CGMBLEKit/CGMBLEKit/fr.lproj/Localizable.strings
  21. 10 9
      Dependencies/CGMBLEKit/CGMBLEKit/he.lproj/Localizable.strings
  22. 7 6
      Dependencies/CGMBLEKit/CGMBLEKit/it.lproj/Localizable.strings
  23. 2 1
      Dependencies/CGMBLEKit/CGMBLEKit/nb.lproj/Localizable.strings
  24. 3 2
      Dependencies/CGMBLEKit/CGMBLEKit/nl.lproj/Localizable.strings
  25. 3 2
      Dependencies/CGMBLEKit/CGMBLEKit/pl.lproj/Localizable.strings
  26. 1 3
      Dependencies/CGMBLEKit/CGMBLEKit/pt-BR.lproj/Localizable.strings
  27. 3 2
      Dependencies/CGMBLEKit/CGMBLEKit/ru.lproj/Localizable.strings
  28. 1 0
      Dependencies/CGMBLEKit/CGMBLEKit/sk.lproj/Localizable.strings
  29. 3 2
      Dependencies/CGMBLEKit/CGMBLEKit/sv.lproj/Localizable.strings
  30. 1 0
      Dependencies/CGMBLEKit/CGMBLEKit/tr.lproj/Localizable.strings
  31. 1 3
      Dependencies/CGMBLEKit/CGMBLEKit/vi.lproj/Localizable.strings
  32. 1 12
      Dependencies/CGMBLEKit/CGMBLEKit/zh-Hans.lproj/Localizable.strings
  33. 0 9
      Dependencies/CGMBLEKit/CGMBLEKitUI/Base.lproj/Localizable.strings
  34. 6 6
      Dependencies/CGMBLEKit/CGMBLEKitUI/TransmitterManager+UI.swift
  35. 24 33
      Dependencies/CGMBLEKit/CGMBLEKitUI/TransmitterSettingsViewController.swift
  36. 0 44
      Dependencies/CGMBLEKit/CGMBLEKitUI/ar.lproj/Localizable.strings
  37. 0 20
      Dependencies/CGMBLEKit/CGMBLEKitUI/ar.lproj/TransmitterManagerSetup.strings
  38. 9 8
      Dependencies/CGMBLEKit/CGMBLEKitUI/da.lproj/Localizable.strings
  39. 7 6
      Dependencies/CGMBLEKit/CGMBLEKitUI/da.lproj/TransmitterManagerSetup.strings
  40. 11 10
      Dependencies/CGMBLEKit/CGMBLEKitUI/de.lproj/Localizable.strings
  41. 8 7
      Dependencies/CGMBLEKit/CGMBLEKitUI/de.lproj/TransmitterManagerSetup.strings
  42. 9 8
      Dependencies/CGMBLEKit/CGMBLEKitUI/es.lproj/Localizable.strings
  43. 7 6
      Dependencies/CGMBLEKit/CGMBLEKitUI/es.lproj/TransmitterManagerSetup.strings
  44. 6 11
      Dependencies/CGMBLEKit/CGMBLEKitUI/fi.lproj/Localizable.strings
  45. 7 6
      Dependencies/CGMBLEKit/CGMBLEKitUI/fi.lproj/TransmitterManagerSetup.strings
  46. 10 9
      Dependencies/CGMBLEKit/CGMBLEKitUI/fr.lproj/Localizable.strings
  47. 7 6
      Dependencies/CGMBLEKit/CGMBLEKitUI/fr.lproj/TransmitterManagerSetup.strings
  48. 24 23
      Dependencies/CGMBLEKit/CGMBLEKitUI/he.lproj/Localizable.strings
  49. 12 11
      Dependencies/CGMBLEKit/CGMBLEKitUI/he.lproj/TransmitterManagerSetup.strings
  50. 12 11
      Dependencies/CGMBLEKit/CGMBLEKitUI/it.lproj/Localizable.strings
  51. 9 8
      Dependencies/CGMBLEKit/CGMBLEKitUI/it.lproj/TransmitterManagerSetup.strings
  52. 9 8
      Dependencies/CGMBLEKit/CGMBLEKitUI/nb.lproj/Localizable.strings
  53. 7 6
      Dependencies/CGMBLEKit/CGMBLEKitUI/nb.lproj/TransmitterManagerSetup.strings
  54. 16 15
      Dependencies/CGMBLEKit/CGMBLEKitUI/nl.lproj/Localizable.strings
  55. 9 8
      Dependencies/CGMBLEKit/CGMBLEKitUI/nl.lproj/TransmitterManagerSetup.strings
  56. 9 8
      Dependencies/CGMBLEKit/CGMBLEKitUI/pl.lproj/Localizable.strings
  57. 7 6
      Dependencies/CGMBLEKit/CGMBLEKitUI/pl.lproj/TransmitterManagerSetup.strings
  58. 0 14
      Dependencies/CGMBLEKit/CGMBLEKitUI/pt-BR.lproj/Localizable.strings
  59. 7 6
      Dependencies/CGMBLEKit/CGMBLEKitUI/pt-BR.lproj/TransmitterManagerSetup.strings
  60. 10 9
      Dependencies/CGMBLEKit/CGMBLEKitUI/ru.lproj/Localizable.strings
  61. 8 7
      Dependencies/CGMBLEKit/CGMBLEKitUI/ru.lproj/TransmitterManagerSetup.strings
  62. 10 9
      Dependencies/CGMBLEKit/CGMBLEKitUI/sk.lproj/Localizable.strings
  63. 8 10
      Dependencies/CGMBLEKit/CGMBLEKitUI/sk.lproj/TransmitterManagerSetup.strings
  64. 8 13
      Dependencies/CGMBLEKit/CGMBLEKitUI/sv.lproj/Localizable.strings
  65. 10 9
      Dependencies/CGMBLEKit/CGMBLEKitUI/sv.lproj/TransmitterManagerSetup.strings
  66. 9 8
      Dependencies/CGMBLEKit/CGMBLEKitUI/tr.lproj/Localizable.strings
  67. 7 6
      Dependencies/CGMBLEKit/CGMBLEKitUI/tr.lproj/TransmitterManagerSetup.strings
  68. 0 14
      Dependencies/CGMBLEKit/CGMBLEKitUI/vi.lproj/Localizable.strings
  69. 9 8
      Dependencies/CGMBLEKit/CGMBLEKitUI/vi.lproj/TransmitterManagerSetup.strings
  70. 0 14
      Dependencies/CGMBLEKit/CGMBLEKitUI/zh-Hans.lproj/Localizable.strings
  71. 7 6
      Dependencies/CGMBLEKit/CGMBLEKitUI/zh-Hans.lproj/TransmitterManagerSetup.strings
  72. 1 1
      Dependencies/CGMBLEKit/ResetTransmitter/de.lproj/InfoPlist.strings
  73. 3 3
      Dependencies/CGMBLEKit/ResetTransmitter/de.lproj/Localizable.strings
  74. 4 4
      Dependencies/CGMBLEKit/ResetTransmitter/de.lproj/Main.strings
  75. 10 1
      Dependencies/CGMBLEKit/ResetTransmitter/he.lproj/InfoPlist.strings
  76. 5 5
      Dependencies/CGMBLEKit/ResetTransmitter/he.lproj/Localizable.strings
  77. 8 8
      Dependencies/CGMBLEKit/ResetTransmitter/he.lproj/Main.strings
  78. 4 12
      Dependencies/G7SensorKit/G7SensorKit.xcodeproj/project.pbxproj
  79. 14 4
      Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7CGMManager.swift
  80. 1 1
      Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7PeripheralManager.swift
  81. 2 3
      Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7Sensor.swift
  82. 6 6
      Dependencies/G7SensorKit/G7SensorKit/Messages/G7GlucoseMessage.swift
  83. 3 0
      Dependencies/G7SensorKit/G7SensorKit/cs.lproj/Localizable.strings
  84. 1 1
      Dependencies/G7SensorKit/G7SensorKit/de.lproj/Localizable.strings
  85. 16 4
      Dependencies/G7SensorKit/G7SensorKit/he.lproj/Localizable.strings
  86. 54 31
      Dependencies/G7SensorKit/G7SensorKitTests/G7GlucoseMessageTests.swift
  87. 6 5
      Dependencies/G7SensorKit/G7SensorKitUI/G7CGMManager/G7CGMManager+UI.swift
  88. 6 6
      Dependencies/G7SensorKit/G7SensorKitUI/G7CGMManager/G7UICoordinator.swift
  89. 13 9
      Dependencies/G7SensorKit/G7SensorKitUI/Views/G7SettingsView.swift
  90. 5 20
      Dependencies/G7SensorKit/G7SensorKitUI/Views/G7SettingsViewModel.swift
  91. 1 1
      Dependencies/G7SensorKit/G7SensorKitUI/Views/G7StartupView.swift
  92. 6 105
      Dependencies/G7SensorKit/G7SensorKitUI/ar.lproj/Localizable.strings
  93. 0 3
      Dependencies/G7SensorKit/G7SensorKitUI/cs.lproj/Localizable.strings
  94. 17 19
      Dependencies/G7SensorKit/G7SensorKitUI/da.lproj/Localizable.strings
  95. 18 20
      Dependencies/G7SensorKit/G7SensorKitUI/de.lproj/Localizable.strings
  96. 1 118
      Dependencies/G7SensorKit/G7SensorKitUI/en.lproj/Localizable.strings
  97. 31 33
      Dependencies/G7SensorKit/G7SensorKitUI/es.lproj/Localizable.strings
  98. 12 81
      Dependencies/G7SensorKit/G7SensorKitUI/fi.lproj/Localizable.strings
  99. 27 29
      Dependencies/G7SensorKit/G7SensorKitUI/fr.lproj/Localizable.strings
  100. 0 0
      Dependencies/G7SensorKit/G7SensorKitUI/he.lproj/Localizable.strings

+ 1 - 1
Dependencies/CGMBLEKit/CGMBLEKit Example/de.lproj/Main.strings

@@ -17,7 +17,7 @@
 "HYW-Ex-7LC.normalTitle" = "Kalibrieren";
 
 /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */
-"JAM-9K-KeE.normalTitle" = "Stop";
+"JAM-9K-KeE.normalTitle" = "Stopp";
 
 /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */
 "NSs-9e-3Sl.text" = "Verbunden bleiben";

+ 3 - 0
Dependencies/CGMBLEKit/CGMBLEKit Example/he.lproj/InfoPlist.strings

@@ -0,0 +1,3 @@
+/* Bundle name */
+"CFBundleName" = "CGMBLEKit Example";
+

+ 3 - 3
Dependencies/CGMBLEKit/CGMBLEKit Example/he.lproj/Localizable.strings

@@ -1,9 +1,9 @@
 /* Title displayed during backfill response */
-"Backfill" = "Backfill";
+"Backfill" = "מילוי לאחור";
 
 /* Title displayed during error response */
-"Error" = "Error";
+"Error" = "שגיאה";
 
 /* Title displayed during unknown data response */
-"Unknown Data" = "Unknown Data";
+"Unknown Data" = "מידע לא ידוע";
 

+ 7 - 7
Dependencies/CGMBLEKit/CGMBLEKit Example/he.lproj/Main.strings

@@ -1,26 +1,26 @@
 /* Class = "UILabel"; text = "Run alongside G5 app"; ObjectID = "3i8-2m-QFG"; */
-"3i8-2m-QFG.text" = "Run alongside G5 app";
+"3i8-2m-QFG.text" = "רוץ לצד אפליקציית G5";
 
 /* Class = "UILabel"; text = "Transmitter ID"; ObjectID = "5y6-vU-qC3"; */
-"5y6-vU-qC3.text" = "Transmitter ID";
+"5y6-vU-qC3.text" = "מזהה משדר";
 
 /* Class = "UILabel"; text = "Waiting for first reading"; ObjectID = "9p7-LX-EMK"; */
-"9p7-LX-EMK.text" = "Waiting for first reading";
+"9p7-LX-EMK.text" = "ממתין לקריאה ראשונה";
 
 /* Class = "UITextField"; text = "500000"; ObjectID = "e0T-ru-tWD"; */
 "e0T-ru-tWD.text" = "500000";
 
 /* Class = "UIButton"; normalTitle = "Start"; ObjectID = "HEQ-Bp-kx7"; */
-"HEQ-Bp-kx7.normalTitle" = "Start";
+"HEQ-Bp-kx7.normalTitle" = "התחל";
 
 /* Class = "UIButton"; normalTitle = "Calibrate"; ObjectID = "HYW-Ex-7LC"; */
-"HYW-Ex-7LC.normalTitle" = "Calibrate";
+"HYW-Ex-7LC.normalTitle" = "כייל";
 
 /* Class = "UIButton"; normalTitle = "Stop"; ObjectID = "JAM-9K-KeE"; */
-"JAM-9K-KeE.normalTitle" = "Stop";
+"JAM-9K-KeE.normalTitle" = "עצור";
 
 /* Class = "UILabel"; text = "Stay connected"; ObjectID = "NSs-9e-3Sl"; */
-"NSs-9e-3Sl.text" = "Stay connected";
+"NSs-9e-3Sl.text" = "הישאר מחובר";
 
 /* Class = "UILabel"; text = "––"; ObjectID = "zAF-A7-1Oc"; */
 "zAF-A7-1Oc.text" = "––";

+ 36 - 9
Dependencies/CGMBLEKit/CGMBLEKit.xcodeproj/project.pbxproj

@@ -185,6 +185,7 @@
 		B4D40D4A23ABB33500D7ECB5 /* CGMBLEKitG5Plugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4D40D4923ABB33500D7ECB5 /* CGMBLEKitG5Plugin.swift */; };
 		B4D40D4B23ABB42400D7ECB5 /* OSLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4323115E1EFC870300B95E62 /* OSLog.swift */; };
 		C15543B2252D8777008EE7E5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C15543B1252D8776008EE7E5 /* Assets.xcassets */; };
+		C1614F082AAFD07700F636E5 /* TransmitterManagerState.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1614F072AAFD07700F636E5 /* TransmitterManagerState.swift */; };
 		C182166E297E55A7001EB097 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C182166C297E55A7001EB097 /* InfoPlist.strings */; };
 		C19084BB203932BD00AA47F3 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C19084B9203932BD00AA47F3 /* Main.storyboard */; };
 		C19C8BDB286520970056D5E4 /* CGMBLEKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43CABDF31C3506F100005705 /* CGMBLEKit.framework */; };
@@ -346,9 +347,6 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
-		193F1E3F2B44C1CE00525770 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/TransmitterManagerSetup.strings; sourceTree = "<group>"; };
-		193F1E402B44C1CE00525770 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = "<group>"; };
-		193F1E412B44C1CE00525770 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = "<group>"; };
 		43026D3E2131C5C600A332E2 /* LocalizedString.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocalizedString.swift; sourceTree = "<group>"; };
 		43026D472131C99500A332E2 /* base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = base; path = Base.lproj/Localizable.strings; sourceTree = "<group>"; };
 		43026D492131CA8C00A332E2 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
@@ -589,6 +587,7 @@
 		C15A581829C7866600D3A5A1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = "<group>"; };
 		C15A581929C7866600D3A5A1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/TransmitterManagerSetup.strings; sourceTree = "<group>"; };
 		C15A581A29C7866600D3A5A1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = "<group>"; };
+		C1614F072AAFD07700F636E5 /* TransmitterManagerState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransmitterManagerState.swift; sourceTree = "<group>"; };
 		C17F1B502981EDD500F2F205 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		C17F1B512981EDD500F2F205 /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		C182166D297E55A7001EB097 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
@@ -615,6 +614,7 @@
 		C1C247832995823200371B88 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = "<group>"; };
 		C1CD8B0A203931AD00A8F498 /* NSUserDefaults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSUserDefaults.swift; sourceTree = "<group>"; };
 		C1D18D4E2981EDD900FE14A1 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		C1D70F792A914F71009FE129 /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		C1E3CD6A2981EDD9006BD841 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		C1E3CD6B2981EDD9006BD841 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		C1E693C729C786E200410918 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
@@ -885,6 +885,7 @@
 				431CE7661F91D0B300255374 /* PeripheralManager+G5.swift */,
 				43CABE111C350B2800005705 /* Transmitter.swift */,
 				4325E9EC210EAEF500969CE5 /* TransmitterManager.swift */,
+				C1614F072AAFD07700F636E5 /* TransmitterManagerState.swift */,
 				43CE7CDB1CA77468003CC1B0 /* TransmitterStatus.swift */,
 				43CABDF61C3506F100005705 /* CGMBLEKit.h */,
 				43CABE161C350B2E00005705 /* Messages */,
@@ -1246,7 +1247,6 @@
 				ar,
 				cs,
 				hi,
-				hu,
 			);
 			mainGroup = 43CABDE91C3506F100005705;
 			productRefGroup = 43CABDF41C3506F100005705 /* Products */;
@@ -1402,6 +1402,7 @@
 				43CABE231C350B3D00005705 /* AuthRequestRxMessage.swift in Sources */,
 				43CABE261C350B3D00005705 /* AuthChallengeRxMessage.swift in Sources */,
 				43CE7CD41CA73CE8003CC1B0 /* GlucoseHistoryTxMessage.swift in Sources */,
+				C1614F082AAFD07700F636E5 /* TransmitterManagerState.swift in Sources */,
 				43E397931D56950C0028E321 /* HKUnit.swift in Sources */,
 				43846AC61D8F896C00799272 /* CalibrationDataRxMessage.swift in Sources */,
 				43CE7CD01CA73C57003CC1B0 /* SessionStopTxMessage.swift in Sources */,
@@ -1620,7 +1621,6 @@
 				C15A581729C7866600D3A5A1 /* ar */,
 				C121D8C929C7866D00DA0520 /* cs */,
 				C1FAB5B929C786B000D25073 /* hi */,
-				193F1E402B44C1CE00525770 /* hu */,
 			);
 			name = Localizable.strings;
 			sourceTree = "<group>";
@@ -1651,7 +1651,6 @@
 				C15A581829C7866600D3A5A1 /* ar */,
 				C121D8CA29C7866D00DA0520 /* cs */,
 				C1FAB5BA29C786B000D25073 /* hi */,
-				193F1E412B44C1CE00525770 /* hu */,
 			);
 			name = Localizable.strings;
 			sourceTree = "<group>";
@@ -1719,7 +1718,6 @@
 				F5E0BE1727E1DE3E0033557E /* he */,
 				C1C247802995823200371B88 /* sk */,
 				C15A581929C7866600D3A5A1 /* ar */,
-				193F1E3F2B44C1CE00525770 /* hu */,
 			);
 			name = TransmitterManagerSetup.storyboard;
 			sourceTree = "<group>";
@@ -1833,6 +1831,7 @@
 				C19E3878298638CE00851444 /* tr */,
 				C1F48FF32995821600C8BD69 /* pl */,
 				C1C2477C2995823200371B88 /* sk */,
+				C1D70F792A914F71009FE129 /* he */,
 			);
 			name = InfoPlist.strings;
 			sourceTree = "<group>";
@@ -1995,6 +1994,9 @@
 				PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
 				SKIP_INSTALL = YES;
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = NO;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
 				TARGETED_DEVICE_FAMILY = "1,2";
 			};
@@ -2025,6 +2027,9 @@
 				PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
 				SKIP_INSTALL = YES;
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = NO;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
 				TARGETED_DEVICE_FAMILY = "1,2";
 			};
 			name = Release;
@@ -2175,7 +2180,9 @@
 				PRODUCT_BUNDLE_IDENTIFIER = com.loudnate.CGMBLEKit;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SKIP_INSTALL = YES;
-				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = NO;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 				TARGETED_DEVICE_FAMILY = "1,2";
 			};
@@ -2199,7 +2206,9 @@
 				PRODUCT_BUNDLE_IDENTIFIER = com.loudnate.CGMBLEKit;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SKIP_INSTALL = YES;
-				SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = NO;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
 				TARGETED_DEVICE_FAMILY = "1,2";
 			};
 			name = Release;
@@ -2212,6 +2221,9 @@
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
 				PRODUCT_BUNDLE_IDENTIFIER = com.loudnate.CGMBLEKitTests;
 				PRODUCT_NAME = "$(TARGET_NAME)";
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = NO;
+				TARGETED_DEVICE_FAMILY = "1,2";
 			};
 			name = Debug;
 		};
@@ -2223,6 +2235,9 @@
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
 				PRODUCT_BUNDLE_IDENTIFIER = com.loudnate.CGMBLEKitTests;
 				PRODUCT_NAME = "$(TARGET_NAME)";
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = NO;
+				TARGETED_DEVICE_FAMILY = "1,2";
 			};
 			name = Release;
 		};
@@ -2300,6 +2315,9 @@
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SDKROOT = iphoneos;
 				SKIP_INSTALL = YES;
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = NO;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
 				SWIFT_OBJC_BRIDGING_HEADER = "CGMBLEKitG6Plugin/CGMBLEKitG6Plugin-Bridging-Header.h";
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 				SWIFT_VERSION = 5.0;
@@ -2332,6 +2350,9 @@
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SDKROOT = iphoneos;
 				SKIP_INSTALL = YES;
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = NO;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
 				SWIFT_OBJC_BRIDGING_HEADER = "CGMBLEKitG6Plugin/CGMBLEKitG6Plugin-Bridging-Header.h";
 				SWIFT_VERSION = 5.0;
 				TARGETED_DEVICE_FAMILY = 1;
@@ -2364,6 +2385,9 @@
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SDKROOT = iphoneos;
 				SKIP_INSTALL = YES;
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = NO;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
 				SWIFT_OBJC_BRIDGING_HEADER = "CGMBLEKitG5Plugin/CGMBLEKitG5Plugin-Bridging-Header.h";
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 				SWIFT_VERSION = 5.0;
@@ -2396,6 +2420,9 @@
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SDKROOT = iphoneos;
 				SKIP_INSTALL = YES;
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = NO;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
 				SWIFT_OBJC_BRIDGING_HEADER = "CGMBLEKitG5Plugin/CGMBLEKitG5Plugin-Bridging-Header.h";
 				SWIFT_VERSION = 5.0;
 				TARGETED_DEVICE_FAMILY = 1;

+ 97 - 0
Dependencies/CGMBLEKit/CGMBLEKit.xcodeproj/xcshareddata/xcschemes/CGMBLEKit Example.xcscheme

@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1430"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "437AFEF62038EC43008C4892"
+               BuildableName = "CGMBLEKit Example.app"
+               BlueprintName = "CGMBLEKit Example"
+               ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "437AFEF62038EC43008C4892"
+            BuildableName = "CGMBLEKit Example.app"
+            BlueprintName = "CGMBLEKit Example"
+            ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <Testables>
+         <TestableReference
+            skipped = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "43CABDFC1C3506F100005705"
+               BuildableName = "CGMBLEKitTests.xctest"
+               BlueprintName = "CGMBLEKitTests"
+               ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "437AFEF62038EC43008C4892"
+            BuildableName = "CGMBLEKit Example.app"
+            BlueprintName = "CGMBLEKit Example"
+            ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "437AFEF62038EC43008C4892"
+            BuildableName = "CGMBLEKit Example.app"
+            BlueprintName = "CGMBLEKit Example"
+            ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 87 - 0
Dependencies/CGMBLEKit/CGMBLEKit.xcodeproj/xcshareddata/xcschemes/ResetTransmitter.xcscheme

@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1430"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "4308103220785FEA00B66384"
+               BuildableName = "ResetTransmitter.app"
+               BlueprintName = "ResetTransmitter"
+               ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "4308103220785FEA00B66384"
+            BuildableName = "ResetTransmitter.app"
+            BlueprintName = "ResetTransmitter"
+            ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "4308103220785FEA00B66384"
+            BuildableName = "ResetTransmitter.app"
+            BlueprintName = "ResetTransmitter"
+            ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "4308103220785FEA00B66384"
+            BuildableName = "ResetTransmitter.app"
+            BlueprintName = "ResetTransmitter"
+            ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 76 - 0
Dependencies/CGMBLEKit/CGMBLEKit.xcodeproj/xcshareddata/xcschemes/Shared-watchOS.xcscheme

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1430"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "NO">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "A9AD37DE225EEE850058C179"
+               BuildableName = "CGMBLEKit.framework"
+               BlueprintName = "CGMBLEKit-watchOS"
+               ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "A9AD37DE225EEE850058C179"
+            BuildableName = "CGMBLEKit.framework"
+            BlueprintName = "CGMBLEKit-watchOS"
+            ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "A9AD37DE225EEE850058C179"
+            BuildableName = "CGMBLEKit.framework"
+            BlueprintName = "CGMBLEKit-watchOS"
+            ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 137 - 0
Dependencies/CGMBLEKit/CGMBLEKit.xcodeproj/xcshareddata/xcschemes/Shared.xcscheme

@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1430"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "NO"
+      buildImplicitDependencies = "NO">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "43CABDF21C3506F100005705"
+               BuildableName = "CGMBLEKit.framework"
+               BlueprintName = "CGMBLEKit"
+               ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "43A8EC51210D0A7400A81379"
+               BuildableName = "CGMBLEKitUI.framework"
+               BlueprintName = "CGMBLEKitUI"
+               ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "B4D40D3D23A428BC00D7ECB5"
+               BuildableName = "CGMBLEKitG5Plugin.loopplugin"
+               BlueprintName = "CGMBLEKitG5Plugin"
+               ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "B4D40D2D23A3E91800D7ECB5"
+               BuildableName = "CGMBLEKitG6Plugin.loopplugin"
+               BlueprintName = "CGMBLEKitG6Plugin"
+               ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "43CABDF21C3506F100005705"
+            BuildableName = "CGMBLEKit.framework"
+            BlueprintName = "CGMBLEKit"
+            ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+      <Testables>
+         <TestableReference
+            skipped = "NO">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "43CABDFC1C3506F100005705"
+               BuildableName = "CGMBLEKitTests.xctest"
+               BlueprintName = "CGMBLEKitTests"
+               ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "43CABDF21C3506F100005705"
+            BuildableName = "CGMBLEKit.framework"
+            BlueprintName = "CGMBLEKit"
+            ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <MacroExpansion>
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "43CABDF21C3506F100005705"
+            BuildableName = "CGMBLEKit.framework"
+            BlueprintName = "CGMBLEKit"
+            ReferencedContainer = "container:CGMBLEKit.xcodeproj">
+         </BuildableReference>
+      </MacroExpansion>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 1 - 3
Dependencies/CGMBLEKit/CGMBLEKit/Base.lproj/Localizable.strings

@@ -13,9 +13,6 @@
 /* Describes a functioning transmitter */
 "OK" = "OK";
 
-/* invlid config error description */
-"Peripheral command was invalid" = "Peripheral command was invalid";
-
 /* Timeout error description */
 "Peripheral did not respond in time" = "Peripheral did not respond in time";
 
@@ -39,3 +36,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Unknown characteristic";
+

+ 2 - 1
Dependencies/CGMBLEKit/CGMBLEKit/Transmitter.swift

@@ -98,9 +98,10 @@ public final class Transmitter: BluetoothManagerDelegate {
 
     private let delegateQueue = DispatchQueue(label: "com.loudnate.CGMBLEKit.delegateQueue", qos: .unspecified)
 
-    public init(id: String, peripheralIdentifier: UUID? = nil, passiveModeEnabled: Bool = false) {
+    public init(id: String, activationDate: Date?, peripheralIdentifier: UUID? = nil, passiveModeEnabled: Bool = false) {
         self.id = TransmitterID(id: id)
         self.passiveModeEnabled = passiveModeEnabled
+        self.activationDate = activationDate
 
         bluetoothManager.peripheralIdentifier = peripheralIdentifier
         bluetoothManager.delegate = self

+ 87 - 40
Dependencies/CGMBLEKit/CGMBLEKit/TransmitterManager.swift

@@ -10,50 +10,50 @@ import LoopKit
 import ShareClient
 import os.log
 
+public protocol TransmitterManagerObserver: AnyObject {
+    func transmitterManagerDidUpdateLatestReading(_ manager: TransmitterManager)
+}
 
-public struct TransmitterManagerState: RawRepresentable, Equatable {
-    public typealias RawValue = CGMManager.RawStateValue
-
-    public static let version = 1
 
-    public var transmitterID: String
+public class TransmitterManager: TransmitterDelegate {
 
-    public var passiveModeEnabled: Bool = true
-    
-    public var shouldSyncToRemoteService: Bool
+    var state: TransmitterManagerState {
+        get {
+            return lockedState.value
+        }
+    }
+    private func setState(_ changes: (_ state: inout TransmitterManagerState) -> Void) -> Void {
+        return setStateWithResult(changes)
+    }
 
-    public init(transmitterID: String, shouldSyncToRemoteService: Bool = false) {
-        self.transmitterID = transmitterID
-        self.shouldSyncToRemoteService = shouldSyncToRemoteService
+    @discardableResult
+    private func mutateState(_ changes: (_ state: inout TransmitterManagerState) -> Void) -> TransmitterManagerState {
+        return setStateWithResult({ (state) -> TransmitterManagerState in
+            changes(&state)
+            return state
+        })
     }
 
-    public init?(rawValue: RawValue) {
-        guard let transmitterID = rawValue["transmitterID"] as? String
-        else {
-            return nil
+    private func setStateWithResult<ReturnType>(_ changes: (_ state: inout TransmitterManagerState) -> ReturnType) -> ReturnType {
+        var oldValue: TransmitterManagerState!
+        var returnType: ReturnType!
+        let newValue = lockedState.mutate { (state) in
+            oldValue = state
+            returnType = changes(&state)
         }
-        
-        let shouldSyncToRemoteService = rawValue["shouldSyncToRemoteService"] as? Bool ?? false
 
-        self.init(transmitterID: transmitterID, shouldSyncToRemoteService: shouldSyncToRemoteService)
-    }
+        if oldValue != newValue {
+            self.stateDidUpdate()
+        }
 
-    public var rawValue: RawValue {
-        return [
-            "transmitterID": transmitterID,
-            "shouldSyncToRemoteService": shouldSyncToRemoteService,
-        ]
+        return returnType
     }
-}
-
-
-public protocol TransmitterManagerObserver: AnyObject {
-    func transmitterManagerDidUpdateLatestReading(_ manager: TransmitterManager)
-}
 
+    func stateDidUpdate() {
+        // to be implemented in subclass
+    }
 
-public class TransmitterManager: TransmitterDelegate {
-    private var state: TransmitterManagerState
+    private let lockedState: Locked<TransmitterManagerState>
 
     private let observers = WeakSynchronizedSet<TransmitterManagerObserver>()
 
@@ -68,8 +68,8 @@ public class TransmitterManager: TransmitterDelegate {
     }
 
     public required init(state: TransmitterManagerState) {
-        self.state = state
-        self.transmitter = Transmitter(id: state.transmitterID, passiveModeEnabled: state.passiveModeEnabled)
+        self.lockedState = Locked(state)
+        self.transmitter = Transmitter(id: state.transmitterID, activationDate: state.transmitterStartDate, passiveModeEnabled: state.passiveModeEnabled)
         self.shareManager = ShareClientManager()
 
         self.transmitter.delegate = self
@@ -152,8 +152,9 @@ public class TransmitterManager: TransmitterDelegate {
             return state.shouldSyncToRemoteService
         }
         set {
-            self.state.shouldSyncToRemoteService = newValue
-            notifyDelegateOfStateChange()
+            self.mutateState { state in
+                state.shouldSyncToRemoteService = newValue
+            }
         }
     }
 
@@ -307,6 +308,39 @@ public class TransmitterManager: TransmitterDelegate {
             return
         }
 
+        var events: [PersistedCgmEvent] = []
+
+        if state.transmitterStartDate == nil {
+            mutateState { state in
+                state.transmitterStartDate = glucose.activationDate
+            }
+            events.append(PersistedCgmEvent(
+                date: glucose.activationDate,
+                type: .transmitterStart,
+                deviceIdentifier: transmitter.ID,
+                expectedLifetime: .hours(24 * 90)
+            ))
+        }
+
+        if state.sensorStartOffset != glucose.timeMessage.sessionStartTime {
+            mutateState { state in
+                state.sensorStartOffset = glucose.timeMessage.sessionStartTime
+            }
+            events.append(PersistedCgmEvent(
+                date: glucose.sessionStartDate,
+                type: .sensorStart,
+                deviceIdentifier: transmitter.ID,
+                expectedLifetime: .hours(24 * 10),
+                warmupPeriod: .hours(2)
+            ))
+        }
+
+        if !events.isEmpty {
+            shareManager.delegate.notify { delegate in
+                delegate?.cgmManager(self.shareManager, hasNew: events)
+            }
+        }
+
         latestReading = glucose
 
         logDeviceCommunication("New reading: \(glucose.readDate)", type: .receive)
@@ -395,7 +429,7 @@ extension TransmitterManager {
 
 
 public class G5CGMManager: TransmitterManager, CGMManager {
-    public let managerIdentifier: String = "DexG5Transmitter"
+    public static let pluginIdentifier: String = "DexG5Transmitter"
 
     public let localizedTitle = LocalizedString("Dexcom G5", comment: "CGM display title")
 
@@ -407,7 +441,7 @@ public class G5CGMManager: TransmitterManager, CGMManager {
 
     public override var device: HKDevice? {
         return HKDevice(
-            name: "CGMBLEKit",
+            name: transmitter.ID,
             manufacturer: "Dexcom",
             model: "G5 Mobile",
             hardwareVersion: nil,
@@ -421,12 +455,18 @@ public class G5CGMManager: TransmitterManager, CGMManager {
     override func logDeviceCommunication(_ message: String, type: DeviceLogEntryType = .send) {
         self.cgmManagerDelegate?.deviceManager(self, logEventForDeviceIdentifier: transmitter.ID, type: type, message: message, completion: nil)
     }
-    
+
+    override func stateDidUpdate() {
+        shareManager.delegate.notify { delegate in
+            delegate?.cgmManagerDidUpdateState(self)
+            delegate?.cgmManager(self, didUpdate: self.cgmManagerStatus)
+        }
+    }
 }
 
 
 public class G6CGMManager: TransmitterManager, CGMManager {
-    public let managerIdentifier: String = "DexG6Transmitter"
+    public static let pluginIdentifier: String = "DexG6Transmitter"
 
     public let localizedTitle = LocalizedString("Dexcom G6", comment: "CGM display title")
 
@@ -452,6 +492,13 @@ public class G6CGMManager: TransmitterManager, CGMManager {
     override func logDeviceCommunication(_ message: String, type: DeviceLogEntryType = .send) {
         self.cgmManagerDelegate?.deviceManager(self, logEventForDeviceIdentifier: transmitter.ID, type: type, message: message, completion: nil)
     }
+
+    override func stateDidUpdate() {
+        shareManager.delegate.notify { delegate in
+            delegate?.cgmManagerDidUpdateState(self)
+            delegate?.cgmManager(self, didUpdate: self.cgmManagerStatus)
+        }
+    }
 }
 
 

+ 70 - 0
Dependencies/CGMBLEKit/CGMBLEKit/TransmitterManagerState.swift

@@ -0,0 +1,70 @@
+//
+//  TransmitterManagerState.swift
+//  CGMBLEKit
+//
+//  Created by Pete Schwamb on 9/11/23.
+//  Copyright © 2023 LoopKit Authors. All rights reserved.
+//
+
+import Foundation
+import LoopKit
+
+public struct TransmitterManagerState: RawRepresentable, Equatable {
+    public typealias RawValue = CGMManager.RawStateValue
+
+    public static let version = 1
+
+    public var transmitterID: String
+
+    public var passiveModeEnabled: Bool = true
+
+    public var transmitterStartDate: Date?
+
+    public var sensorStartOffset: UInt32?
+
+    public var shouldSyncToRemoteService: Bool
+
+    public init(
+        transmitterID: String,
+        shouldSyncToRemoteService: Bool = false,
+        transmitterStartDate: Date? = nil,
+        sensorStartOffset: UInt32? = nil
+    ) {
+        self.transmitterID = transmitterID
+        self.shouldSyncToRemoteService = shouldSyncToRemoteService
+        self.transmitterStartDate = transmitterStartDate
+        self.sensorStartOffset = sensorStartOffset
+    }
+
+    public init?(rawValue: RawValue) {
+        guard let transmitterID = rawValue["transmitterID"] as? String
+        else {
+            return nil
+        }
+
+        let shouldSyncToRemoteService = rawValue["shouldSyncToRemoteService"] as? Bool ?? false
+
+        let transmitterStartDate = rawValue["transmitterStartDate"] as? Date
+
+        let sensorStartOffset = rawValue["sensorStartOffset"] as? UInt32
+
+        self.init(
+            transmitterID: transmitterID,
+            shouldSyncToRemoteService: shouldSyncToRemoteService,
+            transmitterStartDate: transmitterStartDate,
+            sensorStartOffset: sensorStartOffset
+        )
+    }
+
+    public var rawValue: RawValue {
+        var rval: RawValue = [
+            "transmitterID": transmitterID,
+            "shouldSyncToRemoteService": shouldSyncToRemoteService
+        ]
+
+        rval["transmitterStartDate"] = transmitterStartDate
+        rval["sensorStartOffset"] = sensorStartOffset
+
+        return rval
+    }
+}

+ 0 - 38
Dependencies/CGMBLEKit/CGMBLEKit/ar.lproj/Localizable.strings

@@ -1,41 +1,3 @@
-/* CGM display title */
-"Dexcom G5" = "Dexcom G5";
-
-/* CGM display title */
-"Dexcom G6" = "Dexcom G6";
-
-/* Error description for unreliable state */
-"Glucose data is unavailable" = "Glucose data is unavailable";
-
-/* Describes a low battery */
-"Low Battery" = "Low Battery";
-
 /* Describes a functioning transmitter */
 "OK" = "موافق";
 
-/* invlid config error description */
-"Peripheral command was invalid" = "Peripheral command was invalid";
-
-/* Timeout error description */
-"Peripheral did not respond in time" = "Peripheral did not respond in time";
-
-/* Not ready error description */
-"Peripheral isnʼt connected" = "Peripheral isnʼt connected";
-
-/* The description of sensor calibration state when sensor calibration is ok. */
-"Sensor calibration is OK" = "Sensor calibration is OK";
-
-/* The description of sensor calibration state when raw value is unknown. (1: missing data details) */
-"Sensor is in unknown state %1$d" = "Sensor is in unknown state %1$d";
-
-/* The description of sensor calibration state when sensor sensor is stopped. */
-"Sensor is stopped" = "Sensor is stopped";
-
-/* The description of sensor calibration state when sensor sensor is warming up. */
-"Sensor is warming up" = "Sensor is warming up";
-
-/* The description of sensor calibration state when sensor needs calibration. */
-"Sensor needs calibration" = "Sensor needs calibration";
-
-/* Error description */
-"Unknown characteristic" = "Unknown characteristic";

+ 3 - 0
Dependencies/CGMBLEKit/CGMBLEKit/cs.lproj/Localizable.strings

@@ -10,6 +10,9 @@
 /* Timeout error description */
 "Peripheral did not respond in time" = "Periferní zařízení nereagovalo včas";
 
+/* The description of sensor calibration state when raw value is unknown. (1: missing data details) */
+"Sensor is in unknown state %1$d" = "Senzor je v neznámém stavu %1$d";
+
 /* The description of sensor calibration state when sensor sensor is stopped. */
 "Sensor is stopped" = "Senzor je zastaven";
 

+ 1 - 0
Dependencies/CGMBLEKit/CGMBLEKit/da.lproj/Localizable.strings

@@ -39,3 +39,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Ukendt karakteristik";
+

+ 6 - 5
Dependencies/CGMBLEKit/CGMBLEKit/de.lproj/Localizable.strings

@@ -5,10 +5,10 @@
 "Dexcom G6" = "Dexcom G6";
 
 /* Error description for unreliable state */
-"Glucose data is unavailable" = "Glukosedaten nicht verfügbar";
+"Glucose data is unavailable" = "Blutzuckerdaten sind nicht verfügbar";
 
 /* Describes a low battery */
-"Low Battery" = "Batterie schwach";
+"Low Battery" = "Batterie niedrig";
 
 /* Describes a functioning transmitter */
 "OK" = "OK";
@@ -20,16 +20,16 @@
 "Peripheral did not respond in time" = "Peripherie antwortet nicht rechtzeitig";
 
 /* Not ready error description */
-"Peripheral isnʼt connected" = "Peripherie ist nicht verbunden";
+"Peripheral isnʼt connected" = "Gerät ist nicht verbunden";
 
 /* The description of sensor calibration state when sensor calibration is ok. */
-"Sensor calibration is OK" = "Sensorkalibrierung OK";
+"Sensor calibration is OK" = "Sensorkalibrierung ist OK";
 
 /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */
 "Sensor is in unknown state %1$d" = "Sensor befindet sich in unbekanntem Zustand %1$d";
 
 /* The description of sensor calibration state when sensor sensor is stopped. */
-"Sensor is stopped" = "Sensor gestoppt";
+"Sensor is stopped" = "Sensor ist gestoppt";
 
 /* The description of sensor calibration state when sensor sensor is warming up. */
 "Sensor is warming up" = "Sensor befindet sich in der Aufwärmphase";
@@ -39,3 +39,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Unbekannte Charakteristik";
+

+ 1 - 0
Dependencies/CGMBLEKit/CGMBLEKit/es.lproj/Localizable.strings

@@ -39,3 +39,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Característica desconocida";
+

+ 1 - 0
Dependencies/CGMBLEKit/CGMBLEKit/fi.lproj/Localizable.strings

@@ -39,3 +39,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Tuntematon ominaisuus";
+

+ 1 - 0
Dependencies/CGMBLEKit/CGMBLEKit/fr.lproj/Localizable.strings

@@ -39,3 +39,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Caractéristique inconnue";
+

+ 10 - 9
Dependencies/CGMBLEKit/CGMBLEKit/he.lproj/Localizable.strings

@@ -5,37 +5,38 @@
 "Dexcom G6" = "Dexcom G6";
 
 /* Error description for unreliable state */
-"Glucose data is unavailable" = "Glucose data is unavailable";
+"Glucose data is unavailable" = "מידע גלוקוז לא זמין";
 
 /* Describes a low battery */
 "Low Battery" = "סוללה חלשה";
 
 /* Describes a functioning transmitter */
-"OK" = "OK";
+"OK" = "תקין";
 
 /* invlid config error description */
-"Peripheral command was invalid" = "Peripheral command was invalid";
+"Peripheral command was invalid" = "פעולה לא חוקית";
 
 /* Timeout error description */
-"Peripheral did not respond in time" = "Peripheral did not respond in time";
+"Peripheral did not respond in time" = "לא הגיב בזמן";
 
 /* Not ready error description */
-"Peripheral isnʼt connected" = "Peripheral isnʼt connected";
+"Peripheral isnʼt connected" = "לא מחובר";
 
 /* The description of sensor calibration state when sensor calibration is ok. */
-"Sensor calibration is OK" = "Sensor calibration is OK";
+"Sensor calibration is OK" = "כיול חיישן הצליח";
 
 /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */
-"Sensor is in unknown state %1$d" = "מצב החישן אינו ידוע %1$d";
+"Sensor is in unknown state %1$d" = "מצב החיישן אינו ידוע %1$d";
 
 /* The description of sensor calibration state when sensor sensor is stopped. */
 "Sensor is stopped" = "חיישן נעצר";
 
 /* The description of sensor calibration state when sensor sensor is warming up. */
-"Sensor is warming up" = "חיישן מתחמם";
+"Sensor is warming up" = "חיישן מתכונן";
 
 /* The description of sensor calibration state when sensor needs calibration. */
-"Sensor needs calibration" = "Sensor needs calibration";
+"Sensor needs calibration" = "נדרש כיול לחיישן";
 
 /* Error description */
 "Unknown characteristic" = "מאפיין לא ידוע";
+

+ 7 - 6
Dependencies/CGMBLEKit/CGMBLEKit/it.lproj/Localizable.strings

@@ -17,25 +17,26 @@
 "Peripheral command was invalid" = "Il comando della periferica non era valido";
 
 /* Timeout error description */
-"Peripheral did not respond in time" = "La periferica non ha risposto entro il tempo limite";
+"Peripheral did not respond in time" = "La periferica non ha risposto nel tempo limite";
 
 /* Not ready error description */
-"Peripheral isnʼt connected" = "La periferica non è connessa";
+"Peripheral isnʼt connected" = "La periferica non e' connessa";
 
 /* The description of sensor calibration state when sensor calibration is ok. */
-"Sensor calibration is OK" = "La calibrazione del sensore è valida";
+"Sensor calibration is OK" = "La calibrazione del sensore e' valida";
 
 /* The description of sensor calibration state when raw value is unknown. (1: missing data details) */
-"Sensor is in unknown state %1$d" = "Il Sensore è in un stato %1$d sconosciuto";
+"Sensor is in unknown state %1$d" = "Il Sensore e' in un stato%1$d sconosciuto";
 
 /* The description of sensor calibration state when sensor sensor is stopped. */
-"Sensor is stopped" = "Il Sensore è fermo";
+"Sensor is stopped" = "Il sensore è fermo";
 
 /* The description of sensor calibration state when sensor sensor is warming up. */
-"Sensor is warming up" = "Il sensore è in fase di avvio";
+"Sensor is warming up" = "Il Sensore si sta riscaldando";
 
 /* The description of sensor calibration state when sensor needs calibration. */
 "Sensor needs calibration" = "Il sensore necessita di calibrazione";
 
 /* Error description */
 "Unknown characteristic" = "Caratteristica sconosciuta";
+

+ 2 - 1
Dependencies/CGMBLEKit/CGMBLEKit/nb.lproj/Localizable.strings

@@ -11,7 +11,7 @@
 "Low Battery" = "Lavt batterinivå";
 
 /* Describes a functioning transmitter */
-"OK" = "Ok";
+"OK" = "OK";
 
 /* invlid config error description */
 "Peripheral command was invalid" = "Perifer kommando var ugyldig";
@@ -39,3 +39,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Ukjent karakteristikk";
+

+ 3 - 2
Dependencies/CGMBLEKit/CGMBLEKit/nl.lproj/Localizable.strings

@@ -8,13 +8,13 @@
 "Glucose data is unavailable" = "Glucosegegevens zijn niet beschikbaar";
 
 /* Describes a low battery */
-"Low Battery" = "Batterij bijna leeg";
+"Low Battery" = "Batterij Bijna Leeg";
 
 /* Describes a functioning transmitter */
 "OK" = "Ok";
 
 /* invlid config error description */
-"Peripheral command was invalid" = "Apparaat commando was ongeldig";
+"Peripheral command was invalid" = "Perifere commando was ongeldig";
 
 /* Timeout error description */
 "Peripheral did not respond in time" = "Apparaat reageerde niet op tijd";
@@ -39,3 +39,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Onbekende eigenschap";
+

+ 3 - 2
Dependencies/CGMBLEKit/CGMBLEKit/pl.lproj/Localizable.strings

@@ -17,10 +17,10 @@
 "Peripheral command was invalid" = "Polecenie urządzenia peryferyjnego było nieprawidłowe";
 
 /* Timeout error description */
-"Peripheral did not respond in time" = "Urz. peryferyjne nie odpowiada";
+"Peripheral did not respond in time" = "Urządzenie peryferyjne nie odpowiada";
 
 /* Not ready error description */
-"Peripheral isnʼt connected" = "Urz. peryferyjne jest niepodłączone";
+"Peripheral isnʼt connected" = "Urządzenie peryferyjne nie jest podłączone";
 
 /* The description of sensor calibration state when sensor calibration is ok. */
 "Sensor calibration is OK" = "Kalibracja sensora powiodła się";
@@ -39,3 +39,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Nieznany błąd";
+

+ 1 - 3
Dependencies/CGMBLEKit/CGMBLEKit/pt-BR.lproj/Localizable.strings

@@ -13,9 +13,6 @@
 /* Describes a functioning transmitter */
 "OK" = "OK";
 
-/* invlid config error description */
-"Peripheral command was invalid" = "Peripheral command was invalid";
-
 /* Timeout error description */
 "Peripheral did not respond in time" = "Acessório não respondeu a tempo";
 
@@ -39,3 +36,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Característica Desconhecida";
+

+ 3 - 2
Dependencies/CGMBLEKit/CGMBLEKit/ru.lproj/Localizable.strings

@@ -8,10 +8,10 @@
 "Glucose data is unavailable" = "Данные глюкозы недоступны";
 
 /* Describes a low battery */
-"Low Battery" = "Батарейка садится";
+"Low Battery" = "Низкий заряд батарейки";
 
 /* Describes a functioning transmitter */
-"OK" = "ОК";
+"OK" = "OK";
 
 /* invlid config error description */
 "Peripheral command was invalid" = "Неправильно сформирован запрос.";
@@ -39,3 +39,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Неизвестная характеристика";
+

+ 1 - 0
Dependencies/CGMBLEKit/CGMBLEKit/sk.lproj/Localizable.strings

@@ -39,3 +39,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Neznáma charakteristika";
+

+ 3 - 2
Dependencies/CGMBLEKit/CGMBLEKit/sv.lproj/Localizable.strings

@@ -14,10 +14,10 @@
 "OK" = "OK";
 
 /* invlid config error description */
-"Peripheral command was invalid" = "Enhetskommando var ogiltigt";
+"Peripheral command was invalid" = "Perifert kommando var ogiltigt";
 
 /* Timeout error description */
-"Peripheral did not respond in time" = "Enheten svarade inte inom utsatt tid";
+"Peripheral did not respond in time" = "Enhet svarade inte inom utsatt tid";
 
 /* Not ready error description */
 "Peripheral isnʼt connected" = "Enheten är inte ansluten";
@@ -39,3 +39,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Okänd data";
+

+ 1 - 0
Dependencies/CGMBLEKit/CGMBLEKit/tr.lproj/Localizable.strings

@@ -39,3 +39,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Bilinmeyen karakteristik";
+

+ 1 - 3
Dependencies/CGMBLEKit/CGMBLEKit/vi.lproj/Localizable.strings

@@ -13,9 +13,6 @@
 /* Describes a functioning transmitter */
 "OK" = "OK";
 
-/* invlid config error description */
-"Peripheral command was invalid" = "Câu lệnh không hợp lệ";
-
 /* Timeout error description */
 "Peripheral did not respond in time" = "Ngoại vi không đáp ứng kịp thời";
 
@@ -39,3 +36,4 @@
 
 /* Error description */
 "Unknown characteristic" = "Đặc điểm không xác định";
+

+ 1 - 12
Dependencies/CGMBLEKit/CGMBLEKit/zh-Hans.lproj/Localizable.strings

@@ -1,21 +1,9 @@
-/* CGM display title */
-"Dexcom G5" = "Dexcom G 5";
-
-/* CGM display title */
-"Dexcom G6" = "Dexcom G6";
-
 /* Error description for unreliable state */
 "Glucose data is unavailable" = "葡萄糖数据不可用";
 
 /* Describes a low battery */
 "Low Battery" = "电量低";
 
-/* Describes a functioning transmitter */
-"OK" = "Ok";
-
-/* invlid config error description */
-"Peripheral command was invalid" = "Peripheral command was invalid";
-
 /* Timeout error description */
 "Peripheral did not respond in time" = "外设没有及时响应";
 
@@ -39,3 +27,4 @@
 
 /* Error description */
 "Unknown characteristic" = "未知特性";
+

+ 0 - 9
Dependencies/CGMBLEKit/CGMBLEKitUI/Base.lproj/Localizable.strings

@@ -26,18 +26,12 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose reading */
 "Latest Reading" = "Latest Reading";
 
-/* Section title for latest connection date */
-"Latest Connection" = "Latest Connection";
-
 /* Button title to open CGM app */
 "Open App" = "Open App";
 
 /* Title describing sensor session age */
 "Session Age" = "Session Age";
 
-/* Section title for remote data synchronization */
-"Remote Data Synchronization" = "Remote Data Synchronization";
-
 /* Title describing sensor expiration */
 "Sensor Expires" = "Sensor Expires";
 
@@ -55,6 +49,3 @@ Title text for the button to remove a CGM from Loop */
 
 /* Title describing glucose trend */
 "Trend" = "Trend";
-
-/* The title text for the upload glucose switch cell */
-"Upload Readings" = "Upload Readings";

+ 6 - 6
Dependencies/CGMBLEKit/CGMBLEKitUI/TransmitterManager+UI.swift

@@ -17,14 +17,14 @@ extension G5CGMManager: CGMManagerUI {
         return nil
     }
 
-    public static func setupViewController(bluetoothProvider: BluetoothProvider, displayGlucoseUnitObservable: DisplayGlucoseUnitObservable, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool) -> SetupUIResult<CGMManagerViewController, CGMManagerUI> {
+    public static func setupViewController(bluetoothProvider: BluetoothProvider, displayGlucosePreference: DisplayGlucosePreference, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool, prefersToSkipUserInteraction: Bool = false) -> SetupUIResult<CGMManagerViewController, CGMManagerUI> {
         let setupVC = TransmitterSetupViewController.instantiateFromStoryboard()
         setupVC.cgmManagerType = self
         return .userInteractionRequired(setupVC)
     }
 
-    public func settingsViewController(bluetoothProvider: BluetoothProvider, displayGlucoseUnitObservable: DisplayGlucoseUnitObservable, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool) ->CGMManagerViewController {
-        let settings = TransmitterSettingsViewController(cgmManager: self, displayGlucoseUnitObservable: displayGlucoseUnitObservable)
+    public func settingsViewController(bluetoothProvider: BluetoothProvider, displayGlucosePreference: DisplayGlucosePreference, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool) ->CGMManagerViewController {
+        let settings = TransmitterSettingsViewController(cgmManager: self, displayGlucosePreference: displayGlucosePreference)
         let nav = CGMManagerSettingsNavigationViewController(rootViewController: settings)
         return nav
     }
@@ -55,14 +55,14 @@ extension G6CGMManager: CGMManagerUI {
         return nil
     }
 
-    public static func setupViewController(bluetoothProvider: BluetoothProvider, displayGlucoseUnitObservable: DisplayGlucoseUnitObservable, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool) -> SetupUIResult<CGMManagerViewController, CGMManagerUI> {
+    public static func setupViewController(bluetoothProvider: BluetoothProvider, displayGlucosePreference: DisplayGlucosePreference, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool, prefersToSkipUserInteraction: Bool = false) -> SetupUIResult<CGMManagerViewController, CGMManagerUI> {
         let setupVC = TransmitterSetupViewController.instantiateFromStoryboard()
         setupVC.cgmManagerType = self
         return .userInteractionRequired(setupVC)
     }
 
-    public func settingsViewController(bluetoothProvider: BluetoothProvider, displayGlucoseUnitObservable: DisplayGlucoseUnitObservable, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool) ->CGMManagerViewController {
-        let settings = TransmitterSettingsViewController(cgmManager: self, displayGlucoseUnitObservable: displayGlucoseUnitObservable)
+    public func settingsViewController(bluetoothProvider: BluetoothProvider, displayGlucosePreference: DisplayGlucosePreference, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool) ->CGMManagerViewController {
+        let settings = TransmitterSettingsViewController(cgmManager: self, displayGlucosePreference: displayGlucosePreference)
         let nav = CGMManagerSettingsNavigationViewController(rootViewController: settings)
         return nav
     }

+ 24 - 33
Dependencies/CGMBLEKit/CGMBLEKitUI/TransmitterSettingsViewController.swift

@@ -17,23 +17,19 @@ class TransmitterSettingsViewController: UITableViewController {
 
     let cgmManager: TransmitterManager & CGMManagerUI
 
-    private let displayGlucoseUnitObservable: DisplayGlucoseUnitObservable
+    private let displayGlucosePreference: DisplayGlucosePreference
 
     private lazy var cancellables = Set<AnyCancellable>()
 
-    private var glucoseUnit: HKUnit {
-        displayGlucoseUnitObservable.displayGlucoseUnit
-    }
-
-    init(cgmManager: TransmitterManager & CGMManagerUI, displayGlucoseUnitObservable: DisplayGlucoseUnitObservable) {
+    init(cgmManager: TransmitterManager & CGMManagerUI, displayGlucosePreference: DisplayGlucosePreference) {
         self.cgmManager = cgmManager
-        self.displayGlucoseUnitObservable = displayGlucoseUnitObservable
+        self.displayGlucosePreference = displayGlucosePreference
 
         super.init(style: .grouped)
 
         cgmManager.addObserver(self, queue: .main)
 
-        displayGlucoseUnitObservable.$displayGlucoseUnit
+        displayGlucosePreference.$unit
             .sink { [weak self] _ in self?.tableView.reloadData() }
             .store(in: &cancellables)
     }
@@ -147,12 +143,6 @@ class TransmitterSettingsViewController: UITableViewController {
         }
     }
 
-    private lazy var glucoseFormatter: QuantityFormatter = {
-        let formatter = QuantityFormatter()
-        formatter.setPreferredNumberFormatter(for: glucoseUnit)
-        return formatter
-    }()
-
     private lazy var dateFormatter: DateFormatter = {
         let formatter = DateFormatter()
         formatter.dateStyle = .long
@@ -163,16 +153,24 @@ class TransmitterSettingsViewController: UITableViewController {
     
     private lazy var sensorExpirationFullFormatter: DateFormatter = {
         let formatter = DateFormatter()
-        formatter.dateStyle = .full
-        formatter.timeStyle = .short
-        formatter.doesRelativeDateFormatting = true
-        //formatter.dateFormat = "E, MMM d 'at' h:mm a"
+        //formatter.dateStyle = .full
+        //formatter.timeStyle = .short
+        //formatter.doesRelativeDateFormatting = true
+        formatter.setLocalizedDateFormatFromTemplate("E, MMM d, hh:mm")
         return formatter
     }()
     
     private lazy var sensorExpirationRelativeFormatter: DateFormatter = {
         let formatter = DateFormatter()
         formatter.dateStyle = .long
+        formatter.timeStyle = .none
+        formatter.doesRelativeDateFormatting = true
+        return formatter
+    }()
+    
+    private lazy var sensorExpirationRelativeFormatterWithTime: DateFormatter = {
+        let formatter = DateFormatter()
+        formatter.dateStyle = .long
         formatter.timeStyle = .short
         formatter.doesRelativeDateFormatting = true
         return formatter
@@ -181,7 +179,7 @@ class TransmitterSettingsViewController: UITableViewController {
     private lazy var sensorExpAbsFormatter: DateFormatter = {
         let formatter = DateFormatter()
         formatter.dateStyle = .long
-        formatter.timeStyle = .short
+        formatter.timeStyle = .none
         formatter.doesRelativeDateFormatting = false
         return formatter
     }()
@@ -227,21 +225,14 @@ class TransmitterSettingsViewController: UITableViewController {
 
             switch LatestReadingRow(rawValue: indexPath.row)! {
             case .glucose:
-                cell.setGlucose(glucose?.glucose, unit: glucoseUnit, formatter: glucoseFormatter, isDisplayOnly: glucose?.isDisplayOnly ?? false)
+                cell.setGlucose(glucose?.glucose, formatter: displayGlucosePreference.formatter, isDisplayOnly: glucose?.isDisplayOnly ?? false)
             case .date:
                 cell.setGlucoseDate(glucose?.readDate, formatter: dateFormatter)
             case .trend:
                 cell.textLabel?.text = LocalizedString("Trend", comment: "Title describing glucose trend")
 
                 if let trendRate = glucose?.trendRate {
-                    let glucoseUnitPerMinute = glucoseUnit.unitDivided(by: .minute())
-                    let trendPerMinute = HKQuantity(unit: glucoseUnit, doubleValue: trendRate.doubleValue(for: glucoseUnitPerMinute))
-
-                    if let formatted = glucoseFormatter.string(from: trendPerMinute, for: glucoseUnit) {
-                        cell.detailTextLabel?.text = String(format: LocalizedString("%@/min", comment: "Format string for glucose trend per minute. (1: glucose value and unit)"), formatted)
-                    } else {
-                        cell.detailTextLabel?.text = SettingsTableViewCell.NoValueString
-                    }
+                    cell.detailTextLabel?.text = displayGlucosePreference.formatMinuteRate(trendRate)
                 } else {
                     cell.detailTextLabel?.text = SettingsTableViewCell.NoValueString
                 }
@@ -262,7 +253,7 @@ class TransmitterSettingsViewController: UITableViewController {
 
             switch LatestCalibrationRow(rawValue: indexPath.row)! {
             case .glucose:
-                cell.setGlucose(calibration?.glucose, unit: glucoseUnit, formatter: glucoseFormatter, isDisplayOnly: false)
+                cell.setGlucose(calibration?.glucose, formatter: displayGlucosePreference.formatter  , isDisplayOnly: false)
             case .date:
                 cell.setGlucoseDate(calibration?.date, formatter: dateFormatter)
             }
@@ -323,7 +314,7 @@ class TransmitterSettingsViewController: UITableViewController {
                         if sensorExpirationRelativeFormatter.string(from: sessionExp) == sensorExpAbsFormatter.string(from: sessionExp) {
                             cell.detailTextLabel?.text = sensorExpirationFullFormatter.string(from: sessionExp)
                         } else {
-                            cell.detailTextLabel?.text = sensorExpirationRelativeFormatter.string(from: sessionExp)
+                            cell.detailTextLabel?.text = sensorExpirationRelativeFormatterWithTime.string(from: sessionExp)
                         }
                     } else {
                         cell.detailTextLabel?.text = SettingsTableViewCell.NoValueString
@@ -443,7 +434,7 @@ class TransmitterSettingsViewController: UITableViewController {
         case .share:
             switch ShareRow(rawValue: indexPath.row)! {
             case .settings:
-                let vc = ShareClientSettingsViewController(cgmManager: cgmManager.shareManager, displayGlucoseUnitObservable: displayGlucoseUnitObservable, allowsDeletion: false)
+                let vc = ShareClientSettingsViewController(cgmManager: cgmManager.shareManager, displayGlucosePreference: displayGlucosePreference, allowsDeletion: false)
                 show(vc, sender: nil)
                 return // Don't deselect
             case .openApp:
@@ -532,14 +523,14 @@ private extension UIAlertController {
 
 
 private extension SettingsTableViewCell {
-    func setGlucose(_ glucose: HKQuantity?, unit: HKUnit, formatter: QuantityFormatter, isDisplayOnly: Bool) {
+    func setGlucose(_ glucose: HKQuantity?, formatter: QuantityFormatter, isDisplayOnly: Bool) {
         if isDisplayOnly {
             textLabel?.text = LocalizedString("Glucose (Adjusted)", comment: "Describes a glucose value adjusted to reflect a recent calibration")
         } else {
             textLabel?.text = LocalizedString("Glucose", comment: "Title describing glucose value")
         }
 
-        if let quantity = glucose, let formatted = formatter.string(from: quantity, for: unit) {
+        if let quantity = glucose, let formatted = formatter.string(from: quantity) {
             detailTextLabel?.text = formatted
         } else {
             detailTextLabel?.text = SettingsTableViewCell.NoValueString

+ 0 - 44
Dependencies/CGMBLEKit/CGMBLEKitUI/ar.lproj/Localizable.strings

@@ -1,15 +1,9 @@
-/* Format string for glucose trend per minute. (1: glucose value and unit) */
-"%@/min" = "%@/min";
-
 /* Confirmation message for deleting a CGM */
 "Are you sure you want to delete this CGM?" = "هل أنت متأكد أنك تريد حذف هذا CGM؟";
 
 /* The title of the cancel action in an action sheet */
 "Cancel" = "إلغاء";
 
-/* Title describing glucose date */
-"Date" = "Date";
-
 /* Button title to delete CGM
 Title text for the button to remove a CGM from Loop */
 "Delete CGM" = "حذف CGM";
@@ -17,44 +11,6 @@ Title text for the button to remove a CGM from Loop */
 /* Title describing glucose value */
 "Glucose" = "قراءات السكر";
 
-/* Describes a glucose value adjusted to reflect a recent calibration */
-"Glucose (Adjusted)" = "Glucose (Adjusted)";
-
-/* Section title for latest glucose calibration */
-"Latest Calibration" = "Latest Calibration";
-
-/* Section title for latest glucose reading */
-"Latest Reading" = "Latest Reading";
-
-/* Section title for latest connection date */
-"Latest Connection" = "Latest Connection";
-
-/* Button title to open CGM app */
-"Open App" = "Open App";
-
-/* Title describing sensor session age */
-"Session Age" = "Session Age";
-
-/* Section title for remote data synchronization */
-"Remote Data Synchronization" = "Remote Data Synchronization";
-
-/* Title describing sensor expiration */
-"Sensor Expires" = "Sensor Expires";
-
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Sensor Expired";
-
 /* Title describing CGM calibration and battery state */
 "Status" = "الحالة";
 
-/* Title describing transmitter session age */
-"Transmitter Age" = "Transmitter Age";
-
-/* The title text for the Dexcom G5/G6 transmitter ID config value */
-"Transmitter ID" = "Transmitter ID";
-
-/* Title describing glucose trend */
-"Trend" = "Trend";
-
-/* The title text for the upload glucose switch cell */
-"Upload Readings" = "Upload Readings";

+ 0 - 20
Dependencies/CGMBLEKit/CGMBLEKitUI/ar.lproj/TransmitterManagerSetup.strings

@@ -1,23 +1,3 @@
-/* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */
-"5oU-vK-JHQ.text" = "Credentials";
-
-/* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */
-"Dds-49-o7G.title" = "Transmitter Setup";
-
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
 "GOT-KQ-cEh.text" = "تفاصيل";
 
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "Transmitter ID";
-
-/* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
-"k1N-Rg-XDy.footerTitle" = "Data can be downloaded over the Internet from Share when the transmitter connection fails.";
-
-/* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */
-"k1N-Rg-XDy.headerTitle" = "Dexcom Share";
-
-/* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
-"nKX-TW-GhD.placeholder" = "Enter the 6-digit transmitter ID";

+ 9 - 8
Dependencies/CGMBLEKit/CGMBLEKitUI/da.lproj/Localizable.strings

@@ -23,26 +23,26 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose calibration */
 "Latest Calibration" = "Seneste kalibrering";
 
-/* Section title for latest glucose reading */
-"Latest Reading" = "Seneste aflæsning";
-
 /* Section title for latest connection date */
 "Latest Connection" = "Seneste forbindelse";
 
+/* Section title for latest glucose reading */
+"Latest Reading" = "Seneste aflæsning";
+
 /* Button title to open CGM app */
 "Open App" = "Åben app";
 
-/* Title describing sensor session age */
-"Session Age" = "Session-alder";
-
 /* Section title for remote data synchronization */
 "Remote Data Synchronization" = "Synkronisering af fjerndata";
 
+/* Title describing past sensor expiration */
+"Sensor Expired" = "Sensor udløbet";
+
 /* Title describing sensor expiration */
 "Sensor Expires" = "Sensor udløber";
 
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Sensor udløbet";
+/* Title describing sensor session age */
+"Session Age" = "Session-alder";
 
 /* Title describing CGM calibration and battery state */
 "Status" = "Status";
@@ -58,3 +58,4 @@ Title text for the button to remove a CGM from Loop */
 
 /* The title text for the upload glucose switch cell */
 "Upload Readings" = "Upload aflæsninger";
+

+ 7 - 6
Dependencies/CGMBLEKit/CGMBLEKitUI/da.lproj/TransmitterManagerSetup.strings

@@ -7,12 +7,6 @@
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
 "GOT-KQ-cEh.text" = "Detalje";
 
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "Sender-ID'et kan findes trykt på bagsiden af ​​enheden, på den side af boksen, den kom i, og fra indstillingsmenuerne på modtageren og mobilappen.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "Sender ID";
-
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "Data kan downloades over internettet fra Share, når transmitterforbindelsen mislykkes.";
 
@@ -21,3 +15,10 @@
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "Indtast det 6-cifrede sender-ID";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "Sender-ID'et kan findes trykt på bagsiden af ​​enheden, på den side af boksen, den kom i, og fra indstillingsmenuerne på modtageren og mobilappen.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "Sender ID";
+

+ 11 - 10
Dependencies/CGMBLEKit/CGMBLEKitUI/de.lproj/Localizable.strings

@@ -2,7 +2,7 @@
 "%@/min" = "%@/min";
 
 /* Confirmation message for deleting a CGM */
-"Are you sure you want to delete this CGM?" = "Sind Sie sicher, dass Sie dieses CGM löschen wollen?";
+"Are you sure you want to delete this CGM?" = "Bist Du sicher, dass Du dieses CGM löschen möchtest?";
 
 /* The title of the cancel action in an action sheet */
 "Cancel" = "Abbrechen";
@@ -23,27 +23,27 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose calibration */
 "Latest Calibration" = "Letzte Kalibrierung";
 
-/* Section title for latest glucose reading */
-"Latest Reading" = "Letzter Wert";
-
 /* Section title for latest connection date */
 "Latest Connection" = "Letzte Verbindung";
 
+/* Section title for latest glucose reading */
+"Latest Reading" = "Letzter Wert";
+
 /* Button title to open CGM app */
 "Open App" = "App öffnen";
 
-/* Title describing sensor session age */
-"Session Age" = "Sitzungsalter";
-
 /* Section title for remote data synchronization */
 "Remote Data Synchronization" = "Remote Daten Synchronisation";
 
-/* Title describing sensor expiration */
-"Sensor Expires" = "Sensor läuft ab";
-
 /* Title describing past sensor expiration */
 "Sensor Expired" = "Sensor abgelaufen";
 
+/* Title describing sensor expiration */
+"Sensor Expires" = "Sensor-Ablaufzeitpunkt";
+
+/* Title describing sensor session age */
+"Session Age" = "Sitzungsalter";
+
 /* Title describing CGM calibration and battery state */
 "Status" = "Status";
 
@@ -58,3 +58,4 @@ Title text for the button to remove a CGM from Loop */
 
 /* The title text for the upload glucose switch cell */
 "Upload Readings" = "Werte hochladen";
+

+ 8 - 7
Dependencies/CGMBLEKit/CGMBLEKitUI/de.lproj/TransmitterManagerSetup.strings

@@ -7,12 +7,6 @@
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
 "GOT-KQ-cEh.text" = "Detail";
 
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "Die Transmitter-ID befindet sich auf der Rückseite des Transmitters, an der Seite der Verpackung und in den Einstellungsmenüs des Empfängers sowie der Dexcom-App.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "Transmitter-ID";
-
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "Daten können über das Internet von Share heruntergeladen werden, wenn die Verbindung zum Transmitter unterbrochen ist.";
 
@@ -20,4 +14,11 @@
 "k1N-Rg-XDy.headerTitle" = "Dexcom Share";
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
-"nKX-TW-GhD.placeholder" = "Geben Sie die 6-stellige Transmitter-ID ein";
+"nKX-TW-GhD.placeholder" = "Gib die 6-stellige Transmitter-ID ein";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "Die Transmitter-ID befindet sich auf der Rückseite des Transmitters, an der Seite der Verpackung und in den Einstellungsmenüs des Empfängers sowie der Dexcom-App.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "Transmitter-ID";
+

+ 9 - 8
Dependencies/CGMBLEKit/CGMBLEKitUI/es.lproj/Localizable.strings

@@ -23,26 +23,26 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose calibration */
 "Latest Calibration" = "Calibración más reciente";
 
-/* Section title for latest glucose reading */
-"Latest Reading" = "Dato más reciente";
-
 /* Section title for latest connection date */
 "Latest Connection" = "Conexión más reciente";
 
+/* Section title for latest glucose reading */
+"Latest Reading" = "Dato más reciente";
+
 /* Button title to open CGM app */
 "Open App" = "Abrir App";
 
-/* Title describing sensor session age */
-"Session Age" = "Tiempo de sesión del sensor";
-
 /* Section title for remote data synchronization */
 "Remote Data Synchronization" = "Sincronización remota de datos";
 
+/* Title describing past sensor expiration */
+"Sensor Expired" = "Sensor caducado";
+
 /* Title describing sensor expiration */
 "Sensor Expires" = "El sensor caduca";
 
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Sensor caducado";
+/* Title describing sensor session age */
+"Session Age" = "Tiempo de sesión del sensor";
 
 /* Title describing CGM calibration and battery state */
 "Status" = "Estado";
@@ -58,3 +58,4 @@ Title text for the button to remove a CGM from Loop */
 
 /* The title text for the upload glucose switch cell */
 "Upload Readings" = "Subir Datos";
+

+ 7 - 6
Dependencies/CGMBLEKit/CGMBLEKitUI/es.lproj/TransmitterManagerSetup.strings

@@ -7,12 +7,6 @@
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
 "GOT-KQ-cEh.text" = "Detalle";
 
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "La identificación del transmisor puede encontrarse en la parte trasera del dispositivo, en el lateral de la caja en la que venía, o en los menús de ajustes del receptor y la app del teléfono móvil. ";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "Identificación del transmisor";
-
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "Los datos pueden descargarse, vía internet, desde el Share cuando la conexión del transmisor falla.";
 
@@ -21,3 +15,10 @@
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "Introduzca la identificación de 6 cifras del transmisor";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "La identificación del transmisor puede encontrarse en la parte trasera del dispositivo, en el lateral de la caja en la que venía, o en los menús de ajustes del receptor y la app del teléfono móvil. ";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "Identificación del transmisor";
+

+ 6 - 11
Dependencies/CGMBLEKit/CGMBLEKitUI/fi.lproj/Localizable.strings

@@ -23,26 +23,20 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose calibration */
 "Latest Calibration" = "Viimeisin kalibrointi";
 
-/* Section title for latest glucose reading */
-"Latest Reading" = "Viimeisin lukema";
-
 /* Section title for latest connection date */
 "Latest Connection" = "Viimeisin yhteys";
 
+/* Section title for latest glucose reading */
+"Latest Reading" = "Viimeisin lukema";
+
 /* Button title to open CGM app */
 "Open App" = "Avaa sovellus";
 
-/* Title describing sensor session age */
-"Session Age" = "Session ikä";
-
 /* Section title for remote data synchronization */
 "Remote Data Synchronization" = "Etätietojen synkronointi";
 
-/* Title describing sensor expiration */
-"Sensor Expires" = "Sensor Expires";
-
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Sensor Expired";
+/* Title describing sensor session age */
+"Session Age" = "Session ikä";
 
 /* Title describing CGM calibration and battery state */
 "Status" = "Tila";
@@ -58,3 +52,4 @@ Title text for the button to remove a CGM from Loop */
 
 /* The title text for the upload glucose switch cell */
 "Upload Readings" = "Lataa lukemat";
+

+ 7 - 6
Dependencies/CGMBLEKit/CGMBLEKitUI/fi.lproj/TransmitterManagerSetup.strings

@@ -7,12 +7,6 @@
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
 "GOT-KQ-cEh.text" = "Detail";
 
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "Lähettimen tunniste on painettu lähettimen pohjaan ja tuotepakkauksen sivulle. Se löytyy myös vastaanottimen ja mobiilisovelluksen asetusvalikosta.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "Lähettimen tunniste";
-
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "Tiedot voidaan ladata Internetistä Share-palvelimelta, kun yhteys lähettimeen epäonnistuu.";
 
@@ -21,3 +15,10 @@
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "Syötä 6-numeroinen lähettimen tunniste";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "Lähettimen tunniste on painettu lähettimen pohjaan ja tuotepakkauksen sivulle. Se löytyy myös vastaanottimen ja mobiilisovelluksen asetusvalikosta.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "Lähettimen tunniste";
+

+ 10 - 9
Dependencies/CGMBLEKit/CGMBLEKitUI/fr.lproj/Localizable.strings

@@ -1,5 +1,5 @@
 /* Format string for glucose trend per minute. (1: glucose value and unit) */
-"%@/min" = "%@min";
+"%@/min" = "%@/min";
 
 /* Confirmation message for deleting a CGM */
 "Are you sure you want to delete this CGM?" = "Voulez-vous vraiment supprimer ce CGM?";
@@ -23,26 +23,26 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose calibration */
 "Latest Calibration" = "Dernier étalonnage";
 
-/* Section title for latest glucose reading */
-"Latest Reading" = "Dernière mesure";
-
 /* Section title for latest connection date */
 "Latest Connection" = "Dernière connexion";
 
+/* Section title for latest glucose reading */
+"Latest Reading" = "Dernière mesure";
+
 /* Button title to open CGM app */
 "Open App" = "Ouvrir l’application";
 
-/* Title describing sensor session age */
-"Session Age" = "L’âge de la session";
-
 /* Section title for remote data synchronization */
 "Remote Data Synchronization" = "Synchronisation des données à distance";
 
+/* Title describing past sensor expiration */
+"Sensor Expired" = "Capteur expiré";
+
 /* Title describing sensor expiration */
 "Sensor Expires" = "Le capteur expire";
 
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Capteur expiré";
+/* Title describing sensor session age */
+"Session Age" = "L’âge de la session";
 
 /* Title describing CGM calibration and battery state */
 "Status" = "Statut";
@@ -58,3 +58,4 @@ Title text for the button to remove a CGM from Loop */
 
 /* The title text for the upload glucose switch cell */
 "Upload Readings" = "Envoyer les données";
+

+ 7 - 6
Dependencies/CGMBLEKit/CGMBLEKitUI/fr.lproj/TransmitterManagerSetup.strings

@@ -7,12 +7,6 @@
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
 "GOT-KQ-cEh.text" = "Détail";
 
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "L’ID du transmetteur se trouve sur le dos de l’appareil, sur la boîte dans laquelle il est fourni, et depuis les menus de réglages du récepteur et de l’application mobile.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "ID du transmetteur";
-
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "Les données peuvent être téléchargées depuis Internet avec Share quand la connexion au transmetteur échoue.";
 
@@ -21,3 +15,10 @@
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "Entrez l’ID du transmetteur, composé de 6 lettres et chiffres";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "L’ID du transmetteur se trouve sur le dos de l’appareil, sur la boîte dans laquelle il est fourni, et depuis les menus de réglages du récepteur et de l’application mobile.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "ID du transmetteur";
+

+ 24 - 23
Dependencies/CGMBLEKit/CGMBLEKitUI/he.lproj/Localizable.strings

@@ -1,60 +1,61 @@
 /* Format string for glucose trend per minute. (1: glucose value and unit) */
-"%@/min" = "%@/min";
+"%@/min" = "%@/דקה";
 
 /* Confirmation message for deleting a CGM */
-"Are you sure you want to delete this CGM?" = "Are you sure you want to delete this CGM?";
+"Are you sure you want to delete this CGM?" = "בטוח שברצונך למחוק את חיישן זה?";
 
 /* The title of the cancel action in an action sheet */
-"Cancel" = "Cancel";
+"Cancel" = "לא";
 
 /* Title describing glucose date */
-"Date" = "Date";
+"Date" = "תאריך";
 
 /* Button title to delete CGM
 Title text for the button to remove a CGM from Loop */
-"Delete CGM" = "Delete CGM";
+"Delete CGM" = "מחק חיישן";
 
 /* Title describing glucose value */
-"Glucose" = "Glucose";
+"Glucose" = "גלוקוז";
 
 /* Describes a glucose value adjusted to reflect a recent calibration */
-"Glucose (Adjusted)" = "Glucose (Adjusted)";
+"Glucose (Adjusted)" = "גלוקוז (מתואם)";
 
 /* Section title for latest glucose calibration */
-"Latest Calibration" = "Latest Calibration";
-
-/* Section title for latest glucose reading */
-"Latest Reading" = "Latest Reading";
+"Latest Calibration" = "כיול אחרון";
 
 /* Section title for latest connection date */
 "Latest Connection" = "חיבור אחרון";
 
-/* Button title to open CGM app */
-"Open App" = "Open App";
+/* Section title for latest glucose reading */
+"Latest Reading" = "קריאה אחרונה";
 
-/* Title describing sensor session age */
-"Session Age" = "Session Age";
+/* Button title to open CGM app */
+"Open App" = "פתח אפליקציה";
 
 /* Section title for remote data synchronization */
-"Remote Data Synchronization" = "Remote Data Synchronization";
+"Remote Data Synchronization" = "סנכרון נתונים מרחוק";
+
+/* Title describing past sensor expiration */
+"Sensor Expired" = "המשדר פג";
 
 /* Title describing sensor expiration */
-"Sensor Expires" = "Sensor Expires";
+"Sensor Expires" = "תפוגת משדר";
 
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Sensor Expired";
+/* Title describing sensor session age */
+"Session Age" = "זמן משדר";
 
 /* Title describing CGM calibration and battery state */
-"Status" = "Status";
+"Status" = "מצב";
 
 /* Title describing transmitter session age */
-"Transmitter Age" = "Transmitter Age";
+"Transmitter Age" = "גיל משדר";
 
 /* The title text for the Dexcom G5/G6 transmitter ID config value */
-"Transmitter ID" = "Transmitter ID";
+"Transmitter ID" = "מזהה משדר";
 
 /* Title describing glucose trend */
 "Trend" = "מגמה";
 
 /* The title text for the upload glucose switch cell */
-"Upload Readings" = "Upload Readings";
+"Upload Readings" = "העלה נתונים";
+

+ 12 - 11
Dependencies/CGMBLEKit/CGMBLEKitUI/he.lproj/TransmitterManagerSetup.strings

@@ -1,23 +1,24 @@
 /* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */
-"5oU-vK-JHQ.text" = "Credentials";
+"5oU-vK-JHQ.text" = "פרטי כניסה";
 
 /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */
-"Dds-49-o7G.title" = "Transmitter Setup";
+"Dds-49-o7G.title" = "הגדרת משדר";
 
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
-"GOT-KQ-cEh.text" = "Detail";
-
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "Transmitter ID";
+"GOT-KQ-cEh.text" = "פרטים";
 
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
-"k1N-Rg-XDy.footerTitle" = "Data can be downloaded over the Internet from Share when the transmitter connection fails.";
+"k1N-Rg-XDy.footerTitle" = "אם תקשורת מהמשדר נכשלת, מידע יכול להגיע מהאינטרנט באמצעות Share.";
 
 /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.headerTitle" = "Dexcom Share";
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
-"nKX-TW-GhD.placeholder" = "Enter the 6-digit transmitter ID";
+"nKX-TW-GhD.placeholder" = "הכנס מזהה משדר בן 6 ספרות";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "ניתן למצוא את מזהה המשדר מודפס מאחוריו, לצד הקופסא שנארז בה או מתוך תפריט ההגדרות של הקורא או אפליקציית החיישן.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "מזהה משדר";
+

+ 12 - 11
Dependencies/CGMBLEKit/CGMBLEKitUI/it.lproj/Localizable.strings

@@ -23,26 +23,26 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose calibration */
 "Latest Calibration" = "Ultima calibrazione";
 
-/* Section title for latest glucose reading */
-"Latest Reading" = "Ultima lettura";
-
 /* Section title for latest connection date */
 "Latest Connection" = "Ultima connessione";
 
+/* Section title for latest glucose reading */
+"Latest Reading" = "Ultima lettura";
+
 /* Button title to open CGM app */
 "Open App" = "Apri app";
 
-/* Title describing sensor session age */
-"Session Age" = "Età sessione";
-
 /* Section title for remote data synchronization */
-"Remote Data Synchronization" = "Sincronizzazione dei dati remoti";
+"Remote Data Synchronization" = "Sincronizzazione di dati remoti";
+
+/* Title describing past sensor expiration */
+"Sensor Expired" = "Sensore Scaduto";
 
 /* Title describing sensor expiration */
-"Sensor Expires" = "Scadenza sensore";
+"Sensor Expires" = "Scadenza Sensore";
 
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Sensore scaduto";
+/* Title describing sensor session age */
+"Session Age" = "Età sessione";
 
 /* Title describing CGM calibration and battery state */
 "Status" = "Stato";
@@ -57,4 +57,5 @@ Title text for the button to remove a CGM from Loop */
 "Trend" = "Tendenza";
 
 /* The title text for the upload glucose switch cell */
-"Upload Readings" = "Carica letture";
+"Upload Readings" = "Carica Letture";
+

+ 9 - 8
Dependencies/CGMBLEKit/CGMBLEKitUI/it.lproj/TransmitterManagerSetup.strings

@@ -2,22 +2,23 @@
 "5oU-vK-JHQ.text" = "Credenziali";
 
 /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */
-"Dds-49-o7G.title" = "Configurazione trasmettitore";
+"Dds-49-o7G.title" = "Configurazione";
 
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
 "GOT-KQ-cEh.text" = "Dettaglio";
 
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "L'ID del trasmettitore è riportato sul retro del dispositivo, ai lati della confezione di imballaggio e nel menù impostazioni del ricevitore dell’app per dispositivi mobili.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "ID trasmettitore";
-
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
-"k1N-Rg-XDy.footerTitle" = "In caso di problemi di connessione del trasmettitore, puoi scaricare i dati da Internet grazie alla funzionalità Share.";
+"k1N-Rg-XDy.footerTitle" = "In caso di problemi di connessione del trasmettitore, puoi scaricare i dati da Internet grazie alla funzionalità Condividi.";
 
 /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.headerTitle" = "Dexcom Share";
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "Inserisci ID a 6 cifre del trasmettitore";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "L'ID del trasmettitore è riportato sul retro del dispositivo, ai lati della confezione di imballaggio e nel menù Impostazioni del ricevitore e dell’app per dispositivi mobili.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "ID trasmettitore";
+

+ 9 - 8
Dependencies/CGMBLEKit/CGMBLEKitUI/nb.lproj/Localizable.strings

@@ -23,26 +23,26 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose calibration */
 "Latest Calibration" = "Siste kalibrering";
 
-/* Section title for latest glucose reading */
-"Latest Reading" = "Siste måling";
-
 /* Section title for latest connection date */
 "Latest Connection" = "Siste forbindelse";
 
+/* Section title for latest glucose reading */
+"Latest Reading" = "Siste måling";
+
 /* Button title to open CGM app */
 "Open App" = "Åpne app";
 
-/* Title describing sensor session age */
-"Session Age" = "Alder på økt";
-
 /* Section title for remote data synchronization */
 "Remote Data Synchronization" = "Synkronisering av eksterne data";
 
+/* Title describing past sensor expiration */
+"Sensor Expired" = "Sensor utløpt";
+
 /* Title describing sensor expiration */
 "Sensor Expires" = "Sensor utløper";
 
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Sensor utløpt";
+/* Title describing sensor session age */
+"Session Age" = "Alder på økt";
 
 /* Title describing CGM calibration and battery state */
 "Status" = "Status";
@@ -58,3 +58,4 @@ Title text for the button to remove a CGM from Loop */
 
 /* The title text for the upload glucose switch cell */
 "Upload Readings" = "Last opp avlesninger";
+

+ 7 - 6
Dependencies/CGMBLEKit/CGMBLEKitUI/nb.lproj/TransmitterManagerSetup.strings

@@ -7,12 +7,6 @@
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
 "GOT-KQ-cEh.text" = "Detalj";
 
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "Sender ID finner du på baksiden av senderen, eller på siden av esken den kom i, eller under innstillinger i appen til senderen.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "Sender ID";
-
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "Data kan lastes ned over internett fra Share-server om tilkobling til sender ikke fungerer.";
 
@@ -21,3 +15,10 @@
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "Skriv 6-siffret sender ID";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "Sender ID finner du på baksiden av senderen, eller på siden av esken den kom i, eller under innstillinger i appen til senderen.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "Sender ID";
+

+ 16 - 15
Dependencies/CGMBLEKit/CGMBLEKitUI/nl.lproj/Localizable.strings

@@ -15,34 +15,34 @@ Title text for the button to remove a CGM from Loop */
 "Delete CGM" = "Verwijder CGM";
 
 /* Title describing glucose value */
-"Glucose" = "Glucosewaarde";
+"Glucose" = "Glucose";
 
 /* Describes a glucose value adjusted to reflect a recent calibration */
 "Glucose (Adjusted)" = "Glucose (Aangepast)";
 
 /* Section title for latest glucose calibration */
-"Latest Calibration" = "Laatste kalibratie";
-
-/* Section title for latest glucose reading */
-"Latest Reading" = "Laatste meting";
+"Latest Calibration" = "Laatste Kalibratie";
 
 /* Section title for latest connection date */
-"Latest Connection" = "Laatste verbinding";
+"Latest Connection" = "Laatste Verbinding";
 
-/* Button title to open CGM app */
-"Open App" = "App openen";
+/* Section title for latest glucose reading */
+"Latest Reading" = "Laatste Meting";
 
-/* Title describing sensor session age */
-"Session Age" = "Sessieduur";
+/* Button title to open CGM app */
+"Open App" = "Open App";
 
 /* Section title for remote data synchronization */
-"Remote Data Synchronization" = "Synchronisatie van gegevens op afstand";
+"Remote Data Synchronization" = "Remote Gegevenssynchronisatie";
+
+/* Title describing past sensor expiration */
+"Sensor Expired" = "Sensor Verlopen";
 
 /* Title describing sensor expiration */
-"Sensor Expires" = "Sensor verloopt";
+"Sensor Expires" = "Sensor Verloopt";
 
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Sensor verlopen";
+/* Title describing sensor session age */
+"Session Age" = "Sessieduur";
 
 /* Title describing CGM calibration and battery state */
 "Status" = "Status";
@@ -57,4 +57,5 @@ Title text for the button to remove a CGM from Loop */
 "Trend" = "Trend";
 
 /* The title text for the upload glucose switch cell */
-"Upload Readings" = "Upload metingen";
+"Upload Readings" = "Upload Metingen";
+

+ 9 - 8
Dependencies/CGMBLEKit/CGMBLEKitUI/nl.lproj/TransmitterManagerSetup.strings

@@ -2,17 +2,11 @@
 "5oU-vK-JHQ.text" = "Toegangsgegevens";
 
 /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */
-"Dds-49-o7G.title" = "Zender instellen";
+"Dds-49-o7G.title" = "Zender Instellen";
 
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
 "GOT-KQ-cEh.text" = "Detail";
 
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "Het serienummer van de zender staat achter op het apparaat, op de zijkant van de verpakking en in het instellingenmenu van de ontvanger en de app.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "Serienummer van de zender";
-
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "Gegevens kunnen via het internet van Share gedownload worden wanneer de verbinding met de zender uitvalt.";
 
@@ -20,4 +14,11 @@
 "k1N-Rg-XDy.headerTitle" = "Dexcom Share";
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
-"nKX-TW-GhD.placeholder" = "Vul het 6 cijferige serienummer van de zender in";
+"nKX-TW-GhD.placeholder" = "Vul de 6 cijferige zenderserienummer in";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "De zenderserienummer staat achter op het apparaat, op de zijkant van de verpakking en in het instellingenmenu van de ontvanger en de app.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "Zenderserienummer";
+

+ 9 - 8
Dependencies/CGMBLEKit/CGMBLEKitUI/pl.lproj/Localizable.strings

@@ -23,26 +23,26 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose calibration */
 "Latest Calibration" = "Ostatnia kalibracja";
 
-/* Section title for latest glucose reading */
-"Latest Reading" = "Ostatni odczyt";
-
 /* Section title for latest connection date */
 "Latest Connection" = "Ostatnie połączenie";
 
+/* Section title for latest glucose reading */
+"Latest Reading" = "Ostatni odczyt";
+
 /* Button title to open CGM app */
 "Open App" = "Otwórz aplikację";
 
-/* Title describing sensor session age */
-"Session Age" = "Wiek sesji";
-
 /* Section title for remote data synchronization */
 "Remote Data Synchronization" = "Zdalna synchronizacja danych";
 
+/* Title describing past sensor expiration */
+"Sensor Expired" = "Sensor wygasł";
+
 /* Title describing sensor expiration */
 "Sensor Expires" = "Sensor Wygasa";
 
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Sensor wygasł";
+/* Title describing sensor session age */
+"Session Age" = "Wiek sesji";
 
 /* Title describing CGM calibration and battery state */
 "Status" = "Status";
@@ -58,3 +58,4 @@ Title text for the button to remove a CGM from Loop */
 
 /* The title text for the upload glucose switch cell */
 "Upload Readings" = "Wysyłaj odczyty";
+

+ 7 - 6
Dependencies/CGMBLEKit/CGMBLEKitUI/pl.lproj/TransmitterManagerSetup.strings

@@ -7,12 +7,6 @@
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
 "GOT-KQ-cEh.text" = "Detail";
 
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "ID nadajnika jest nadrukowany z tyłu urządzenia, z boku opakowania, w którym go dostarczono oraz jest dostępny w menu ustawień odbiornika i w aplikacji mobilnej.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "ID nadajnika";
-
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "Dane można pobrać przez internet z Share, kiedy połączenie nadajnika się nie powiedzie.";
 
@@ -21,3 +15,10 @@
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "Wprowadź 6-cyfrowy ID nadajnika";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "ID nadajnika jest nadrukowany z tyłu urządzenia, z boku opakowania, w którym go dostarczono oraz jest dostępny w menu ustawień odbiornika i w aplikacji mobilnej.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "ID nadajnika";
+

+ 0 - 14
Dependencies/CGMBLEKit/CGMBLEKitUI/pt-BR.lproj/Localizable.strings

@@ -26,24 +26,12 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose reading */
 "Latest Reading" = "Leitura mais Recente";
 
-/* Section title for latest connection date */
-"Latest Connection" = "Latest Connection";
-
 /* Button title to open CGM app */
 "Open App" = "Abrir App";
 
 /* Title describing sensor session age */
 "Session Age" = "Idade da Sessão";
 
-/* Section title for remote data synchronization */
-"Remote Data Synchronization" = "Remote Data Synchronization";
-
-/* Title describing sensor expiration */
-"Sensor Expires" = "Sensor Expires";
-
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Sensor Expired";
-
 /* Title describing CGM calibration and battery state */
 "Status" = "Estado";
 
@@ -56,5 +44,3 @@ Title text for the button to remove a CGM from Loop */
 /* Title describing glucose trend */
 "Trend" = "Tendência";
 
-/* The title text for the upload glucose switch cell */
-"Upload Readings" = "Upload Readings";

+ 7 - 6
Dependencies/CGMBLEKit/CGMBLEKitUI/pt-BR.lproj/TransmitterManagerSetup.strings

@@ -7,12 +7,6 @@
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
 "GOT-KQ-cEh.text" = "Detail";
 
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "O ID do transmissor pode ser encontrado impresso na parte traseira do dispositivo, na parte lateral da caixa em que ele veio e nos menus de configurações do receptor e do aplicativo móvel.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "ID do Transmissor";
-
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "Os dados podem ser baixados pela Internet a partir do compartilhamento quando a conexão do transmissor falhar.";
 
@@ -21,3 +15,10 @@
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "Digite o ID do transmissor de 6 dígitos";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "O ID do transmissor pode ser encontrado impresso na parte traseira do dispositivo, na parte lateral da caixa em que ele veio e nos menus de configurações do receptor e do aplicativo móvel.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "ID do Transmissor";
+

+ 10 - 9
Dependencies/CGMBLEKit/CGMBLEKitUI/ru.lproj/Localizable.strings

@@ -12,7 +12,7 @@
 
 /* Button title to delete CGM
 Title text for the button to remove a CGM from Loop */
-"Delete CGM" = "Удалить CGM";
+"Delete CGM" = "Удалить мониторинг";
 
 /* Title describing glucose value */
 "Glucose" = "Глюкоза";
@@ -23,26 +23,26 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose calibration */
 "Latest Calibration" = "Последняя калибровка";
 
-/* Section title for latest glucose reading */
-"Latest Reading" = "Последние данные";
-
 /* Section title for latest connection date */
 "Latest Connection" = "Последнее подключение";
 
+/* Section title for latest glucose reading */
+"Latest Reading" = "Последние данные";
+
 /* Button title to open CGM app */
 "Open App" = "Открыть приложение";
 
-/* Title describing sensor session age */
-"Session Age" = "Сенсор отработал";
-
 /* Section title for remote data synchronization */
 "Remote Data Synchronization" = "Удаленная синхронизация данных";
 
+/* Title describing past sensor expiration */
+"Sensor Expired" = "Сенсор истек";
+
 /* Title describing sensor expiration */
 "Sensor Expires" = "Сенсор истекает";
 
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Сенсор истек";
+/* Title describing sensor session age */
+"Session Age" = "Сенсор отработал";
 
 /* Title describing CGM calibration and battery state */
 "Status" = "Статус";
@@ -58,3 +58,4 @@ Title text for the button to remove a CGM from Loop */
 
 /* The title text for the upload glucose switch cell */
 "Upload Readings" = "Загрузить показания";
+

+ 8 - 7
Dependencies/CGMBLEKit/CGMBLEKitUI/ru.lproj/TransmitterManagerSetup.strings

@@ -5,13 +5,7 @@
 "Dds-49-o7G.title" = "Настройка трансмиттера";
 
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
-"GOT-KQ-cEh.text" = "Подробности";
-
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "Номер трансмиттера находится на обратной стороне устройства, сбоку кпаковочной коробки, в настройках ресивера и мобильного приложения.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "ID трансмиттера";
+"GOT-KQ-cEh.text" = "Detail";
 
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "Данные могут быть загружены с серверов Share если не произойдет соединение трансмиттера.";
@@ -21,3 +15,10 @@
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "Введите шестизначный идентификатор трансмиттера";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "Номер трансмиттера находится на обратной стороне устройства, сбоку кпаковочной коробки, в настройках ресивера и мобильного приложения.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "ID трансмиттера";
+

+ 10 - 9
Dependencies/CGMBLEKit/CGMBLEKitUI/sk.lproj/Localizable.strings

@@ -23,26 +23,26 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose calibration */
 "Latest Calibration" = "Posledná kalibrácia";
 
-/* Section title for latest glucose reading */
-"Latest Reading" = "Posledné čítanie";
-
 /* Section title for latest connection date */
 "Latest Connection" = "Posledné pripojenie";
 
+/* Section title for latest glucose reading */
+"Latest Reading" = "Posledné čítanie";
+
 /* Button title to open CGM app */
 "Open App" = "Otvoriť aplikáciu";
 
-/* Title describing sensor session age */
-"Session Age" = "Dĺžka relácie";
-
 /* Section title for remote data synchronization */
 "Remote Data Synchronization" = "Diaľková sychronizácia dát";
 
+/* Title describing past sensor expiration */
+"Sensor Expired" = "Platnosť senzora vypršala";
+
 /* Title describing sensor expiration */
 "Sensor Expires" = "Platnosť senzora vyprší";
 
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Platnosť senzora vypršala";
+/* Title describing sensor session age */
+"Session Age" = "Dĺžka relácie";
 
 /* Title describing CGM calibration and battery state */
 "Status" = "Stav";
@@ -54,7 +54,8 @@ Title text for the button to remove a CGM from Loop */
 "Transmitter ID" = "ID vysielača";
 
 /* Title describing glucose trend */
-"Trend" = "Vývoj";
+"Trend" = "Trend";
 
 /* The title text for the upload glucose switch cell */
 "Upload Readings" = "Načítať údaje";
+

+ 8 - 10
Dependencies/CGMBLEKit/CGMBLEKitUI/sk.lproj/TransmitterManagerSetup.strings

@@ -1,17 +1,8 @@
-/* Class = "UILabel"; text = "Credentials"; ObjectID = "5oU-vK-JHQ"; */
-"5oU-vK-JHQ.text" = "Poverenia";
-
 /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */
 "Dds-49-o7G.title" = "Nastavenie vysielača";
 
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
-"GOT-KQ-cEh.text" = "Podrobnosti";
-
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "ID vysielača nájdete vytlačené na zadnej strane zariadenia, na boku škatule, v ktorej bol dodaný, a v ponuke nastavení prijímača a mobilnej aplikácie.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "ID vysielača";
+"GOT-KQ-cEh.text" = "Detail";
 
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "Údaje je možné stiahnuť cez internet zo Share, keď zlyhá pripojenie vysielača.";
@@ -21,3 +12,10 @@
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "Zadajte 6-miestne ID vysielača";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "ID vysielača nájdete vytlačené na zadnej strane zariadenia, na boku škatule, v ktorej bol dodaný, a v ponuke nastavení prijímača a mobilnej aplikácie.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "ID vysielača";
+

+ 8 - 13
Dependencies/CGMBLEKit/CGMBLEKitUI/sv.lproj/Localizable.strings

@@ -1,5 +1,5 @@
 /* Format string for glucose trend per minute. (1: glucose value and unit) */
-"%@/min" = "%@ min";
+"%@/min" = "%@/min";
 
 /* Confirmation message for deleting a CGM */
 "Are you sure you want to delete this CGM?" = "Är du säker på att du vill radera denna CGM?";
@@ -23,26 +23,20 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose calibration */
 "Latest Calibration" = "Senaste kalibrering";
 
-/* Section title for latest glucose reading */
-"Latest Reading" = "Senaste avläsning";
-
 /* Section title for latest connection date */
 "Latest Connection" = "Senaste anslutning";
 
+/* Section title for latest glucose reading */
+"Latest Reading" = "Senaste avläsning";
+
 /* Button title to open CGM app */
 "Open App" = "Öppna appen";
 
-/* Title describing sensor session age */
-"Session Age" = "Sessionsålder";
-
 /* Section title for remote data synchronization */
 "Remote Data Synchronization" = "Synkronisering av fjärrlagrad data";
 
-/* Title describing sensor expiration */
-"Sensor Expires" = "Sensor går ut";
-
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Sensor har gått ut";
+/* Title describing sensor session age */
+"Session Age" = "Sessionsålder";
 
 /* Title describing CGM calibration and battery state */
 "Status" = "Status";
@@ -51,10 +45,11 @@ Title text for the button to remove a CGM from Loop */
 "Transmitter Age" = "Ålder på sändare";
 
 /* The title text for the Dexcom G5/G6 transmitter ID config value */
-"Transmitter ID" = "Sändar-ID";
+"Transmitter ID" = "Sändari-ID";
 
 /* Title describing glucose trend */
 "Trend" = "Trend";
 
 /* The title text for the upload glucose switch cell */
 "Upload Readings" = "Ladda upp avläsningar";
+

+ 10 - 9
Dependencies/CGMBLEKit/CGMBLEKitUI/sv.lproj/TransmitterManagerSetup.strings

@@ -2,22 +2,23 @@
 "5oU-vK-JHQ.text" = "Inloggningsuppgifter";
 
 /* Class = "UITableViewController"; title = "Transmitter Setup"; ObjectID = "Dds-49-o7G"; */
-"Dds-49-o7G.title" = "Sändarinställningar";
+"Dds-49-o7G.title" = "Sändarinställning";
 
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
-"GOT-KQ-cEh.text" = "Detalj";
-
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "Sändar-ID kan hittas tryckt på baksidan av enheten, på sidan av lådan den kom i, samt från inställningsmenyn för mottagaren och mobilappen.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "Sändar-ID";
+"GOT-KQ-cEh.text" = "Detail";
 
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
-"k1N-Rg-XDy.footerTitle" = "Data kan laddas ned från Dexcom Share (via Internet) om sändaranslutningen skulle misslyckas.";
+"k1N-Rg-XDy.footerTitle" = "Data kan laddas ned från Share (via Internet) om sändaranslutningen skulle misslyckas.";
 
 /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.headerTitle" = "Dexcom Share";
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "Ange 6-siffrigt sändar-ID";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "Sändar-ID kan hittas tryckt på baksidan av enheten, på sidan av lådan den kom in samt från inställningsmenyn för mottagaren och mobilappen.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "Sändari-ID";
+

+ 9 - 8
Dependencies/CGMBLEKit/CGMBLEKitUI/tr.lproj/Localizable.strings

@@ -23,26 +23,26 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose calibration */
 "Latest Calibration" = "Son Kalibrasyon";
 
-/* Section title for latest glucose reading */
-"Latest Reading" = "Son Okuma";
-
 /* Section title for latest connection date */
 "Latest Connection" = "Son Bağlantı";
 
+/* Section title for latest glucose reading */
+"Latest Reading" = "Son Okuma";
+
 /* Button title to open CGM app */
 "Open App" = "Uygulamayı aç";
 
-/* Title describing sensor session age */
-"Session Age" = "Sensör Yaşı";
-
 /* Section title for remote data synchronization */
 "Remote Data Synchronization" = "Uzaktan Veri Senkronizasyonu";
 
+/* Title describing past sensor expiration */
+"Sensor Expired" = "Sensörün Süresi Doldu";
+
 /* Title describing sensor expiration */
 "Sensor Expires" = "Sensörün Süresi Doluyor";
 
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Sensörün Süresi Doldu";
+/* Title describing sensor session age */
+"Session Age" = "Sensör Yaşı";
 
 /* Title describing CGM calibration and battery state */
 "Status" = "Durum";
@@ -58,3 +58,4 @@ Title text for the button to remove a CGM from Loop */
 
 /* The title text for the upload glucose switch cell */
 "Upload Readings" = "Okumaları Yükle";
+

+ 7 - 6
Dependencies/CGMBLEKit/CGMBLEKitUI/tr.lproj/TransmitterManagerSetup.strings

@@ -7,12 +7,6 @@
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
 "GOT-KQ-cEh.text" = "Detay";
 
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "Verici kimliğini, cihazın arkasında, geldiği kutunun yan tarafında, alıcının mobil uygulamasının ayarlar menüsünde bulabilirsiniz.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "Verici Kimliği";
-
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "Verici bağlantısı başarısız olduğunda Dexcom Share üzerinden  veriler indirilebilir.";
 
@@ -21,3 +15,10 @@
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "6 basamaklı verici kimliğini girin";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "Verici kimliğini, cihazın arkasında, geldiği kutunun yan tarafında, alıcının mobil uygulamasının ayarlar menüsünde bulabilirsiniz.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "Verici Kimliği";
+

+ 0 - 14
Dependencies/CGMBLEKit/CGMBLEKitUI/vi.lproj/Localizable.strings

@@ -26,24 +26,12 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose reading */
 "Latest Reading" = "Kết quả đọc mới nhất";
 
-/* Section title for latest connection date */
-"Latest Connection" = "Kết nối gần đây nhất";
-
 /* Button title to open CGM app */
 "Open App" = "Mở ứng dụng";
 
 /* Title describing sensor session age */
 "Session Age" = "Thời gian sử dụng sensor";
 
-/* Section title for remote data synchronization */
-"Remote Data Synchronization" = "Đồng bộ hoá dữ liệu từ xa";
-
-/* Title describing sensor expiration */
-"Sensor Expires" = "Cảm biến hết hạn";
-
-/* Title describing past sensor expiration */
-"Sensor Expired" = "Cảm biến đã hết hạn";
-
 /* Title describing CGM calibration and battery state */
 "Status" = "Tình trạng";
 
@@ -56,5 +44,3 @@ Title text for the button to remove a CGM from Loop */
 /* Title describing glucose trend */
 "Trend" = "Xu hướng";
 
-/* The title text for the upload glucose switch cell */
-"Upload Readings" = "Glucose đang tải lên";

+ 9 - 8
Dependencies/CGMBLEKit/CGMBLEKitUI/vi.lproj/TransmitterManagerSetup.strings

@@ -5,19 +5,20 @@
 "Dds-49-o7G.title" = "Cài đặt Transmitter";
 
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
-"GOT-KQ-cEh.text" = "Chi tiết";
-
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "Số ID của Transmitter có thể được tìm thấy trên vỏ hộp hoặc bên hông hộp và trong phần Menu cài đặt cũng như trên ứng dụng của điện thoại.";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "Số ID của Transmitter";
+"GOT-KQ-cEh.text" = "Detail";
 
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "Dữ liệu có thể được tải xuống qua đường truyền Internet trên ứng dụng Share khi kết nối với transmitter bị đứt.";
 
 /* Class = "UITableViewSection"; headerTitle = "Dexcom Share"; ObjectID = "k1N-Rg-XDy"; */
-"k1N-Rg-XDy.headerTitle" = "Dữ liệu từ Dexcom Share";
+"k1N-Rg-XDy.headerTitle" = "Dexcom Share";
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "Nhập 6 số ID của Transmitter";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "Số ID của Transmitter có thể được tìm thấy trên vỏ hộp hoặc bên hông hộp và trong phần Menu cài đặt cũng như trên ứng dụng của điện thoại.";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "Số ID của Transmitter";
+

+ 0 - 14
Dependencies/CGMBLEKit/CGMBLEKitUI/zh-Hans.lproj/Localizable.strings

@@ -26,24 +26,12 @@ Title text for the button to remove a CGM from Loop */
 /* Section title for latest glucose reading */
 "Latest Reading" = "最新血糖值";
 
-/* Section title for latest connection date */
-"Latest Connection" = "上一次连接";
-
 /* Button title to open CGM app */
 "Open App" = "打开软件";
 
 /* Title describing sensor session age */
 "Session Age" = "传感器启动天数";
 
-/* Section title for remote data synchronization */
-"Remote Data Synchronization" = "远程数据同步";
-
-/* Title describing sensor expiration */
-"Sensor Expires" = "Sensor Expires";
-
-/* Title describing past sensor expiration */
-"Sensor Expired" = "传感器已过期";
-
 /* Title describing CGM calibration and battery state */
 "Status" = "状态";
 
@@ -56,5 +44,3 @@ Title text for the button to remove a CGM from Loop */
 /* Title describing glucose trend */
 "Trend" = "趋势";
 
-/* The title text for the upload glucose switch cell */
-"Upload Readings" = "Upload Readings";

+ 7 - 6
Dependencies/CGMBLEKit/CGMBLEKitUI/zh-Hans.lproj/TransmitterManagerSetup.strings

@@ -7,12 +7,6 @@
 /* Class = "UILabel"; text = "Detail"; ObjectID = "GOT-KQ-cEh"; */
 "GOT-KQ-cEh.text" = "详情";
 
-/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.footerTitle" = "发射器编号可在发射器包装盒背面找到,或者可在Dexcom Moblie软件及接受器的“setting”-“Transmitter”中找到";
-
-/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
-"Qub-6B-0aB.headerTitle" = "发射器编号";
-
 /* Class = "UITableViewSection"; footerTitle = "Data can be downloaded over the Internet from Share when the transmitter connection fails."; ObjectID = "k1N-Rg-XDy"; */
 "k1N-Rg-XDy.footerTitle" = "当无法连接发射器时,可通过网络从Dexcom远程下载数据";
 
@@ -21,3 +15,10 @@
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit transmitter ID"; ObjectID = "nKX-TW-GhD"; */
 "nKX-TW-GhD.placeholder" = "请输入6位发射器编号";
+
+/* Class = "UITableViewSection"; footerTitle = "The transmitter ID can be found printed on the back of the device, on the side of the box it came in, and from within the settings menus of the receiver and mobile app."; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.footerTitle" = "发射器编号可在发射器包装盒背面找到,或者可在Dexcom Moblie软件及接受器的“setting”-“Transmitter”中找到";
+
+/* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "Qub-6B-0aB"; */
+"Qub-6B-0aB.headerTitle" = "发射器编号";
+

+ 1 - 1
Dependencies/CGMBLEKit/ResetTransmitter/de.lproj/InfoPlist.strings

@@ -2,7 +2,7 @@
 "CFBundleDisplayName" = "Reset";
 
 /* Bundle name */
-"CFBundleName" = "ResetTransmitter";
+"CFBundleName" = "Transmitter zurücksetzen";
 
 /* Privacy - Bluetooth Always Usage Description */
 "NSBluetoothAlwaysUsageDescription" = "Bluetooth wird verwendet für die Kommunikation mit CGM-Geräten";

+ 3 - 3
Dependencies/CGMBLEKit/ResetTransmitter/de.lproj/Localizable.strings

@@ -1,5 +1,5 @@
 /* Title of the reset confirmation sheet */
-"Are you sure you want to reset this transmitter?" = "Möchten Sie das CGM wirklich löschen?";
+"Are you sure you want to reset this transmitter?" = "Möchtest Du das CGM wirklich löschen?";
 
 /* Title of button to cancel reset */
 "Cancel" = "Abbrechen";
@@ -9,8 +9,8 @@
 
 /* Reset button title
    Title of button to begin reset */
-"Reset" = "Reset";
+"Reset" = "Zurücksetzen";
 
 /* Notification title for background completion notification */
-"Transmitter Reset Complete" = "TZurücksetzen des Transmitters abgeschlossen";
+"Transmitter Reset Complete" = "Zurücksetzen des Transmitters abgeschlossen";
 

+ 4 - 4
Dependencies/CGMBLEKit/ResetTransmitter/de.lproj/Main.strings

@@ -5,19 +5,19 @@
 "7nc-6t-4hZ.title" = "Transmitter zurücksetzen";
 
 /* Class = "UITextView"; text = "This tool can reset the clock on a transmitter that has reached its expiration date, allowing new sensor sessions to again be started.\nThis may have unintended consequences for data services, such as Clarity and Share, especially when using a reset transmitter with the same account.\nResetting cannot be undone.\nUse at your own risk."; ObjectID = "cJ3-Gc-pnc"; */
-"cJ3-Gc-pnc.text" = "TMit diesem Tool kann ein Transmitter, dessen Ablaufdatum erreicht ist, zurückgesetzt werden, sodass Sensorsitzungen erneut gestartet werden können.\nDies kann unbeabsichtigte Konsequenzen für Datendienste wie Clarity und Share haben, insbesondere wenn ein zurückgesetzter Transmitter mit demselben Konto verwendet wird.\nDas Zurücksetzen kann nicht rückgängig gemacht werden.\nBenutzung auf eigene Gefahr!";
+"cJ3-Gc-pnc.text" = "Mit diesem Tool kann ein Transmitter, dessen Ablaufdatum erreicht ist, zurückgesetzt werden, sodass Sensorsitzungen erneut gestartet werden können.\nDies kann unbeabsichtigte Konsequenzen für Datendienste wie Clarity und Share haben, insbesondere wenn ein zurückgesetzter Transmitter mit demselben Konto verwendet wird.\nDas Zurücksetzen kann nicht rückgängig gemacht werden.\nBenutzung auf eigene Gefahr!";
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit ID"; ObjectID = "G4a-ia-wQC"; */
-"G4a-ia-wQC.placeholder" = "Geben Sie die 6-stellige ID ein";
+"G4a-ia-wQC.placeholder" = "Gib die 6-stellige ID ein";
 
 /* Class = "UILabel"; text = "[Error goes here. And it can get very long and that's OK]"; ObjectID = "gYy-Zz-y12"; */
 "gYy-Zz-y12.text" = "[Error goes here. And it can get very long and that's OK]";
 
 /* Class = "UIButton"; normalTitle = "Reset"; ObjectID = "LBC-6R-q79"; */
-"LBC-6R-q79.normalTitle" = "Reset";
+"LBC-6R-q79.normalTitle" = "Zurücksetzen";
 
 /* Class = "UITextView"; text = "The transmitter has been successfully reset. Connect it to the app to begin a new sensor session."; ObjectID = "MbK-kj-ejl"; */
-"MbK-kj-ejl.text" = "Der Transmitter wurde erfolgreich zurückgesetzt. Verbinden Sie ihn mit der App, um eine neue Sensorsitzung zu starten.";
+"MbK-kj-ejl.text" = "Der Transmitter wurde erfolgreich zurückgesetzt. Verbinde ihn mit der App, um eine neue Sensorsitzung zu starten.";
 
 /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "vNG-r7-RbP"; */
 "vNG-r7-RbP.headerTitle" = "Transmitter-ID";

+ 10 - 1
Dependencies/CGMBLEKit/ResetTransmitter/he.lproj/InfoPlist.strings

@@ -1,3 +1,12 @@
 /* Bundle display name */
-"CFBundleDisplayName" = "Reset";
+"CFBundleDisplayName" = "איתחול";
+
+/* Bundle name */
+"CFBundleName" = "ResetTransmitter";
+
+/* Privacy - Bluetooth Always Usage Description */
+"NSBluetoothAlwaysUsageDescription" = "Bluetooth משמש לתקשורת עם חיישן (מד סוכר רציף)";
+
+/* Privacy - Bluetooth Peripheral Usage Description */
+"NSBluetoothPeripheralUsageDescription" = "Bluetooth משמש לתקשורת עם חיישן (מד סוכר רציף)";
 

+ 5 - 5
Dependencies/CGMBLEKit/ResetTransmitter/he.lproj/Localizable.strings

@@ -1,16 +1,16 @@
 /* Title of the reset confirmation sheet */
-"Are you sure you want to reset this transmitter?" = "Are you sure you want to reset this transmitter?";
+"Are you sure you want to reset this transmitter?" = "בטוח שברצונך לאתחל את משדר זה?";
 
 /* Title of button to cancel reset */
-"Cancel" = "Cancel";
+"Cancel" = "ביטול";
 
 /* Message of the reset confirmation sheet */
-"It will take up to 10 minutes to complete." = "It will take up to 10 minutes to complete.";
+"It will take up to 10 minutes to complete." = "התהליך יסתיים עד 10 דקות.";
 
 /* Reset button title
    Title of button to begin reset */
-"Reset" = "Reset";
+"Reset" = "איתחול";
 
 /* Notification title for background completion notification */
-"Transmitter Reset Complete" = "Transmitter Reset Complete";
+"Transmitter Reset Complete" = "איתחול משדר הסתיים";
 

+ 8 - 8
Dependencies/CGMBLEKit/ResetTransmitter/he.lproj/Main.strings

@@ -1,24 +1,24 @@
 /* Class = "UINavigationItem"; title = "Reset Complete"; ObjectID = "3SD-s3-7OM"; */
-"3SD-s3-7OM.title" = "Reset Complete";
+"3SD-s3-7OM.title" = "איתחול הסתיים";
 
 /* Class = "UINavigationItem"; title = "Reset Transmitter"; ObjectID = "7nc-6t-4hZ"; */
-"7nc-6t-4hZ.title" = "Reset Transmitter";
+"7nc-6t-4hZ.title" = "איתחול משדר";
 
 /* Class = "UITextView"; text = "This tool can reset the clock on a transmitter that has reached its expiration date, allowing new sensor sessions to again be started.\nThis may have unintended consequences for data services, such as Clarity and Share, especially when using a reset transmitter with the same account.\nResetting cannot be undone.\nUse at your own risk."; ObjectID = "cJ3-Gc-pnc"; */
-"cJ3-Gc-pnc.text" = "This tool can reset the clock on a transmitter that has reached its expiration date, allowing new sensor sessions to again be started.\nThis may have unintended consequences for data services, such as Clarity and Share, especially when using a reset transmitter with the same account.\nResetting cannot be undone.\nUse at your own risk.";
+"cJ3-Gc-pnc.text" = "כלי זה מאתחל את השעון של משדר שפג, ומאפשר לחדש את התקשורת עם החיישן. זה עשוי לגרום לבעיות לא צפויות בשירותי מידע, כמו Clarity ו-Share, במיוחד אם מאתחלים משדר באותו חשבון.\nאיתחול היא פעולה בלתי הפיכה.\nהשימוש על אחריותך בלבד.";
 
 /* Class = "UITextField"; placeholder = "Enter the 6-digit ID"; ObjectID = "G4a-ia-wQC"; */
-"G4a-ia-wQC.placeholder" = "Enter the 6-digit ID";
+"G4a-ia-wQC.placeholder" = "הכנס את המזהה בן 6 ספרות";
 
 /* Class = "UILabel"; text = "[Error goes here. And it can get very long and that's OK]"; ObjectID = "gYy-Zz-y12"; */
-"gYy-Zz-y12.text" = "[Error goes here. And it can get very long and that's OK]";
+"gYy-Zz-y12.text" = "[השגיאה תופיע פה. היא יכולה להיות ארוכה מאוד וזה בסדר]";
 
 /* Class = "UIButton"; normalTitle = "Reset"; ObjectID = "LBC-6R-q79"; */
-"LBC-6R-q79.normalTitle" = "Reset";
+"LBC-6R-q79.normalTitle" = "איתחול";
 
 /* Class = "UITextView"; text = "The transmitter has been successfully reset. Connect it to the app to begin a new sensor session."; ObjectID = "MbK-kj-ejl"; */
-"MbK-kj-ejl.text" = "The transmitter has been successfully reset. Connect it to the app to begin a new sensor session.";
+"MbK-kj-ejl.text" = "המשדר אותחל בהצלחה. חבר אותו לאפליקציה כדי לחדש את התקשורת עם החיישן.";
 
 /* Class = "UITableViewSection"; headerTitle = "Transmitter ID"; ObjectID = "vNG-r7-RbP"; */
-"vNG-r7-RbP.headerTitle" = "Transmitter ID";
+"vNG-r7-RbP.headerTitle" = "מזהה משדר";
 

+ 4 - 12
Dependencies/G7SensorKit/G7SensorKit.xcodeproj/project.pbxproj

@@ -7,6 +7,7 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		B9CCBCC42BA0804D001B64F5 /* LoopKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9CCBCC32BA0804D001B64F5 /* LoopKitUI.framework */; };
 		C109F14A291ECCE2008EA5B6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C109F149291ECCE2008EA5B6 /* Assets.xcassets */; };
 		C109F14C291ED66F008EA5B6 /* G7GlucoseMessageTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C109F14B291ED66F008EA5B6 /* G7GlucoseMessageTests.swift */; };
 		C139829829295D7D0047DB5F /* HKUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17F514A291EB6F000555EB5 /* HKUnit.swift */; };
@@ -57,7 +58,6 @@
 		C19C9F4A29C9117500A6D3D0 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C19C9F4C29C9117500A6D3D0 /* Localizable.strings */; };
 		C19C9F4E29C91C4C00A6D3D0 /* LocalizedString.swift in Sources */ = {isa = PBXBuildFile; fileRef = C19C9F4D29C91C4C00A6D3D0 /* LocalizedString.swift */; };
 		C1E71720292D84FE00DA646F /* G7ProgressBarState.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1E7171F292D84FE00DA646F /* G7ProgressBarState.swift */; };
-		CEC751E129D8837D006E9D24 /* LoopKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEC751E029D8837D006E9D24 /* LoopKitUI.framework */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -107,8 +107,7 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
-		193F1E3D2B44C18000525770 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = "<group>"; };
-		193F1E3E2B44C18100525770 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = "<group>"; };
+		B9CCBCC32BA0804D001B64F5 /* LoopKitUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LoopKitUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		C1086B0E29C9169100D46E65 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
 		C1086B0F29C9169100D46E65 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
 		C109F149291ECCE2008EA5B6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
@@ -198,7 +197,6 @@
 		C1E9A8EB29C9170F00478AA9 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
 		C1F6C1FA29C9166000C74579 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
 		C1F6C1FB29C9166000C74579 /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
-		CEC751E029D8837D006E9D24 /* LoopKitUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LoopKitUI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -206,7 +204,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				CEC751E129D8837D006E9D24 /* LoopKitUI.framework in Frameworks */,
+				B9CCBCC42BA0804D001B64F5 /* LoopKitUI.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -341,7 +339,7 @@
 		C17F5128291EAFA100555EB5 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
-				CEC751E029D8837D006E9D24 /* LoopKitUI.framework */,
+				B9CCBCC32BA0804D001B64F5 /* LoopKitUI.framework */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -549,10 +547,6 @@
 				sk,
 				hi,
 				cs,
-				uk,
-				"pt-PT",
-				ca,
-				hu,
 			);
 			mainGroup = C17F50BC291EAC3800555EB5;
 			productRefGroup = C17F50C7291EAC3800555EB5 /* Products */;
@@ -718,7 +712,6 @@
 				C1CCD81429C916F600A1158E /* sv */,
 				C1CE705E29C916FE00E70F9D /* tr */,
 				C1E3B2FF29C9170800A06681 /* vi */,
-				193F1E3D2B44C18000525770 /* hu */,
 			);
 			name = Localizable.strings;
 			sourceTree = "<group>";
@@ -749,7 +742,6 @@
 				C1E3B30029C9170800A06681 /* vi */,
 				C1E9A8EB29C9170F00478AA9 /* zh-Hans */,
 				C19C9F4F29C91ED400A6D3D0 /* en */,
-				193F1E3E2B44C18100525770 /* hu */,
 			);
 			name = Localizable.strings;
 			sourceTree = "<group>";

+ 14 - 4
Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7CGMManager.swift

@@ -227,7 +227,7 @@ public class G7CGMManager: CGMManager {
     public func getSoundBaseURL() -> URL? { return nil }
     public func getSounds() -> [Alert.Sound] { return [] }
 
-    public let managerIdentifier: String = "G7CGMManager"
+    public static let pluginIdentifier: String = "G7CGMManager"
 
     public let localizedTitle = LocalizedString("Dexcom G7", comment: "CGM display title")
 
@@ -247,14 +247,14 @@ public class G7CGMManager: CGMManager {
         sensor.scanForNewSensor()
     }
 
-    public var device: HKDevice? {
+    private var device: HKDevice? {
         return HKDevice(
-            name: "CGMBLEKit",
+            name: state.sensorID ?? "Unknown",
             manufacturer: "Dexcom",
             model: "G7",
             hardwareVersion: nil,
             firmwareVersion: nil,
-            softwareVersion: String(G7SensorKitVersionNumber),
+            softwareVersion: "CGMBLEKit" + String(G7SensorKitVersionNumber),
             localIdentifier: nil,
             udiDeviceIdentifier: "00386270001863"
         )
@@ -294,6 +294,16 @@ extension G7CGMManager: G7SensorDelegate {
                 state.sensorID = name
                 state.activatedAt = activatedAt
             }
+            let event = PersistedCgmEvent(
+                date: activatedAt,
+                type: .sensorStart,
+                deviceIdentifier: name,
+                expectedLifetime: .hours(24 * 10 + 12),
+                warmupPeriod: .hours(2)
+            )
+            delegate.notify { delegate in
+                delegate?.cgmManager(self, hasNew: [event])
+            }
         }
 
         return shouldSwitchToNewSensor

+ 1 - 1
Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7PeripheralManager.swift

@@ -131,7 +131,7 @@ extension G7PeripheralManager {
                         self.log.error("No delegate set configured")
                     }
                 } catch let error {
-                    self.log.error("Error applying peripheral configuration: %@", String(describing: error))
+                    self.log.error("Error applying peripheral configuration: %{public}@", String(describing: error))
                     // Will retry
                 }
 

+ 2 - 3
Dependencies/G7SensorKit/G7SensorKit/G7CGMManager/G7Sensor.swift

@@ -123,7 +123,7 @@ public final class G7Sensor: G7BluetoothManagerDelegate {
     }
 
     private func handleGlucoseMessage(message: G7GlucoseMessage, peripheralManager: G7PeripheralManager) {
-        activationDate = Date().addingTimeInterval(-TimeInterval(message.glucoseTimestamp))
+        activationDate = Date().addingTimeInterval(-TimeInterval(message.messageTimestamp))
         peripheralManager.perform { (peripheral) in
             self.log.debug("Listening for backfill responses")
             // Subscribe to backfill updates
@@ -215,8 +215,7 @@ public final class G7Sensor: G7BluetoothManagerDelegate {
         }
 
         /// The Dexcom G7 advertises a peripheral name of "DXCMxx", and later reports a full name of "Dexcomxx"
-        /// Dexcom One+ peripheral name start with "DX02"
-        if name.hasPrefix("DXCM") || name.hasPrefix("DX02"){
+        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

+ 6 - 6
Dependencies/G7SensorKit/G7SensorKit/Messages/G7GlucoseMessage.swift

@@ -20,7 +20,7 @@ public struct G7GlucoseMessage: SensorMessage, Equatable {
     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 let age: UInt16 // Amount of time elapsed (seconds) from sensor reading to BLE comms
 
     public var hasReliableGlucose: Bool {
         return algorithmState.hasReliableGlucose
@@ -68,12 +68,12 @@ public struct G7GlucoseMessage: SensorMessage, Equatable {
     }
 
     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
+        //    0  1  2 3 4 5  6 7  8  9 1011 1213 14 15 1617 18
+        //         TTTTTTTT SQSQ       AGAG BGBG SS TR PRPR C
+        // 0x4e 00 d5070000 0900 00 01 0500 6100 06 01 ffff 0e
         // TTTTTTTT = timestamp
         //     SQSQ = sequence
-        //       AG = age
+        //     AGAG = age
         //     BGBG = glucose
         //       SS = algorithm state
         //       TR = trend
@@ -92,7 +92,7 @@ public struct G7GlucoseMessage: SensorMessage, Equatable {
 
         sequence = data[6..<8].to(UInt16.self)
 
-        age = data[10]
+        age = data[10..<12].to(UInt16.self)
 
         let glucoseData = data[12..<14].to(UInt16.self)
         if glucoseData != 0xffff {

+ 3 - 0
Dependencies/G7SensorKit/G7SensorKit/cs.lproj/Localizable.strings

@@ -10,6 +10,9 @@
 /* The description of sensor algorithm state when sensor failed. */
 "Sensor failed" = "Senzor selhal";
 
+/* The description of sensor algorithm state when raw value is unknown. (1: missing data details) */
+"Sensor is in unknown state %1$d" = "Senzor je v neznámém stavu %1$d";
+
 /* The description of sensor algorithm state when sensor is ok. */
 "Sensor is OK" = "Senzor je v pořádku";
 

+ 1 - 1
Dependencies/G7SensorKit/G7SensorKit/de.lproj/Localizable.strings

@@ -8,7 +8,7 @@
 "Sensor expired" = "Sensor abgelaufen";
 
 /* The description of sensor algorithm state when sensor failed. */
-"Sensor failed" = "Sensorfehler";
+"Sensor failed" = "Sensor defekt";
 
 /* The description of sensor algorithm state when raw value is unknown. (1: missing data details) */
 "Sensor is in unknown state %1$d" = "Sensor befindet sich in unbekanntem Zustand %1$d";

+ 16 - 4
Dependencies/G7SensorKit/G7SensorKit/he.lproj/Localizable.strings

@@ -1,12 +1,24 @@
+/* CGM display title */
+"Dexcom G7" = "Dexcom G7";
+
 /* Error description for unreliable state */
-"Glucose data is unavailable" = "Glucose data is unavailable";
+"Glucose data is unavailable" = "מידע גלוקוז לא זמין";
+
+/* The description of sensor algorithm state when sensor is expired. */
+"Sensor expired" = "החיישן פג";
+
+/* The description of sensor algorithm state when sensor failed. */
+"Sensor failed" = "החיישן נכשל";
 
 /* The description of sensor algorithm state when raw value is unknown. (1: missing data details) */
-"Sensor is in unknown state %1$d" = "Sensor is in unknown state %1$d";
+"Sensor is in unknown state %1$d" = "מצב החיישן אינו ידוע %1$d";
+
+/* The description of sensor algorithm state when sensor is ok. */
+"Sensor is OK" = "החיישן תקין";
 
 /* The description of sensor algorithm state when sensor is stopped. */
-"Sensor is stopped" = "חיישן נעצר";
+"Sensor is stopped" = "החיישן נעצר";
 
 /* The description of sensor algorithm state when sensor is warming up. */
-"Sensor is warming up" = "חיישן מתחמם";
+"Sensor is warming up" = "חיישן מתכונן";
 

+ 54 - 31
Dependencies/G7SensorKit/G7SensorKitTests/G7GlucoseMessageTests.swift

@@ -76,13 +76,13 @@ final class G7GlucoseMessageTests: XCTestCase {
         XCTAssertEqual(1400, messages[5].glucoseTimestamp)
         XCTAssertEqual(1700, messages[6].glucoseTimestamp)
         XCTAssertEqual(2000, messages[7].glucoseTimestamp)
-        XCTAssertEqual(934777, messages[8].glucoseTimestamp)
+        XCTAssertEqual(907385, 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
+        //       TTTTTTTT SQSQ       AGAG BGBG SS          C
+        // 4e 00 a89c0000 8800 00 01 0400 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")!
@@ -110,51 +110,74 @@ final class G7GlucoseMessageTests: XCTestCase {
         let message = G7GlucoseMessage(data: data)!
         XCTAssertNil(message.trend)
     }
+
+    func testTwoByteAge() {
+        let data = Data(hexadecimalString: "4e00f9590200030200012a018f000610d9000f")!
+        let message = G7GlucoseMessage(data: data)!
+        XCTAssertEqual(298, message.age)
+        XCTAssertEqual(154105, message.messageTimestamp)
+        XCTAssertEqual(153807, message.glucoseTimestamp)
+    }
+
+    func testTwoByteAgeOnExpiredSensor() {
+        let data = Data(hexadecimalString: "4e004d440e00d40b0001d46b650018036a000e")!
+        let message = G7GlucoseMessage(data: data)!
+        XCTAssertEqual(27604, message.age) // 7 hours after expiration
+        XCTAssertEqual(934989, message.messageTimestamp)
+        XCTAssertEqual(907385, message.glucoseTimestamp)
+    }
+
+    func testBackfill() {
+        let data = Data(hexadecimalString: "cf5802008f00060f10")!
+        let message = G7BackfillMessage(data: data)!
+        XCTAssertEqual(153807, message.timestamp)
+    }
+
 }
 
 
 
 // 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
+//                                0  1  2 3 4 5  6  7  8  9 1011 1213 14 15 16 17 18
+//                                     TTTTTTTT             AGAG BGBG SS          C
+// 2022-09-24 17:47:23           4e 00 ea010000 04 00 00 01 0500 6c00 02 7e ff ff 02
+// 2022-09-24 17:52:27           4e 00 1a030000 05 00 00 01 0900 5300 02 7e ff ff 02
+// 2022-09-24 17:57:25           4e 00 44040000 06 00 00 01 0700 4500 02 e7 ff ff 02
+// 2022-09-24 18:02:27           4e 00 73050000 07 00 00 01 0a00 3a00 02 f4 ff ff 02
+// 2022-09-24 18:07:21           4e 00 99060000 08 00 00 01 0400 4800 06 02 ff ff 0e
+// 2022-09-24 18:22:26           4e 00 220a0000 0b 00 00 01 0900 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:22           4e 00 4a0b0000 0c 00 00 01 0500 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 22:32:24           4e 00 b7440000 3d 00 00 01 0600 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
+//                                            0  1  2 3 4 5  6  7  8  9 1011 1213 14 15 16 17 18
+//                                                 TTTTTTTT             AGAG BGBG SS          C
+// 2022-10-04 23:27:39  106 timestamp:902888 4e 00 e8c60d00 c5 0b 00 01 0300 6a00 06 01 6a 00 0f
+// 2022-10-04 23:32:40  101 timestamp:903189 4e 00 15c80d00 c6 0b 00 01 0400 6500 06 fe 61 00 0f
+// 2022-10-04 23:37:39  98  timestamp:903488 4e 00 40c90d00 c7 0b 00 01 0300 6200 06 fc 5e 00 0f
+// 2022-10-04 23:42:39  100 timestamp:903789 4e 00 6dca0d00 c8 0b 00 01 0400 6400 06 ff 5e 00 0f
+// 2022-10-04 23:47:41  97  timestamp:904090 4e 00 9acb0d00 c9 0b 00 01 0500 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  97  timestamp:904390 4e 00 c6cc0d00 ca 0b 00 01 0500 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
+// 2022-10-04 23:57:52  98  timestamp:904701 4e 00 fdcd0d00 cb 0b 00 01 1000 6200 06 00 5c 00 0f
+// 2022-10-05 00:02:40  96  timestamp:904989 4e 00 1dcf0d00 cc 0b 00 01 0400 6000 06 fe 5b 00 0f
+// 2022-10-05 00:07:39  95  timestamp:905288 4e 00 48d00d00 cd 0b 00 01 0300 5f00 06 fe 5a 00 0f
+// 2022-10-05 08:17:43  101 timestamp:934692 4e 00 24430e00 d4 0b 00 01 ab6a 6500 18 03 6a 00 0e
+// 2022-10-05 08:22:40  101 timestamp:934989 4e 00 4d440e00 d4 0b 00 01 d46b 6500 18 03 6a 00 0e
+// 2022-10-05 08:27:40  101 timestamp:935289 4e 00 79450e00 d4 0b 00 01 006d 6500 18 03 6a 00 0e
+// 2022-10-05 08:32:42  101 timestamp:935590 4e 00 a6460e00 d4 0b 00 01 2d6e 6500 18 03 6a 00 0e
+// 2022-10-05 08:37:42  101 timestamp:935890 4e 00 d2470e00 d4 0b 00 01 596f 6500 18 03 6a 00 0e
+// 2022-10-05 08:42:39  101 timestamp:936188 4e 00 fc480e00 d4 0b 00 01 8370 6500 18 03 6a 00 0e
+// 2022-10-05 08:47:39  101 timestamp:936488 4e 00 284a0e00 d4 0b 00 01 af71 6500 18 03 6a 00 0e

+ 6 - 5
Dependencies/G7SensorKit/G7SensorKitUI/G7CGMManager/G7CGMManager+UI.swift

@@ -23,19 +23,20 @@ public struct G7DeviceStatusHighlight: DeviceStatusHighlight, Equatable {
 }
 
 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)
+    public static func setupViewController(bluetoothProvider: LoopKit.BluetoothProvider, displayGlucosePreference: DisplayGlucosePreference, colorPalette: LoopKitUI.LoopUIColorPalette, allowDebugFeatures: Bool, prefersToSkipUserInteraction: Bool) -> LoopKitUI.SetupUIResult<LoopKitUI.CGMManagerViewController, LoopKitUI.CGMManagerUI>
+    {
+        let vc = G7UICoordinator(colorPalette: colorPalette, displayGlucosePreference: displayGlucosePreference, allowDebugFeatures: allowDebugFeatures)
         return .userInteractionRequired(vc)
     }
 
-    public func settingsViewController(bluetoothProvider: BluetoothProvider, displayGlucoseUnitObservable: DisplayGlucoseUnitObservable, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool) ->CGMManagerViewController {
+    public func settingsViewController(bluetoothProvider: BluetoothProvider, displayGlucosePreference: DisplayGlucosePreference, colorPalette: LoopUIColorPalette, allowDebugFeatures: Bool) ->CGMManagerViewController {
 
-        return G7UICoordinator(cgmManager: self, colorPalette: colorPalette, displayGlucoseUnitObservable: displayGlucoseUnitObservable, allowDebugFeatures: allowDebugFeatures)
+        return G7UICoordinator(cgmManager: self, colorPalette: colorPalette, displayGlucosePreference: displayGlucosePreference, allowDebugFeatures: allowDebugFeatures)
     }
 
     public var smallImage: UIImage? {

+ 6 - 6
Dependencies/G7SensorKit/G7SensorKitUI/G7CGMManager/G7UICoordinator.swift

@@ -14,18 +14,18 @@ class G7UICoordinator: UINavigationController, CGMManagerOnboarding, CompletionN
     var cgmManagerOnboardingDelegate: LoopKitUI.CGMManagerOnboardingDelegate?
     var completionDelegate: LoopKitUI.CompletionDelegate?
     var cgmManager: G7CGMManager?
-    var displayGlucoseUnitObservable: DisplayGlucoseUnitObservable
+    var displayGlucosePreference: DisplayGlucosePreference
 
     var colorPalette: LoopUIColorPalette
 
     init(cgmManager: G7CGMManager? = nil,
          colorPalette: LoopUIColorPalette,
-         displayGlucoseUnitObservable: DisplayGlucoseUnitObservable,
+         displayGlucosePreference: DisplayGlucosePreference,
          allowDebugFeatures: Bool)
     {
         self.cgmManager = cgmManager
         self.colorPalette = colorPalette
-        self.displayGlucoseUnitObservable = displayGlucoseUnitObservable
+        self.displayGlucosePreference = displayGlucosePreference
         super.init(navigationBarClass: UINavigationBar.self, toolbarClass: UIToolbar.self)
     }
 
@@ -54,7 +54,7 @@ class G7UICoordinator: UINavigationController, CGMManagerOnboarding, CompletionN
                     }
                 }
             )
-            let hostingController = DismissibleHostingController(rootView: rootView, colorPalette: colorPalette)
+            let hostingController = DismissibleHostingController(content: rootView, colorPalette: colorPalette)
             hostingController.navigationItem.largeTitleDisplayMode = .never
             hostingController.title = nil
             return hostingController
@@ -75,9 +75,9 @@ class G7UICoordinator: UINavigationController, CGMManagerOnboarding, CompletionN
                         }
                     }
                 },
-                viewModel: G7SettingsViewModel(cgmManager: cgmManager!, displayGlucoseUnitObservable: displayGlucoseUnitObservable)
+                viewModel: G7SettingsViewModel(cgmManager: cgmManager!, displayGlucosePreference: displayGlucosePreference)
             )
-            let hostingController = DismissibleHostingController(rootView: view, colorPalette: colorPalette)
+            let hostingController = DismissibleHostingController(content: view, colorPalette: colorPalette)
             return hostingController
         }
     }

+ 13 - 9
Dependencies/G7SensorKit/G7SensorKitUI/Views/G7SettingsView.swift

@@ -12,13 +12,15 @@ import G7SensorKit
 import LoopKitUI
 
 struct G7SettingsView: View {
-
-    private var durationFormatter: RelativeDateTimeFormatter = {
-        let formatter = RelativeDateTimeFormatter()
+    
+    private var sessionLengthFormatter: DateComponentsFormatter = {
+        let formatter = DateComponentsFormatter()
+        formatter.allowedUnits = [.day, .hour, .minute]
         formatter.unitsStyle = .full
+        formatter.maximumUnitCount = 2
         return formatter
     }()
-
+    
     @Environment(\.guidanceColors) private var guidanceColors
     @Environment(\.glucoseTintColor) private var glucoseTintColor
 
@@ -39,6 +41,8 @@ struct G7SettingsView: View {
 
         formatter.dateStyle = .short
         formatter.timeStyle = .short
+        formatter.locale = Locale.current
+        formatter.setLocalizedDateFormatFromTemplate("E, MMM d, hh:mm")
 
         return formatter
     }()
@@ -72,7 +76,7 @@ struct G7SettingsView: View {
                 }
             }
 
-            Section(LocalizedString("Last Reading", comment: "")) {
+            Section("Last Reading") {
                 LabeledValueView(label: LocalizedString("Glucose", comment: "Field label"),
                                  value: viewModel.lastGlucoseString)
                 LabeledDateView(label: LocalizedString("Time", comment: "Field label"),
@@ -82,7 +86,7 @@ struct G7SettingsView: View {
                                  value: viewModel.lastGlucoseTrendString)
             }
 
-            Section(LocalizedString("Bluetooth", comment: "")) {
+            Section("Bluetooth") {
                 if let name = viewModel.sensorName {
                     HStack {
                         Text(LocalizedString("Name", comment: "title for g7 settings row showing BLE Name"))
@@ -114,7 +118,7 @@ struct G7SettingsView: View {
                 }
             }
 
-            Section(LocalizedString("Configuration", comment: "")) {
+            Section("Configuration") {
                 HStack {
                     Toggle(LocalizedString("Upload Readings", comment: "title for g7 config settings to upload readings"), isOn: $viewModel.uploadReadings)
                 }
@@ -122,7 +126,7 @@ struct G7SettingsView: View {
 
             Section () {
                 if !self.viewModel.scanning {
-                    Button(LocalizedString("Scan for new sensor", comment: ""), action: {
+                    Button("Scan for new sensor", action: {
                         self.viewModel.scanForNewSensor()
                     })
                 }
@@ -174,7 +178,7 @@ struct G7SettingsView: View {
 
                 Spacer()
                 if let referenceDate = viewModel.progressReferenceDate {
-                    Text(durationFormatter.localizedString(for: referenceDate, relativeTo: Date()))
+                    Text(sessionLengthFormatter.string(from: referenceDate.timeIntervalSince(Date())) ?? "")
                         .foregroundColor(.secondary)
                 }
             }

+ 5 - 20
Dependencies/G7SensorKit/G7SensorKitUI/Views/G7SettingsViewModel.swift

@@ -29,7 +29,7 @@ class G7SettingsViewModel: ObservableObject {
         }
     }
     
-    var displayGlucoseUnitObservable: DisplayGlucoseUnitObservable
+    let displayGlucosePreference: DisplayGlucosePreference
 
     private var lastReading: G7GlucoseMessage?
 
@@ -40,15 +40,6 @@ class G7SettingsViewModel: ObservableObject {
         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 {
@@ -68,9 +59,9 @@ class G7SettingsViewModel: ObservableObject {
         }
     }
 
-    init(cgmManager: G7CGMManager, displayGlucoseUnitObservable: DisplayGlucoseUnitObservable) {
+    init(cgmManager: G7CGMManager, displayGlucosePreference: DisplayGlucosePreference) {
         self.cgmManager = cgmManager
-        self.displayGlucoseUnitObservable = displayGlucoseUnitObservable
+        self.displayGlucosePreference = displayGlucosePreference
         updateValues()
 
         self.cgmManager.addStateObserver(self, queue: DispatchQueue.main)
@@ -188,19 +179,13 @@ class G7SettingsViewModel: ObservableObject {
         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())
+            return displayGlucosePreference.formatter.string(from: quantity)!
         }
     }
 
     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)
+            return displayGlucosePreference.minuteRateFormatter.string(from: trendRate)!
         } else {
             return ""
         }

+ 1 - 1
Dependencies/G7SensorKit/G7SensorKitUI/Views/G7StartupView.swift

@@ -26,7 +26,7 @@ struct G7StartupView: View {
                     .frame(height: 120)
                     .padding(.horizontal)
             }.frame(maxWidth: .infinity)
-            Text(LocalizedString("iAPS 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"))
+            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()

+ 6 - 105
Dependencies/G7SensorKit/G7SensorKitUI/ar.lproj/Localizable.strings

@@ -1,117 +1,18 @@
 /* No glucose value representation (3 dashes for mg/dL) */
-"– – –" = "– – –";
-
-/* Format string for glucose trend per minute. (1: glucose value and unit) */
-"%@/min" = "%@/min";
-
-/* No comment provided by engineer. */
-"Are you sure you want to delete this CGM?" = "Are you sure you want to delete this CGM?";
+"– – –" = "---";
 
 /* No comment provided by engineer. */
-"Bluetooth" = "Bluetooth";
+"Are you sure you want to delete this CGM?" = "هل أنت متأكد أنك تريد حذف هذا CGM؟";
 
 /* Button text to cancel G7 setup */
-"Cancel" = "Cancel";
+"Cancel" = "إلغاء";
 
 /* No comment provided by engineer. */
-"Configuration" = "Configuration";
-
-/* title for g7 settings connection status when connected */
-"Connected" = "Connected";
-
-/* title for g7 settings connection status when connecting */
-"Connecting" = "Connecting";
-
-/* Button title for starting setup */
-"Continue" = "Continue";
+"Configuration" = "المعطيات";
 
 /* Button label for removing CGM */
-"Delete CGM" = "Delete CGM";
-
-/* Navigation bar title for G7SettingsView
-   Title on WelcomeView */
-"Dexcom G7" = "Dexcom G7";
-
-/* No comment provided by engineer. */
-"Done" = "Done";
-
-/* Field label */
-"Glucose" = "Glucose";
-
-/* title for g7 settings row showing sensor grace period end time */
-"Grace Period End" = "Grace Period End";
-
-/* G7 Progress bar label when sensor grace period progress showing */
-"Grace period remaining" = "Grace period remaining";
-
-/* String displayed instead of a glucose value above the CGM range */
-"HIGH" = "HIGH";
-
-/* title for g7 settings row showing sensor last connect time */
-"Last Connect" = "Last Connect";
-
-/* No comment provided by engineer. */
-"Last Reading" = "Last Reading";
-
-/* Descriptive text on G7StartupView */
-"iAPS can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management." = "iAPS can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management.";
-
-/* String displayed instead of a glucose value below the CGM range */
-"LOW" = "LOW";
-
-/* title for g7 settings row showing BLE Name */
-"Name" = "Name";
-
-/* No comment provided by engineer. */
-"Scan for new sensor" = "Scan for new sensor";
-
-/* title for g7 settings connection status when scanning */
-"Scanning" = "Scanning";
-
-/* G7 Status highlight text for searching for sensor */
-"Searching for\nSensor" = "Searching for\nSensor";
-
-/* G7 Progress bar label when searching for sensor */
-"Searching for sensor" = "Searching for sensor";
-
-/* G7 Status highlight text for sensor expired */
-"Sensor\nExpired" = "Sensor\nExpired";
-
-/* G7 Status highlight text for sensor failed */
-"Sensor\nFailed" = "Sensor\nFailed";
-
-/* G7 Status highlight text for sensor error */
-"Sensor\nIssue" = "Sensor\nIssue";
-
-/* G7 Status highlight text for sensor warmup */
-"Sensor\nWarmup" = "Sensor\nWarmup";
-
-/* title for g7 settings row showing sensor expiration time */
-"Sensor Expiration" = "Sensor Expiration";
-
-/* G7 Progress bar label when sensor expired */
-"Sensor expired" = "Sensor expired";
-
-/* G7 Progress bar label when sensor lifetime progress showing */
-"Sensor expires" = "Sensor expires";
-
-/* G7 Progress bar label when sensor failed */
-"Sensor failed" = "Sensor failed";
-
-/* title for g7 settings row showing sensor start time */
-"Sensor Start" = "Start sensor";
-
-/* G7 Status highlight text for signal loss */
-"Signal\nLoss" = "Signal\nLoss";
-
-/* Field label */
-"Time" = "Time";
+"Delete CGM" = "حذف CGM";
 
 /* Field label */
-"Trend" = "Trend";
-
-/* title for g7 config settings to upload readings */
-"Upload Readings" = "Upload Readings";
+"Glucose" = "قراءات السكر";
 
-/* G7 Progress bar label when sensor in warmup */
-"Warmup completes" = "Warmup completes";

+ 0 - 3
Dependencies/G7SensorKit/G7SensorKitUI/cs.lproj/Localizable.strings

@@ -1,9 +1,6 @@
 /* No glucose value representation (3 dashes for mg/dL) */
 "– – –" = "– – –";
 
-/* Format string for glucose trend per minute. (1: glucose value and unit) */
-"%@/min" = "%@/min";
-
 /* Button text to cancel G7 setup */
 "Cancel" = "Zrušit";
 

+ 17 - 19
Dependencies/G7SensorKit/G7SensorKitUI/da.lproj/Localizable.strings

@@ -1,9 +1,6 @@
 /* No glucose value representation (3 dashes for mg/dL) */
 "– – –" = "– – –";
 
-/* Format string for glucose trend per minute. (1: glucose value and unit) */
-"%@/min" = "%@/min";
-
 /* No comment provided by engineer. */
 "Are you sure you want to delete this CGM?" = "Er du sikker på, at du vil slette denne CGM?";
 
@@ -33,28 +30,28 @@
 "Dexcom G7" = "Dexcom G7";
 
 /* No comment provided by engineer. */
-"Done" = "OK";
+"Done" = "Udført";
 
 /* Field label */
 "Glucose" = "Glukose";
 
 /* title for g7 settings row showing sensor grace period end time */
-"Grace Period End" = "Nådeperiodens Slut";
+"Grace Period End" = "Grace period slut";
 
 /* G7 Progress bar label when sensor grace period progress showing */
-"Grace period remaining" = "Tilbageværende nådeperiode";
+"Grace period remaining" = "Grace period tilbage";
 
 /* String displayed instead of a glucose value above the CGM range */
 "HIGH" = "HØJ";
 
 /* title for g7 settings row showing sensor last connect time */
-"Last Connect" = "Sidste Forbindelse";
+"Last Connect" = "Sidst tilsluttet";
 
 /* No comment provided by engineer. */
-"Last Reading" = "Sidste Aflæsning";
+"Last Reading" = "Seneste aflæsning";
 
 /* Descriptive text on G7StartupView */
-"iAPS can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management." = "iAPS kan læse G7 CGM-data, men du skal stadig bruge Dexcom G7-appen til parring, kalibrering og anden sensorkontrol.";
+"Loop can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management." = "Loop kan aflæse data fra en G7 sensor, men du skal stadig benytte Dexcoms egen G7 App til at parre, kalibrere og administrere G7-sensoren.";
 
 /* String displayed instead of a glucose value below the CGM range */
 "LOW" = "LAV";
@@ -66,28 +63,28 @@
 "Scan for new sensor" = "Scan efter ny sensor";
 
 /* title for g7 settings connection status when scanning */
-"Scanning" = "Scanner";
+"Scanning" = "Skanner";
 
 /* G7 Status highlight text for searching for sensor */
-"Searching for\nSensor" = "Søger efter\nSensor";
+"Searching for\nSensor" = "Søger efter sensor";
 
 /* G7 Progress bar label when searching for sensor */
 "Searching for sensor" = "Søger efter sensor";
 
 /* G7 Status highlight text for sensor expired */
-"Sensor\nExpired" = "Sensor\nUdløbet";
+"Sensor\nExpired" = "Sensor udløbet";
 
 /* G7 Status highlight text for sensor failed */
-"Sensor\nFailed" = "Sensor\nFejlede";
+"Sensor\nFailed" = "Sensorfejl";
 
 /* G7 Status highlight text for sensor error */
-"Sensor\nIssue" = "Sensor\nProblem";
+"Sensor\nIssue" = "Sensorproblem";
 
 /* G7 Status highlight text for sensor warmup */
-"Sensor\nWarmup" = "Sensor\nWarmup";
+"Sensor\nWarmup" = "Sensor opvarmning";
 
 /* title for g7 settings row showing sensor expiration time */
-"Sensor Expiration" = "Sensor Udløber";
+"Sensor Expiration" = "Sensor udløb";
 
 /* G7 Progress bar label when sensor expired */
 "Sensor expired" = "Sensor udløbet";
@@ -96,7 +93,7 @@
 "Sensor expires" = "Sensor udløber";
 
 /* G7 Progress bar label when sensor failed */
-"Sensor failed" = "Sensor fejlede";
+"Sensor failed" = "Sensorfejl";
 
 /* title for g7 settings row showing sensor start time */
 "Sensor Start" = "Start sensor";
@@ -111,7 +108,8 @@
 "Trend" = "Trend";
 
 /* title for g7 config settings to upload readings */
-"Upload Readings" = "Upload Aflæsninger";
+"Upload Readings" = "Upload aflæsninger";
 
 /* G7 Progress bar label when sensor in warmup */
-"Warmup completes" = "Warmup fuldfører";
+"Warmup completes" = "Opvarmning afsluttes";
+

+ 18 - 20
Dependencies/G7SensorKit/G7SensorKitUI/de.lproj/Localizable.strings

@@ -1,11 +1,8 @@
 /* No glucose value representation (3 dashes for mg/dL) */
-"– – –" = "";
-
-/* Format string for glucose trend per minute. (1: glucose value and unit) */
-"%@/min" = "%@/min";
+"– – –" = "– – –";
 
 /* No comment provided by engineer. */
-"Are you sure you want to delete this CGM?" = "Möchten Sie das CGM wirklich löschen?";
+"Are you sure you want to delete this CGM?" = "Bist Du sicher, dass Du dieses CGM löschen möchtest?";
 
 /* No comment provided by engineer. */
 "Bluetooth" = "Bluetooth";
@@ -23,7 +20,7 @@
 "Connecting" = "Verbinden";
 
 /* Button title for starting setup */
-"Continue" = "Fortsetzen";
+"Continue" = "Weiter";
 
 /* Button label for removing CGM */
 "Delete CGM" = "CGM löschen";
@@ -39,10 +36,10 @@
 "Glucose" = "Blutzucker";
 
 /* title for g7 settings row showing sensor grace period end time */
-"Grace Period End" = "Ende der Karenzfrist";
+"Grace Period End" = "Ende der Toleranzzeit";
 
 /* G7 Progress bar label when sensor grace period progress showing */
-"Grace period remaining" = "Verbleibende Karenzfrist";
+"Grace period remaining" = "Verbleibende Toleranzzeit";
 
 /* String displayed instead of a glucose value above the CGM range */
 "HIGH" = "HOCH";
@@ -51,10 +48,10 @@
 "Last Connect" = "Letzte Verbindung";
 
 /* No comment provided by engineer. */
-"Last Reading" = "Letzte Messung";
+"Last Reading" = "Letzter Wert";
 
 /* Descriptive text on G7StartupView */
-"iAPS can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management." = "iAPS kann CGM Daten direkt vom G7 lesen. Zum Verbinden, Kalibrieren und erweitertem Sensor Management benötigt man die G7 App.";
+"Loop can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management." = "Loop kann Dexcom G7 CGM-Daten lesen, aber Du musst trotzdem die Dexcom G7 App für die Kopplung, Kalibrierung und andere Sensorverwaltung verwenden.";
 
 /* String displayed instead of a glucose value below the CGM range */
 "LOW" = "NIEDRIG";
@@ -66,7 +63,7 @@
 "Scan for new sensor" = "Nach neuem Sensor suchen";
 
 /* title for g7 settings connection status when scanning */
-"Scanning" = "Scannt";
+"Scanning" = "Scannen";
 
 /* G7 Status highlight text for searching for sensor */
 "Searching for\nSensor" = "Suche nach\nSensor";
@@ -78,40 +75,41 @@
 "Sensor\nExpired" = "Sensor\nabgelaufen";
 
 /* G7 Status highlight text for sensor failed */
-"Sensor\nFailed" = "Sensorverbindung\nfehlfeschlagen";
+"Sensor\nFailed" = "Sensorfehler";
 
 /* G7 Status highlight text for sensor error */
-"Sensor\nIssue" = "Sensor\nFehler";
+"Sensor\nIssue" = "Sensor\nProblem";
 
 /* G7 Status highlight text for sensor warmup */
 "Sensor\nWarmup" = "Sensor\nAufwärmphase";
 
 /* title for g7 settings row showing sensor expiration time */
-"Sensor Expiration" = "Sensor Ablaufdatum";
+"Sensor Expiration" = "Sensor-Ablaufzeitpunkt";
 
 /* G7 Progress bar label when sensor expired */
 "Sensor expired" = "Sensor abgelaufen";
 
 /* G7 Progress bar label when sensor lifetime progress showing */
-"Sensor expires" = "Sensor abgelaufen";
+"Sensor expires" = "Sensor läuft ab";
 
 /* G7 Progress bar label when sensor failed */
 "Sensor failed" = "Sensorfehler";
 
 /* title for g7 settings row showing sensor start time */
-"Sensor Start" = "Starte den Sensor";
+"Sensor Start" = "Sensor gestartet";
 
 /* G7 Status highlight text for signal loss */
-"Signal\nLoss" = "Signal\nVerlust";
+"Signal\nLoss" = "Signalverlust";
 
 /* Field label */
-"Time" = "Uhrzeit";
+"Time" = "Zeit";
 
 /* Field label */
 "Trend" = "Trend";
 
 /* title for g7 config settings to upload readings */
-"Upload Readings" = "Upload von Messwerten";
+"Upload Readings" = "Werte hochladen";
 
 /* G7 Progress bar label when sensor in warmup */
-"Warmup completes" = "Aufwärmphase abgeschlossen";
+"Warmup completes" = "Aufwärmen abgeschlossen";
+

+ 1 - 118
Dependencies/G7SensorKit/G7SensorKitUI/en.lproj/Localizable.strings

@@ -1,118 +1 @@
-/* No glucose value representation (3 dashes for mg/dL) */
-"– – –" = "– – –";
-
-/* Format string for glucose trend per minute. (1: glucose value and unit) */
-"%@/min" = "%@/min";
-
-/* No comment provided by engineer. */
-"Are you sure you want to delete this CGM?" = "Are you sure you want to delete this CGM?";
-
-/* No comment provided by engineer. */
-"Bluetooth" = "Bluetooth";
-
-/* Button text to cancel G7 setup */
-"Cancel" = "Cancel";
-
-/* No comment provided by engineer. */
-"Configuration" = "Configuration";
-
-/* title for g7 settings connection status when connected */
-"Connected" = "Connected";
-
-/* title for g7 settings connection status when connecting */
-"Connecting" = "Connecting";
-
-/* Button title for starting setup */
-"Continue" = "Continue";
-
-/* Button label for removing CGM */
-"Delete CGM" = "Delete CGM";
-
-/* Navigation bar title for G7SettingsView
-   Title on WelcomeView */
-"Dexcom G7" = "Dexcom G7";
-
-/* No comment provided by engineer. */
-"Done" = "Done";
-
-/* Field label */
-"Glucose" = "Glucose";
-
-/* title for g7 settings row showing sensor grace period end time */
-"Grace Period End" = "Grace Period End";
-
-/* G7 Progress bar label when sensor grace period progress showing */
-"Grace period remaining" = "Grace period remaining";
-
-/* String displayed instead of a glucose value above the CGM range */
-"HIGH" = "HIGH";
-
-/* title for g7 settings row showing sensor last connect time */
-"Last Connect" = "Last Connect";
-
-/* No comment provided by engineer. */
-"Last Reading" = "Last Reading";
-
-/* Descriptive text on G7StartupView */
-"iAPS can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management." = "iAPS can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management.";
-
-/* String displayed instead of a glucose value below the CGM range */
-"LOW" = "LOW";
-
-/* title for g7 settings row showing BLE Name */
-"Name" = "Name";
-
-/* No comment provided by engineer. */
-"Scan for new sensor" = "Scan for new sensor";
-
-/* title for g7 settings connection status when scanning */
-"Scanning" = "Scanning";
-
-/* G7 Status highlight text for searching for sensor */
-"Searching for\nSensor" = "Searching for\nSensor";
-
-/* G7 Progress bar label when searching for sensor */
-"Searching for sensor" = "Searching for sensor";
-
-/* G7 Status highlight text for sensor expired */
-"Sensor\nExpired" = "Sensor\nExpired";
-
-/* G7 Status highlight text for sensor failed */
-"Sensor\nFailed" = "Sensor\nFailed";
-
-/* G7 Status highlight text for sensor error */
-"Sensor\nIssue" = "Sensor\nIssue";
-
-/* G7 Status highlight text for sensor warmup */
-"Sensor\nWarmup" = "Sensor\nWarmup";
-
-/* title for g7 settings row showing sensor expiration time */
-"Sensor Expiration" = "Sensor Expiration";
-
-/* G7 Progress bar label when sensor expired */
-"Sensor expired" = "Sensor expired";
-
-/* G7 Progress bar label when sensor lifetime progress showing */
-"Sensor expires" = "Sensor expires";
-
-/* G7 Progress bar label when sensor failed */
-"Sensor failed" = "Sensor failed";
-
-/* title for g7 settings row showing sensor start time */
-"Sensor Start" = "Start sensor";
-
-/* G7 Status highlight text for signal loss */
-"Signal\nLoss" = "Signal\nLoss";
-
-/* Field label */
-"Time" = "Time";
-
-/* Field label */
-"Trend" = "Trend";
-
-/* title for g7 config settings to upload readings */
-"Upload Readings" = "Upload Readings";
-
-/* G7 Progress bar label when sensor in warmup */
-"Warmup completes" = "Warmup completes";
-
+/* empty */

+ 31 - 33
Dependencies/G7SensorKit/G7SensorKitUI/es.lproj/Localizable.strings

@@ -1,11 +1,8 @@
 /* No glucose value representation (3 dashes for mg/dL) */
 "– – –" = "– – –";
 
-/* Format string for glucose trend per minute. (1: glucose value and unit) */
-"%@/min" = "%@/min";
-
 /* No comment provided by engineer. */
-"Are you sure you want to delete this CGM?" = "Are you sure you want to delete this CGM?";
+"Are you sure you want to delete this CGM?" = "¿Está seguro de que quiere eliminar este MCG?";
 
 /* No comment provided by engineer. */
 "Bluetooth" = "Bluetooth";
@@ -14,7 +11,7 @@
 "Cancel" = "Cancelar";
 
 /* No comment provided by engineer. */
-"Configuration" = "Configuracion";
+"Configuration" = "Configuración";
 
 /* title for g7 settings connection status when connected */
 "Connected" = "Conectado";
@@ -26,92 +23,93 @@
 "Continue" = "Continuar";
 
 /* Button label for removing CGM */
-"Delete CGM" = "Delete CGM";
+"Delete CGM" = "Eliminar MCG";
 
 /* Navigation bar title for G7SettingsView
    Title on WelcomeView */
 "Dexcom G7" = "Dexcom G7";
 
 /* No comment provided by engineer. */
-"Done" = "Hecho";
+"Done" = "Completado";
 
 /* Field label */
-"Glucose" = "Glucose";
+"Glucose" = "Glucosa";
 
 /* title for g7 settings row showing sensor grace period end time */
-"Grace Period End" = "Grace Period End";
+"Grace Period End" = "Fin del período de gracia";
 
 /* G7 Progress bar label when sensor grace period progress showing */
-"Grace period remaining" = "Grace period remaining";
+"Grace period remaining" = "Período de gracia restante";
 
 /* String displayed instead of a glucose value above the CGM range */
-"HIGH" = "HIGH";
+"HIGH" = "ALTO";
 
 /* title for g7 settings row showing sensor last connect time */
-"Last Connect" = "Last Connect";
+"Last Connect" = "Última conexión";
 
 /* No comment provided by engineer. */
-"Last Reading" = "Last Reading";
+"Last Reading" = "Último dato";
 
 /* Descriptive text on G7StartupView */
-"iAPS can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management." = "iAPS can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management.";
+"Loop can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management." = "Loop puede leer los datos de monitor continuo de glucosa Dexcom G7, pero Usted debe seguir usando la aplicación de Dexcom G7 para emparejar, calibrar y administrar otros comandos del sensor.";
 
 /* String displayed instead of a glucose value below the CGM range */
-"LOW" = "LOW";
+"LOW" = "BAJO";
 
 /* title for g7 settings row showing BLE Name */
 "Name" = "Nombre";
 
 /* No comment provided by engineer. */
-"Scan for new sensor" = "Scan for new sensor";
+"Scan for new sensor" = "Escanear nuevo sensor";
 
 /* title for g7 settings connection status when scanning */
-"Scanning" = "Scanning";
+"Scanning" = "Escaneando";
 
 /* G7 Status highlight text for searching for sensor */
-"Searching for\nSensor" = "Searching for\nSensor";
+"Searching for\nSensor" = "Buscando sensor";
 
 /* G7 Progress bar label when searching for sensor */
-"Searching for sensor" = "Searching for sensor";
+"Searching for sensor" = "Buscando sensor";
 
 /* G7 Status highlight text for sensor expired */
-"Sensor\nExpired" = "Sensor\nExpired";
+"Sensor\nExpired" = "Sensor caducado";
 
 /* G7 Status highlight text for sensor failed */
-"Sensor\nFailed" = "Sensor\nFailed";
+"Sensor\nFailed" = "Fallo del sensor";
 
 /* G7 Status highlight text for sensor error */
-"Sensor\nIssue" = "Sensor\nIssue";
+"Sensor\nIssue" = "Error de sensor";
 
 /* G7 Status highlight text for sensor warmup */
-"Sensor\nWarmup" = "Sensor\nWarmup";
+"Sensor\nWarmup" = "Preparación del sensor";
 
 /* title for g7 settings row showing sensor expiration time */
-"Sensor Expiration" = "Sensor Expiration";
+"Sensor Expiration" = "Caducación de sensor";
 
 /* G7 Progress bar label when sensor expired */
-"Sensor expired" = "Sensor expired";
+"Sensor expired" = "Sensor caducado";
 
 /* G7 Progress bar label when sensor lifetime progress showing */
-"Sensor expires" = "Sensor expires";
+"Sensor expires" = "Sensor caduca";
 
 /* G7 Progress bar label when sensor failed */
-"Sensor failed" = "Sensor failed";
+"Sensor failed" = "Fallo del sensor";
 
 /* title for g7 settings row showing sensor start time */
-"Sensor Start" = "Start sensor";
+"Sensor Start" = "Sensor comienza";
 
 /* G7 Status highlight text for signal loss */
-"Signal\nLoss" = "Signal\nLoss";
+"Signal\nLoss" = "Pérdida de señal";
 
 /* Field label */
-"Time" = "Tiempo";
+"Time" = "Hora";
 
 /* Field label */
-"Trend" = "Trend";
+"Trend" = "Tendencia";
 
 /* title for g7 config settings to upload readings */
-"Upload Readings" = "Upload Readings";
+"Upload Readings" = "Subir Datos";
 
 /* G7 Progress bar label when sensor in warmup */
-"Warmup completes" = "Warmup completes";
+"Warmup completes" = "Tiempo de calentamiento completado";
+

+ 12 - 81
Dependencies/G7SensorKit/G7SensorKitUI/fi.lproj/Localizable.strings

@@ -1,20 +1,14 @@
 /* No glucose value representation (3 dashes for mg/dL) */
 "– – –" = "– – –";
 
-/* Format string for glucose trend per minute. (1: glucose value and unit) */
-"%@/min" = "%@/min";
-
-/* No comment provided by engineer. */
-"Are you sure you want to delete this CGM?" = "Are you sure you want to delete this CGM?";
-
 /* No comment provided by engineer. */
-"Bluetooth" = "Bluetooth";
+"Are you sure you want to delete this CGM?" = "Haluatko varmasti poistaa CGM:n?";
 
 /* Button text to cancel G7 setup */
-"Cancel" = "Cancel";
+"Cancel" = "Kumoa";
 
 /* No comment provided by engineer. */
-"Configuration" = "Configuration";
+"Configuration" = "Määritykset";
 
 /* title for g7 settings connection status when connected */
 "Connected" = "Yhdistetty";
@@ -26,92 +20,29 @@
 "Continue" = "Jatka";
 
 /* Button label for removing CGM */
-"Delete CGM" = "Delete CGM";
-
-/* Navigation bar title for G7SettingsView
-   Title on WelcomeView */
-"Dexcom G7" = "Dexcom G7";
+"Delete CGM" = "Poista CGM";
 
 /* No comment provided by engineer. */
-"Done" = "Done";
+"Done" = "Valmis";
 
 /* Field label */
-"Glucose" = "Glucose";
-
-/* title for g7 settings row showing sensor grace period end time */
-"Grace Period End" = "Grace Period End";
-
-/* G7 Progress bar label when sensor grace period progress showing */
-"Grace period remaining" = "Grace period remaining";
+"Glucose" = "Glukoosi";
 
 /* String displayed instead of a glucose value above the CGM range */
-"HIGH" = "HIGH";
-
-/* title for g7 settings row showing sensor last connect time */
-"Last Connect" = "Last Connect";
-
-/* No comment provided by engineer. */
-"Last Reading" = "Last Reading";
-
-/* Descriptive text on G7StartupView */
-"iAPS can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management." = "iAPS can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management.";
+"HIGH" = "KORKEA";
 
 /* String displayed instead of a glucose value below the CGM range */
-"LOW" = "LOW";
+"LOW" = "MATALA";
 
 /* title for g7 settings row showing BLE Name */
-"Name" = "Name";
-
-/* No comment provided by engineer. */
-"Scan for new sensor" = "Scan for new sensor";
-
-/* title for g7 settings connection status when scanning */
-"Scanning" = "Scanning";
-
-/* G7 Status highlight text for searching for sensor */
-"Searching for\nSensor" = "Searching for\nSensor";
-
-/* G7 Progress bar label when searching for sensor */
-"Searching for sensor" = "Searching for sensor";
-
-/* G7 Status highlight text for sensor expired */
-"Sensor\nExpired" = "Sensor\nExpired";
-
-/* G7 Status highlight text for sensor failed */
-"Sensor\nFailed" = "Sensor\nFailed";
-
-/* G7 Status highlight text for sensor error */
-"Sensor\nIssue" = "Sensor\nIssue";
-
-/* G7 Status highlight text for sensor warmup */
-"Sensor\nWarmup" = "Sensor\nWarmup";
-
-/* title for g7 settings row showing sensor expiration time */
-"Sensor Expiration" = "Sensor Expiration";
-
-/* G7 Progress bar label when sensor expired */
-"Sensor expired" = "Sensor expired";
-
-/* G7 Progress bar label when sensor lifetime progress showing */
-"Sensor expires" = "Sensor expires";
-
-/* G7 Progress bar label when sensor failed */
-"Sensor failed" = "Sensor failed";
-
-/* title for g7 settings row showing sensor start time */
-"Sensor Start" = "Start sensor";
-
-/* G7 Status highlight text for signal loss */
-"Signal\nLoss" = "Signal\nLoss";
+"Name" = "Nimi";
 
 /* Field label */
-"Time" = "Time";
+"Time" = "Aika";
 
 /* Field label */
-"Trend" = "Trend";
+"Trend" = "Suunta";
 
 /* title for g7 config settings to upload readings */
-"Upload Readings" = "Upload Readings";
+"Upload Readings" = "Lataa lukemat";
 
-/* G7 Progress bar label when sensor in warmup */
-"Warmup completes" = "Warmup completes";

+ 27 - 29
Dependencies/G7SensorKit/G7SensorKitUI/fr.lproj/Localizable.strings

@@ -1,11 +1,8 @@
 /* No glucose value representation (3 dashes for mg/dL) */
 "– – –" = "– – –";
 
-/* Format string for glucose trend per minute. (1: glucose value and unit) */
-"%@/min" = "%@min";
-
 /* No comment provided by engineer. */
-"Are you sure you want to delete this CGM?" = "Are you sure you want to delete this CGM?";
+"Are you sure you want to delete this CGM?" = "Voulez-vous vraiment supprimer ce CGM?";
 
 /* No comment provided by engineer. */
 "Bluetooth" = "Bluetooth";
@@ -26,7 +23,7 @@
 "Continue" = "Continuer";
 
 /* Button label for removing CGM */
-"Delete CGM" = "Supprimer CGM";
+"Delete CGM" = "Effacer le CGM";
 
 /* Navigation bar title for G7SettingsView
    Title on WelcomeView */
@@ -39,79 +36,80 @@
 "Glucose" = "Glycémie";
 
 /* title for g7 settings row showing sensor grace period end time */
-"Grace Period End" = "Fin de la Période de Grâce";
+"Grace Period End" = "Fin du délai de grâce";
 
 /* G7 Progress bar label when sensor grace period progress showing */
-"Grace period remaining" = "Période de grâce restante";
+"Grace period remaining" = "Délai de grâce restant";
 
 /* String displayed instead of a glucose value above the CGM range */
-"HIGH" = "HIGH";
+"HIGH" = "HAUT";
 
 /* title for g7 settings row showing sensor last connect time */
-"Last Connect" = "Dernière Connexion";
+"Last Connect" = "Dernière connexion";
 
 /* No comment provided by engineer. */
-"Last Reading" = "Last Reading";
+"Last Reading" = "Dernière lecture";
 
 /* Descriptive text on G7StartupView */
-"iAPS can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management." = "iAPS peut lire les données G7 de la CGM mais vous devez toujours utiliser l'application Dexcom G7 pour associer, calibrer et gérer les capteurs.";
+"Loop can read G7 CGM data, but you must still use the Dexcom G7 App for pairing, calibration, and other sensor management." = "Loop peut lire les données du CGM G7, mais vous devrez continuer à utiliser l'application Dexcom G7 pour l'appairage, l'étalonnage et d'autres opérations de gestion du capteur.";
 
 /* String displayed instead of a glucose value below the CGM range */
-"LOW" = "LOW";
+"LOW" = "BAS";
 
 /* title for g7 settings row showing BLE Name */
 "Name" = "Nom";
 
 /* No comment provided by engineer. */
-"Scan for new sensor" = "Rechercher un nouveau capteur";
+"Scan for new sensor" = "Recherche du nouveau capteur";
 
 /* title for g7 settings connection status when scanning */
-"Scanning" = "Balayage";
+"Scanning" = "Recherche...";
 
 /* G7 Status highlight text for searching for sensor */
-"Searching for\nSensor" = "Recherche d'un\ncapteur";
+"Searching for\nSensor" = "Recherche de capteur";
 
 /* G7 Progress bar label when searching for sensor */
-"Searching for sensor" = "Recherche d’un capteur";
+"Searching for sensor" = "Recherche de capteur";
 
 /* G7 Status highlight text for sensor expired */
-"Sensor\nExpired" = "Capteur\n expiré";
+"Sensor\nExpired" = "Capteur expiré";
 
 /* G7 Status highlight text for sensor failed */
-"Sensor\nFailed" = "Capteur\na échoué";
+"Sensor\nFailed" = "Capteur\nDéfaillant";
 
 /* G7 Status highlight text for sensor error */
-"Sensor\nIssue" = "Capteur\nproblème";
+"Sensor\nIssue" = "Problème de capteur";
 
 /* G7 Status highlight text for sensor warmup */
-"Sensor\nWarmup" = "Capteur\nRéchauffement";
+"Sensor\nWarmup" = "Préchauffage du capteur";
 
 /* title for g7 settings row showing sensor expiration time */
-"Sensor Expiration" = "Capteur expiré";
+"Sensor Expiration" = "Expiration du capteur";
 
 /* G7 Progress bar label when sensor expired */
-"Sensor expired" = "Sensor expired";
+"Sensor expired" = "Capteur expiré";
 
 /* G7 Progress bar label when sensor lifetime progress showing */
-"Sensor expires" = "Capteur expiré";
+"Sensor expires" = "Capteur expire";
 
 /* G7 Progress bar label when sensor failed */
-"Sensor failed" = "Capteura échoué";
+"Sensor failed" = "Erreur de capteur";
 
 /* title for g7 settings row showing sensor start time */
-"Sensor Start" = "Démarrer le capteur";
+"Sensor Start" = "Démarrage du capteur";
 
 /* G7 Status highlight text for signal loss */
-"Signal\nLoss" = "Signal\nPerte";
+"Signal\nLoss" = "Perte de signal";
 
 /* Field label */
 "Time" = "Heure";
 
 /* Field label */
-"Trend" = "Trend";
+"Trend" = "Tendance";
 
 /* title for g7 config settings to upload readings */
-"Upload Readings" = "Upload Readings";
+"Upload Readings" = "Envoyer les données";
 
 /* G7 Progress bar label when sensor in warmup */
-"Warmup completes" = "L'échauffement est terminé";
+"Warmup completes" = "Préchauffage terminé";
+

+ 0 - 0
Dependencies/G7SensorKit/G7SensorKitUI/he.lproj/Localizable.strings


Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików